Skip to the live analyzer
97 specs · 2,000+ tests · MIT toolchain

The glTF pipeline your CI actually trusts.

Real-time validation, deterministic optimization, and a 6-view perceptual quality gate. Same pipeline locally and on every PR — shipping a 3D regression to production becomes the path of more resistance.

avg compression
47%
corpus assets
84
presets
3
specs shipped
97
DamagedHelmet.glb
3.60 MB·15,452 tris
web-mobile preset
87.7%smaller·ΔE94 1.4
analyze: passed14/14 conformance · 0 USDZ warns
Try a sample

Powers the standards your runtime already speaks

  • Shopify 3Dproduct viewers
  • Apple USDZQuick Look + AR
  • Khronos glTF2.0 + extensions
  • Pixar USDround-trip
  • GitHub ActionsCI gate
  • VS Code8 commands
Live demo

See the analyzer on real assets.

Every sample is a license-verified Khronos reference model. Switch tabs to swap the model and the readout in lockstep — no special-case path, the same pipeline you'd get from spatialpack analyze.

DamagedHelmet.glb
3.60 MB·15,452 tris
drag · scroll · double-tap to resetdownload source ↓
spatialpack analyzeDamagedHelmet.glb
core@0.1.0
web-mobile preset
87.7%smaller(3.60 MB452.3 KB)
saves 3.16 MB per request
triangles
15,452
draw calls
1
predicted frame
10.60 ms
predicted GPU mem
11.55 MB
texture pipeline
webp + meshopt
cohort
textured · medium-poly
extensions
KHR_materials_unlit
license
CC-BY 4.0
analyze: passed·14/14 conformance · 0 USDZ warnings
The reference asset every WebGL engine ships against. Heavy PBR maps; ideal stress test for texture pipelines.
Bench

Top reductions on 3DAssetBench.

54 license-verified Khronos sample assets, web-mobile preset. Average reduction across the corpus: 65.0%. Regressions included. Full table at /3dassetbench.

  • GlassHurricaneCandleHolder4,920 tris · 2.580.11 MB
    95.8%
  • BoomBox6,036 tris · 10.120.55 MB
    94.6%
  • WaterBottle4,510 tris · 8.550.57 MB
    93.3%
  • MaterialsVariantsShoe13,780 tris · 7.470.57 MB
    92.4%
  • MosquitoInAmber4,096 tris · 23.112.32 MB
    89.9%
  • BarramundiFish4,068 tris · 11.911.25 MB
    89.5%
  • Lantern5,394 tris · 9.121.07 MB
    88.2%
  • ABeautifulGame96,084 tris · 40.993.91 MB
    88.0%
  • DamagedHelmet15,452 tris · 3.600.44 MB
    87.7%
CI

The same pipeline runs on every PR.

Install the GitHub Action; every PR that touches a .glb gets this comment with a fidelity badge from a 6-view perceptual diff. Threshold breach fails the build.

acme/storefront·PR #481·add hero AR product
github-actionsbotcommented·just now
spatialpack@0.1.0
spatialpackpassedΔE941.3SSIM0.997size−87.7%USDZokconformance2 warns
filehero.glb · main → hero-ar
size3.60 MB → 0.44 MB (−87.7%)
ΔE94 max1.4 (worst view: front-elev-30°)
SSIM min0.997
frame est.10.6 ms (target ≤ 16.7 ms)
GPU mem11.55 MB (target ≤ 64 MB)
conformance12/14 passed · 2 warns (usdz_meters_per_unit_not_one, usdz_jpeg_progressive)
visual diff · 6 viewsall under threshold
frontΔE 0.9
backΔE 1.1
leftΔE 1.4
rightΔE 0.7
topΔE 1.0
isoΔE 1.2
Conformance

Catches what usdchecker misses.

