STL — Signpost in Millimetres (the 3D-printing convention)
The signpost in millimetres as ASCII STL. STL has no unit field either, but every slicer assumes millimetres — which is why an STL exported in metres arrives as a 1 mm speck and one exported in inches arrives 25.4x too big.
Interactive preview rendered from the equivalent glTF (signpost-metre.glb); drag to orbit. Download the file above for the STL original.
Specifications
- Format
- STL (ASCII)
- Authored Unit
- millimetres
- Model Height
- 1120
- Unit Declaration
- none
- Facets
- 48
- Note
- millimetres is convention, not specification
Testing contract
Expected to pass- Scenario
- Open in a slicer and read the reported object height.
- Expected result
- 1120 mm, i.e. 1.12 m at the assumed convention; the same numbers loaded as metres would be a 1.12 mm object.
What is a .stl file?
STL (Stereolithography) is a 3D model format that represents a surface as an unstructured collection of triangular facets, each with a normal and three vertices. It stores only geometry with no color, texture, or units, and comes in ASCII and binary variants. It is the workhorse format for 3D printing.
How to use this file
Use an example STL to test mesh loaders, ASCII versus binary parsing, slicer and 3D-print pipelines, and geometry validation such as watertightness checks.
How to use this file for testing
“STL — Signpost in Millimetres (the 3D-printing convention)” is a deterministic Novus Examples fixture for Conversion testing, Metadata testing, Mesh processing QA. The same content exported across many formats and linked as a group, so you can convert one and diff against the expected twin.
Documented properties for this file: STL (ASCII). Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
3D and CAD fixtures carry one small, documented solid or scene. Convert and inspect against the known geometry, units, and structure; format twins let you diff interchange fidelity, and the 3D viewer previews the actual mesh.
Code examples
import trimesh # pip install trimesh
mesh = trimesh.load("signpost-millimetre.stl")
print(mesh.bounds, mesh.faces.shape)Related files
- daeDAE — Signpost, Y_UP declaredThe same signpost as COLLADA with `<up_axis>Y_UP</up_axis>` and `<unit meter="1" name="metre"/>` in its asset block. Unlike glTF, OBJ and STL, COLLADA states its convention — so an importer that still gets the orientation wrong has no excuse.

- daeDAE — Signpost, Z_UP declaredThe same signpost as COLLADA with `<up_axis>Z_UP</up_axis>` and `<unit meter="1" name="metre"/>` in its asset block. Unlike glTF, OBJ and STL, COLLADA states its convention — so an importer that still gets the orientation wrong has no excuse.

- glbGLB — Signpost, Y-upThe signpost authored +Y up, which is what the glTF specification mandates and what every conformant viewer assumes. The conformant half of the axis pair: load it, confirm the post stands, and you have calibrated your viewer before testing the Z-up twin.

- glbGLB — Signpost, Z-upThe same signpost authored +Z up — what a Blender or 3ds Max glTF export produces when the axis conversion is skipped. glTF has no field in which to declare this, so the file is indistinguishable from a model that genuinely lies on its back, and every conformant viewer will show it that way.

- plyPLY — Signpost, +Y up (comment only)The signpost as ASCII PLY with +Y up. PLY has no axis or unit element, so the convention survives only as a header comment that no parser reads — the reason scan data so often arrives rotated.

- plyPLY — Signpost, +Z up (comment only)The signpost as ASCII PLY with +Z up. PLY has no axis or unit element, so the convention survives only as a header comment that no parser reads — the reason scan data so often arrives rotated.

Generated by generation/models_p7.py. Free for any use, no attribution required — license.