Free online glTF to OBJ converter
glTF to OBJ, .bin and all
Drop a .gltf and download an .obj, translated in the page itself with nothing sent anywhere. Coordinates are multiplied by a thousand — glTF is metres, OBJ is effectively millimetres — and the factor is printed rather than assumed. The other half of this page is the thing that actually stops people elsewhere: a .gltf is often just JSON pointing at a .bin and some images beside it. Supply those in the same drop — as several files, as the export folder, or zipped — and the manifest resolves against them out of memory, with no request going anywhere.
- 100% free
- No signup
- Reads the .bin
- Scale stated
- Nothing uploaded
Drag a file anywhere on this page to open it. F fits the view, W switches shading, G the grid, R spins it.
How to convert glTF to OBJ
Three steps, and one branch depending on how your .gltf was exported.
Drop the .gltf
A self-contained .gltf converts straight away. Most are not: the JSON is a manifest, and the geometry is in a file next to it. The next step is about handing over the rest of the set.
If it names a .bin, drop that too
Ctrl- or shift-click the .bin and the images in the same dialog, or throw the whole export folder at the page, or a zip of it. Everything you give it becomes the pool the manifest is resolved against — held in memory, never requested from a server. Re-exporting as .glb also works and is still the better thing to send other people.
Download the OBJ
Text, one group per mesh, UVs kept, coordinates multiplied by a thousand on the way — glTF counts in metres and OBJ counts in nothing, which in practice means millimetres.
Technical specifications
| Reads | .gltf — embedded, or split across a .bin and image files |
|---|---|
| Multi-file | Pick the files together, or drop the folder or a .zip; nothing is fetched |
| Also reads | .glb — the binary form, which is always self-contained |
| Writes | .obj — text, one group per mesh |
| Unit | Metres in, millimetres out — factor ×1000, printed in the panel |
| Kept | Geometry, UV coordinates, mesh names |
| Lost | PBR materials, textures, animation, the scene tree |
| File size | No fixed limit — past 100 MB you are told what it will cost this tab, then it opens |
Frequently asked questions
Why does my .gltf not open?
Almost always because it is a manifest rather than a model, and the remedy is to supply the rest of it. The specification lets the geometry live in a separate .bin and the textures in separate images, with the .gltf holding relative paths to them — a sensible layout on a web server, and one this converter accepts as long as the pieces are in the same drop. The .glb form embeds everything and needs none of that.
Why is my model a thousand times bigger?
It is not; the units changed and OBJ cannot say so. glTF is metres by specification, OBJ declares nothing at all and is treated as millimetres by nearly everything that reads it, so a 0.042 m model becomes a 42 mm one. The panel shows the factor. If your destination interprets OBJ units differently, the number to scale by is on the page.
What happens to the PBR materials?
They do not survive, and the honest reason is that the two formats do not describe the same thing. glTF materials are metallic-roughness with texture maps for base colour, normals, occlusion and emission; OBJ materials are Phong values in a separate .mtl file with no concept of any of it. Since a single download cannot carry a .mtl anyway, nothing is written rather than something wrong being invented.
Are the animations lost?
Yes, necessarily. OBJ has no time axis — no skeleton, no keyframes, no morph targets. A glTF with animation converts to the mesh in its rest pose. If the animation is the point, the format to stay in is glTF, and the reasonable move is to repackage rather than convert.
Draco compression is mentioned in an error.
Some glTF files compress their meshes with the KHR_draco_mesh_compression extension, which needs a separate WebAssembly decoder — around a megabyte that every visitor would download to serve the few files that use it. This page does not ship it. Re-exporting without Draco produces a larger file that opens everywhere, including here.
Is anything uploaded?
No. The JSON is parsed and the OBJ written in this tab. Nothing crosses the network in either direction.
About a format that is sometimes a file and sometimes a folder
glTF comes in two shapes and the extension does not always tell you which you have. The .gltf form is JSON, and the specification lets it either embed its data as base64 or reference external files — a .bin for the vertex buffers, PNGs or JPEGs for the textures. Both are valid. On a web server the split version is the better one, since the browser can fetch the pieces in parallel and cache them separately. Emailed to somebody as a single attachment, it is a manifest describing files they do not have — which is why the useful thing a converter can do is accept the whole set rather than lecture about it.
The .glb form solves this by packing the JSON and every buffer into one binary file, and it is what you should send whenever the recipient is a person rather than a server. The confusion is worth naming because it produces the single most common complaint about glTF — "the file is broken" — when the file is fine and merely incomplete. Incomplete is a fixable state: give it the missing pieces and it is a model again.
If your destination is a modelling package this OBJ is the right landing. If it is a printer, the STL route adds the watertight check, and if you simply want the whole thing in one portable file, packing it as GLB loses nothing at all.
Where the conversion happens
Every number on this page is worked out by JavaScript running in the tab you are reading it in. The model you open is read straight off your own disk — it is never uploaded, logged or kept, which is also why these tools carry on working after you disconnect from the network.
One clause specific to this page: a .gltf is text, and text files carry more than geometry — generator strings, asset names, sometimes a copyright line naming the client. None of it is transmitted; the whole exchange happens between you and this page.