I build BlockSkinLab, a small set of free Minecraft skin tools that run in the browser. This post is about the least glamorous part of it: taking an ordinary image and mapping it onto the 64×64 Minecraft skin layout without a server and without pretending the result is magic.
BlockSkinLab is an independent project. It is not affiliated with, endorsed by, or sponsored by Mojang or Microsoft. Minecraft is a trademark of Mojang and Microsoft.
The stack
- Next.js static export (no backend for the tools)
- Canvas 2D for sampling and writing pixels
- skinview3d for the rotating 3D preview
- ONNX Runtime Web for a separate random skin generator
The source image never leaves the browser. The only server endpoint is an optional feedback form.
The core problem: a skin is not a picture
A Minecraft skin is a texture atlas. The head, body, arms and legs are cubes, and each cube face has its own small rectangle in the 64×64 PNG. The front of the head is only 8×8 pixels. The front of the body is 8×12. Classic arms are 4 pixels wide and Slim arms are 3.
So "turn this image into a skin" really means:
- Let the user drag and zoom the image under a body guide (HEAD, BODY, ARMS, LEGS).
- For every front face, sample the region of the image that sits under that guide box and downscale it to the target face size.
- Fill the sides, top and back with something plausible, because a single front image does not contain them.
- Write the result into the correct UV rectangles and show it on a 3D model.
This is mapping, not AI redrawing. The converter does not invent new details. If the face in the source is tiny, the face in the skin will be tiny too.
Real output from the converter
These are real outputs from the public tool (64×64, Classic arms), not hand-drawn replacements.
Character illustration as input:
Flat skin PNG produced by the mapper:
3D preview of the same skin:
Pixel art works best because it is already close to the target resolution:
Things I learned
Downscaling choice matters more than anything else. Averaging a block of source pixels gives smooth but muddy faces. Picking a representative color keeps contrast but adds noise. At 8×8 for a face, contrast wins, which is why the converter offers a quick face fix in the pixel editor after conversion.
Backgrounds leak. Sides and backs are filled from pixels near the guide. A busy background turns into stripes on the arms. A plain background fixes most of it.
128×128 is not universal. The converter can export 128×128, but HD skins only work in some editions and devices. 64×64 is the safe default, and the 3D editor only edits 64×64 files.
Be honest about the model. The random AI generator runs a small ONNX model locally and produces random 64×64 skins. It does not take text or image prompts, and I say so on the page instead of letting people guess.
Try it
The tools are free and need no account: blockskinlab.com. The image converter is on the home page, the random generator is at /ai-minecraft-skin-generator/, and the 64×64 3D editor is at /minecraft-skin-editor/.
If you have built something with skin UV layouts or browser-side image processing, I would like to hear how you handled the downscaling.






