Lithophane, relief and sign maker
Turn a photo into a printable lithophane — flat, curved, a cylinder lamp shade, a globe band, a heart or a framed shape — with a backlit preview, or into an embossed relief; make raised or engraved signs and nameplates in Google Fonts with the layer to change filament at; and extrude an SVG into coloured solids. STL and 3MF out, closed and manifold.
Added
How to use it
Four makers in one tool, all in your browser (nothing is uploaded): Lithophane, Relief, Sign and SVG. Each makes a closed (manifold) solid you can slice straight away.
How to use it
-
Lithophane. Open a photo (or drop it on the view), or start from a sample — the step wedge is a calibration print: ten steps from thickest to thinnest, to see how your filament passes light.
-
Shape: a flat panel, a curved arc (set the angle), a cylinder or lamp shade (the image wraps once round; relief outside, or inside for a smooth outside), a globe band (± latitude, open at the poles for the lamp), or a heart, circle, oval or rounded rectangle with an outline frame.
-
Thinnest / Thickest: the wall at white and at black. 0.8 and 3 mm are the usual starting point for white PLA.
-
Resolution: the size of one cell in mm; about half the nozzle width is as fine as a printer resolves (0.2–0.3 mm for a 0.4 mm nozzle).
-
Brightness, contrast, gamma and invert adjust the image first; a border at full thickness frames it; a hanger loop goes on top.
-
Thickness mapping: linear (thickness falls in proportion to grey, the classic way), or by light transmission: light through a wall of thickness t falls as e−μt (Beer–Lambert), so the thickness is chosen to make the transmitted light proportional to the pixel’s linear-light value. μ is a property of your filament: print the step wedge, and set μ so the preview matches it.
-
The backlit preview (under the 3-D view) shows the light through each thickness, e−μ(t−tmin).
-
Colour lithophane (advanced): cyan, magenta and yellow layers (0.1 mm plus up to the full colour layer for a saturated channel, from the image’s complement in linear light) under the white lithophane, as four bodies in the 3MF for a multi-material printer. Treat it as an experiment: results depend heavily on the filaments.
-
-
Relief. The same image as an embossed relief on a plate: base thickness plus relief height where the image is light (or dark, with the option), on a rectangle, rounded rectangle, circle, oval or heart.
-
Sign. Type the text (several lines if you like), pick a Google Font (loaded from jsDelivr, or drop your own TTF / OTF / WOFF), the letter size, spacing and alignment, raised or engraved text, the plate shape and size (0 = fit the text), corner radius, thicknesses, a raised border and hanging holes. Two colours on one nozzle: give the first-layer and layer heights and the tool says which layer to change filament before (M600 / "add pause or filament change" in the slicer) — and warns when the plate top or the engraving floor is not on a layer boundary.
-
SVG. Open an SVG (filled paths, rectangles, circles, ellipses, polygons; group transforms and
viewBoxare honoured; 96 px per inch otherwise). Each fill colour becomes a body with its own height, on an optional base plate that follows the outline or is a rectangle. Later shapes cover earlier ones, as in the drawing. -
Export: one STL, a 3MF with each body named and coloured (for multi-colour printers), or an STL per body. Export standing upright stands a flat lithophane on its bottom edge, the usual way to print one (the layer lines then run across the picture).
⛶ Full screen (or F) gives the 3-D view the whole screen — the browser’s full screen where it is
allowed, otherwise a full-window layer (iPhone); ◫ Panels hides the side panel. Escape leaves.
Printing tips
-
Lithophanes: 100 % infill (or enough walls to fill the thickness), slow outer walls, white or natural PLA. Stand flat ones upright, with a brim.
-
Light: a warm LED strip or a battery tea light behind a cylinder; keep heat away from PLA.
-
Signs: the letter size is the font’s em height — capitals come out about 0.7 of it.
Limits
-
The image is sampled into cells; detail finer than the resolution is lost, and very large, very fine lithophanes (millions of cells) make big files. The tool refuses more than 2.5 million cells.
-
μ (attenuation) is not a published constant: it depends on the filament, its colour and the printer. The default (1.5 per mm) is only a starting point — measure yours with the step wedge.
-
Colour lithophanes here are a simple subtractive model, not a calibrated colour pipeline.
-
SVG: strokes, text, gradients, patterns, clip paths and masks are ignored — convert strokes and text to paths first. CSS in
<style>blocks is not read (inlinestyle="fill:…"is). -
Fonts come from Fontsource’s packages of Google Fonts (SIL Open Font License) via jsDelivr; offline, use your own font file.
Related: model splitter (when the lamp shade is bigger than your printer), mold maker, STL viewer, image tool, OpenSCAD.
Engines: manifold-3d 3.5.4 (Apache-2.0) for outlines, text and SVG solids, opentype.js 1.3.4 (MIT) for fonts, three.js 0.147 for the view — from jsDelivr when first needed.
Linking to an example
Share link copies a URL with your settings — never your image, SVG or font file. By hand:
/tools/lithophane/?shape=cylinder&width=220&tmax=3.2#litho. The tab is the part after #
(litho, relief, sign, svg).
| Parameter | Meaning |
|---|---|
|
|
|
Image width mm (arc length / circumference when curved); mm per cell; thinnest and thickest wall mm |
|
Thickness mapping |
|
Image adjustments; invert |
|
Border mm; outline frame mm; hanger loop; arc °; globe band ± latitude °; cylinder relief |
|
Colour lithophane; full colour layer mm; sample image |
|
Relief plate shape, width, resolution, base and relief heights mm, dark is high |
|
Sign text, font ( |
|
Plate |
|
Colours ( |
|
SVG width mm, base plate mm, base |
Presets: flat moon · lamp shade · heart with a hanger · step wedge (calibration) · globe band · round relief · workshop sign · engraved name tag · SVG star badge.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.