How to reduce GLB file size for the web

Quick answer

To reduce a GLB or glTF file’s size, shrink the textures first, then compress the geometry. Resize large colour textures and save them as WebP, quantize the vertex data, and apply Draco or Meshopt compression. The free MicroPlugins 3D Compressor does all of this in your browser, with three presets and a before-and-after view to check the result.

Where do the bytes in a GLB file go?

A GLB holds two kinds of heavy data: textures and geometry. Knowing which one dominates tells you where to start. A .gltf holds the same data in separate files, so everything here applies to both (see glTF vs GLB).

  • Textures are the images wrapped around the model: base colour, normal, roughness, metalness, occlusion and emissive maps. In a textured product model, they often make up most of the file.
  • Geometry is the vertex data: positions, normals, texture coordinates and triangle indices, plus any skin and animation data. It dominates in dense scans, CAD conversions and untextured models.

File size is not the only cost. A 4096 × 4096 texture holds almost 17 million pixels and takes about 64 MB of graphics memory once decoded, however small the PNG or JPEG was on disk.

To see what you are working with, open the model in the 3D Viewer. Its Model panel shows the triangle count, vertices, meshes and file size.

How to shrink textures without ruining them

Textures are usually the quickest win. Two changes do most of the work.

  • Resize them. A model shown in a viewer a few hundred pixels wide rarely needs 4096 px textures. Halving the width and height cuts the pixel count by three quarters.
  • Save colour textures as WebP. Lossy WebP is typically far smaller than PNG, and often smaller than JPEG, at a similar look. glTF uses it through the EXT_texture_webp extension.

Not every texture should be treated the same. Normal, roughness, metalness and occlusion maps store data, not colours. Lossy compression bleeds values between their channels and bends the surface normals, which shows up as blotchy shading.

The 3D Compressor never encodes these data maps lossily. It keeps their bytes as they are, and only downsizes them, as PNG, when they are larger than the preset allows.

What about KTX2 textures?

KTX2 (Basis Universal) textures stay compressed in graphics memory, which helps most on phones. They need a KTX2 decoder in the viewer. The 3D Compressor keeps existing KTX2 textures as they are, but it does not create new ones.

How to compress the geometry

Quantization

By default, glTF stores every vertex position, normal and texture coordinate as a 32-bit floating-point number. Quantization stores them as 8-bit or 16-bit integers instead, through the KHR_mesh_quantization extension.

The Low and Medium presets use 14 bits for positions, which splits each mesh into about 16,000 steps along each axis. On a chair 1 m wide, a step is about 0.06 mm, so the change is usually invisible.

Draco vs Meshopt

A geometry codec goes further. It packs vertex and index data into a compact stream that the viewer decodes when the model loads. glTF has two.

FeatureDracoMeshopt
Made byGoogleThe open-source meshoptimizer project
glTF extensionKHR_draco_mesh_compressionEXT_meshopt_compression
Geometry sizeUsually the smallest for static meshesClose to Draco, especially after gzip or Brotli
DecodingSlower, with a larger WebAssembly decoder to downloadVery fast, with a small decoder
What it compressesMesh geometryGeometry, plus animation and morph targets
3D Compressor presetHighMedium
CompatibilityNeeds a Draco decoder; some desktop tools cannot read itNeeds a Meshopt decoder; some desktop importers, including older Blender versions, cannot open it

In short, pick Meshopt for fast loading and for animated models. Pick Draco when the smallest possible static mesh matters most.

Compress a GLB now

Three presets, a before-and-after view, and nothing uploaded.

When should you simplify the mesh?

Simplification removes triangles while trying to keep the shape. It is the only step that changes the geometry itself, so use it with care.

  • Good candidates are dense 3D scans, photogrammetry and CAD models exported at fine settings. They often carry far more triangles than the screen can show.
  • Poor candidates are low-poly models, where every triangle shapes the outline, and parts that must keep exact dimensions.

The High preset simplifies meshes, removing up to half of the triangles within a small error limit. Low and Medium do not simplify the mesh.

Which compressor preset should I choose?

