How to use it
- Drop a .3mf file on the page or choose it. It is unpacked in a background thread of this tab – nothing is uploaded.
- Check the object list: name, triangle count and the width × depth × height of each build item in millimetres, plus the bounding box of the whole build.
- Rotate the 3D preview by dragging, zoom with the scroll wheel or a pinch, press 0 to reset the view.
- Pick the export unit (millimetres, or the model’s own unit if your slicer expects it) and, for builds with several objects, one merged STL or one STL per object in a ZIP.
- Click “Build STL file”, then download. The file name is taken from the 3MF.
Example
A 3MF written in centimetres contains one 1 × 1 × 1 cube mesh (8 vertices, 12 triangles). A second object places that cube twice through components – once at the origin and once moved by 2 cm in x – and the build item shifts the pair by another 0.5 cm. The converter resolves the components and transforms, converts to millimetres and reports 24 triangles in a bounding box of 30 × 10 × 10 mm (x from 5 mm to 35 mm). The binary STL is 84 + 24 × 50 = 1,284 bytes.
How the conversion works
The package is read with size caps enforced before anything is inflated (100 MB file, 200 MB per part, 256 MB in total), so a malformed or “zip bomb” file is refused early. The root model part is located through _rels/.rels, falling back to 3D/3dmodel.model. Each build item is resolved recursively: a mesh object contributes its triangles, a components object contributes its children with their transforms composed on top of the parent’s. 3MF transforms are 4 × 3 matrices written row-major, applied to row vectors:
transform = m00 m01 m02 m10 m11 m12 m20 m21 m22 m30 m31 m32
x' = x·m00 + y·m10 + z·m20 + m30
y' = x·m01 + y·m11 + z·m21 + m31
z' = x·m02 + y·m12 + z·m22 + m32
mm = unit × { micron 0.001, millimeter 1, centimeter 10, inch 25.4, foot 304.8, meter 1000 }A mirrored transform (negative determinant) flips the triangle winding so the exported normals keep pointing outwards. Each STL facet gets the unit normal of its triangle, the three vertices as 32-bit floats and a zero attribute word. Objects of type support, surface or other and empty meshes are listed as skipped instead of being exported silently. The preview is a small WebGL renderer with flat shading; above 1.5 million triangles it is skipped to keep the page responsive while the export still includes everything.
Sources: 3MF Consortium – Core specification, 3MF Consortium – Production extension, Library of Congress – STL (binary) format description.
Questions
- Why is my exported model 10 or 25.4 times bigger or smaller than expected?
- STL has no unit. If the 3MF was saved in centimetres or inches, the default export converts to millimetres (× 10 or × 25.4). Choose "Model unit" if your slicer is set to interpret the file in that unit instead.
- Will colours, multi-material assignments or my print profile survive?
- No. STL stores only triangles. Colours, painted regions, materials, names and slicer settings exist only in the 3MF. Keep the original 3MF if you need them.
- The converter says the file needs an unsupported extension. What now?
- Beam lattices, slice stacks, encrypted (secure content), boolean, displacement and volumetric objects cannot be represented as a plain mesh here, so the file is rejected rather than exported with parts missing. Export the model from the authoring software as a mesh first.
- Can I open a 3MF from Bambu Studio or PrusaSlicer?
- Yes – both store objects in separate parts via the Production extension, which is supported. Modifiers, supports and plate settings are not geometry and are skipped or listed as not exported.