Shopify, Sketchfab, a web page or an AR viewer each has a file-size limit, and Blender's exporter does not know it. You export, the GLB is 40 MB, you try Draco, then WebP, then smaller textures, export again and again, and you still do not know what the compression did to the model. SizeFit takes a budget in MB, tries the gentlest settings first, stops at the first one that fits, writes the GLB or USDZ, and measures what it cost: the shape in millimetres and the colour of every texture.
What you get
- One button, a budget: GLB or USDZ, a size in MB (1 MB = 1,000,000 bytes, the strict way stores count). SizeFit climbs a ladder from gentle to hard: as is, Draco meshes, WebP images, images at 2048, 1024, 512 and 256 px, then the mesh at 50, 25 and 10% if you allow it. The first step that fits is the file you get, and the panel lists every step with its size.
- The cost, measured: the written file is opened again and compared with the same export left uncompressed. Shape: how far the worst of 60,000 points sampled on each surface moved, in mm, and where 95% of them are. Colour: ΔE for every colour texture (1.0 is what the eye just notices); data maps (roughness, metal, normal) as a difference out of 255, also when glTF packs them into one image.
- What the file needs to open: Draco and WebP make a GLB small, but a viewer must read them: three.js, model-viewer and Babylon.js do, Godot 4 does not read Draco. The panel names the glTF extensions the file requires; turn off Web Compression and the file needs none.
- Problems said in words: an image Blender's exporter could not write as WebP is written as JPEG instead, and the report says so; a colour built through nodes that the exporter writes as the wrong image (a mask where the colour should be) is named, with the material, for GLB and USDZ alike.
- Your scene stays as it is: smaller texture copies and the Decimate modifier exist only while the file is written, and everything is put back. Each export goes into a new folder; nothing that is already there is overwritten.
Measured
- 44 production models from a CC0 library (props, furniture, statues, tools), Blender 4.2.9 and 5.2.2, budget 45% of the model's own size: 43 fitted, every one at the first step with WebP images and Draco meshes, the mesh untouched. A bust whose only mesh has shape keys was refused in words: SizeFit does not reduce shape-key meshes, and says so. The shape moved by at most 0.012% of the model's size (median 0.003%); colour textures came out at a median ΔE of 1.05 (worst 1.85; 1.0 is what the eye just notices).
- Every GLB passes the Khronos glTF Validator with 0 errors. Every USDZ opens and renders in Apple's own 3D engine (SceneKit, the one Quick Look uses on a Mac) and passes Pixar's usdchecker with ARKit rules, with one exception: a skinned mesh exported without its armature, where Blender's USD exporter writes a skeleton binding the checker rejects. SizeFit warns about that case by name: select the armature too.
- A colour built through a Mix node (a marble bust) reaches the file as its mask in both formats: SizeFit names it. In USDZ the colour difference was only ΔE 8, under any sensible alarm level; the material check catches it anyway.
Blender 4.2 to 5.2, its own glTF and USD exporters: no Node.js, no command-line tools, no AI, no cloud, no account.