Us vs the free tools. Losses included.
SpatialPack, gltf-transform optimize and gltfpack -cc run at defaults over all 103 assets of the Khronos glTF-Sample-Assets corpus. One identical render harness scores every tool's output against the original. Every asset where a free tool beats us is published below — no cherry-picking, no excluded rows.
- corpus assets
- 103
- median gz reduction (us)
- 81.5%
- wins / losses (worst pairing)
- 80W · 21L
- our crashes
- 0
Full-corpus medians.
| Tool | Completed | Crashes | Median gz reduction | Median ΔE94 | Median SSIM | Visible-change assets | Median wall ms |
|---|---|---|---|---|---|---|---|
SpatialPack | 103/103 | 0 | 81.5% | 0.14 | 0.9978 | 6 | 1654 |
gltf-transform | 103/103 | 0 | 20.9% | 0.06 | 0.9993 | 2 | 1032 |
gltfpack | 103/103 | 0 | 17.2% | 0.05 | 0.9995 | 2 | 6 |
gltfpack -tc | 103/103 | 0 | 68.2% | 0.28 | 0.9925 | 3 | 434 |
gz reduction = gzip -9 of the whole GLB vs the original. ΔE94/SSIM measured against the ORIGINAL asset — lower ΔE94 / higher SSIM means closer to the source. Tools trade size against fidelity differently: SpatialPack's web-mobile preset re-encodes textures (smaller, more visual change); gltfpack's default leaves textures untouched (larger, near-zero visual change). Read size and quality columns together.
Win / loss pairings.
| Pairing | We win | We lose | Tie (≤1%) | Excluded (crash) |
|---|---|---|---|---|
SpatialPack vs gltf-transform | 90 | 9 | 4 | 0 |
SpatialPack vs gltfpack | 83 | 20 | 0 | 0 |
SpatialPack vs gltfpack -tc | 80 | 21 | 2 | 0 |
Where we lose.
| Asset | Cohort | Beaten by | Our gz kB | Their gz kB | Margin | Our ΔE94 | Their ΔE94 |
|---|---|---|---|---|---|---|---|
DispersionTest | low-poly / untextured | gltfpack -tc | 328.3 | 136.9 | −58.3% | 0.04 | 0.88 |
SimpleInstancing | low-poly / untextured | gltfpack | 3.8 | 1.7 | −54.2% | 0 | 0.01 |
MetalRoughSpheresNoTextures | high-poly / untextured | gltfpack | 34.3 | 18.8 | −45.3% | 2.01 | 0.09 |
TransmissionTest | low-poly / textured-pbr | gltf-transform | 183.4 | 110.7 | −39.6% | 0.05 | 0.11 |
AnimatedColorsCube | low-poly / untextured | gltfpack | 2.3 | 1.4 | −38.5% | 0.45 | 0 |
AnimatedMorphCube | low-poly / untextured | gltfpack | 2.4 | 1.5 | −37.2% | 0.03 | 0 |
UnlitTest | low-poly / untextured | gltfpack | 1.3 | 0.8 | −34.6% | 0 | 0 |
TransmissionOrderTest | medium-poly / textured-pbr | gltf-transform | 173.4 | 116.1 | −33.1% | 0.97 | 0.06 |
CompareSpecular | medium-poly / textured-pbr | gltfpack -tc | 337.6 | 244.1 | −27.7% | 0.08 | 0.42 |
SheenTestGrid | medium-poly / textured-pbr | gltfpack | 10.3 | 7.9 | −23.3% | 0.02 | 0.02 |
TransmissionThinwallTestGrid | medium-poly / textured-pbr | gltfpack | 10.1 | 7.8 | −22.7% | 0.01 | 0.02 |
EmissiveStrengthTest | low-poly / textured-pbr | gltfpack | 2.4 | 1.9 | −22.4% | 0.06 | 0.03 |
RiggedFigure | medium-poly / untextured | gltfpack | 8.8 | 7 | −20.6% | 0.01 | 0.01 |
OrientationTest | low-poly / untextured | gltfpack | 6.9 | 5.5 | −19.2% | 15.62 | 0.02 |
IORTestGrid | medium-poly / textured-pbr | gltfpack | 14.8 | 12 | −18.8% | 0.06 | 0.06 |
CompareSheen | low-poly / textured-pbr | gltfpack -tc | 344.9 | 281.2 | −18.5% | 0.08 | 0.39 |
MetalRoughSpheres | medium-poly / textured-pbr | gltfpack | 467.4 | 382.4 | −18.2% | 0.1 | 0.06 |
MorphPrimitivesTest | low-poly / untextured | gltfpack -tc | 32.7 | 27.3 | −16.4% | 0.19 | 0.18 |
ClearCoatCarPaint | medium-poly / textured-pbr | gltfpack -tc | 19 | 16.5 | −12.9% | 0.09 | 0.21 |
BrainStem | medium-poly / textured-pbr | gltfpack | 283.9 | 250 | −11.9% | 0.03 | 0.03 |
Fox | medium-poly / textured-flat | gltfpack | 42 | 38.3 | −8.8% | 0.03 | 0 |
DiffuseTransmissionTest | low-poly / textured-pbr | gltfpack | 21.5 | 19.7 | −8.2% | 0.05 | 0.02 |
RiggedSimple | low-poly / untextured | gltfpack | 2.2 | 2.1 | −4.7% | 0.02 | 0.02 |
Box | low-poly / untextured | gltfpack | 0.8 | 0.8 | −4.2% | 0 | 0 |
RecursiveSkeletons | medium-poly / untextured | gltf-transform | 13.5 | 13.1 | −2.7% | 0.05 | 0.01 |
GlamVelvetSofa | high-poly / textured-pbr | gltfpack -tc | 376.4 | 370.3 | −1.6% | 0.07 | 0.53 |
A loss = the best non-crashed rival output is >1% smaller (gzip) than ours on that asset. Quality columns are shown so you can judge the trade each tool made on that asset.
Cohort medians.
| Axis | Cohort | n | SpatialPack | gltf-transform | gltfpack | gltfpack -tc |
|---|---|---|---|---|---|---|
| poly | high | 14 | 84.1% | 16.6% | 35.7% | 75.1% |
| poly | low | 38 | 60.2% | 11.9% | 11.2% | 32.9% |
| poly | medium | 51 | 89.6% | 31.4% | 22.4% | 75.9% |
| texture | textured-flat | 10 | 55.7% | 6.8% | 6.4% | 35.5% |
| texture | textured-pbr | 75 | 87.6% | 29.6% | 17.9% | 73.9% |
| texture | textured-photo | 3 | 80.9% | 27.8% | 14.8% | 77.3% |
| texture | untextured | 15 | 25% | 5.7% | 25.1% | 31.8% |
Every asset.
| Asset | Original | SpatialPack | gltf-transform | gltfpack | gltfpack -tc |
|---|---|---|---|---|---|
Box | 0.6 | 0.8 (-35.7%) | 0.8 (-34.9%) | 0.8 (-30%) | 0.8 (-30%) |
BoxTextured | 4.5 | 3.3 (27.5%) | 7.5 (-64.3%) | 4.8 (-4.9%) | 6.3 (-37.6%) |
Duck | 95.8 | 26.4 (72.4%) | 47.3 (50.6%) | 38.1 (60.3%) | 36.5 (62%) |
CesiumMilkTruck | 236.7 | 45.2 (80.9%) | 170.8 (27.8%) | 201.7 (14.8%) | 210.8 (10.9%) |
BrainStem | 992.8 | 283.9 (71.4%) | 282 (71.6%) | 250 (74.8%) | 250 (74.8%) |
DamagedHelmet | 3298.9 | 343.6 (89.6%) | 2458.6 (25.5%) | 3131.3 (5.1%) | 2233.2 (32.3%) |
BoxAnimated | 2.6 | 2.1 (18.7%) | 2.4 (5.7%) | 2.5 (3.8%) | 2.5 (3.8%) |
Lantern | 9161.4 | 189.7 (97.9%) | 9119.4 (0.5%) | 9061.7 (1.1%) | 1152.8 (87.4%) |
ABeautifulGame | 29937.1 | 2088.9 (93%) | 16102.1 (46.2%) | 18243.2 (39.1%) | 14425.8 (51.8%) |
WaterBottle | 8606.9 | 44.3 (99.5%) | 6977.6 (18.9%) | 8540.5 (0.8%) | 777.3 (91%) |
Avocado | 7884.8 | 43.6 (99.4%) | 8523.9 (-8.1%) | 7871.2 (0.2%) | 619.9 (92.1%) |
Corset | 12924.3 | 258.1 (98%) | 14011.7 (-8.4%) | 12604.4 (2.5%) | 1531.8 (88.1%) |
BoomBox | 10258.4 | 103.3 (99%) | 8278.2 (19.3%) | 10140.2 (1.2%) | 755.3 (92.6%) |
CesiumMan | 277.9 | 64.3 (76.8%) | 110 (60.4%) | 179.7 (35.4%) | 98 (64.7%) |
Fox | 78.8 | 42 (46.7%) | 63.7 (19.2%) | 38.3 (51.4%) | 51.1 (35.1%) |
RiggedFigure | 14.3 | 8.8 (38.5%) | 8.8 (38.5%) | 7 (51.2%) | 7 (51.2%) |
RiggedSimple | 5.2 | 2.2 (57%) | 2.3 (56%) | 2.1 (59%) | 2.1 (59%) |
AnimatedMorphCube | 2.2 | 2.4 (-8.5%) | 2.4 (-8.6%) | 1.5 (31.8%) | 1.5 (31.8%) |
ClearCoatTest | 192.8 | 59 (69.4%) | 209.4 (-8.6%) | 169.3 (12.2%) | 151.6 (21.4%) |
DragonAttenuation | 4148.8 | 1164.2 (71.9%) | 1385.7 (66.6%) | 1279.2 (69.2%) | 1307.5 (68.5%) |
IridescenceLamp | 3743.6 | 102.9 (97.3%) | 4605.8 (-23%) | 3582.6 (4.3%) | 818.5 (78.1%) |
TransmissionTest | 864.7 | 183.4 (78.8%) | 110.7 (87.2%) | 152.6 (82.4%) | 200.3 (76.8%) |
MetalRoughSpheres | 4904.5 | 467.4 (90.5%) | 1126 (77%) | 382.4 (92.2%) | 391.1 (92%) |
NormalTangentTest | 1630.3 | 48.9 (97%) | 2174.4 (-33.4%) | 1581.3 (3%) | 350.4 (78.5%) |
OrientationTest | 9.1 | 6.9 (25%) | 7.2 (20.9%) | 5.5 (39.3%) | 5.5 (39.3%) |
TextureCoordinateTest | 8 | 4.2 (47.1%) | 7 (12%) | 7.3 (8%) | 8.6 (-7.4%) |
ToyCar | 4365.9 | 694.2 (84.1%) | 2778.3 (36.4%) | 2182.6 (50%) | 921.2 (78.9%) |
AntiqueCamera | 16674.5 | 404.6 (97.6%) | 20238.2 (-21.4%) | 16452.2 (1.3%) | 3095.3 (81.4%) |
CommercialRefrigerator | 6338.7 | 1156.3 (81.8%) | 2841.9 (55.2%) | 2710 (57.2%) | 3057.2 (51.8%) |
ChronographWatch | 5876.8 | 1088.1 (81.5%) | 6682.1 (-13.7%) | 3979 (32.3%) | 2036.7 (65.3%) |
MaterialsVariantsShoe | 7323 | 378 (94.8%) | 2709.2 (63%) | 6996.8 (4.5%) | 2854.5 (61%) |
BarramundiFish | 12123.6 | 180.2 (98.5%) | 13175.2 (-8.7%) | 12053.6 (0.6%) | 1327.9 (89%) |
GlamVelvetSofa | 3043.8 | 376.4 (87.6%) | 3120.5 (-2.5%) | 2974.3 (2.3%) | 370.3 (87.8%) |
ChairDamaskPurplegold | 1879.1 | 368.9 (80.4%) | 555.5 (70.4%) | 1718.7 (8.5%) | 519.6 (72.3%) |
SheenChair | 3721.4 | 619.8 (83.3%) | 4156.6 (-11.7%) | 3079.6 (17.2%) | 725.1 (80.5%) |
SpecularSilkPouf | 3585.8 | 513.3 (85.7%) | 3097.3 (13.6%) | 2485.6 (30.7%) | 510 (85.8%) |
IridescenceAbalone | 9052.4 | 465.9 (94.9%) | 5693.6 (37.1%) | 8948.9 (1.1%) | 1570.8 (82.6%) |
IridescenceSuzanne | 436 | 54.3 (87.6%) | 581.7 (-33.4%) | 405.3 (7%) | 177.9 (59.2%) |
IridescentDishWithOlives | 5112.1 | 285.5 (94.4%) | 6758.6 (-32.2%) | 4820 (5.7%) | 1334.8 (73.9%) |
DispersionTest | 827.4 | 328.3 (60.3%) | 266 (67.8%) | 141.5 (82.9%) | 136.9 (83.4%) |
AttenuationTest | 33.9 | 20.2 (40.6%) | 29.9 (11.8%) | 33.2 (2.1%) | 23.8 (29.9%) |
EmissiveStrengthTest | 2 | 2.4 (-17.7%) | 2.1 (-3.6%) | 1.9 (8.6%) | 2.4 (-20.4%) |
AnisotropyBarnLamp | 7504 | 183.7 (97.6%) | 10247 (-36.6%) | 7280.1 (3%) | 1254.5 (83.3%) |
ScatteringSkull | 6386.2 | 670 (89.5%) | 3185.9 (50.1%) | 2571.7 (59.7%) | 1004.5 (84.3%) |
PotOfCoals | 3214.5 | 408.5 (87.3%) | 3054.3 (5%) | 2676.6 (16.7%) | 2457.4 (23.6%) |
ClearCoatCarPaint | 79 | 19 (76%) | 54.2 (31.4%) | 51.5 (34.7%) | 16.5 (79.1%) |
ClearcoatWicker | 1232.4 | 118.2 (90.4%) | 1925.5 (-56.2%) | 1204.9 (2.2%) | 235.4 (80.9%) |
GlassVaseFlowers | 1713.1 | 141 (91.8%) | 1562.3 (8.8%) | 1625.6 (5.1%) | 432.7 (74.7%) |
GlassBrokenWindow | 1019 | 101.9 (90%) | 436.8 (57.1%) | 1007.8 (1.1%) | 303.5 (70.2%) |
GlassHurricaneCandleHolder | 2588.1 | 27.7 (98.9%) | 3235.9 (-25%) | 2543.5 (1.7%) | 446.9 (82.7%) |
DiffuseTransmissionPlant | 4954.1 | 1002.3 (79.8%) | 2838.7 (42.7%) | 3899.4 (21.3%) | 1574.2 (68.2%) |
DiffuseTransmissionTeacup | 2466.7 | 165.9 (93.3%) | 2993.6 (-21.4%) | 1789.9 (27.4%) | 1025.9 (58.4%) |
MosquitoInAmber | 23133.4 | 737.9 (96.8%) | 10976.3 (52.6%) | 22663.4 (2%) | 6007.2 (74%) |
SunglassesKhronos | 267.4 | 51.9 (80.6%) | 125.1 (53.2%) | 121.1 (54.7%) | 55.8 (79.1%) |
CarbonFibre | 378.5 | 32.7 (91.4%) | 687.9 (-81.7%) | 335.8 (11.3%) | 85.9 (77.3%) |
MorphStressTest | 202.9 | 11.8 (94.2%) | 200.7 (1.1%) | 171.9 (15.3%) | 47.1 (76.8%) |
MorphPrimitivesTest | 33 | 32.7 (1.1%) | 34.4 (-4.2%) | 33.3 (-0.6%) | 27.3 (17.3%) |
RecursiveSkeletons | 30.2 | 13.5 (55.4%) | 13.1 (56.6%) | 22.8 (24.5%) | 22.8 (24.5%) |
CarConcept | 8681.3 | 1660.1 (80.9%) | 5839.1 (32.7%) | 4037.3 (53.5%) | 2048.7 (76.4%) |
SheenWoodLeatherSofa | 5021.6 | 979.1 (80.5%) | 1187 (76.4%) | 3664.3 (27%) | 3664.3 (27%) |
PotOfCoalsAnimationPointer | 4767.1 | 417.7 (91.2%) | 3347.8 (29.8%) | 4226 (11.3%) | 2506.9 (47.4%) |
USDShaderBallForGltf | 913.7 | 135.8 (85.1%) | 361 (60.5%) | 361.9 (60.4%) | 169.4 (81.5%) |
LightsPunctualLamp | 3973.8 | 207.1 (94.8%) | 4168.9 (-4.9%) | 3839.9 (3.4%) | 1100.2 (72.3%) |
CompareAlphaCoverage | 3766.3 | 375.7 (90%) | 4355 (-15.6%) | 3766 (0%) | 841 (77.7%) |
CompareAmbientOcclusion | 3811.6 | 605.3 (84.1%) | 1494.3 (60.8%) | 1498.7 (60.7%) | 1290.8 (66.1%) |
CompareAnisotropy | 805.1 | 97.1 (87.9%) | 233.3 (71%) | 285.7 (64.5%) | 157 (80.5%) |
CompareBaseColor | 625.2 | 38.7 (93.8%) | 568.5 (9.1%) | 400.9 (35.9%) | 88.7 (85.8%) |
CompareClearcoat | 57.3 | 13.1 (77.1%) | 40.3 (29.6%) | 43.4 (24.2%) | 37 (35.5%) |
CompareDispersion | 18.2 | 5.5 (69.7%) | 14.1 (22.6%) | 17.7 (2.6%) | 14.6 (19.7%) |
CompareEmissiveStrength | 37.8 | 10.8 (71.3%) | 22.3 (40.9%) | 24.4 (35.5%) | 24.8 (34.4%) |
CompareIor | 71.1 | 16.5 (76.8%) | 51.2 (27.9%) | 57.3 (19.3%) | 51.7 (27.3%) |
CompareIridescence | 74.5 | 17.4 (76.7%) | 56.2 (24.6%) | 61.1 (17.9%) | 57.5 (22.7%) |
CompareMetallic | 70.8 | 13.8 (80.6%) | 47.1 (33.5%) | 57.5 (18.9%) | 46.8 (33.9%) |
CompareNormal | 159.7 | 39.7 (75.1%) | 71.8 (55%) | 106.4 (33.4%) | 80.3 (49.7%) |
CompareRoughness | 49.3 | 12.5 (74.6%) | 32.9 (33.3%) | 36 (27%) | 35.1 (28.8%) |
CompareSheen | 759.8 | 344.9 (54.6%) | 410.9 (45.9%) | 746.4 (1.8%) | 281.2 (63%) |
CompareSpecular | 1273.9 | 337.6 (73.5%) | 1079.1 (15.3%) | 1134.5 (10.9%) | 244.1 (80.8%) |
CompareTransmission | 207.1 | 15.5 (92.5%) | 98.8 (52.3%) | 75.7 (63.4%) | 81.7 (60.5%) |
CompareVolume | 234.2 | 16 (93.1%) | 77.4 (66.9%) | 93.6 (60%) | 109.5 (53.2%) |
AnisotropyDiscTest | 153.1 | 18.7 (87.8%) | 434 (-183.5%) | 134.9 (11.9%) | 78.5 (48.7%) |
AnisotropyRotationTest | 636.4 | 165.6 (74%) | 387.6 (39.1%) | 504 (20.8%) | 173.7 (72.7%) |
AnisotropyStrengthTest | 37.7 | 12.2 (67.8%) | 37.2 (1.3%) | 17.1 (54.5%) | 12.4 (67.2%) |
DiffuseTransmissionTest | 62 | 21.5 (65.4%) | 32.3 (47.9%) | 19.7 (68.2%) | 21.3 (65.7%) |
IORTestGrid | 636.2 | 14.8 (97.7%) | 15.9 (97.5%) | 12 (98.1%) | 12.6 (98%) |
SheenTestGrid | 467.7 | 10.3 (97.8%) | 9.7 (97.9%) | 7.9 (98.3%) | 8.5 (98.2%) |
SpecGlossVsMetalRough | 9620.9 | 317.2 (96.7%) | 11032.7 (-14.7%) | 9554 (0.7%) | 1596.8 (83.4%) |
SpecularTest | 121.5 | 35.4 (70.9%) | 52.2 (57%) | 44 (63.8%) | 36 (70.4%) |
TransmissionOrderTest | 810.3 | 173.4 (78.6%) | 116.1 (85.7%) | 136.9 (83.1%) | 169.2 (79.1%) |
TransmissionRoughnessTest | 170.4 | 31.3 (81.6%) | 56.8 (66.7%) | 62 (63.6%) | 36 (78.9%) |
TransmissionThinwallTestGrid | 296.7 | 10.1 (96.6%) | 9.5 (96.8%) | 7.8 (97.4%) | 8.4 (97.2%) |
UnlitTest | 1.1 | 1.3 (-14.5%) | 0.9 (16.8%) | 0.8 (25.1%) | 0.8 (25.1%) |
AlphaBlendModeTest | 2873.1 | 224.5 (92.2%) | 1932.7 (32.7%) | 2871.5 (0.1%) | 1501.6 (47.7%) |
MultiUVTest | 26.2 | 10.5 (60%) | 32.6 (-24.8%) | 26 (0.7%) | 28.7 (-9.9%) |
NormalTangentMirrorTest | 1417.7 | 40.5 (97.1%) | 2181.5 (-53.9%) | 1355.7 (4.4%) | 348.7 (75.4%) |
TextureEncodingTest | 11.8 | 11.1 (5.5%) | 18.1 (-54%) | 11.3 (4.2%) | 22.6 (-92%) |
TextureSettingsTest | 27.4 | 13.3 (51.4%) | 23.1 (15.6%) | 26.1 (4.8%) | 17.6 (35.9%) |
TextureTransformMultiTest | 308.4 | 44 (85.7%) | 303.6 (1.5%) | 277.1 (10.1%) | 85.3 (72.3%) |
AnimatedColorsCube | 3.3 | 2.3 (29.6%) | 2.2 (34.2%) | 1.4 (56.7%) | 1.4 (56.7%) |
AnimationPointerUVs | 3138.5 | 441.6 (85.9%) | 3917.9 (-24.8%) | 2435.3 (22.4%) | 757 (75.9%) |
InterpolationTest | 3.1 | 3.9 (-24.6%) | 4.7 (-48.6%) | 4.5 (-41.6%) | 7.6 (-140.4%) |
SimpleInstancing | 2 | 3.8 (-93.8%) | 4.5 (-131.4%) | 1.7 (11.2%) | 1.7 (11.2%) |
MetalRoughSpheresNoTextures | 115.8 | 34.3 (70.4%) | 741.1 (-539.7%) | 18.8 (83.8%) | 18.8 (83.8%) |
BoxVertexColors | 0.5 | 0.6 (-18.3%) | 0.7 (-38.8%) | 0.7 (-37%) | 0.7 (-37%) |
Methodology, precisely.
- SpatialPack — SpatialPack (web-mobile preset, defaults); textures: WebP (KTX2 chain falls back to WebP without toktx installed)
- gltf-transform — gltf-transform optimize (defaults), @gltf-transform/cli@4.4.0; textures: auto (re-encodes in original format, max 2048px)
- gltfpack — gltfpack -cc, native v1.1 release binary; textures: original textures untouched
- gltfpack -tc — gltfpack -cc -tc (KTX2/BasisU textures), native v1.1 release binary; textures: KTX2 BasisU (ETC1S) supercompression
spatialpack 0.1.0 (git 89ce61f) · @gltf-transform/cli@4.4.0 (reports 4.4.0) · gltfpack 1.1 (native meshoptimizer release binary; the npm build ships without KTX2/WebP encoders) · node v25.9.0 · darwin arm64 · toktx installed: false — so SpatialPack's KTX2 chain fell back to WebP in this run, exactly as it does for users without toktx.
All 103 assets of the SpatialPack seed corpus, vendored from Khronos glTF-Sample-Assets (per-asset licenses in the repo). Nothing excluded; tool crashes are recorded and counted above.
ΔE94 mean + SSIM vs the ORIGINAL asset, SpatialPack visual-diff harness (model-viewer 4.0.0 in headless Chromium via Playwright), orbit-8 grid, 1 view, 512x512, deterministic camera (harness v2). Identical harness and identical camera for every tool. Both renders use the same vendored model-viewer + decoders; no tool gets a friendlier renderer. ΔE94 mean > 5 or SSIM < 0.95 vs the original at the benchmark view. Single-view scoring is a coarse signal — it can miss back-face or animated-pose regressions; it is the same coarse signal for every tool.
Camera (changed in v2): harness v2 (2026-06-11): camera-target pinned to the ORIGINAL asset's world-space scene-bounds center (EXT_mesh_gpu_instancing-aware) and orbit radius locked to 1.2x the bounds-sphere fit distance at 35deg FOV — model-viewer auto-framing disabled. v1 auto-framed on base-mesh bounds, which reframed the camera on instanced assets whose quantized outputs legally move the dequant transform into the instance TRS (world-space bounds identical); every tool scored a bogus SSIM 0.56-0.69 on SimpleInstancing. The same fixed camera scores every tool on a given asset.
Render-prep: harness v2: EXT_mesh_gpu_instancing batches are expanded into explicit child nodes (identical world-space placement) in a render-only copy before loading into model-viewer, because three.js computes framing/near/far from geometry bounds without composing instance TRS — a pinned camera otherwise near-clips outputs that store the dequant transform in instance TRS. Applied identically to the original and every tool output; non-instanced files are rendered as-is and the benchmarked artifacts are never modified.
win/loss requires >1% gz-size difference; crashed pairings excluded from win/loss and counted separately.
node bench/spec-0157-leaderboard/run.mjs && node bench/spec-0157-leaderboard/aggregate.mjs(SpatialPack bench harness; raw results.json ships with the repo)
The analyzer scores your GLB with the exact harness used above — before/after, no signup.