Free tools / OBJ → STL

OBJ to STL.

Turn Wavefront OBJ geometry into a binary STL in millimetres with Z up. Declare the units and up axis the OBJ was authored in, then check the reported dimensions before slicing.

Specification

What this tool does

Parses the OBJ text, scales from the declared unit to millimetres, rotates the declared up axis to Z and writes a binary STL. Groups become separate shells inside one file; the tool does not union or repair them.

Inputs
Wavefront OBJ text
Outputs
Binary STL in millimetres, Z up
Controls
Source units: millimetres, centimetres, metres or inches
Source up axis: Y, Z or X
Limits
Model 64 MiB per file; expanded geometry is bounded at 1,000,000 vertices
Materials, UVs and MTL data are dropped (STL has none)
Not a printability or manifold repair

Privacy: Files are parsed, previewed and written back inside your browser. Nothing is uploaded, no account is needed and no generation credits are spent.

Maintained by Bake3D · Updated

Prepare OBJ geometry for slicing

Wavefront OBJ is the common exchange format for modelling and sculpting applications. Slicers, on the other hand, mostly expect STL: a plain list of triangles in millimetres with Z pointing up. This converter performs that translation locally. It parses the OBJ text, scales the coordinates from the unit you declare into millimetres, rotates the declared up axis to Z, triangulates polygons and writes a binary STL.

Use it when a model exists only as an OBJ and your print workflow wants STL. It does not union shells, thicken walls, close holes or check wall thickness, so read the reported dimensions and run the STL checker before you trust the result in a slicer.

Declare units and up axis before converting

OBJ stores bare numbers. The same file can mean millimetres from a CAD export, centimetres from a sculpting program or metres from a game-engine pipeline, and it can have Y or Z pointing up depending on the authoring application. Wrong guesses produce a part that is 10, 25.4 or 1,000 times off, or that lies on its side on the build plate.

  1. Choose a .obj file up to 64 MiB, or use the sample wedge, which is authored in millimetres with Y up.
  2. Set Source units to the unit the authoring application used. Millimetres is the default because many print-oriented exports already use it.
  3. Set Source up axis. Blender and most CAD exports use Z up; Maya, glTF-based tools and many game engines use Y up.
  4. Check the preview and the reported width, depth and height in millimetres. If a 50 mm part reports 50,000 mm, the unit was wrong.
  5. Download the STL and open it in your slicer. Confirm the dimensions and orientation again there.

The output is always millimetres with Z up, because that is what STL consumers assume. A 0.04 × 0.02 × 0.03 metre wedge declared as metres becomes 40 × 20 × 30 mm; the same numbers declared as millimetres become a 0.04 mm speck. The conversion is deliberate and stated, never inferred from the shape.

What survives and what does not

STL holds triangles only. Quads and n-gons from the OBJ are triangulated by the loader. Normals are recomputed from the triangles; texture coordinates, material references, smoothing groups and any MTL file are dropped because STL has nowhere to put them. Object and group names are not written either: STL has no hierarchy. Separate groups become separate shells inside one STL, which is fine for printing a multi-part model as long as you understand that they are not merged.

Mirrored transforms are not a concern for a plain OBJ, since the file stores final coordinates. If the OBJ was exported with flipped faces, the STL inherits the inverted orientation. The STL checker reports inside-out and inconsistent winding, and most slicers can flip normals on import.

Very large OBJ files expand to many vertices. The converter bounds expanded geometry at one million vertices to keep the browser responsive. Decimate or split the model in a modelling application if you hit that limit.

Before you print

A valid STL is not automatically printable. Check for open edges and non-manifold geometry, wall thickness relative to your nozzle or resin process, orientation and support needs. If the model came from an image or a generator, remember that the visible surface can hide thin or intersecting geometry; the rig and geometry checklist describes inspection habits that apply to print models too.

For a full 3D object generated from a single picture, the separate studio workflow produces a textured mesh with its own STL export. For a raised graphic or a photographic lithophane, the image-to-STL and JPG-to-STL tools create rectangular reliefs directly.

Common questions

Why is my STL a thousand times too big?

The OBJ was authored in metres but declared as millimetres, or the reverse. Change Source units and compare the reported dimensions with a measurement you know. Slicers cannot detect this for you because STL has no unit field either.

Why is the model lying on its side in the slicer?

The Source up axis did not match the authoring application. Blender exports Z up by default; many other tools export Y up. Re-run the conversion with the correct axis instead of rotating a wrong file in the slicer.

Does converting make the model watertight?

No. Holes, flipped faces and intersecting shells pass straight through. Use the STL checker to measure boundary and non-manifold edges, then repair in a modelling or mesh-repair application.

How is the conversion verified?

Automated tests convert a Y-up sample wedge declared in millimetres, centimetres and inches, read the resulting STL back with an independent loader and check that its bounding box matches the expected millimetre size with Z up. They also confirm the reported dimensions match the file. These are software checks on defined fixtures, not proof that a specific print will succeed. The Blender manual’s OBJ import/export page documents the axis and scale options a common source application uses.

Other free tools

Need to generate a textured mesh, add a rig and create animation? Open the studio with 60 free credits.