Benchmark

What size an AI-generated 3D model really is, and what three slicers turn it into

What size does an AI-generated 3D model come out at, and what does a slicer do with it?

Measured 2026-09-28

Result

None of the four generators gives the model a real size. TRELLIS.2 and Stable Fast 3D return it about 1 unit across, Hunyuan3D-2.1 and Neural4D about 2, whatever the object is. As a GLB, whose unit is metres by specification, that reads as a figurine one or two metres tall; the same numbers in an STL read as one or two millimetres. Hunyuan3D-2.1 exports both formats itself, and its two files are 1000 times apart. No slicer multiplies by 1000. PrusaSlicer and Bambu Studio decide the unit from volume, and a figurine of under 1 cubic millimetre falls in their inches band: PrusaSlicer asks and then scales by 25.4, Bambu Studio scales by 25.4 without asking. Cura scales by 100 on a 220 mm bed and not at all on a 180 mm one. Every one of those results looks like a plausible figurine, which is why the error goes unnoticed. Separately, two thirds of Hunyuan3D-2.1's surface was a thin sheet spanning its whole generation volume, so its longest side measured the sheet, not the object.

Where each generator puts the model

GeneratorFormatExtent in file units (x, y, z)CentreUnit the format givesLongest side as read (mm)
Hunyuan3D-2.1 (Tencent)GLB1.9855, 1.4702, 1.9856-0.004, 0.0004, -0.0038metres, fixed by the glTF 2.0 specification1,985.64
Hunyuan3D-2.1 (Tencent)STL1.9855, 1.4702, 1.9856-0.004, 0.0004, -0.0038none in the file; slicers read it as millimetres1.99
Neural4DGLB1.4248, 2, 1.09960, 0, 0metres, fixed by the glTF 2.0 specification2,000.00
Neural4DSTL1.4248, 1.0996, 20, 0, 0none in the file; slicers read it as millimetres2.00
Stable Fast 3D (Stability AI)GLB0.705, 0.9392, 0.4718-0.0113, 0.0063, -0.0487metres, fixed by the glTF 2.0 specification939.21
TRELLIS.2 (Microsoft)GLB0.662, 1.0013, 0.630.0002, -0.0002, -0.0001metres, fixed by the glTF 2.0 specification1,001.34

Read the extent column first: every output is about 1 or 2 units across, set by the generator's normalisation and not by the figurine. The last column is that same number once the format's unit is applied, in millimetres. Hunyuan3D-2.1 wrote both of its files itself, and they differ by exactly the factor between metres and millimetres.

What each slicer turns the STL into

STL fromVolume as read (mm³)SlicerUnit it guessesAsks firstScale appliedLongest side, from the source rule (mm)Longest side, on import (mm)
Hunyuan3D-2.1 (Tencent)0.447PrusaSlicerinchesYes25.450.4450.44
Hunyuan3D-2.1 (Tencent)0.447Bambu StudioinchesNo25.450.44not imported
Hunyuan3D-2.1 (Tencent)0.447Cura (220 x 220 x 250 mm bed)power of ten to fill the build volumeNo100.0198.56not imported
Hunyuan3D-2.1 (Tencent)0.447Cura (180 x 180 x 180 mm bed)left as isNo1.01.99not imported
Neural4D0.824PrusaSlicerinchesYes25.450.8050.80
Neural4D0.824Bambu StudioinchesNo25.450.8050.80
Neural4D0.824Cura (220 x 220 x 250 mm bed)power of ten to fill the build volumeNo100.0200.00not imported
Neural4D0.824Cura (180 x 180 x 180 mm bed)left as isNo1.02.00not imported

No slicer lands on the figurine's real size, and none could: the file never contained one. A factor of 1000 would only make the STL agree with the GLB, which reads as a figurine two metres tall. The two right-hand columns are the check on the method: where a real import was made, it agrees with the rule read out of the source code to the hundredth of a millimetre.

Is the longest side the object?

FileLongest side (file units)Thin sheet spanning the volumeShare of surface in the sheetLongest side without it
figurine__hunyuan21.glb1.9856Yes66.21%1.4702
figurine__hunyuan21.stl1.9856Yes66.21%1.4702
figurine__neural4d.glb2.0000Nononesame
figurine__neural4d.stl2.0000Nononesame
figurine__sf3d.glb0.9392Nononesame
figurine__trellis2.glb1.0013Nononesame

The check looks for a band 1% of the model's height that holds far more surface than the rest and is much wider than everything outside it. Only Hunyuan3D-2.1's output had one: a slab about 0.015 units thick, fused into the same watertight shell as the figurine. Scaling that file to a target longest side scales the slab.

Why the slicers do not agree

PrusaSlicer and Bambu Studio both guess the unit from volume in cubic millimetres, with different thresholds: PrusaSlicer treats under 0.001 as metres and under 9 as inches, Bambu Studio under 0.008 as metres and under 8 as inches. A figurine 2 mm tall has a volume of well under 1 cubic millimetre, which is above both metre thresholds and inside both inch bands. PrusaSlicer shows a dialog before converting; in Bambu Studio the equivalent dialog is commented out in the source and the conversion is written only to its log. Cura does not guess a unit at all: it scales anything more than 100 times smaller than the bed, by a power of ten.

Which generators are missing

TripoSG's official Space failed on every GPU call on the day of the run. Meshy, Tripo and Rodin require a paid subscription on their free tiers to download a GLB or STL, so no file could be measured without paid access. Meshy and Tripo both document an optional real-world size estimate, auto_size, which is off by default; whether it is accurate is not tested here.

Disclosure

The author of this site works for the company that makes Neural4D. It is included on its public free tier, with the same input image and the same script as every other generator, and this measurement makes no ranking: every generator's output lacks a real size.

How this was measured

One 1024 x 1024 image of a keychain figurine, itself AI generated, sent through four image-to-3D generators with default settings on 2026-09-24: TRELLIS.2, Hunyuan3D-2.1 and Stable Fast 3D through their official Hugging Face Spaces, and Neural4D on its public free tier. Each file was measured raw, in file units, then read the way its format requires: GLB as metres, STL as millimetres because that is what every slicer assumes. Each STL was then run against the unit guessing rules in the source code of PrusaSlicer, Bambu Studio and Cura, and imported by hand into PrusaSlicer 2.9.6 and Bambu Studio 02.08.02.61 to check the rule against the application.

Software and versions
trimesh 5.1.0, numpy 2.5.2, PrusaSlicer 2.9.6 (Windows, portable), Bambu Studio 02.08.02.61 (Windows, portable)
Date measured
2026-09-28
Script
scripts/measure-gen-scale.py
Raw data
gen-mesh-scale-2026-09-28.json

This data is published under CC BY 4.0. Reuse the numbers freely, with a link back so a reader can check the method.

What this does not show

Stated so the result is not read wider than it goes.

  • Whether any generator's optional real-world sizing works. Meshy and Tripo document an auto_size option, off by default; it needs paid access to download the result and was not tested.
  • Geometry quality. One AI generated input image is close to a best case for every generator, and a scale reading does not depend on it; a quality comparison would.
  • Cura on a real import. Its row is computed from source only.
  • Other seeds or inputs. Normalisation is a property of each model, so the box should not move with the input, but one run per generator does not prove that.

Where this is used

TRELLIS , Hunyuan3D , Neural4D , PrusaSlicer , Bambu Studio , UltiMaker Cura