{
  "measured_on": "2026-09-28",
  "question": "What size is an AI-generated 3D model when it is exported, and what does a slicer turn it into?",
  "input_image": "One 1024 x 1024 image of a keychain figurine. The image is itself AI generated, not a photograph: output scale is set by each generator's normalisation, not by what the image shows, so this does not affect the scale reading. It would affect a geometry quality comparison, which this benchmark does not make.",
  "generation": [
    {
      "generator": "trellis2",
      "name": "TRELLIS.2 (Microsoft)",
      "via": "Hugging Face Space microsoft/TRELLIS.2 @ ebf60b20",
      "date": "2026-09-24",
      "settings": "seed 0, resolution 1024, sampler settings at the Space defaults; GLB extracted at 300000 faces, 2048 px texture",
      "formats_offered": [
        "glb"
      ]
    },
    {
      "generator": "hunyuan21",
      "name": "Hunyuan3D-2.1 (Tencent)",
      "via": "Hugging Face Space tencent/Hunyuan3D-2.1 @ 61d23d8c",
      "date": "2026-09-24",
      "settings": "shape only, 30 steps, guidance 5.0, seed 1234, octree resolution 256, background removal on; both files from the Space's own exporter, no face reduction",
      "formats_offered": [
        "glb",
        "obj",
        "ply",
        "stl"
      ]
    },
    {
      "generator": "sf3d",
      "name": "Stable Fast 3D (Stability AI)",
      "via": "Hugging Face Space stabilityai/stable-fast-3d @ 1b61bd1c",
      "date": "2026-09-24",
      "settings": "foreground ratio 0.85, remesh none, texture 1024 px; background removed with rembg's default session, the same call the Space makes",
      "formats_offered": [
        "glb"
      ]
    },
    {
      "generator": "neural4d",
      "name": "Neural4D",
      "via": "public free tier web app",
      "date": "2026-09-24",
      "settings": "default settings, downloaded as GLB and STL",
      "formats_offered": [
        "glb",
        "stl"
      ],
      "disclosure": "The author of this site works for the company that makes Neural4D. It is measured here on its public free tier, from the same input image, under the same script as every other generator."
    }
  ],
  "not_generated": [
    "TripoSG (VAST): its official Hugging Face Space returned RuntimeError on every GPU call on 2026-09-24, including with a locally prepared input.",
    "Meshy, Tripo and Rodin: on their free tiers, downloading the GLB or STL requires a paid subscription, so no file could be obtained without paid access."
  ],
  "slicer_rules": [
    {
      "name": "PrusaSlicer",
      "meters_below_mm3": 0.001,
      "inches_below_mm3": 9.0,
      "asks_first": true,
      "source": "prusa3d/PrusaSlicer src/slic3r-shared/src/Slic3r/Biz/FileLoadingLogic.cpp (volume_threshold_meters, volume_threshold_inches, looks_like_saved_in_meters, looks_like_imperial_units)"
    },
    {
      "name": "Bambu Studio",
      "meters_below_mm3": 0.008,
      "inches_below_mm3": 8.0,
      "asks_first": false,
      "source": "bambulab/BambuStudio src/libslic3r/Model.cpp (volume_threshold_meters, volume_threshold_inches) and src/slic3r/GUI/Plater.cpp, where the imperial dialog is commented out and the conversion runs with a log line only"
    },
    {
      "name": "Cura",
      "rule": "If the model is more than 100 times smaller than the build volume on all three axes, scale by the largest factor that fits, rounded down to a power of ten, and show a message. Preference mesh/scale_tiny_meshes, on by default.",
      "source": "Ultimaker/Uranium UM/Mesh/ReadMeshJob.py; default set in Ultimaker/Cura cura/CuraApplication.py",
      "build_volumes_mm": [
        [
          220,
          220,
          250
        ],
        [
          180,
          180,
          180
        ]
      ]
    }
  ],
  "trimesh_version": "5.1.0",
  "numpy_version": "2.5.2",
  "rows": [
    {
      "input": "figurine",
      "generator": "hunyuan21",
      "file": "figurine__hunyuan21.glb",
      "format": "glb",
      "unit_basis": "metres, fixed by the glTF 2.0 specification",
      "faces": 453880,
      "raw_min": [
        -0.9967,
        -0.7347,
        -0.9967
      ],
      "raw_max": [
        0.9888,
        0.7355,
        0.989
      ],
      "raw_extent": [
        1.9855,
        1.4702,
        1.9856
      ],
      "raw_longest": 1.9856,
      "longest_axis": "z",
      "raw_centre": [
        -0.004,
        0.0004,
        -0.0038
      ],
      "longest_as_read_mm": 1985.64,
      "extent_as_read_mm": [
        1985.55,
        1470.19,
        1985.64
      ],
      "sheet": {
        "axis": "y",
        "band_file_units": [
          -0.6612,
          -0.6465
        ],
        "area_share": 0.6621,
        "face_count": 261695,
        "band_width_file_units": [
          1.9855,
          1.9856
        ],
        "rest_width_file_units": [
          1.0691,
          0.9379
        ],
        "object_extent_without_band_file_units": [
          1.0691,
          1.4702,
          0.9379
        ],
        "detected": true
      },
      "generator_name": "Hunyuan3D-2.1 (Tencent)",
      "observed_imports": [],
      "sheet_detected": true,
      "sheet_area_share": 0.6621,
      "object_longest_without_sheet": 1.4702
    },
    {
      "input": "figurine",
      "generator": "hunyuan21",
      "file": "figurine__hunyuan21.stl",
      "format": "stl",
      "unit_basis": "none in the file; slicers read it as millimetres",
      "faces": 453880,
      "raw_min": [
        -0.9967,
        -0.7347,
        -0.9967
      ],
      "raw_max": [
        0.9888,
        0.7355,
        0.989
      ],
      "raw_extent": [
        1.9855,
        1.4702,
        1.9856
      ],
      "raw_longest": 1.9856,
      "longest_axis": "z",
      "raw_centre": [
        -0.004,
        0.0004,
        -0.0038
      ],
      "longest_as_read_mm": 1.99,
      "extent_as_read_mm": [
        1.99,
        1.47,
        1.99
      ],
      "sheet": {
        "axis": "y",
        "band_file_units": [
          -0.6612,
          -0.6465
        ],
        "area_share": 0.6621,
        "face_count": 261695,
        "band_width_file_units": [
          1.9855,
          1.9856
        ],
        "rest_width_file_units": [
          1.0691,
          0.9379
        ],
        "object_extent_without_band_file_units": [
          1.0691,
          1.4702,
          0.9379
        ],
        "detected": true
      },
      "volume_as_read_mm3": 0.4474,
      "slicers": [
        {
          "application": "PrusaSlicer",
          "basis": "computed from source",
          "asks_first": true,
          "guess": "inches",
          "factor": 25.4,
          "result_mm": [
            50.43,
            37.34,
            50.44
          ]
        },
        {
          "application": "Bambu Studio",
          "basis": "computed from source",
          "asks_first": false,
          "guess": "inches",
          "factor": 25.4,
          "result_mm": [
            50.43,
            37.34,
            50.44
          ]
        },
        {
          "application": "Cura",
          "basis": "computed from source",
          "asks_first": false,
          "guess": "power of ten to fill the build volume",
          "factor": 100.0,
          "build_volume_mm": [
            220,
            220,
            250
          ],
          "result_mm": [
            198.55,
            147.02,
            198.56
          ]
        },
        {
          "application": "Cura",
          "basis": "computed from source",
          "asks_first": false,
          "guess": "left as is",
          "factor": 1.0,
          "build_volume_mm": [
            180,
            180,
            180
          ],
          "result_mm": [
            1.99,
            1.47,
            1.99
          ]
        }
      ],
      "generator_name": "Hunyuan3D-2.1 (Tencent)",
      "observed_imports": [
        {
          "file": "figurine__hunyuan21.stl",
          "application": "PrusaSlicer",
          "version": "2.9.6",
          "how": "passed as a command line argument at launch; whether a dialog appeared was not captured",
          "dialog_shown": null,
          "dialog_text": null,
          "dialog_answer": null,
          "size_mm": [
            50.43,
            37.34,
            50.44
          ]
        }
      ],
      "sheet_detected": true,
      "sheet_area_share": 0.6621,
      "object_longest_without_sheet": 1.4702
    },
    {
      "input": "figurine",
      "generator": "neural4d",
      "file": "figurine__neural4d.glb",
      "format": "glb",
      "unit_basis": "metres, fixed by the glTF 2.0 specification",
      "faces": 99996,
      "raw_min": [
        -0.7124,
        -1.0,
        -0.5498
      ],
      "raw_max": [
        0.7124,
        1.0,
        0.5498
      ],
      "raw_extent": [
        1.4248,
        2.0,
        1.0996
      ],
      "raw_longest": 2.0,
      "longest_axis": "y",
      "raw_centre": [
        0.0,
        0.0,
        0.0
      ],
      "longest_as_read_mm": 2000.0,
      "extent_as_read_mm": [
        1424.8,
        2000.0,
        1099.61
      ],
      "sheet": {
        "axis": "y",
        "band_file_units": [
          -0.28,
          -0.26
        ],
        "area_share": 0.0732,
        "face_count": 8260,
        "band_width_file_units": [
          1.1719,
          0.7361
        ],
        "rest_width_file_units": [
          1.4248,
          1.0996
        ],
        "object_extent_without_band_file_units": [
          1.4248,
          2.0,
          1.0996
        ],
        "detected": false
      },
      "generator_name": "Neural4D",
      "observed_imports": [],
      "sheet_detected": false,
      "sheet_area_share": null,
      "object_longest_without_sheet": null
    },
    {
      "input": "figurine",
      "generator": "neural4d",
      "file": "figurine__neural4d.stl",
      "format": "stl",
      "unit_basis": "none in the file; slicers read it as millimetres",
      "faces": 99996,
      "raw_min": [
        -0.7124,
        -0.5498,
        -1.0
      ],
      "raw_max": [
        0.7124,
        0.5498,
        1.0
      ],
      "raw_extent": [
        1.4248,
        1.0996,
        2.0
      ],
      "raw_longest": 2.0,
      "longest_axis": "z",
      "raw_centre": [
        0.0,
        0.0,
        0.0
      ],
      "longest_as_read_mm": 2.0,
      "extent_as_read_mm": [
        1.42,
        1.1,
        2.0
      ],
      "sheet": {
        "axis": "z",
        "band_file_units": [
          -0.28,
          -0.26
        ],
        "area_share": 0.0732,
        "face_count": 8260,
        "band_width_file_units": [
          1.1719,
          0.7361
        ],
        "rest_width_file_units": [
          1.4248,
          1.0996
        ],
        "object_extent_without_band_file_units": [
          1.4248,
          1.0996,
          2.0
        ],
        "detected": false
      },
      "volume_as_read_mm3": 0.8237,
      "slicers": [
        {
          "application": "PrusaSlicer",
          "basis": "computed from source",
          "asks_first": true,
          "guess": "inches",
          "factor": 25.4,
          "result_mm": [
            36.19,
            27.93,
            50.8
          ]
        },
        {
          "application": "Bambu Studio",
          "basis": "computed from source",
          "asks_first": false,
          "guess": "inches",
          "factor": 25.4,
          "result_mm": [
            36.19,
            27.93,
            50.8
          ]
        },
        {
          "application": "Cura",
          "basis": "computed from source",
          "asks_first": false,
          "guess": "power of ten to fill the build volume",
          "factor": 100.0,
          "build_volume_mm": [
            220,
            220,
            250
          ],
          "result_mm": [
            142.48,
            109.96,
            200.0
          ]
        },
        {
          "application": "Cura",
          "basis": "computed from source",
          "asks_first": false,
          "guess": "left as is",
          "factor": 1.0,
          "build_volume_mm": [
            180,
            180,
            180
          ],
          "result_mm": [
            1.42,
            1.1,
            2.0
          ]
        }
      ],
      "generator_name": "Neural4D",
      "observed_imports": [
        {
          "file": "figurine__neural4d.stl",
          "application": "PrusaSlicer",
          "version": "2.9.6",
          "how": "File > Import STL",
          "dialog_shown": true,
          "dialog_text": "The dimensions of the object from file figurine__neural4d.stl seem to be defined in inches. The internal unit of PrusaSlicer is a millimeter. Do you want to recalculate the dimensions of the object?",
          "dialog_answer": "Yes",
          "size_mm": [
            36.19,
            27.93,
            50.8
          ]
        },
        {
          "file": "figurine__neural4d.stl",
          "application": "Bambu Studio",
          "version": "02.08.02.61",
          "how": "passed as a command line argument at launch",
          "dialog_shown": false,
          "dialog_text": null,
          "dialog_answer": null,
          "size_mm": [
            36.19,
            27.9301,
            50.8
          ]
        }
      ],
      "sheet_detected": false,
      "sheet_area_share": null,
      "object_longest_without_sheet": null
    },
    {
      "input": "figurine",
      "generator": "sf3d",
      "file": "figurine__sf3d.glb",
      "format": "glb",
      "unit_basis": "metres, fixed by the glTF 2.0 specification",
      "faces": 22584,
      "raw_min": [
        -0.3638,
        -0.4633,
        -0.2847
      ],
      "raw_max": [
        0.3413,
        0.476,
        0.1872
      ],
      "raw_extent": [
        0.705,
        0.9392,
        0.4718
      ],
      "raw_longest": 0.9392,
      "longest_axis": "y",
      "raw_centre": [
        -0.0113,
        0.0063,
        -0.0487
      ],
      "longest_as_read_mm": 939.21,
      "extent_as_read_mm": [
        705.05,
        939.21,
        471.85
      ],
      "sheet": {
        "axis": "y",
        "band_file_units": [
          -0.1157,
          -0.1064
        ],
        "area_share": 0.04,
        "face_count": 1267,
        "band_width_file_units": [
          0.6171,
          0.4159
        ],
        "rest_width_file_units": [
          0.705,
          0.4718
        ],
        "object_extent_without_band_file_units": [
          0.705,
          0.9392,
          0.4718
        ],
        "detected": false
      },
      "generator_name": "Stable Fast 3D (Stability AI)",
      "observed_imports": [],
      "sheet_detected": false,
      "sheet_area_share": null,
      "object_longest_without_sheet": null
    },
    {
      "input": "figurine",
      "generator": "trellis2",
      "file": "figurine__trellis2.glb",
      "format": "glb",
      "unit_basis": "metres, fixed by the glTF 2.0 specification",
      "faces": 291026,
      "raw_min": [
        -0.3308,
        -0.5009,
        -0.3151
      ],
      "raw_max": [
        0.3312,
        0.5004,
        0.3149
      ],
      "raw_extent": [
        0.662,
        1.0013,
        0.63
      ],
      "raw_longest": 1.0013,
      "longest_axis": "y",
      "raw_centre": [
        0.0002,
        -0.0002,
        -0.0001
      ],
      "longest_as_read_mm": 1001.34,
      "extent_as_read_mm": [
        662.0,
        1001.34,
        629.97
      ],
      "sheet": {
        "axis": "y",
        "band_file_units": [
          -0.1504,
          -0.1404
        ],
        "area_share": 0.0935,
        "face_count": 25791,
        "band_width_file_units": [
          0.5636,
          0.52
        ],
        "rest_width_file_units": [
          0.662,
          0.63
        ],
        "object_extent_without_band_file_units": [
          0.662,
          1.0013,
          0.63
        ],
        "detected": false
      },
      "generator_name": "TRELLIS.2 (Microsoft)",
      "observed_imports": [],
      "sheet_detected": false,
      "sheet_area_share": null,
      "object_longest_without_sheet": null
    }
  ],
  "slicer_rows": [
    {
      "file": "figurine__hunyuan21.stl",
      "generator": "hunyuan21",
      "generator_name": "Hunyuan3D-2.1 (Tencent)",
      "stl_longest_mm": 1.99,
      "volume_as_read_mm3": 0.4474,
      "application": "PrusaSlicer",
      "asks_first": true,
      "guess": "inches",
      "factor": 25.4,
      "computed_longest_mm": 50.44,
      "observed_longest_mm": 50.44,
      "observed_version": "2.9.6"
    },
    {
      "file": "figurine__hunyuan21.stl",
      "generator": "hunyuan21",
      "generator_name": "Hunyuan3D-2.1 (Tencent)",
      "stl_longest_mm": 1.99,
      "volume_as_read_mm3": 0.4474,
      "application": "Bambu Studio",
      "asks_first": false,
      "guess": "inches",
      "factor": 25.4,
      "computed_longest_mm": 50.44,
      "observed_longest_mm": null,
      "observed_version": null
    },
    {
      "file": "figurine__hunyuan21.stl",
      "generator": "hunyuan21",
      "generator_name": "Hunyuan3D-2.1 (Tencent)",
      "stl_longest_mm": 1.99,
      "volume_as_read_mm3": 0.4474,
      "application": "Cura (220 x 220 x 250 mm bed)",
      "asks_first": false,
      "guess": "power of ten to fill the build volume",
      "factor": 100.0,
      "computed_longest_mm": 198.56,
      "observed_longest_mm": null,
      "observed_version": null
    },
    {
      "file": "figurine__hunyuan21.stl",
      "generator": "hunyuan21",
      "generator_name": "Hunyuan3D-2.1 (Tencent)",
      "stl_longest_mm": 1.99,
      "volume_as_read_mm3": 0.4474,
      "application": "Cura (180 x 180 x 180 mm bed)",
      "asks_first": false,
      "guess": "left as is",
      "factor": 1.0,
      "computed_longest_mm": 1.99,
      "observed_longest_mm": null,
      "observed_version": null
    },
    {
      "file": "figurine__neural4d.stl",
      "generator": "neural4d",
      "generator_name": "Neural4D",
      "stl_longest_mm": 2.0,
      "volume_as_read_mm3": 0.8237,
      "application": "PrusaSlicer",
      "asks_first": true,
      "guess": "inches",
      "factor": 25.4,
      "computed_longest_mm": 50.8,
      "observed_longest_mm": 50.8,
      "observed_version": "2.9.6"
    },
    {
      "file": "figurine__neural4d.stl",
      "generator": "neural4d",
      "generator_name": "Neural4D",
      "stl_longest_mm": 2.0,
      "volume_as_read_mm3": 0.8237,
      "application": "Bambu Studio",
      "asks_first": false,
      "guess": "inches",
      "factor": 25.4,
      "computed_longest_mm": 50.8,
      "observed_longest_mm": 50.8,
      "observed_version": "02.08.02.61"
    },
    {
      "file": "figurine__neural4d.stl",
      "generator": "neural4d",
      "generator_name": "Neural4D",
      "stl_longest_mm": 2.0,
      "volume_as_read_mm3": 0.8237,
      "application": "Cura (220 x 220 x 250 mm bed)",
      "asks_first": false,
      "guess": "power of ten to fill the build volume",
      "factor": 100.0,
      "computed_longest_mm": 200.0,
      "observed_longest_mm": null,
      "observed_version": null
    },
    {
      "file": "figurine__neural4d.stl",
      "generator": "neural4d",
      "generator_name": "Neural4D",
      "stl_longest_mm": 2.0,
      "volume_as_read_mm3": 0.8237,
      "application": "Cura (180 x 180 x 180 mm bed)",
      "asks_first": false,
      "guess": "left as is",
      "factor": 1.0,
      "computed_longest_mm": 2.0,
      "observed_longest_mm": null,
      "observed_version": null
    }
  ],
  "not_observed": [
    "Bambu Studio with figurine__hunyuan21.stl: the file loaded and sat on the plate at a visibly similar size, but the size readout could not be captured, so no number is recorded.",
    "Cura: not imported. Its installer needs administrator rights on this machine. Cura's result is computed from its source code instead and labelled as computed."
  ],
  "not_measured_here": [
    "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."
  ]
}