Apple's usdchecker covers the spec. We cover the spec and the long list of silent failures that ship to a customer's iPhone anyway.

  • usdz_no_default_stageUSDZFAIL
    First archive entry isn't a .usd/.usda/.usdc — Quick Look refuses to open the file.
  • usdz_entry_compressedUSDZFAIL
    Entry uses DEFLATE; USDZ requires STORE (0). Apple's loader won't read it.
  • usdz_entry_unalignedUSDZFAIL
    Entry data isn't 64-byte aligned; required for memory-mapped reads on iOS.
  • usdz_file_size_budget_exceededARWARN
    Over Apple's ~25 MB Quick Look budget. iOS will start, but stutter on cellular.
  • usdz_meters_per_unit_not_oneUSDZWARN
    metersPerUnit ≠ 1.0 → AR scale wrong on placement. usdchecker is silent on this.
  • usdz_up_axis_not_yUSDZWARN
    Z-up stage → asset lands on its side in Quick Look. Reality Composer assumes Y-up.
  • usdz_png_palette_detectedUSDZWARN
    Palette PNG (color type 3) — Quick Look skips it silently. Convert to truecolor.
  • usdz_png_bit_depth_unsupportedUSDZWARN
    >8 bpc PNG — re-encode at 8-bit per channel; iOS caps depth here.
  • usdz_png_invalid_headerUSDZFAIL
    File is named .png but lacks the PNG signature / IHDR chunk.
  • usdz_jpeg_progressiveUSDZWARN
    Progressive JPEG (SOF2) — Quick Look prefers baseline DCT. Re-encode without progressive.
  • usdz_jpeg_invalid_headerUSDZFAIL
    JPEG missing the SOI (FF D8) start marker.
  • material_may_not_roundtrip_to_usdzARWARN
    Uses iridescence / volume / clearcoat / sheen — drops on USDZ export. Test on-device.
  • missing_texture_assetglTFFAIL
    Stage references an image that isn't in the archive. Quick Look renders white.
  • wrong_extensionglTFFAIL
    File extension misrepresents the contents.
14 of 14 shown · glTF / USDZ / AR Quick Look · sourced from packages/core/src/usdz.ts and conformance.ts
Receipts

Numbers, not adjectives.

97
Specs shipped

one per change, traceable

2,000+
Tests passing

Vitest + Playwright + visual diff

65%
Average reduction

web-mobile preset, 54-asset bench

8
VS Code commands

analyze, optimize, diff, dedup, …

50+
SDK methods

TypeScript + MCP server

14
Conformance checks

beyond what usdchecker catches

Try it

Run this on your own .glb.

No sign-up, no proprietary container. We process the file in-memory, hand you back a downloadable .glb and a shareable report URL. 25 MB max in the public surface.

.glb · .gltf · 25 MB max
Drop a .glb here, or click to choose
runs the same pipeline as spatialpack optimize --preset web-mobile
or — install on CI:npm i -g @spatialpack/cliuses: spatialpack/spatialpack-action@v0
Pricing

Free to try. Pay when you scale.

Drop a file, get a report, take the optimized GLB — free for the first few. Upgrade when you’re shipping a catalog and need every preset, unlimited jobs, and the Shopify integration.

See full comparison
[01] Free
$0forever

Try the optimizer on a couple of assets. CLI + MCP server included.

  • 25 optimized GLB downloads / month
  • web-mobile preset
  • CLI + MCP server
  • Personal API key
Use the analyzer
Most teams
[02] Pro
$39/ month

For teams shipping a catalog. Every preset, unlimited jobs, Shopify integration.

  • Unlimited optimize + downloads
  • web-desktop + quality-max presets
  • Cohort-recipe auto-tune + LODs
  • Shopify storefront integration
Start a 14-day trial
[05] · GET STARTED

Start optimizing in 30 seconds.

Drop a real asset. We’ll analyze it, optimize it with the same pipeline that runs in CI, and hand you a downloadable .glb plus a shareable report.

No sign-up · 25 MB max · honest report