Skip to the live analyzer
v0.1.0 · 97 specs · 2,000+ tests

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.

MIT licensed coreNo proprietary formatsRuns in 30 seconds
DamagedHelmet.glb
3.60 MB·15,452 tris
web-mobile preset
87.7%Δ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%(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 CLI. Paid CI.

The optimizer, validator, web analyzer, and MCP server are MIT-licensed and free. We charge for multi-tenant CI, premium presets, and the kind of support a team actually needs.

See full comparison
Free
$0forever

Everything an indie dev needs to ship one polished AR product.

  • CLI + MCP server + web analyzer
  • web-mobile preset
  • Public-repo GitHub Action
  • 14-point conformance + USDZ checks
Install the CLI
Most teams
Pro
$29/ month

For teams shipping a catalog. Quality presets, private CI, similars.

  • web-desktop + quality-max presets
  • Private-repo GitHub Action
  • Embedding search across your library
  • Priority support + roadmap input
Start a 14-day trial
No sign-up · 25 MB max · MIT licensed

Start optimizing in 30 seconds.

Drop one of your real assets. We'll analyze it, optimize it with the same pipeline that runs in CI, and hand you a downloadable .glb plus a shareable report.