My GLB is too big for Shopify — what actually happens
The "15 MB limit" you found in a forum post is five years out of date — and the truth is more annoying than a hard cap. Shopify will take your 40 MB GLB, accept it happily, and then quietly rebuild it.
Last reviewed July 27, 2026
The actual limits, as of today
Shopify's product media requirements list 3D models as GLB or USDZ, up to 500 MB. The 15 MB number that dominates search results comes from a December 2021 changelog where the maximum was raised from 15 MB to 500 MB. So 15 MB stopped being a wall — but it did not stop mattering.
What 15 MB is now is a trigger. Shopify's docs state that models exceeding 15 MB are automatically optimized: "Model geometry and textures are optimized, while preserving the visual output of the original file." The 2021 changelog is blunter, saying the process "will greatly reduce the filesize of the model (often to around 5MB)". Shopify also converts every upload so both a .glb and a .usdz version exist, because Android and iOS AR need different formats.
Why mobile wants you well under 5 MB anyway
File size is the symptom. The constraints that actually break a product page are download time on a phone and GPU memory once the model is decoded. Shopify storefronts render GLB through Google's <model-viewer>, and the model-viewer FAQ is refreshingly direct about the second one: "Large high-res models can easily run out of GPU RAM on mobile devices."
The arithmetic is worth internalising, because it explains why a small file can still be a heavy model. A JPEG or PNG texture is compressed on disk and uncompressed in video memory. One 2048 × 2048 texture decodes to roughly 16 MB of RGBA8, plus about a third again for the mip chain — call it 21 MB. Four of those (base colour, normal, ORM, emissive) is around 85 MB of VRAM from a GLB that might be 6 MB on disk. Ten products in a collection carousel, and a mid-range Android phone starts evicting textures or dropping the canvas.
Shopify's own partner-facing 3D modelling checklist targets the delivery reality rather than the platform ceiling: "The total file size should be about 4 MB", textures "shouldn't be larger than 2048 x 2048 px" for mobile web, and "Textures should be optimized JPG files, if possible". That 4 MB figure is the number to design against — not 15, and certainly not 500.
How to check what you actually have
Before optimizing anything, find out which of the three budgets you are blowing: bytes on disk, texels in memory, or triangles. They have different fixes and most oversized GLBs fail on textures, not geometry.
- Bytes:
ls -lh model.glb. If you are over ~5 MB, keep going. - Textures: the usual culprit. A single 4096 × 4096 base-colour map is often more than half the file. Anything above 2048 on a mobile-first storefront is worth questioning.
- Triangles: the Khronos Asset Creation Guidelines treat 500k triangles as the point where an asset stops being a web asset. Photogrammetry and CAD exports routinely land in the millions.
- Duplicate data: exporters love emitting the same texture three times and the same mesh twice. Deduplication alone can take 30% off a CAD-derived GLB before any lossy step.
How to fix it — free tools first
Two open-source tools will do most of this, and you should try them before paying anyone. gltfpack (part of meshoptimizer) is the fastest route to a much smaller file; gltf-transform gives you finer control over individual passes. Which knob to reach for first is covered in reducing GLB file size.
# gltfpack: quantize + meshopt-compress geometry, resize textures
gltfpack -i model.glb -o out.glb -cc -tr -ts 0.5
# gltf-transform: explicit passes you can reason about
gltf-transform dedup model.glb a.glb
gltf-transform resize a.glb b.glb --width 2048 --height 2048
gltf-transform webp b.glb out.glb --quality 85Order matters more than people expect. Deduplicate and prune first (free wins, zero visual cost), then resize textures, then re-encode them, and only then touch geometry. Running a lossy texture pass before deduplication means you pay the quality cost on copies you were about to delete.
Staying in control
The goal is not "make the number smaller". It is to land under Shopify's 15 MB auto-optimize trigger with a file you produced and looked at, so the version customers see is the version you approved. Get to roughly 4 MB with 2048-px textures and a triangle count in the low hundreds of thousands, and Shopify passes your bytes through untouched.
For reference, SpatialPack's published leaderboard measures a median 81% gzipped-size reduction across a 103-asset public benchmark, versus about 21% for gltf-transform at its defaults — with every asset where we lose published alongside the wins at /benchmark. Whatever tool you pick, the discipline that matters is measuring the output rather than trusting the flag.
Common questions
- What is the maximum 3D model file size on Shopify?
- Shopify accepts 3D models up to 500 MB in GLB or USDZ format. However, any model over 15 MB is automatically optimized by Shopify before delivery, so the practical target is well below that — Shopify's own partner checklist recommends about 4 MB.
- Does Shopify compress my GLB automatically?
- Yes, for files over 15 MB. Shopify states that model geometry and textures are optimized while preserving the visual output of the original. You do not control the settings, so the safest path is to ship a file already under the threshold.
- Why does my 6 MB GLB still stutter on mobile?
- Because disk size is not memory size. Compressed JPEG and PNG textures decode to uncompressed RGBA in GPU memory — a single 2048 × 2048 map costs around 16 MB of VRAM plus mips. Reducing texture dimensions, not just file bytes, is what fixes mobile stutter.
- Do I need to upload a separate USDZ for iOS?
- No. Shopify converts uploads so that both a GLB and a USDZ version of the model exist, and serves the right one to web, Android, and iOS AR viewers.
Reading about it is slower than measuring it. Drop your .glb, .gltf, or .usdz in and get every blocker on this page checked against the real bytes — packaging, textures, geometry, AR parity — with the fix for each one.