Every preset starts with a lossless clean-up. It removes unused data, merges exact duplicates and welds identical vertices, while keeping UV sets and empty nodes. Then each preset goes further.

PresetGeometryColour texturesNormal, roughness and occlusion mapsBest for
LowQuantized, no codecWebP quality 90, up to 2048 pxLossless, up to 4096 pxClose-ups and hero products where detail matters most
Medium (default)Meshopt and quantizedWebP quality 75, up to 1024 pxLossless, up to 2048 pxMost websites and online stores
HighDraco, with up to half the triangles removedWebP quality 50, up to 512 pxLossless, up to 1024 pxThumbnails, previews, mobile pages and dense scans

Compressed files rely on glTF extensions. Low needs KHR_mesh_quantization and EXT_texture_webp, Medium adds EXT_meshopt_compression, and High needs KHR_draco_mesh_compression and EXT_texture_webp. Some desktop tools cannot open them, so keep your original for editing and test the result in the viewer you will publish with.

How to compress a GLB or glTF file with the 3D Compressor

  1. Open the 3D Compressor Go to the free MicroPlugins 3D Compressor. It runs in your browser, so there is nothing to install and no account to create.
  2. Drop in your model Drag a .glb onto the page, or a .gltf together with its .bin and texture files, or the folder that holds them. OBJ, STL, FBX and other formats are converted to GLB first. You can add several files at once.
  3. Pick a preset Choose Low, Medium or High. Medium is selected by default. With several files, you can give each one its own preset before you start.
  4. Click Compress Compression runs on your device. Large models with big textures take the longest.
  5. Check and download Click Compare to see the original and compressed model with a slider, then download the new GLB. For a batch, use Download all (.zip).

Your model is compressed by your own browser. It is not uploaded to MicroPlugins or anyone else, so you can compress unreleased products and client work.

How to check the result

A smaller file is only a win if it still looks right and still opens. Before you publish, check these five things.

  • The size. Each result shows the original size, the compressed GLB and the percentage saved. For an OBJ, STL or other non-glTF source, it also shows the size as a plain GLB, so you can see what the preset itself saved.
  • The look. Click Compare and drag the slider across the model. Zoom in on fine text, sharp edges and shiny surfaces.
  • What changed. Show what changed lists triangles, materials, textures, the largest texture size, animations, hierarchy and glTF extensions, before and after.
  • Compatibility. The notes under each result name every extension a viewer needs to open the file.
  • The real viewer. Open the file in the viewer or platform you will publish to, on a phone as well as a computer.

If a result comes out larger, the source was probably compressed already. Try a stronger preset, or keep the original. Once the file passes, see how to embed a 3D model on your website.

Frequently asked questions

What is a good file size for a GLB on a website?

There is no fixed limit, but smaller files load faster, especially on mobile data. Aim for the smallest file that still looks right at the size it is shown, and test it on a phone over a mobile connection before you publish.

Does compressing a GLB reduce its quality?

It can, depending on the preset. Low changes very little. Medium resizes colour textures to 1024 px. High also simplifies the mesh and shrinks colour textures to 512 px, which can show up close. Normal, roughness and occlusion maps are never lossy-encoded.

Is Draco or Meshopt better?

Neither wins everywhere. Draco usually makes static meshes smallest, while Meshopt decodes faster, has a smaller decoder and also compresses animation and morph targets. Both need a viewer that supports their glTF extension.

Will a compressed GLB open in Blender?

It depends on the Blender version and the preset. Some desktop importers, including older Blender versions, cannot open Meshopt files from the Medium preset. Keep your original file for editing and use the compressed copy for delivery.

Can I compress OBJ, STL or FBX files?

Yes. The 3D Compressor accepts them and converts them to GLB before compressing, so the output is always a GLB. The result shows the plain GLB size too, so you can see what compression itself saved.

Why did my file get bigger after compression?

The source was probably compressed already. A Draco or Meshopt file is decoded first, and the Low preset applies no geometry codec, so its geometry comes out larger. Try Medium or High, or keep the original.

Keep reading

Make your 3D model smaller now

Free, in your browser, with a before-and-after view. Your file stays on your device.