Lithophane from a photo: thickness, size and light for a gift that actually glows
25 September 2026
A lithophane is a photo made of plastic thickness. Where the wall is 0.8 mm, light comes through and you see white; where it is 3 mm, almost nothing gets through and you see dark. Hold it up to a lamp and the photo appears. Everything else about making one, from which photo to pick to how you print it, follows from those two numbers, and they are the defaults in the lithophane generator.
The thickness range is the image
The generator reads your photo in grayscale and maps brightness to thickness in a straight line: the brightest pixel becomes the thinnest wall, the darkest becomes the thickest. The two ends are yours to set, and they matter more than any other setting on the page.
Below 0.6 mm the bright areas print lacy, with gaps between lines where light pours through as white noise. Above about 3.2 mm white PLA blocks almost all light, so extra thickness buys no extra shadow. The generator allows 0.4 to 1.6 mm for the thin end and 1.6 to 4.5 mm for the thick end, and it refuses a range narrower than 0.8 mm. Under that gap the image goes flat. The whole picture lives in the difference between the two numbers, and 0.8 to 3.0 mm is where it starts.
The filament decides the rest. White or natural PLA. A pigmented colour eats the light before it reaches your eye, and a black or dark grey spool makes a lithophane you can only see with a torch pressed against it.
Picking the photo
Brightness becomes thickness, so the photo has to carry its story in light and dark, not in colour. A red jumper against green grass can end up as the same grey, and then as the same 1.9 mm of plastic.
Faces work when they are lit from the front. A face in shadow turns into a thick, dark block with eyes. Close crops beat wide shots: at 100 mm across, a whole family on a beach becomes a row of heads smaller than a fingernail, while a single face fills the plate.
Before it builds anything, the generator does three small things to the photo. It blurs it by 0.6 pixels, because sensor noise would otherwise become physical bumps you can feel. It stretches the histogram so the darkest 1% becomes black and the brightest 1% becomes white, which you can switch off if your photo is already contrasty. And if the image has transparency, it goes onto white, so a cut-out subject gets a bright, thin background. Uploads are PNG, JPG, WebP, BMP or TIFF, up to 16 MB, and anything over 4000 px on the long side is scaled down first.
How big it can get
The resolution is 4 samples per millimetre by default, so each sample is a quarter of a millimetre of plastic. A 100 mm wide plate from a 4:3 photo comes out 100 by 76.5 mm, around 490,000 triangles and a 24.5 MB STL. At 150 mm it is close to a million triangles and 50 MB. Slicers handle that fine; it just looks alarming in a file manager.
Large sizes are also where the generator broke. A lithophane is heavy to compute, roughly 3 KB of memory per sample on top of about 140 MB, and the container that builds it has 1.4 GB. This month I measured the worst case. A wide plate at the top resolution of 6 px/mm needed about 2 GB, so the container got killed halfway through the mesh, and whoever asked for it got an error page instead of a file.
That is fixed.
The whole plate, frame included, now stays under 250,000 samples. When a size would go over, the generator lowers the density and says so in the results: a 150 mm square plate is sampled at 3.3 px/mm instead of 4, a 150 mm plate from a 4:3 photo at 3.8. On a lithophane you look at from a metre away, that difference is hard to spot. The 100 mm plate at 4 px/mm never gets near the limit.
Flat plate or arc
Flat is for a window, a frame or a light box. The arc wraps the same photo around a cylinder, from 30 to 180 degrees, and stands on its own. The presets are a 100 and a 150 mm flat plate, a 120 mm arc bent through 120 degrees, and a 90 mm arc at 90 degrees sized for a night light with a puck lamp behind it.
Both get a 3 mm frame by default. The frame is 0.4 mm thicker than the darkest spot, capped at 4 mm, so it reads as a solid dark border and stiffens a thin plate. You can set it to zero for an edge-to-edge picture, as long as at least 20 mm of image is left.
Printing and lighting it
The STL is exported standing up, image plane vertical, resting on its long edge, and that is how it should print. Laid flat, the thickness would come from stacked layers and the photo would turn into contour lines. Standing, the detail comes from how finely the nozzle traces the wall in and out.
The settings the generator puts under the download: 100% infill, 0.10 to 0.15 mm layers, and slow, 30 to 40 mm/s. Infill below 100% leaves hollow pockets that show up as a grid when lit. A 100 mm plate is a long print at those settings, so start it in the evening.
Unlit, a lithophane looks like a grey ghost. That is normal.
Behind it goes anything that glows evenly: a cheap LED panel, a daylight window, a puck light for the arc. A bare bulb close to the plate makes a hot spot in the middle, so give it some distance or a sheet of paper as a diffuser.
The downloads are STL only. A 3MF of a million triangles is hundreds of MB of XML, and nobody needs that for a single-colour part. What I want to add next is a lamp base for the arc: a printed foot with a slot for the plate and a recess for a standard puck light, so the whole gift comes off one printer.