Convert OBJ to STL — Free Online

Easily convert your Wavefront OBJ files to Stereolithography format. Secure, fast, and completely free.

Drag & drop your 3D file here

or click to browse

Convert to:
1

Upload OBJ

Drag and drop or select your OBJ file from your device.

2

Convert to STL

Choose STL as output format and click Convert Now.

3

Download File

Your newly converted STL file will be ready to download instantly.

By Huy Nguyen · ·

OBJ is the format most downloaded 3D models arrive in, and it is what Blender, ZBrush and almost every asset library will hand you. Slicers and print services ask for STL. That gap is the whole reason this page exists, and nearly everyone here is on their way to a printer.

The conversion is a narrowing. An OBJ is plain text that can carry quads and n-gons, UV coordinates, vertex normals, several named objects and a reference to a separate material file. An STL is a flat list of triangles and nothing else: no colour, no materials, no object names, no units. Knowing exactly which of those you are about to lose is more useful than being told the conversion is fast.

So we built an OBJ today that deliberately carries all of it, pushed it through the same converter this page uses, and re-opened the result in Blender 5.1 to count what arrived. Every number below is from that run.

What the test conversion kept and lost

The input was an 8,685 byte OBJ holding two named objects: a flat plate built from 6 quads, and a 32-sided pin whose two ends are single 32-gon faces. Together, 72 vertices and 40 faces, with two colour materials in a companion MTL file, a UV map on each object, 40 vertex normals, and the model authored in metres so it measures 0.12 by 0.08 by 0.06.

What went inWhat came outVerdict
40 faces: 38 quads and two 32-gon caps136 trianglesConverted, not lost. The 38 quads became 76 triangles and the two caps became 60
72 vertices at exact coordinatesThe same 72 vertices, coordinates unchangedKept. The file writes 408 vertex records, but they weld back to 72
Two named objects, BasePlate and RedPinOne single meshLost. STL has no concept of an object or a group
Two materials in a companion MTL fileNothingLost. STL cannot store colour or material at all
One UV map per object, 159 texture coordinatesNothingLost. There is no field for UVs in STL
40 vertex normalsOne flat normal per triangleReplaced. STL stores a normal per facet, not per vertex
The 0.06 height sitting on the Y axisThe same 0.06 height, now on the Z axisKept and rotated correctly, see below
8,685 bytes of text6,884 bytes of binary STLAbout 21 percent smaller here, for the reason below

Quads and n-gons become triangles, and the count is predictable

This is the most common surprise. People open the converted STL, see the face count jump, and assume the converter subdivided or added detail. It did not.

STL can only describe triangles. A four-sided face has to be split into two, and an n-sided face into n minus two. Our file had 38 quads and two 32-gon cylinder caps, so the arithmetic is 38 times 2, plus 2 times 30, which is 136. The STL came back with exactly 136 triangles, in a file of 6,884 bytes: 84 bytes of header plus 50 bytes per triangle, the binary STL layout to the byte.

Nothing else moved. Triangulate the source in Blender first and it is already 136 triangles, and it is still 136 afterwards, so no detail was added and nothing was decimated. If you want the number in advance, count your quads and n-gons and do that arithmetic.

Several objects arrive as one

Our plate and pin went in as two separately named objects and came out as a single mesh. That is the format, not a converter decision: an STL file is one unbroken list of triangles with nowhere to record that a group of them belongs together.

In practice that is often fine, because a slicer can usually detect the separate solids inside one STL and split them again. It stops being fine when the parts need different print settings or a different filament, or when you want them arranged on the plate independently. In that case export each object to its own STL from your modelling software, or use 3MF, which does keep separate objects.

Materials, UVs, and the MTL file you cannot upload

An OBJ does not contain its own materials. It carries a one-line reference to a companion MTL file sitting next to it, and that file holds the colours and any texture names. Our MTL defined a grey resin and a red paint.

We uploaded only the OBJ, which is all a single-file upload can send, and the conversion still succeeded. For an STL target that costs you nothing, because STL has no field for colour or material in the first place. A missing MTL and a present MTL produce the same STL.

If appearance is the point, STL is the wrong target. For a colour-capable printer, 3MF stores colour per object and is what colour-aware slicers expect. To keep a texture, convert to GLB or FBX instead, both of which this site offers from OBJ, and keep the OBJ as your master.

Scale: an OBJ authored in metres lands as a speck

Neither OBJ nor STL records a unit of measurement. The numbers in the file mean whatever the program reading them decides, and a slicer decides millimetres.

