Convert STL to OBJ
STL stores loose triangles with no idea which of them are joined. OBJ stores a proper mesh with shared points and normals. This tool rebuilds that structure as it converts, which is why the result behaves properly when you open it in a modelling program.
Drag a 3D file here, or.
This page is set up for STL files. Other formats we can read work here too.
The file is read on your own computer. It is never uploaded.
Your file is read by your own browser and never sent to a server. There is no upload, no account and no copy of your model anywhere but on your computer.
Why an STL needs repairing before it becomes an OBJ
An STL file writes every triangle out on its own, with all three of its corners listed again from scratch. A cube arrives as thirty-six separate points that happen to sit on top of each other. Nothing in the file says that any two triangles touch.
Load that straight into Blender and everything falls apart when you try to work with it: you cannot select an edge loop, smooth shading does nothing sensible, and moving a corner tears a hole. So before writing the OBJ, this tool joins points that sit in the same place, works out which triangles are neighbours, and makes them all agree about which side is the outside.
Normals are rebuilt, not copied
STL stores a direction for each triangle, and in a great many real files that direction disagrees with the triangle itself. Rather than trust it, the normals are calculated again from the geometry, using a thirty degree crease angle — the same threshold Blender uses by default.
The practical effect is that flat faces stay flat and curved surfaces come out smooth. Converters that simply average everything together are the reason a cube out of an STL sometimes arrives looking like a balloon.
What the OBJ will look like
You get a plain text file with a list of points, a list of normals and a list of faces. It usually opens straight into Blender, Maya, 3ds Max, Cinema 4D and every other modelling program.
There is no .mtl file, because an STL carries no colour or material to put in one. If you need a material, add it in your modelling program after opening the file.
Your OBJ will have one group, because the STL had one
An OBJ can name its objects, and a model with named parts is much easier to work with: you can select one, hide one, or give one its own material. An STL has no names and no divisions, so there is nothing to build those names from and the OBJ is written as a single object.
If your STL visibly contains several separate pieces, they are still separate pieces of geometry — they are simply all in one group. In Blender, select the object, go into Edit Mode, press P and choose By Loose Parts, and they become separate objects again. That works because the pieces do not touch, which is the same thing the open-edge count on this page is measuring.
What survives, and what does not
Kept in the OBJ file
- The exact shape
- Vertex normals, rebuilt properly from the geometry
- Shared points, so edges and loops work in a modelling program
Lost on the way
- Nothing from the STL: it holds only triangles, and all of them survive
How to convert STL to OBJ
Drop the .stl file in
Binary and ASCII STL are both read, and the tool works out which it has by looking at the file rather than trusting the name.
Let the points be welded
This is automatic and it is the main thing this conversion does. Corners that sit in the same place become one point, so the OBJ is a real mesh rather than loose triangles.
Set the output up axis to Y for a modelling program
STL from CAD and slicers is Z-up. Blender, Maya and 3ds Max expect Y-up. Setting it here saves you rotating the model at the other end.
Decide the units before you download
STL records none, so pick what the file actually was — millimetres for anything from a slicer — and write metres if the model is going into a renderer.
Download the .obj
You get one text file. There is no .mtl, because an STL has no colour or material that could go into one.
STL and OBJ compared
| Property | STL.stl | OBJ.obj |
|---|---|---|
| File contents | Binary or plain text. Binary is an 80-byte header, a triangle count, then 50 bytes per triangle. | Plain text, one item per line. Materials live in a separate .mtl file beside it. |
| Geometry | Triangles only. Curves are approximated when the file is made, and cannot be recovered. | Triangles and polygons. Also stores free-form curves, which almost nothing writes. |
| Units | None. The file stores bare numbers, and every reader has to guess what they mean. | None. Like STL, the numbers are bare, though exporters usually mean metres. |
| Colour and texture | None. There is no place in the format for a colour, a material or a texture. | Material names and texture coordinates, with the materials themselves in the .mtl file. |
| Separate objects | One body. Several parts written into one STL become one undivided lump of triangles. | Named objects and groups, each able to carry its own material. |
| Published by | 3D Systems, 1987, for the first stereolithography machines. | Wavefront Technologies, 1980s, for the Advanced Visualizer. |
| Written by | Every CAD program and every slicer, as the common denominator. | Blender, Maya, 3ds Max, ZBrush and most modelling programs. |
Questions
- Will the OBJ be bigger than the STL?
- Usually a little larger for a binary STL and much smaller for an ASCII one. OBJ is text, which costs space, but joining duplicate points removes roughly two thirds of them, which wins most of it back.
- Does it work with a 50 MB STL?
- Yes. The work runs on a background thread, so the page stays responsive the whole time and the progress bar tracks real work rather than a timer.
- Do I get a material file?
- No. STL stores no colours or materials, so there would be nothing to write into one. If your STL came from a slicer with colour information, that colour was never in the file.
- Which way up will the model be?
- The same way up as the STL, unless you change the up-axis setting. STL files from CAD and slicers are normally Z-up; Blender and most modelling programs expect Y-up, so setting the output to Y often saves a rotation later.
- Why is there no .mtl file with my OBJ?
- Because there is nothing to put in it. An STL stores triangles and nothing else, so there is no colour or material to write out. Add one in your modelling program after opening the file.
Where to go next
The other direction
Other things to do with a STL file
Other ways to get a OBJ file
Related guides and tools
- Gridfinity generatorBins and baseplates, any size, built in the browser
- Turn text into an STLType a word and print it, without drawing anything
- Turn an image into an STLA photo or a logo, turned into something you can print
- Lithophane generatorA photo printed as thickness, lit from behind
- Repair an STL that will not sliceClose the holes and separate the bad edges so a slicer accepts it
- STL to G-codeGuide
- How to convert an STL file to G-codeGuide
- Convert BLEND to OBJGuide
- Convert BLEND to STLGuide