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.

100% private — runs in your browser
Drop a GLB file here or click to chooseBinary glTF (.glb). A .gltf with its .bin and textures works too: select them together or open the folder.

Loading the 3D engine…

File details

Size and direction

What goes in

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

  1. Drop a GLB on the box (or a .gltf with its .bin and textures), or click Try a sample.
  2. Check the 3D view, the size line and the material table.
  3. Choose OBJ units and the up direction, and what goes in: materials and textures, normals, texture coordinates, vertex colours.
  4. 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 GLBIn the OBJ from this converter
Meshes and partsOne 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
MaterialsMTL file: base colour to Kd, alpha to d, emission to Ke, roughness and metalness to Pr / Pm
TexturesThe original PNG or JPEG images, named in the MTL (map_Kd, norm, map_Ke, map_Pr, map_Pm)
Texture coordinatesWritten 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
NormalsWritten as vn (computed when the mesh has none, or after a pose change on a rigged mesh)
Vertex coloursOptional, as v x y z r g b
Animations, bones, morph targetsNot stored in OBJ: one pose is written (rest pose, or the first or last frame of a clip)
Cameras, lights, points and linesLeft 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 materialIn the MTLNotes
baseColorFactorKdThe factor numbers are written as they are
baseColorTexturemap_KdKd is 1 1 1 when the texture carries the colour
alpha (baseColorFactor) and alphaMode BLENDd1 is fully opaque
roughnessFactorPr, and Ns = 1000 × (1 − roughness)²Ns for apps that only read the classic settings
metallicFactorPm
metallicRoughnessTexturemap_Pr -imfchan g, map_Pm -imfchan bOne image: roughness in green, metalness in blue
emissiveFactor, emissiveTextureKe, map_Ke
normalTexturenorm
occlusionTextureNot writtenNo MTL slot; listed in the notes
Material in the sample crateWritten asTexture slots
CheckerKd 1 1 1, Ns 40, Pr 0.8map_Kd
RedKd 0.8 0.1 0.1, Ns 160, Pr 0.6, Ke 0.4 0 0–

What our test files give

Test fileWhat it checksTrianglesOBJ objectsMaterialsOBJ sizeRead back the same
crate-textured-anim-morph.glbTextured crate with 2 animations and a morph target24220.04 × 0.022 × 0.04 mYes
nested.glbNested nodes: moved, scaled ×2, turned 90° and mirrored; two materials on one mesh; texture scaled ×224424 × 13 × 6 mYes
plain-two-parts.glbTwo plain parts, two colours24220.04 × 0.022 × 0.04 mYes

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 unitsThe sample crate becomes
Metres (default)0.04 × 0.022 × 0.04 m
Centimetres4 × 2.2 × 4 cm
Millimetres40 × 22 × 40 mm
Inches1.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.

See all free tools →

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.