CI-grade fidelity for
the 3D you ship.
A 3D production agency moves 10–100 models a month, and the bug everyone hates is the same: AR Quick Look breaks for the client's customer because some KHR_* extension didn't survive USDZ export. SpatialPack runs the same analyze + optimize + ΔE94-gated visual-diff pipeline locally and on every PR — so the regression shows up in code review, not in a customer email.
Agency plan from $299/mo · CLI and MCP server free to run locally · white-label quoted on Studio
| asset | client | QA | detail |
|---|---|---|---|
| chair.glb | Brand A | ✓ | model-viewer ✓ · QL ✓ |
| vase.glb | Brand A | ✓ | ΔE94 0.8 · USDZ ✓ |
| lamp_iridescent.glb | Brand B | ✗ | QL renders gray on iOS 16 · ΔE94 38 |
| bottle.glb | Brand B | ✓ | ΔE94 1.1 · USDZ ✓ |
| sofa.glb | Brand C | ⚠ | ΔE94 4.2 · KHR_sheen risk |
| watch.glb | Brand C | ✓ | ΔE94 0.4 · USDZ ✓ |
One CI gate, every runtime.
Hero AR products + product viewers that don't miss the Quick Look budget on cellular.
Reality Composer / Quick Look pipelines that survive iOS upgrades and material round-trips.
Modular tile kits + LOD budgets across Unity, Unreal, godot, and three.js targets.
USD-first asset pipelines with deterministic geometry and PBR fidelity baked into CI.
Three things you couldn't build in a sprint.
Every PR that touches a .glb gets a comment with size delta, worst-case ΔE94 across 6 camera angles, and USDZ conformance summary. Upsert: one comment per PR, replaced on every push.
14 Apple-AR-breaking checks that usdchecker misses — metersPerUnit, JPEG progressive, palette PNG, iridescence drop-on-export. The conformance that prevents the customer email.
One workspace per client, with per-client baselines and presets. Set up with you during onboarding today rather than self-serve — there is no seat model in the product yet, and we would rather say so than sell you a toggle that does not exist.
Free CLI. Paid CI.
Run the CLI and the MCP server locally, over stdio, and every tool is free and unmetered — no key, no account, no quota. Quotas and API keys apply only to the hosted surfaces: the web app and the hosted API (including the MCP Streamable-HTTP transport). We charge for multi-tenant CI, support, and the kind of help an agency actually needs.
| plan | price | seats | jobs / month | includes |
|---|---|---|---|---|
| Free | $0 | — | — | CLI, web analyzer, MCP server, CI via the published CLI |
| AgencyPopular | $299/mo | onboarding | fair use | USDZ validator + everything in Pro; private-repo Action, Slack and per-client orgs set up with you during onboarding |
| Studio | contact us | quoted | quoted | custom recipes, white-label PR comments, multiple client orgs |
| Enterprise | custom | quoted | quoted | SSO, dedicated capacity, on-prem option, contracted availability terms |
Studio and Enterprise are quoted per engagement — email support@spatialpack.dev with your seat count and org layout and we’ll come back with a number.
Catalog Rescue is the done-for-you version: send 3 product models, get commerce-ready GLB + USDZ back within 48 hours, Quick Look verified, with per-model before/after reports. The first 3 are free and take no card; after that it is $15 per model (10-model minimum, $12 at 25+), invoiced once you have seen the work — no seats, no contract, and a sane way to bill a client for the cleanup before you put the pipeline in CI.
The questions agencies actually ask.
- Do you store our 3D assets?
- Runs in your own CI never send us the asset at all — nothing leaves your network, and on-prem (Enterprise) keeps it that way for every surface. When you hand us a file, what happens next depends on what you asked for:
- A read-only check — the readiness scorecard and the in-browser analyzer — is never stored: your file is analyzed in a temporary directory that is deleted the moment the request finishes, whether it succeeded or failed.
- A hosted optimize job is different, because we have to hand you a file back: the upload and the optimized result are stored behind signed, time-limited links so you can download them, and a daily cleanup job deletes both automatically within 7 days.
- Catalog Rescue files are on no automatic deletion clock, and we would rather say that than invent one: we keep the models you send and the files we return so we can do the work and re-send a delivery if you need it, and we remove them permanently whenever you ask — email support@spatialpack.dev and it is done.
- How is this different from Cesium ion / Threekit / RapidPipeline?
- Standards-first. Output is always GLB / glTF / USDZ — never a proprietary container. We compete on the CI gate and the validation surface, not on hosting or viewers. You can run SpatialPack in CI and ship through any runtime.
- Will agency-tier features become open-source?
- Some of it already is, and the rest converts on a published schedule — here it is per package, because they are not all the same.
@spatialpack/cli,@spatialpack/sdkand@spatialpack/mcpare MIT today — that is the toolchain you would put in a client’s CI, and MIT puts no restriction on what you do with it.@spatialpack/core, the engine, ships under the Functional Source License (FSL-1.1-ALv2), which irrevocably converts each released version to Apache-2.0 on the second anniversary of the date that version was made available. So an engine pass shipped today is Apache-2.0 two years from today, and until then you may use, modify and redistribute it for any purpose that is not a competing product. The same split is in our Terms §8. Multi-tenancy, CI infra, and support stay in the paid tier. - What does the PR comment actually look like?
- See the live demo on the homepage. That render is the real markup our CI reporter posts — byte-faithful to what shows up on your PRs.
Find out in 30 seconds.
Drop a real asset. We’ll tell you whether it survives Apple Quick Look and the web, repair what doesn’t with the same pipeline that runs in CI, and give you a shareable report — no account needed. Sign in free to download the repaired .glb.