STL Mesh

PNG · JPG · WEBP → STL · FREE · NO UPLOAD

Image to STL — Photos to Printable Reliefs

Turn a PNG, JPG or WebP into a watertight STL relief or lithophane, tuned with live sliders — in the browser, your photos never leave your device.

What it does: turns a grayscale image into a 3D relief STL — black pixels become low, white pixels become high — closed as a watertight solid with a flat base and side walls.

Why you need it: photos become printable reliefs or lithophanes (backlit translucent prints) without uploading the image or opening CAD.

How it works: Canvas reads pixel luminance into a height map; three.js builds the mesh in this tab. Invert the mapping for lithophanes so dark pixels become thick.

The 3D relief preview appears here.

Relief settings

The exported mesh is a closed solid: relief top, flat base and side walls — ready to slice.

Conversion specs

Input formatPNG, JPG/JPEG, WebP (also BMP, GIF)
Output formatBinary STL — watertight solid, 50 bytes per triangle
Height mappingPixel luminance → surface height (black = low, white = high)
Lithophane modeMapping inverted so dark pixels become thick (default on)
Mesh constructionDisplaced top grid + flat base + four walls, watertight by construction
Processing100% client-side via Canvas + three.js
File size limitDevice RAM only — no server limit
CostFree, unlimited, no account required

Relief or lithophane — two ways to print a picture

SOURCE PIXELS — dark to brightreliefheightbaseLithophane mode: dark pixels get the tallest material, so backlight shining through recreates the image.
Each pixel's brightness sets a height; the base and side walls close it into a watertight solid.
Relief (emboss)Lithophane
MappingBright = raisedDark = thick (inverted)
MaterialAny filamentWhite / natural translucent
ViewedBy its shadows, front-litWith light behind it
Typical relief height1-3 mm2.5-3.5 mm
Best sourcesLogos, line art, mapsPortraits and photos

The exported solid slices anywhere. Want to sanity-check it first? Run it through the STL checker or inspect it in the viewer.

FAQ

Is my photo uploaded to convert it?+

No. The image is read with the browser's own canvas API, turned into a height grid and meshed into an STL — all in this tab. There is no upload endpoint; personal photos never leave your device, which matters more here than for any other converter on this site.

How does an image become a 3D model?+

Each pixel's brightness becomes a height. The tool samples the image into a grid, displaces the top surface of a slab by brightness (or inverted brightness), and closes it with a flat base and side walls. The result is a watertight solid — a relief you can slice directly.

What is lithophane mode?+

A lithophane is printed in translucent material and viewed with light behind it: thicker areas block more light and read as dark. That means the mapping must be inverted — dark pixels become thick. Leave the checkbox on for lithophanes; turn it off for a normal embossed relief where bright areas stand up.

Which settings work for a printable lithophane?+

A common recipe: width 80-120 mm, relief height 2.5-3.5 mm, base 0.6-1 mm, printed in white PLA at 100% infill with the lithophane standing vertically. Higher detail values capture finer features but produce heavier files — 250-300 vertices per side is plenty for a photo.

Is the exported STL really watertight?+

Yes, by construction: the top relief, bottom plate and four walls share their edge vertices, so every edge belongs to exactly two triangles. You can verify any file yourself with the STL repair checker on this site — the generator and the checker agree.

Why does my relief look noisy?+

Photo noise and JPG compression artifacts become surface bumps. Fixes: use a higher-quality source, reduce the detail setting (fewer samples average more pixels), or pre-blur the photo slightly in any editor. High-contrast images with clean subjects produce the best reliefs.

Logos and lossless graphics convert more cleanly on the PNG to STL page; camera photos have a dedicated JPG to STL converter — same engine, format-specific defaults. After export, run the mesh through STL repair to confirm it is watertight, or reduce the STL if the relief is denser than your slicer needs.

🧊
Written by Casey Marlin · Last updated
This update: solid-mesh watertightness covered by scripts/test-heightmap.mjs