Skip to content
Back to Blog
how-to-convert

How to Convert STL to OBJ for 3D Printing and Modelling

2026-05-17 8 min read

STL vs OBJ: What Actually Differs Between These Two Formats

STL and OBJ are both staples of the 3D world, but they're not interchangeable. They carry different kinds of data, and knowing the difference tells you when a conversion is useful versus just being busywork. An STL file is a ghost in the machine. It stores only surface geometry—a simple mesh of triangular faces described by their vertex coordinates and normal vectors. That's it. No color, no texture, no material properties. The format was born in 1987 at 3D Systems for their stereolithography machines, and its barebones nature is both its strength and its biggest weakness. A typical STL for a mechanical part might have anywhere from 50,000 to 500,000 triangles. OBJ files, created by Wavefront Technologies around the same time, are much more descriptive. Beyond just geometry, an OBJ file can point to a companion MTL (Material Template Library) file that defines things like surface color, specularity, transparency, and texture maps. OBJ also supports polygons with more than three sides (quads, n-gons) and even freeform curves, though you rarely see those in the wild. If you're just 3D printing, STL is almost always all you need. The real power of OBJ shows up in rendering, game development, and any pipeline where visual appearance is critical. When you move a model from a slicer into Blender for a product shot, or send an asset to a game engine like Unity, OBJ (or its modern cousins FBX and GLTF) gives those tools much more to work with than just raw geometry. Let's be clear: converting from STL to OBJ doesn't magically create color or texture data out of thin air. The conversion just wraps the same triangulated geometry in a different package. If you need a textured model, you still have to do the texturing work yourself in a 3D application after the conversion.

When You Actually Need to Convert STL to OBJ

Don't convert just for the sake of it. Make sure your workflow actually needs an OBJ file first. In many cases, it's an unnecessary step. The most common reason to convert is simple: software compatibility. Some modeling tools and game engines, especially older ones, just don't play nice with STL files. They might not import them at all, or they might mangle the geometry, flipping surfaces inside out. Autodesk Maya's OBJ importer, for example, is far more mature and reliable than its STL support. If you're pulling a scan or CAD export into Maya for more modeling, converting to OBJ first is a pro move that will save you headaches. Multi-part assemblies are another great reason to switch to OBJ. Imagine you have an STL of a mechanical housing with a dozen separate components all merged into one shell. In the OBJ format, you can define named groups (using the 'g' tag) that let downstream software select and manipulate those individual parts. This is a lifesaver in Blender, where OBJ groups conveniently import as separate mesh objects. Visualization studios and render farms often demand OBJ because their pipelines are built around it as a baseline interchange format. Tools like Houdini, Cinema 4D, and KeyShot 11 can open an OBJ and immediately start applying materials. An STL, on the other hand, often requires an extra step to assign a default material before any real shading work can begin. Finally, if you're putting a 3D model on a website using a library like Three.js, you'll find that OBJ is widely supported while STL is not. For web and AR applications, OBJ is a solid starting point before you eventually move to a web-optimized format like GLTF for production. But let me be blunt: if you are only sending a file to your FDM or resin printer and your slicer (Chitubox, PrusaSlicer, Bambu Studio) opens the STL without any complaints, then stop. You don't need to convert. Your work is already done.

How to Convert STL to OBJ Using CocoConvert

Using CocoConvert for this conversion is dead simple and happens right in your browser, so there's no software to install. It works for files up to 500 MB on the standard plan. First, head over to the conversion page at /convert/stl-to-obj. You'll see a big drag-and-drop area. You can pull your STL file right in from your desktop or click to open a file picker. It accepts both binary and ASCII STL files, automatically figuring out which one you've uploaded. Once the file is uploaded, a quick analysis runs, usually taking just two to five seconds for files under 50 MB. For dense meshes over 200 MB, it will take a bit longer. You'll then see a summary of the triangle count and file size. Here, you get a choice: download a single OBJ file, or get a ZIP archive with both the OBJ and a basic MTL stub. I recommend getting the ZIP; that little MTL stub defines a default grey material (Kd 0.8 0.8 0.8) and can prevent annoying 'missing material' warnings in other apps. Click Convert, and your file is ready in seconds. A 150 MB binary STL with around 2.8 million triangles should take about 25 to 40 seconds to process. Now for some honest limitations. CocoConvert does not perform mesh repair during conversion. If your source STL is a mess with non-manifold edges, holes, or inverted normals, the output OBJ will be, too. Anyone who has wrestled with a bad 3D scan knows that automatic repair is a separate, often painful, step. For that, you'll want a dedicated tool like Microsoft 3D Builder or Meshmixer. CocoConvert also doesn't simplify the mesh; a huge 500 MB STL will become a huge OBJ. If you need a smaller file, you'll need to decimate it in a tool like Blender before or after converting.

Alternative Methods: Blender, MeshLab, and CAD Tools

