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 (Stereolithography) and OBJ (Wavefront Object) are both common 3D file formats, but they serve somewhat different purposes and carry fundamentally different data. Understanding the distinction helps you decide when a conversion is actually worth doing. STL files store only surface geometry — specifically, a 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 designed in 1987 by 3D Systems specifically for stereolithography machines, and its simplicity is both its strength and its limitation. A typical STL file for a moderately complex mechanical part might contain anywhere from 50,000 to 500,000 triangles. OBJ files, developed by Wavefront Technologies in the late 1980s, support a broader data set. Beyond geometry, an OBJ file can reference an accompanying MTL (Material Template Library) file that defines surface colors, specularity, transparency, and texture map paths. OBJ also supports polygonal faces with more than three vertices (quads, n-gons), as well as freeform curves and surfaces — though the latter are rarely used in practice. For 3D printing alone, STL is usually sufficient. Where OBJ earns its place is in rendering, game asset pipelines, and any workflow where visual appearance matters. If you are moving a model from a slicer into Blender for a product visualization, or handing assets to a game engine like Unity or Unreal, OBJ (or better yet, FBX or GLTF) gives downstream tools something to work with beyond raw geometry. One practical caveat: converting STL to OBJ does not magically add color or texture data that was never there. The conversion preserves what the STL contained — triangulated geometry — and packages it in OBJ format. If you need a textured model, the texturing work still needs to happen in a 3D application after conversion.

When You Actually Need to Convert STL to OBJ

Not every project requires a format change. Before converting, it is worth confirming that OBJ is genuinely what your workflow needs. The clearest use case is software compatibility. Some older modelling tools and game engines import OBJ but not STL, or they import STL poorly — ignoring face normals, for example, which can flip surfaces inside out. Autodesk Maya's OBJ importer is mature and reliable; its STL support is more limited. If you are bringing a scan or CAD export into Maya for further modelling, converting to OBJ first often saves troubleshooting time. Another common scenario is multi-part assembly visualization. Suppose you have an STL of a mechanical housing with 12 separate components merged into a single shell. In OBJ, you can define named groups (using the 'g' tag in the file) that allow downstream software to select and manipulate individual parts. This is particularly useful in Blender, where OBJ groups import as separate mesh objects within a single collection. Render farms and visualization studios frequently require OBJ because their pipeline tools — Houdini, Cinema 4D, KeyShot — treat it as a baseline interchange format. KeyShot 11, for instance, can open OBJ files directly from its File > Import menu and immediately apply materials, whereas STL imports require an extra step to assign a default material before any shading work can begin. Finally, some web-based 3D viewers and augmented reality platforms accept OBJ but not STL. If you are embedding a product model on a website using Three.js or a similar library, OBJ with a companion MTL file is a practical starting point before moving to GLTF for production. If you are purely printing on an FDM or resin printer and your slicer (Chitubox, PrusaSlicer, Bambu Studio) opens STL without complaint, there is no reason to convert at all.

How to Convert STL to OBJ Using CocoConvert

CocoConvert handles STL to OBJ conversion entirely in the browser — no software installation required. The process is straightforward and works for files up to 500 MB on the standard plan. Start by navigating to the conversion page at /convert/stl-to-obj. You will see a drag-and-drop upload zone. You can drag your STL file directly from your file manager, or click the zone to open a standard file picker. Both binary STL and ASCII STL formats are accepted; CocoConvert detects the variant automatically. Once the file uploads, a brief analysis runs — typically two to five seconds for files under 50 MB, longer for dense meshes above 200 MB. After analysis, you will see a summary showing triangle count and file size. At this stage you can choose whether to download a single OBJ file or a ZIP archive containing both the OBJ and a basic MTL stub. The MTL stub defines a default grey material (Kd 0.8 0.8 0.8) so that importing applications do not throw a missing-material warning. Click Convert, and the output file is ready to download within seconds for small files. For a 150 MB binary STL with roughly 2.8 million triangles, expect about 25 to 40 seconds of processing time. A few honest limitations worth knowing: CocoConvert does not perform mesh repair during conversion. If your STL has non-manifold edges, holes, or inverted normals, those issues will carry through to the OBJ. For mesh repair, tools like Microsoft 3D Builder (free, Windows) or Meshmixer's Analysis > Inspector function are better suited. CocoConvert also does not decimate or simplify meshes during conversion — a 500 MB STL will produce a comparably large OBJ. If you need a lighter file, run decimation in Blender (Modifier > Decimate) before or after converting.

Alternative Methods: Blender, MeshLab, and CAD Tools

Browser-based converters are convenient, but there are situations where desktop tools give you more control over the output. Blender (free, cross-platform) is the most flexible option. Import your STL via File > Import > STL, then export via File > Export > Wavefront (.obj). The export dialog gives you meaningful options: you can enable or disable 'Write Materials' (generates the MTL file), set 'Forward Axis' and 'Up Axis' to match your target application's coordinate system, and choose whether to export the full scene or only selected objects. If your model arrives in Blender with flipped normals, run Mesh > Normals > Recalculate Outside (Shift+N in Edit Mode) before exporting. This is the repair step CocoConvert and most online converters skip. MeshLab (free, open source) is purpose-built for mesh processing and handles very large files efficiently. Open your STL, then go to File > Export Mesh As, choose OBJ from the format dropdown, and confirm. MeshLab's export dialog lets you toggle vertex normals, vertex colors (if present), and texture coordinates. For meshes with more than 5 million faces, MeshLab tends to outperform browser tools in both speed and reliability. If your STL originated from CAD software — SolidWorks, Fusion 360, FreeCAD — going back to the source is sometimes the cleanest path. Fusion 360 can export OBJ directly from File > Export, where you can also control mesh refinement settings before the tessellation step. This avoids the double-tessellation problem (CAD to STL to OBJ) and often produces a cleaner mesh. For automated batch workflows, the open-source command-line tool assimp (Asset Importer Library) handles STL-to-OBJ conversion with a single command: 'assimp export input.stl output.obj'. This integrates easily into Python scripts or CI pipelines when you are processing dozens of files at a time.

