Convert 3MF to STL

Converting 3MF to STL takes a modern print package apart and writes the triangles as the file every slicer and bureau has accepted since 1987. It is a downgrade in every respect but one: because a 3MF declares its unit, the STL that comes out is correctly scaled in millimetres, which an STL from anywhere else never guarantees.

  • Where it runs In your browser. The file is never uploaded.
  • Rebuilt STL works differently from a 3MF, so this is not the gradual degradation a lossy codec applies. What STL can express is reproduced faithfully; what it has no equivalent for does not survive at all.
  • File size limit Up to 100 MB per file, free, without an account.
  • Worth knowing Geometry only. Materials, colours, textures and animation are not carried across, and a model placed several times comes back with each copy baked into its own position.

Up to 100 files at once. Mixed formats are fine.

Something downstream will only take an STL

Nobody converts in this direction because it produces a better file. The 3MF is better in every dimension that matters — it declares its unit, it holds several named objects, it can carry colour and materials, and it is a compressed package rather than fifty bytes per triangle. Converting to STL trades all of that away.

The reason is always external. A print bureau’s upload form lists `.stl` and nothing else. A slicer shipped with a machine in 2016 has no 3MF importer. A CAD package will import a mesh but only the format it has always imported. In each case arguing is a conversation with a website, and supplying the STL is the job. What this page can usefully do is make sure the STL you supply is the one you meant.

The unit question is already answered inside the 3MF

This is the one respect in which a 3MF makes a better STL source than anything else here. The format declares its unit in the model element — micron, millimetre, centimetre, inch, foot or metre — and the reader scales the coordinates to millimetres on the way in. A part authored in inches is multiplied by 25.4 before anything is written.

So the STL lands at true size in any slicer, which is not true of a conversion from glTF (metres by convention), OBJ (no unit at all) or PLY (whatever the scanner decided). It is worth a moment’s appreciation, because scale is the single most common way a converted print file goes wrong, and this is the one path where the source knew the answer and passed it on.

A plate of arranged copies becomes one STL containing all of them

A 3MF saved out of a slicer is usually a build plate rather than a part: the object placed once, or five copies arranged with a bit of spacing, or two different components positioned to print together. Each placement is a build item with a transform, and the reader applies that transform to the vertices.

Everything found is then written into a single STL — the format has one triangle list from beginning to end — so what you get is one file containing five copies where they sat on the plate. For a bureau printing a batch that is exactly right. If you meant to send one part, delete the extra instances in the slicer and re-save the 3MF before converting, because separating them afterwards means picking shells out of an undifferentiated triangle list.

Objects built from components contribute nothing to the STL

Worth checking before you send anything. 3MF allows an object to be defined as an assembly: rather than holding a mesh, it holds a list of `<components>` naming other objects with a transform each. That is legal, it is used, and the reader here does not follow it — it walks mesh elements only.

The consequence is silent. An assembly object contributes no geometry and raises no error, so a file whose objects are all assemblies converts to an empty STL, and a file with a mix converts to a partial one with no indication that anything is missing. Compare the triangle count in your slicer against the STL before trusting it. The fix is a round trip: open the 3MF in PrusaSlicer, Cura or Microsoft 3D Builder and export a 3MF again, which flattens the assembly into meshes.

Everything the slicer wrote into the 3MF stays behind

A 3MF from a slicer is an OPC package, and most of what is in it is not geometry. Per-object print settings, support enforcers and blockers, paint-on seams and supports, modifier meshes, the printer and filament profiles, the plate definition, a preview thumbnail, and the slicer’s own metadata are all separate parts inside the archive.

None of it is read and none of it could be represented in an STL. That is the real cost of this direction and it is invisible until somebody opens the STL expecting the setup they saved. If you are sending a part to somebody else to print, say in the message what the supports and orientation were meant to be, because the file no longer says it.

Colour and materials have no field in an STL

A 3MF can carry a colour group, a base materials list and per-triangle property assignments, which is how a multi-material or painted model keeps its appearance. An STL has three floats of normal and nine of coordinates per triangle and nothing else. There is no field to put a colour in.

A handful of tools have written colour into the two spare bytes at the end of each STL triangle record over the years, in two mutually incompatible conventions, and neither is part of the format or supported here. If the model is a painted or multi-material print, the STL is not the file to print it from — keep the 3MF for the machine that can, and treat the STL as a geometry-only copy for the system that demanded one.

What the STL file itself contains

