GLB to OBJ Converter
Convert a GLB file to OBJ right in your browser, with its materials and textures. The converter reads the GLB with the same 3D engine many web viewers use, places every part where the file puts it (moves, turns, scales and mirrored parts are baked in), and writes one OBJ. Materials go into an MTL file and the textures come out as the original PNG or JPEG images, so the ZIP opens textured in 3D apps that read OBJ. You choose the units (glTF is in metres, so metres keep the numbers) and Y-up or Z-up. Draco and meshopt compressed GLBs are read too. OBJ holds one still shape, so animations are not carried: the rest pose or a frame you pick is written. Every OBJ is read back straight after it is written, and the page shows what it found. Nothing is uploaded.
100% private — everything runs in your browser. Everything runs in your browser; your GLB files are never uploaded.
File details
Size and direction
What goes in
Animation
Runs in your browser: your files are read on your device and never uploaded, and web addresses inside a model are not fetched. The 3D engine (three.js) loads from the jsDelivr CDN. You may use what you make here, including commercially, with no credit needed. The rights in your own models and textures stay as they were.
How to convert a GLB to OBJ
- Drop a GLB on the box (or a .gltf with its .bin and textures), or click Try a sample.
- Check the 3D view, the size line and the material table.
- Choose OBJ units and the up direction, and what goes in: materials and textures, normals, texture coordinates, vertex colours.
- Click Download OBJ + MTL + textures (.zip), or OBJ only.
What you can use it for
- Open a web or AR model in a 3D app or tool that reads OBJ
- Get the textures out of a GLB as plain PNG or JPEG files
- Bring a GLB into a 3D printing or CAD workflow in millimetres
- Edit a model’s mesh in a sculpting or UV tool that prefers OBJ
- Freeze an animated or rigged model in one pose as a still mesh
- Check what a GLB really contains: parts, materials, textures, size
What carries over from GLB to OBJ
| In the GLB | In the OBJ from this converter |
|---|---|
| Meshes and parts | One OBJ object per mesh, named after the node; triangles kept as they are |
| Node transforms (move, turn, scale, mirror) | Baked into the vertex positions, so every part sits where it did |
| Materials | MTL file: base colour to Kd, alpha to d, emission to Ke, roughness and metalness to Pr / Pm |
| Textures | The original PNG or JPEG images, named in the MTL (map_Kd, norm, map_Ke, map_Pr, map_Pm) |
| Texture coordinates | Written as vt, turned to the OBJ convention (glTF counts from the top of the image, OBJ from the bottom); texture offset and scale baked in |
| Normals | Written as vn (computed when the mesh has none, or after a pose change on a rigged mesh) |
| Vertex colours | Optional, as v x y z r g b |
| Animations, bones, morph targets | Not stored in OBJ: one pose is written (rest pose, or the first or last frame of a clip) |
| Cameras, lights, points and lines | Left out (OBJ faces only here) and listed in the notes |
The glTF 2.0 specification puts the texture origin (0, 0) at the upper left corner of the image, while OBJ texture coordinates count up from the bottom, so each v is written as 1 − v.
How glTF materials become MTL
| glTF material | In the MTL | Notes |
|---|---|---|
| baseColorFactor | Kd | The factor numbers are written as they are |
| baseColorTexture | map_Kd | Kd is 1 1 1 when the texture carries the colour |
| alpha (baseColorFactor) and alphaMode BLEND | d | 1 is fully opaque |
| roughnessFactor | Pr, and Ns = 1000 × (1 − roughness)² | Ns for apps that only read the classic settings |
| metallicFactor | Pm | |
| metallicRoughnessTexture | map_Pr -imfchan g, map_Pm -imfchan b | One image: roughness in green, metalness in blue |
| emissiveFactor, emissiveTexture | Ke, map_Ke | |
| normalTexture | norm | |
| occlusionTexture | Not written | No MTL slot; listed in the notes |
| Material in the sample crate | Written as | Texture slots |
|---|---|---|
| Checker | Kd 1 1 1, Ns 40, Pr 0.8 | map_Kd |
| Red | Kd 0.8 0.1 0.1, Ns 160, Pr 0.6, Ke 0.4 0 0 | – |
What our test files give
| Test file | What it checks | Triangles | OBJ objects | Materials | OBJ size | Read back the same |
|---|---|---|---|---|---|---|
| crate-textured-anim-morph.glb | Textured crate with 2 animations and a morph target | 24 | 2 | 2 | 0.04 × 0.022 × 0.04 m | Yes |
| nested.glb | Nested nodes: moved, scaled ×2, turned 90° and mirrored; two materials on one mesh; texture scaled ×2 | 24 | 4 | 2 | 4 × 13 × 6 m | Yes |
| plain-two-parts.glb | Two plain parts, two colours | 24 | 2 | 2 | 0.04 × 0.022 × 0.04 m | Yes |
Computed by the converter’s own writer from our own test files, read with the same three.js version the page uses. Every OBJ was read back by the converter’s OBJ reader with the same triangle count and size, and every material and texture named in the MTL was in the ZIP. In the nested file the texture is scaled ×2, so its coordinates in the OBJ run up to 2.
Units and size
| OBJ units | The sample crate becomes |
|---|---|
| Metres (default) | 0.04 × 0.022 × 0.04 m |
| Centimetres | 4 × 2.2 × 4 cm |
| Millimetres | 40 × 22 × 40 mm |
| Inches | 1.575 × 0.866 × 1.575 in |
glTF measures everything in metres and puts +Y up. OBJ files store plain numbers with no unit, so the converter writes them in the unit you choose.
Next steps
Need a print file? GLB to STL makes an STL from the same GLB, and OBJ to STL turns the OBJ into one. Check a print model in the STL viewer, or make a normal map for a texture with the Normal Map Generator.
Sources
Sources: Khronos glTF 2.0 Specification (metres, +Y up, texture origin at the upper left, metalness in blue and roughness in green); Library of Congress: glTF (GL Transmission Format) Family; Library of Congress: Wavefront OBJ File Format; MTL material format (Paul Bourke’s copy of the Wavefront notes: Kd, Ks, Ns 0–1000, d, map_Kd, -imfchan, illum).
More free tools
Working with 3D models?
View, convert and make 3D files with free tools that run privately in your browser, with no sign-up and no watermark.
Frequently asked questions
Is this GLB to OBJ converter free?
Yes. There is no sign-up, no watermark and no limit on how many files you convert. The conversion runs in your browser, so your GLB never leaves your device.
Are textures kept?
Yes. Each texture the materials use is written next to the OBJ as the original image from the GLB (PNG or JPEG, not re-compressed), and the MTL file points to it with map_Kd (base colour), norm (normal map), map_Ke (emission) and map_Pr / map_Pm (roughness and metalness). Download the ZIP and keep the files together.
Why does my OBJ open grey?
The colours and textures are in the MTL file and the images, not in the OBJ itself. Unzip everything into one folder and open the OBJ from there, so the 3D app finds the MTL and the images next to it.
What happens to animations?
OBJ stores one still shape, with no bones or keyframes. The converter writes the rest pose, or the first or last frame of any animation you pick under Animation. Rigged characters and morph targets are written in that pose.
Will the OBJ be the right size?
glTF files are in metres and OBJ files have no unit field, so by default the numbers stay in metres. Choose Millimetres for 3D printing or CAD, where 1 unit usually means 1 mm, and the model is scaled by 1,000.
Can it read Draco or meshopt compressed GLBs?
Yes. Both are decoded in your browser with the decoders that come with the same three.js version. Files that need KTX2 (Basis) compressed textures are not supported here yet, and the page says so.
How are glTF materials turned into MTL?
The base colour becomes Kd and its texture map_Kd, alpha becomes d, emission becomes Ke, roughness and metalness are written as Pr and Pm (and as a shininess Ns for apps that only read the older settings). MTL files describe an older lighting model, so these are close approximations.
Which up direction should I choose?
glTF is Y-up, as most 3D apps and game engines are, so Y-up keeps the model standing. Choose Z-up for CAD and 3D printing apps that treat Z as up.
Is my GLB uploaded?
No. The GLB is read and turned into OBJ by JavaScript in your browser, so it never leaves your device. Only the 3D engine itself (three.js) is loaded from a public CDN. There is no sign-up and no watermark.