Checking Your OBJ File After Conversion

A converted file is not necessarily a correct file. Running a quick validation after conversion catches problems before they surface mid-project. The first check is a visual inspection. Open the OBJ in a lightweight viewer — Windows 3D Viewer, macOS Preview, or the free online tool 3D Viewer Online (3dviewer.net) — and rotate the model to look for obvious surface errors: dark patches indicating inverted normals, holes where faces are missing, or geometry that appears doubled. These issues are usually inherited from the source STL rather than introduced by conversion, but it is better to find them now. Next, verify the file structure if you are comfortable with a text editor. OBJ is a plain-text format. Open it in VS Code or Notepad++ and check the first few lines. You should see 'mtllib filename.mtl' (if a material file was generated), followed by 'v' lines (vertex coordinates), 'vn' lines (vertex normals), and 'f' lines (face definitions). If the file starts with 'f' lines before any 'v' lines, the file is malformed. For a quantitative check, confirm that the triangle count in the OBJ matches what you expect from the source STL. Each face line ('f') in the OBJ represents one triangle (assuming the STL was all-triangles, which it always is). A quick grep or search for the number of 'f ' occurrences should match the triangle count shown during conversion. A significant discrepancy — more than 0.1% — suggests something went wrong during parsing. Finally, if the OBJ is destined for a slicer, import it into PrusaSlicer or Bambu Studio and check that the bounding box dimensions match the original STL. Coordinate system mismatches between STL (which has no defined units) and OBJ are a common source of scale errors. If your 50 mm part arrives as 50,000 mm, the converter interpreted millimetres as micrometres or similar — simply scale by 0.001 in the slicer or re-export with explicit unit handling.

Optimising OBJ Files for 3D Printing vs Rendering

The ideal OBJ configuration differs depending on whether the file is heading to a slicer or a rendering application, and a few targeted adjustments can meaningfully improve results in each case. For 3D printing, geometry integrity matters more than anything else. Slicers need a watertight (manifold) mesh — every edge must be shared by exactly two faces, and there must be no self-intersections. After converting, run the OBJ through PrusaSlicer's automatic repair (it runs on import) or use Meshmixer's Analysis > Inspector, which highlights non-manifold edges in red and offers a one-click fix. Keep the triangle count high enough to preserve surface detail: for a smooth curved surface on an FDM printer with a 0.2 mm layer height, you generally need triangles no larger than about 0.1 mm on a side to avoid faceting that shows up in the print. For rendering, the priorities shift. Dense triangle meshes are harder for subdivision surface workflows and slower to render in path tracers. If your OBJ came from a photogrammetry scan or a high-resolution CAD export with millions of triangles, consider running a decimation pass in Blender (Add Modifier > Decimate, set Ratio to 0.1–0.3 for aggressive reduction) and then manually adding edge loops where sharp features need to be preserved. A model reduced from 2 million to 200,000 triangles will render significantly faster with minimal visual difference at typical camera distances. Material setup is the other rendering consideration. The MTL stub that CocoConvert generates is a starting point, not a finished material. In Blender's Shader Editor, replace the default Principled BSDF settings — set Roughness to something between 0.2 and 0.6 depending on the surface, adjust Metallic to 1.0 for metal parts, and connect a texture image to the Base Color input if you have UV maps. For game engines, Unity expects OBJ materials to follow a specific naming convention that maps to its Standard Shader, so rename material entries in the MTL file to match your project's material library before importing.

Common Errors and How to Fix Them

A handful of problems come up repeatedly when converting STL to OBJ, and most have straightforward solutions. The most frequent issue is inverted normals, where surfaces appear black or transparent in the target application. This happens because STL stores normals per-face but some exporters write them inconsistently. In Blender, select all geometry in Edit Mode, then use Mesh > Normals > Recalculate Outside. In MeshLab, go to Filters > Normals, Curvatures and Orientation > Re-Orient all faces coherently. Either approach resolves the majority of normal problems in under a minute. Scale errors are the second most common complaint. STL files have no embedded unit information — a value of 25.4 could mean 25.4 mm or 25.4 inches depending on what the originating software assumed. OBJ inherits this ambiguity. If your model arrives at the wrong scale, check what unit system the original CAD tool used. SolidWorks defaults to millimetres; some older tools default to inches. Applying a scale factor of 25.4 (or its reciprocal) in the import settings of your target application usually resolves it immediately. Missing MTL file errors appear in applications that expect an MTL alongside the OBJ. If CocoConvert generated only the OBJ, or if the MTL was not included in a download, you can create a minimal MTL manually. Create a text file named the same as your OBJ but with a .mtl extension, and add these four lines: '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 as the OBJ and the missing-material warning will disappear. For very large files — above 300 MB — browser-based converters including CocoConvert may time out or produce incomplete output. In these cases, MeshLab or the assimp command-line tool are more reliable choices. Break extremely large assemblies into individual parts before converting if possible, then reassemble in the target application.

Ready to convert?

Try it now — fast, secure, and private.

Convert Now →