Compress a 3D model
Make a model small enough to ship: re-encode the textures, fold duplicate data together, and apply Draco geometry compression. No preset throws a triangle away. Everything runs in this tab, on your machine, with nothing uploaded.
Drop a model to compress
Any of the 75 formats we read. Simplification, texture re-encoding and Draco all run here in the page.
Choose filesNothing is uploaded No account No file size limit
Formats you can compress
75 formats, every one of them read here in the browser. The format reference says what each can hold.
How it works
- 01
Drop your model in
Any of the 75 formats we read, with its textures if it has them. The viewport shows what was actually parsed, which is what will be compressed.
- 02
Pick a preset, or tune it
Low, Medium and High trade texture resolution and quantization for size, and all three keep every triangle. Open Geometry, Quantization or Texture to change any of it, including the triangles-kept slider if you do want to decimate.
- 03
Compress and compare
The result panel reports the before and after for file size, triangles, vertices and materials, and lists every pass that ran. Download it when the numbers look right.
What actually makes a 3D file big
Almost always one of two things, and it is worth knowing which before you start turning knobs. Either the file is mostly textures (a handful of 4K PNGs will outweigh any plausible mesh), or it is mostly vertex data, which is what you get from a photogrammetry scan, a CAD tessellation, or a model that was exported from a format with no vertex sharing. The panel on the right addresses both, and the result summary tells you which one it was.
Textures: resize first, then re-encode
A 4096px base-colour map on an object that occupies a tenth of the screen is wasted memory at every stage of the pipeline. Capping the long edge at 1024 cuts the pixel count by sixteen before any encoder runs. Re-encoding to WebP then does what WebP does, and the two together are usually the single biggest win available.
Geometry: weld, simplify, then compress
Welding comes first because formats like STL and OBJ give every triangle its own three vertices: a 768 KB STL can become a 17 MB GLB purely from that. Simplification uses meshoptimizer’s edge-collapse algorithm, which preserves the silhouette rather than decimating uniformly, and locks open borders so separate shells do not pull apart. Draco then entropy-codes what is left.
Where compression is the wrong answer
If the model is destined for 3D printing or manufacturing, do not simplify it: the triangles are the tolerance. If it is going into a physically based render, do not aggressively re-encode the normal maps; compression artefacts in a normal map show up as visible shading noise. Use Low in both cases, leave the triangles-kept slider alone, or just convert instead.
Common questions
How much smaller will my model get?
It depends entirely on what is making it big. A model whose weight is in its textures usually drops by 80 to 95% from resizing and WebP alone. A dense scan or a CAD tessellation is nearly all geometry, and there Draco does the work: four to eight times smaller is typical, before you simplify anything. The result panel shows the before and after so you can see which lever moved.
Will it still look the same?
Yes, at the presets. None of the three throws a triangle away: welding, deduplication and reordering change nothing you can see, and Draco only quantizes coordinates, so at Medium’s 12 bits a vertex can move by about a four-thousandth of the model’s size. The two lossy levers are yours to reach for: texture re-encoding, which is lossy below 100 quality, and the triangles-kept slider under Geometry, which is the only thing here that removes geometry.
What is Draco, and will my viewer read it?
Draco is Google’s geometry compression library, and inside a GLB it is written as the standard KHR_draco_mesh_compression extension. three.js, Babylon.js, model-viewer, Godot, Blender, Windows 3D Viewer and the online glTF viewers all read it. Unity and Unreal need a plug-in or an import step. macOS Preview and Quick Look read neither Draco nor the WebP textures, and rather than saying so they draw the model with pieces missing, which looks exactly like a broken conversion. If the file has to open on a Mac by double-clicking it, turn on “keep it readable everywhere”, or convert to USDZ, which is the format Apple actually wants. The result panel names what your file needs every time, so you never have to guess.
The compressed file looks broken in macOS Preview. Why?
Because Preview and Quick Look cannot read Draco geometry or WebP textures, and instead of refusing the file they draw whatever they did understand: half a car, a model with parts missing, a shell with nothing inside it. The file is not damaged, and the same file opened in the viewer here, in Blender or in any glTF viewer is complete. Turn on “keep it readable everywhere” before compressing and the output drops both extensions, or convert to USDZ, which is what Apple built Quick Look around.
Why is the output always GLB?
It does not have to be; you can write any format we support. But textures and Draco only exist inside a glTF document, so those options are ignored for anything else. If your target is OBJ or STL, the compressor still simplifies and welds; the file just will not benefit from the other two levers, because those formats have no way to carry them.
Is my model uploaded?
No. Simplification runs through meshoptimizer compiled to WebAssembly, textures are re-encoded by your browser’s own image encoder, and Draco compression runs in Google’s WebAssembly encoder, all of it in this tab. The only thing fetched over the network is the Draco encoder itself, and only if you leave Draco switched on.