Binary, always: an eighty-byte header, a four-byte triangle count, then fifty bytes per triangle — twelve of face normal, thirty-six of vertex coordinates and two unused. The normal is recomputed from the winding order rather than carried across, because slicers derive it from the winding anyway and several ignore the stored value entirely.

There is no vertex sharing in the format, so a corner used by six triangles is written six times, and the file size follows the triangle count exactly. A 200,000-triangle plate is 10 MB regardless of how compact the 3MF was — 3MF compresses its XML, so the package it came from was very likely a fraction of that.

Handing the STL to a bureau or an older slicer

Check three things before uploading. That the bounding box matches what you expect, because a wrong unit somewhere upstream is cheaper to find now than after a quote. That the object count is right, since the plate arrangement came across whole. And that the model still slices, by loading the STL back into your own slicer rather than assuming that what went out is what went in.

That last check is quick and it catches the assembly problem above, the missing-object case, and any repair the slicer had silently been applying to the 3MF each time you opened it. A bureau will run its own repair, and a bureau’s repair is made without knowing which features of your part are functional.

When to push back and send the 3MF instead

Ask once, briefly, if the receiving end is a person rather than a form. Every current slicer reads 3MF; PrusaSlicer, Cura and Bambu Studio all take it as a first-class input, and a bureau that only accepts STL is usually running an upload validator that predates the rest of its stack. One email occasionally changes that.

Where it cannot change, supply the STL and keep the 3MF as the master. Print files accumulate decisions — the orientation that avoided a support, the modifier that thickened one wall — and none of those are recoverable from a triangle list. Regenerate the STL when the part changes rather than editing it, and the two never drift apart.

How to get an STL out of a 3MF package

  1. Re-save the 3MF from your slicer if its objects are assemblies of components.
  2. Drop the .3mf onto this page; it is unzipped and read in your browser.
  3. Load the STL back into a slicer to confirm size and object count before sending it.

3MF against STL: a described package and a bare triangle list

3MF compared with STL
3MFSTL
Full name3D Manufacturing FormatStereolithography
File extension.3mf.stl
Media typemodel/3mfmodel/stl
First published20151987
Published by3MF Consortium3D Systems
Specification3MF Core Specification
LicensingOpen standardOpen standard
Standing todayCurrentCurrent
Opens in a browserNo browserNo browser
Considered insteadOBJOBJ, PLY

Opening the result

PrusaSlicer and Cura read both 3MF and STL, so there is a way to check the result against the original without a second tool.

What each format is for

3MF is 3MF Consortium's format, published in 2015. The specification is 3MF Core Specification, and it is worth reading if the file has to outlive the tool that wrote it.

STL comes from 3D Systems and dates from 1987. Blender, PrusaSlicer and Cura all read it.

STL was published in 1987 and 3MF in 2015. The older one is generally the safer file to hand to somebody; the newer one usually does the job in fewer bytes.

3MF to STL: scale, plates and what stays behind

Are my 3MF files uploaded anywhere?

No. This conversion runs entirely inside your browser, so the file never leaves your device. You can confirm it yourself: open the network tab of your browser's developer tools and convert something. You will see the page load, plus the analytics and advertising the site is paid for with — and nothing carrying your file.

Does the STL come out at the right size?

Yes, and this is the one thing the conversion settles for you. A 3MF declares its unit, so a model authored in inches or centimetres is scaled to millimetres on the way in and the STL lands at true size in any slicer.

What happens to a plate with several copies arranged on it?

All of them are written into one STL at their plate positions, because the build placements are baked into the vertices. That is usually what you want for a bureau and it is not what you want if you meant to send one part.

Do my slicer settings survive?

No. Supports, paint-on modifiers, per-object settings, the printer profile, the plate definition and the preview thumbnail all live in slicer-specific parts of the 3MF package and none of them is read. The STL carries the shape and nothing else.

Why is my STL empty when the 3MF opens fine in a slicer?

Most likely because the objects are assemblies built from component references rather than from mesh elements. That form is legal 3MF and the reader here only walks meshes, so an assembly contributes no geometry. Re-export the model as a flattened 3MF from your slicer first.

Is the colour lost?

Yes. 3MF can carry colour groups, materials and per-triangle colour assignments, and STL has no field for any of it. If the colour is the point of the file, an STL will not deliver it and no setting changes that.

Is the file uploaded?

No. The 3MF package is unzipped and read in this browser tab and the STL is assembled locally. Nothing about the model is sent anywhere, which matters when the part is a customer’s or is under an agreement.

More about these formats