While browser tools are great for quick jobs, desktop software gives you the control you need for more complex projects. Blender is the Swiss Army knife for this kind of work. It's free, runs everywhere, and gives you total control. You import your STL (File > Import > STL), then export as an OBJ (File > Export > Wavefront (.obj)). The magic is in the export dialog. You can set the 'Forward Axis' and 'Up Axis' to match your target app's coordinate system and choose whether to generate an MTL file. Crucially, if your model's normals are flipped, you can fix them with a quick Shift+N in Edit Mode before you export. This is the kind of manual repair that online tools just can't do. For truly massive files, MeshLab is the heavy-hitter. This free, open-source tool is built specifically for processing huge meshes and often handles files with over 5 million faces faster and more reliably than browser-based converters. The process is simple: open the STL, go to File > Export Mesh As, and choose OBJ. The dialog gives you toggles for normals, colors, and texture coordinates. If you have access to the original CAD file from SolidWorks, Fusion 360, or FreeCAD, stop what you're doing and go back to it. Exporting OBJ directly from the source is *always* the cleanest path. It lets you control mesh refinement settings before tessellation and avoids the messy 'double-tessellation' problem (CAD to STL to OBJ), which almost always produces a cleaner mesh. For automating a batch of conversions, the open-source command-line tool assimp (Asset Importer Library) is your best friend. A single command, 'assimp export input.stl output.obj', does the trick. This is perfect for integrating into Python scripts or CI pipelines when you have dozens of files to process.

Checking Your OBJ File After Conversion

Don't just assume the conversion worked perfectly. A quick 60-second check now can save you hours of frustration later. Start with a simple visual inspection. Pop the OBJ into a lightweight viewer—Windows 3D Viewer, macOS Preview, or an online tool like 3D Viewer Online (3dviewer.net)—and just look at it. Rotate the model around. Are there weird black patches? Those are probably inverted normals. See any holes or doubled-up geometry? These problems are usually baked into the source STL, but now is the time to spot them. If you're not afraid of a text editor, crack the file open. OBJ is just plain text. In VS Code or Notepad++, you should see a 'mtllib filename.mtl' line at the top (if you chose that option), then a big block of 'v' (vertex) and 'vn' (vertex normal) lines, followed by the 'f' (face) lines. If you see faces defined before the vertices, the file is broken. For a more quantitative check, make sure the triangle count matches. The number of 'f ' lines in the OBJ file should be the same as the triangle count from your source STL. You can do a quick search in your text editor for 'f ' to count the occurrences. A big difference (more than 0.1%) means something went wrong in the parsing process. When your OBJ is headed for a 3D printer slicer, one last check is crucial: scale. Import it into PrusaSlicer or Bambu Studio and see if the dimensions are right. A classic rookie mistake is having a 50 mm part show up as 50,000 mm because of a unit mismatch. STLs are unitless, which can cause chaos. If this happens, don't panic; just scale it down by 0.001 in the slicer or re-export with better unit settings.

Optimising OBJ Files for 3D Printing vs Rendering

An OBJ file optimized for 3D printing is different from one optimized for rendering. A few targeted adjustments can make a huge difference for either workflow. When 3D printing, geometry is king. Your slicer needs a 'watertight' (manifold) mesh—no holes, no self-intersections, just clean surfaces where every edge is shared by exactly two faces. After converting, it's smart to run the OBJ through a repair tool. PrusaSlicer does this automatically on import, or you can use Meshmixer's Analysis > Inspector to find and fix problems. You also want to keep enough triangles to avoid visible faceting on curved surfaces. A good rule of thumb for an FDM printer with a 0.2 mm layer height is to have triangles no larger than about 0.1 mm on a side. For rendering, the priorities shift completely. Here, massive triangle counts are the enemy. They slow down rendering and make editing a pain. If your OBJ came from a photogrammetry scan or a high-resolution CAD export with millions of triangles, you should probably decimate it. Blender's Decimate modifier is perfect for this; setting the Ratio to 0.1–0.3 can aggressively reduce a model from 2 million to 200,000 triangles with minimal visual difference at typical camera distances, while dramatically speeding up your workflow. Material setup is the other key piece for rendering. The MTL stub from CocoConvert is a starting point, not a final product. In Blender's Shader Editor, you'll want to tweak the Principled BSDF settings—adjust Roughness, set Metallic to 1.0 for metals, and plug in a texture image if you have one. For game engines like Unity, you might need to rename the material entries in the MTL file to match your project's material library before you even import the OBJ.

Common Errors and How to Fix Them

You'll run into the same few problems over and over when converting STL to OBJ. Luckily, the fixes are usually pretty simple. By far the most common headache is inverted normals, which make parts of your model look black or see-through. This happens because the source STL had inconsistent normal data. The fix is easy. In Blender, select all your geometry in Edit Mode, then use Mesh > Normals > Recalculate Outside. In MeshLab, you can go to Filters > Normals, Curvatures and Orientation > Re-Orient all faces coherently. A few clicks and the problem is gone. Another classic problem is scale. Your model imports either tiny or gigantic. This is because STL files don't store units—is a value of '25.4' millimeters or inches? The software has to guess. If you know the original CAD tool used millimeters (like SolidWorks) or inches, you can apply a scaling factor of 25.4 (or its reciprocal) in your target application's import settings to fix it immediately. Sometimes you'll get an error about a missing MTL file. This happens when an application expects a material library alongside the OBJ. If you didn't get one from CocoConvert, or it got lost, you can create one yourself. Just make a new text file with the same name as your OBJ but with a .mtl extension. Paste these four lines into it: 'newmtl default', 'Kd 0.8 0.8 0.8', 'Ka 0.0 0.0 0.0', 'Ks 0.0 0.0 0.0'. Save it in the same folder, and the warning should go away. If you're dealing with a monster file over 300 MB, don't be surprised if a browser-based tool like CocoConvert struggles or times out. That's when it's time to switch to a desktop application like MeshLab or the assimp command-line tool. They are built to handle huge datasets without breaking a sweat. If possible, breaking a huge assembly into smaller parts before converting is an even better strategy.

Ready to convert?

Try it now — fast, secure, and private.

Convert Now →