3D printing · No upload

Lithophane maker

Drop a photo and build a lithophane you can print: luminance becomes thickness, thickness becomes a binary STL. The plate size, the triangle count, the file size and — the number nobody else prints — how many grey levels your layer height can actually reproduce are all computed before you build. Nothing is uploaded.

Statusidle Files Image Pixels Plate Printable greys Tone Detail Triangles STL size Network since file read
Tone ladder — what these settings can actually print

    

Each rung is one printable step, not a smooth ramp: the thickness is rounded to your layer height, and the light figure is what passes through that rounded thickness relative to the thinnest part. If the ladder has few rungs, the print will band — and no amount of image detail changes that.

How this lithophane maker works

What is measured is luminance, and nothing else. Your browser decodes the picture, this page scales it down to the mesh grid using the browser's own high-quality filter, and reads each sample as a Rec. 709 luma value — the same weighting a browser uses to make a picture grey. Colour is discarded rather than converted, because a lithophane carries its image in thickness alone and a printer in one filament has no other channel to use. Dark samples become thick material, light samples become thin material, and the picture only appears when light passes through from behind.

How the file is built follows from that. Each sample becomes one grid vertex, its thickness rounded to the layer height you entered, so the mesh describes what a printer can make rather than an ideal it will round off anyway. A flat plate gets a front surface, a skirt of walls around its border, and a back fanned from a single corner over that same border ring, which is what keeps every edge shared by exactly two triangles; a curved plate gets a second full surface instead, which is why its triangle count doubles and why the readout shows you that before you build. The triangles are written straight into a binary STL as they are generated, so a two-million-triangle mesh never has to exist as anything else first.

The limits are worth stating plainly. The grey-level count is arithmetic on your settings and is exact; the brightness figures beside it are a model, using an attenuation constant for white PLA rather than a measurement of your filament, so they show the shape of the tone curve and not the appearance of your print. Sampling finer than your nozzle is reported because the extra detail cannot be extruded, not because the file rejects it. Nothing here simulates your slicer, your bed adhesion or your light source, and a lithophane that looks right on screen can still print badly for reasons this page cannot see.

Frequently asked questions

Is my photo uploaded anywhere?
No. Your browser opens the file with its File API and decodes the picture itself, and everything after that — the luminance reading, the thickness map, the mesh and the STL bytes — is JavaScript running inside this tab. The readout's network meter counts every request from the moment your file is read and stays at zero, and there is no library download to footnote either: this page fetches nothing at any point, so the zero has no exceptions. The methodology page shows how to verify it independently, including with your wifi switched off.
Why does my lithophane print in visible bands?
Because the tonal range is quantised by your layer height, and the number of distinct greys it leaves is much smaller than people expect. Thickness is the only thing carrying the picture, so the printable greys are the number of layer steps that fit between the minimum and maximum thickness. At the settings most guides recommend — 0.8 mm to 3.0 mm at a 0.2 mm layer height — that is twelve levels, and twelve levels is what banding looks like. The readout prints the number for your settings, and the way to raise it is a thinner layer height or a wider thickness range, not a bigger image.
What thickness and layer height should I use?
A minimum around 0.8 mm and a maximum around 3.0 mm is the usual starting range: much thinner than 0.8 mm and the bright areas stop being watertight, much thicker than 3.0 mm and the dark areas stop passing any light at all. The layer height is the lever that matters most, because it sets the grey count directly — 0.12 mm is a good compromise and 0.08 mm is better if you can afford the print time. Print flat on the bed with no supports and 100 percent infill: a lithophane with sparse infill has holes where the picture should be.
Why is there a tone setting, and which one should I pick?
Because thickness and brightness are not proportional. Light falls off exponentially as it passes through more material, so a thickness ramp that rises evenly produces a brightness ramp that does not, and the print comes out darker and flatter than the picture. The linearised setting solves for the curve that makes transmitted light rise evenly with image brightness instead, and it is the one to pick for photographs. The straight setting maps brightness to thickness with no correction, which is what most other tools do and what you want if you are matching an existing model. The attenuation behind the correction is a constant for white PLA, not a measurement of your filament, so treat it as a good starting point rather than a calibration.
Which image formats work here?
JPG, PNG and WebP are the accept list, which is simply the set this page can count on your browser decoding itself. That is the whole selection rule: decoding is the browser's own image decoder, so this page never ships or downloads one, and a file it cannot open is refused by name rather than attempted. Colour is discarded on purpose rather than converted — a lithophane is carved out of thickness and the only signal that survives printing is luminance, so a colour picture and its greyscale version produce exactly the same plate.

Related tools