Why GLB and glTF models come out tiny or sideways in slicers, and how to fix it
glTF stores geometry in metres with Y pointing up; slicers read bare numbers as millimetres with Z up, so a 1.8 m character arrives as a 1.8 mm figure lying on its back.
Updated 27 October 2026 · 8 min read
The two conventions that collide
The glTF 2.0 specification fixes both the unit and the axis system. Section 3.4 states that the metric system is used and that all linear distances are in metres. Section 3.5 states that glTF uses a right-handed coordinate system with +Y as up, +Z as forward and the front of an asset facing +Z. GLB is the same data in a binary container, so every GLB file follows the same rules.
STL has no unit field and no stated up axis. Cura, PrusaSlicer, Bambu Studio, Orca, Chitubox, Lychee and every other slicer treat the numbers as millimetres and treat +Z as up, because that is how printers are built: the bed is the XY plane and layers stack along Z.
Convert a correct GLB into STL by simply copying vertex coordinates and two things happen at once: a 0.18 m tall object becomes 0.18 mm tall, and its height is on the Y axis, so the slicer sees it lying along the bed with its feet pointing at you. Both symptoms are normal and both have a two-step fix: multiply by 1000 and rotate +90° about X.
Diagnosing which problem you have
| Symptom in slicer | Likely cause | Fix |
|---|---|---|
| Model is a dot, or slicer says "object is too small" or auto-scales it by 1000 | Metres read as millimetres | Scale ×1000 |
| Model is 1000× too big and overflows the bed | Exporter already multiplied to millimetres and the slicer or converter multiplied again | Scale ×0.001 |
| Model is 2.54× or 25.4× off | Source was modelled in inches, exported with an inch-to-metre factor applied twice or not at all | Scale by 25.4 or 1/25.4; check a known dimension |
| Model lies on its back or side | Y-up geometry read as Z-up | Rotate +90° about X |
| Model stands up but faces backwards | Rotation about the wrong sign or a 180° Z difference | Rotate 180° about Z; harmless for printing |
| Parts of the model are scattered or overlapping at the origin | Node transforms (position, rotation, scale) in the glTF scene were ignored by the converter | Use a converter that bakes node transforms, or apply them in Blender first |
| Model looks right but prints hollow or with missing faces | Double-sided material flag hid flipped normals; mesh was never meant to be closed | Repair normals and holes, see below |
Before fixing anything, find the true size. Open the GLB in the GLB viewer, which reports the bounding box in the file's native units (metres). A figure that reads 0.032 m tall is a 32 mm miniature; a chair that reads 0.9 m is a real chair, and a 90 cm print is probably not what you wanted either.
Fixing scale
In the slicer
PrusaSlicer and Bambu Studio detect objects smaller than a few millimetres and offer to scale by 1000 on import; Cura offers the same via Preferences > General > Scale extremely small models. If the prompt is declined or does not appear, select the object and type 1000 % in the scale field (PrusaSlicer: object manipulation panel, Bambu Studio: Scale tool, Cura: Scale tool with Uniform Scaling ticked).
Before import
The scale tool multiplies by a factor or scales to a target dimension, which is more reliable when the original height is known (a 1.8 m character scaled to 50 mm tall, for instance). The GLB to STL converter applies the metre-to-millimetre factor and the Y-up to Z-up rotation during conversion, and bakes node transforms, so most files arrive in the slicer already correct. Check the bounding box in the STL viewer afterwards; if a 25 mm part reads 25.4 mm or 0.98 mm, an inch factor is hiding somewhere upstream.
In Blender
Blender imports glTF with its scene unit of metres, so the model appears at real size in Blender and the problem only shows on STL export. In File > Export > STL (Blender 4.x), set Scale to 1000, or tick Scene Unit after setting Scene Properties > Units > Length to Millimeters with Unit Scale 0.001. Leave Forward as -Y and Up as Z, which is the default and performs the axis conversion for you.
Fixing orientation
If a converter did not rotate, do it in the slicer: select the object, rotate +90° about X (PrusaSlicer object manipulation panel, Bambu Studio Rotate tool with a typed value, Cura Rotate tool with snapping). If the model ends up upside down, the rotation was -90°; undo and use the other sign. Then use Place on face (PrusaSlicer: press F, Bambu Studio: Lay on face tool) to seat it flat on the bed.
Orientation is not the same as print orientation. A character standing upright is correct as a model but may be a bad print; a figure lying on its back on supports is often the better choice in resin. Fix the axis first so the object is upright, then choose the orientation for printing separately.
Node transforms: the problem that survives scaling
A glTF file is a scene graph. Each mesh is attached to a node, and each node can carry a translation, rotation and scale, which also compound through parent nodes. A character exported from a game engine might have a root node scaled 0.01 (because the engine worked in centimetres), a child node rotated to face the camera, and the mesh itself in bind pose. A naive converter that reads only the mesh buffers produces geometry at the wrong size and position, and multi-mesh files arrive with parts scattered or stacked at the origin.
Converters that walk the scene graph and multiply each vertex by the node's world matrix produce correct output. If parts are in the wrong place after conversion, open the file in Blender, select everything, apply all transforms (Ctrl+A > All Transforms) and export; the geometry is then baked and no converter can misread it.
Scenes with many nodes also arrive as many objects. Decide whether you want one STL (join everything in Blender with Ctrl+J, or let the converter merge) or one per object. The STL merge tool combines separate STLs into one afterwards if needed.
Mesh problems that only appear after conversion
GLB models made for rendering are not made for printing. Common issues:
- Open meshes. Clothing, hair and eyelashes are often single-sided sheets with no thickness. They render fine and cannot be printed. Either delete them or give them thickness with a Solidify modifier in Blender.
- Inverted normals. The glTF material was set to double-sided, so flipped faces went unnoticed. Slicers treat inverted faces as inside-out and either ignore them or fill the wrong side. The mesh repair tool unifies normals and closes small holes.
- Intersecting parts. A body, shirt and jacket as three overlapping shells print as one solid in most slicers, which is usually fine, but internal faces can confuse support generation. Boolean union in Blender or Meshmixer cleans it up.
- Very low or very high triangle counts. Game assets at 5,000 triangles print visibly faceted; a Draco-compressed photogrammetry asset can unpack to 3 million. Check the count in the viewer and use the reduce tool if needed.
- Morph targets and skins ignored. A character with a skeleton exports in bind pose (usually A- or T-pose) regardless of the pose in the file. Posing has to happen in Blender before export.
The print advisor checks watertightness, thin regions and bed fit in one pass, which is a reasonable sanity check on anything that started life as a render asset.
A worked example
A downloaded GLB of a tabletop figure reads 0.0287 × 0.0152 × 0.0412 m in the GLB viewer, so it is 41.2 mm tall and its height is on Y. Convert with the GLB to STL converter; the output reads 28.7 × 41.2 × 15.2 mm, now Z-up. Drop it into the STL viewer: 184,000 triangles, watertight, no flipped normals. Scale to 32 mm for a 28 mm-scale game using the scale tool with target height 32 mm, which also reduces the footprint to 22.3 × 11.8 mm. Import to the slicer; no prompt appears because the size is plausible; place on face; slice.
If the same model had been exported from Unity with a 0.01 root scale and the converter ignored it, the first viewer reading would have been 2.87 m tall, a sign to look at the node tree rather than blindly scale by 1000.
Going the other way
Converting STL to GLB for web or AR use has the mirror-image problem: divide by 1000 and rotate -90° about X so the model stands up in a Y-up viewer at the correct metre size. The STL to GLB converter handles both, and the STL units and scale guide covers unit problems in STL files generally.
FAQ
Why is my GLB file so small in Cura?
glTF stores coordinates in metres and Cura reads them as millimetres, so a 0.2 m model becomes 0.2 mm. Scale by 1000 or convert with a tool that applies the factor.
Why does the model lie on its side after converting GLB to STL?
glTF uses Y as the up axis and slicers use Z. Rotate the object +90° about X in the slicer, or use a converter that performs the rotation during conversion.
Can a slicer open GLB directly?
Bambu Studio and Orca Slicer accept OBJ, STL, STEP and 3MF but not GLB. Cura and PrusaSlicer also do not read GLB. Convert to STL or 3MF first.
The model scale is right but parts are in the wrong place. Why?
The converter read the mesh data but ignored the node transforms in the glTF scene graph. Apply all transforms in Blender before exporting, or use a converter that bakes them.
Why are there missing faces after conversion?
Render assets often have single-sided sheets or inverted normals hidden by double-sided materials. Run a mesh repair to unify normals and close holes, and thicken any zero-thickness surfaces before printing.