Our model was authored in metres, the way a Blender export or a game asset usually is, and it measures 0.12 by 0.08 by 0.06. The STL contains those identical numbers, so a slicer sees an object 0.12 mm wide, which is thinner than a nozzle.

That is not a conversion fault, and converting again will never fix it, because there is no unit in either file to correct. Scale the object by 1000 in your slicer, or set the unit scale before exporting from your modelling software. If instead the part arrives absurdly huge, the source was authored in millimetres and something has already multiplied it, so divide.

Which way up: the part arrives standing, not lying down

OBJ files are written Y-up by convention and STL files are read Z-up, so this conversion has to rotate the model. We checked whether it does by reading the raw coordinates out of both files rather than trusting a viewer.

In the source OBJ the 0.06 height sits on the Y axis. In the converted STL that same 0.06 sits on the Z axis. Re-imported into Blender the result measures 0.120 by 0.080 by 0.060 in world space with no rotation applied to the object, so it stands upright exactly as modelled.

If your part does land on its side, suspect the model rather than the conversion: a mesh that was modelled lying down stays lying down. Rotate it on the build plate, which every slicer does in one click.

File size can go either way

Our 8,685 byte OBJ became a 6,884 byte STL, about 21 percent smaller. That surprises people who expect binary to always beat text, and also people who have read that STL bloats files.

Both expectations are half right. Binary STL repeats each vertex for every triangle that uses it, with no shared vertex list, so on a dense mesh it does inflate. But an OBJ is text, and ours was spending most of its bytes on 159 UV lines and 40 normal lines that an STL simply does not need. Strip those and the comparison flips.

The practical rule: a geometry-only OBJ will usually grow on the way to STL, while a UV-mapped, normal-heavy OBJ may shrink. If you are near an upload limit, reduce the triangle count rather than guessing at format overhead.

When not to convert OBJ to STL at all

  • Your slicer may not need you to. Recent versions of PrusaSlicer and Bambu Studio open an OBJ directly, so if that is your whole pipeline, try loading the OBJ first and save yourself the round trip.
  • If you are printing in colour or in multiple materials, go to 3MF instead. STL throws the colour away, and you cannot get it back out of the STL afterwards.
  • If you want to edit the model as a real solid with dimensions and features, no mesh format helps. OBJ and STL are both triangle meshes, and converting between them will never produce the editable CAD body that STEP or a native CAD file would.
  • If the mesh has holes, flipped normals or self-intersections, converting repairs none of it. Our test copied the triangle count one for one, so a model your slicer rejected before will be rejected after. Repair first.
  • If you only need to look at the file or check its dimensions, a viewer is faster than a conversion.

Doing the same job on your own machine

  • Blender reads and writes both: File, Import, Wavefront OBJ, then File, Export, STL. The STL exporter has a scene unit option, which is the easiest place to deal with a metre-scale model before it reaches a slicer.
  • Blender will also triangulate for you if you want to see the result first. Add a Triangulate modifier, or tick the triangulated mesh option in the OBJ exporter, and the face count you see is the triangle count you will get.
  • MeshLab is the better tool when the OBJ is a heavy scan, because it opens very large meshes and has the simplification filters you will want before printing.
  • PrusaSlicer and Bambu Studio can both import a mesh and export the plate again, so a slicer doubles as a converter at the end of the chain.

Limits here, and what happens to your file

  • Free: up to 30 MB per file, 10 conversions per hour, 2 running at the same time, no account needed.
  • Pro: up to 1 GB per file, 50 conversions per hour, 5 at the same time.
  • Uploaded files and their converted results are deleted from our servers within 1 hour of upload.
  • From an OBJ this site converts to STL, GLB, GLTF, FBX, DAE, PLY and USDZ. If colour or a texture has to survive, pick one of those instead of STL.

Tested on 29 October 2026: an 8,685 byte OBJ built in Blender 5.1 with two named objects, 72 vertices, 40 faces made of 38 quads and two 32-gon caps, two materials in a companion MTL, a UV map on each object, and authored in metres. It was converted here to a 6,884 byte binary STL, and the result was re-imported in Blender to count triangles, vertices, objects, materials and dimensions, then checked against the raw coordinates in both files.

Frequently Asked Questions

Because STL stores only triangles. Every quad in your OBJ is split into two triangles, and every n-sided face into n minus two. Our test file had 38 quads and two 32-gon caps, 40 faces in total, and the STL came back with exactly 136 triangles: 38 times 2 plus 2 times 30. No detail was added and nothing was removed, the same surface is simply described with more, smaller faces.