Text & Sign to STL: Name Plates, Signs and Keyrings

This tool turns typed text into a printable STL: raised letters on a plate, letters engraved into a plate, or plain stand-alone letters, with an optional keyring hole and border. Everything is built in your browser; you can also save the outlines as DXF.

1. Text and font

2. Style and plate

Preview

Loading the font...
Drag to turn, wheel or pinch to zoom, double-click to reset
Two-colour sign: filament change height

Marlin

                                    
Klipper

                                    

How the Text to STL Maker Works

The tool reads the letter outlines from a real font file, turns their curves into fine straight steps, and builds one closed solid from them: a plate with the letters standing up from it, cut into it, or the letters on their own.

The finished STL is watertight: every edge is shared by exactly two triangles and all faces point outwards, so Cura, PrusaSlicer, OrcaSlicer and Bambu Studio slice it without repairs. The DXF holds the same outlines for a laser, router or CAD program.

The Method

1. Size the letters
font size = cap height × units per em ÷ cap height (font units)
baseline gap = line spacing × cap height
The size you type is the height of a capital letter such as H, read from the font's OS/2 table. Round letters like O and S overshoot it slightly. Kerning from the font is applied, then your letter gap is added.
2. Curves to straight steps
quadratic: n = ⌈√(|P0 − 2P1 + P2| ÷ 4 tol)⌉
cubic: n = ⌈√(0.75 × max second difference ÷ tol)⌉
Each curve is split into n equal steps so no step strays more than the smoothness setting (0.02 mm by default) from the true curve, finer than a 0.4 mm nozzle can show.
3. Letters and holes
filled if winding number ≠ 0 (non-zero) or odd (even-odd)
Outlines are nested by containment. The inside of O, A, B, P, R, 4, 6, 8, 9 and so on is found by the fill rule and left open (raised) or kept at plate level (engraved). Outlines that cross are detected first.
4. Faces and walls
triangles per face = n − 2 + 2 × holes
Each flat area (plate top, letter tops, pocket floors, border) is filled by ear clipping, with each hole joined to its outline by a bridge. Vertical walls join areas at different heights, and the underside closes the solid.

Worked Example

"MACHINIST" in Roboto Bold, 10 mm cap height, 0.5 mm letter gap, raised 1.5 mm on a 3 mm rounded plate with a 4 mm margin and 4 mm corners:

  • Roboto has 2048 units per em and a cap height of 1456 units, so the font size is 10 × 2048 ÷ 1456 = 14.07 mm. The letter M is 1793 units wide: 1793 × 14.07 ÷ 2048 = 12.32 mm, plus the 0.5 mm gap.
  • The ink of the whole word measures 79.26 × 10.28 mm (C and S overshoot the 10 mm caps). With 4 mm margins the plate is 87.26 × 18.28 mm, and the model is 4.5 mm tall.
  • Plate volume = (87.26 × 18.28 − (4 − π) × 4²) × 3 = 4,744 mm³. Letter area 365.6 mm² × 1.5 mm = 548 mm³. Total about 5.29 cm³, or about 6.6 g of solid PLA at 1.24 g/cm³.
  • The STL has 1,544 triangles: 84 + 50 × 1,544 = 77,284 bytes. For a two-colour sign, change filament at the first layer above 3.0 mm.

Tips for Printed Signs and Tags

  • Keep strokes at least two nozzle widths wide. With a 0.4 mm nozzle, aim for letter strokes of 0.8 mm or more. Bold fonts at 6 mm cap height and up print cleanly; thin or script fonts need larger text.
  • Raised text: 1 to 2 mm high is plenty. Two colours are easy: pause at the plate top and swap filament (commands above).
  • Engraved text: 0.6 to 1.0 mm deep reads well and can be filled with paint. Leave at least 1 mm of plate under the letters.
  • Plain letters print flat with no supports; glue them to a wall or panel. A brim helps small letters stay down.
  • Keyrings: a 4 to 5 mm hole with a 3 mm wall suits a split ring; use a 3 mm thick plate or more so the ring does not tear through.
  • Overlapping letters: if a tight letter gap or a script font makes letters touch, raised and plain modes make them as separate bodies that slicers merge. Engraved mode needs letters that do not touch.
  • Screw-mounted signs: printed holes come out small, so size them with Printer Hole Compensation, use the clearance hole chart for the screw, or fit brass inserts with Heat-Set Insert Hole Size.
  • Turn a logo into a print with Image to Lithophane STL, trace artwork to DXF with the Image to DXF Converter, or draw a matching flat plate with holes in the DXF Part Maker.

Frequently Asked Questions

For raised text, 1 to 2 mm above the plate reads well and prints fast. Engraved text is usually 0.6 to 1.0 mm deep. For the letter size, a bold font at 6 mm cap height or more keeps strokes wide enough for a 0.4 mm nozzle.

Add a filament change at the first layer above the plate top. In PrusaSlicer, OrcaSlicer or Bambu Studio, add a colour change on that layer in the preview; in Cura use the Pause at Height script. On Marlin the change is M600; on Klipper it is PAUSE, or an M600 macro if your config has one.

Those letters have an inner outline, called a counter. The tool finds it with the font's fill rule and keeps it empty for raised text, or at plate level for engraved text. If you cut letters right through a plate, the counters fall out, so use a stencil font for that.

Yes. Choose My own font file and load a TTF, OTF or WOFF file from your computer; WOFF2 is not supported. The file is read in your browser only. Check the font's licence allows the use you have in mind.

Yes. The plate, letters and border are built as one closed solid where every edge is shared by exactly two triangles. Only when letters overlap each other are they made as separate closed bodies, which slicers merge.

Sizes come from the font's own metrics. Heights, depths and stroke widths in the tips are typical starting values for a 0.4 mm nozzle, not guarantees. Weights assume solid PLA at 1.24 g/cm³.