Skip to main content
Model Mender

Reference

Supported formats and what each conversion preserves

Exactly what is read, what is written, and what is lost on the way. Where a format cannot carry something, that is stated rather than glossed over.

Read and write support

FormatReadWriteUnitsMaterials
STLASCII and binaryASCII and binaryNoneNone
OBJGeometry, normals, uvs, groups, MTL when suppliedGeometry, normals, uvs, groups, optional MTLNoneNames, diffuse colour, opacity, texture filename
PLYASCII, binary little-endian, binary big-endianASCII and binary little-endianNonePer-vertex colour detected, not carried through
3MFUnits, objects, components, build transforms, base materialsUnits, one object per mesh, base materialsDeclaredNames and display colour
GLBScene graph, node transforms, materials, uvsOne node per mesh, base colour materialsMetres, by specificationBase colour factor and opacity
glTFSame as GLB; external .bin must be suppliedNot written (GLB is written instead)Metres, by specificationBase colour factor and opacity
DXFLWPOLYLINE, POLYLINE, LINE, CIRCLE, ARC, polyline bulgesR12 ASCII, one layer, millimetres declaredDeclared in $INSUNITS when presentNone
PNG / JPGHeight relief only, on the relief conversion pagesNot written: this is not an image toolMillimetres, from the size you setNone
SVGFilled paths and shapes, full transform stackPaths, from a 2D source only (not from a mesh)Millimetres when the drawing declares an absolute sizeNone
STL
A flat soup of triangles. No units, no materials, no object names. Vendor colour extensions are not read, because they are not part of the format.
OBJ
Texture images are referenced by name only and are never loaded or written. Add the .mtl to the queue with the .obj to read materials.
PLY
Arbitrary property order and all scalar types are supported. Point clouds without faces are refused rather than guessed at.
3MF
The only launch format that records a real unit. Treated as untrusted input: bombs, traversal, entry counts and XML entities are all checked.
GLB
Node transforms are baked into vertices. Draco and meshopt compression are refused with a clear message rather than partly read.
glTF
A .gltf usually references a separate .bin. Add it to the queue alongside, or use a self-contained .glb.
DXF
Loose lines and arcs are chained into closed outlines; a chain that will not close is reported, never force-closed. Holes come from nesting under the even-odd rule, because DXF winding is not dependable. SPLINE, TEXT, DIMENSION and HATCH are listed as skipped. Binary DXF is refused rather than misread. Written as R12 with everything on layer 0, in declared millimetres.
PNG / JPG
Brightness becomes height by a stated rule, which is a deterministic transform and not depth recovery: a photograph becomes a relief of the photograph, never a model of its subject. You set the relief height, base and physical width; nothing is defaulted. Elsewhere on the site an image is treated as a texture sidecar instead.
SVG
Filled outlines are flattened, holes resolved by fill rule, triangulated and extruded to a watertight solid. Strokes, text and images are not extruded. SVG is written only from another 2D format: a mesh cannot become a drawing without choosing a projection.

A note on scope: DXF is read here to become a mesh, and written only as flat R12 output. When the drawing itself is the work — layers, dimensions, blocks — that is drafting, not conversion, and a different tool does it honestly: edit DWG and DXF drawings in a full browser CAD workspace at OpenCAD Studio.

Conversion pages

The workspace itself will convert between any of STL, OBJ, PLY, GLB and 3MF, from SVG, DXF or glTF into any of them, between SVG and DXF as 2D drawings, and from a PNG or JPG into a height relief. That is more combinations than there are pages above: a page exists where the pair has its own pitfalls worth writing down. Anything without one still works, and works identically — open the workspace and choose the output format.

Viewer pages

The same workspace, with rendering and measurement in front and exporting behind. Any format in the table above can be opened and inspected, whether or not it has a viewer page of its own.

Repair pages

The same workspace arranged for fixing a file rather than changing it: inspection in front, safe repair pre-selected, and every shape-altering change behind the measured before-and-after review. Repair runs on any mesh in the table above, whether or not it has a page of its own. Holes are never filled anywhere on this site.

Deliberately not offered

These are not missing by oversight. Each one is either impossible to do honestly today or would produce files that look plausible and are wrong, so it is held rather than shipped.

step → stl

Reading STEP needs a real CAD kernel. The only pinned, published WebAssembly build of OpenCascade is 48 MB (2.0.0-beta.b5ff984) or 63 MB (1.1.1). Measured on this hardware, instantiating the module alone took resident memory from 49 MB to 820 MB, and converting a trivial 40x30x20 box with one hole peaked at 1.19 GB for 236 output triangles. The geometry it produced was exact, so the blocker is cost, not correctness: that footprint cannot honour the sequential low-memory fallback this site promises on phones and Safari. A size-reduced custom build is the way forward and needs the OpenCascade.js Docker toolchain, which was not available in the build environment.

stl → step

Blocked twice over. It needs the same OpenCascade kernel that STEP reading needs, and it is the conversion most often misrepresented: an STL is flat triangles, so the only honest STEP output is a faceted solid with thousands of planar faces, not the smooth NURBS surfaces people usually expect from a CAD file. It will only launch labelled as a faceted solid and only once the output has been proven to re-open in a real CAD parser.

stl → dxf

A DXF is 2D. Turning a 3D mesh into one means choosing a projection or a slice plane, and the right choice depends entirely on what the visitor wants: an outline, a section, or a flattened silhouette. Shipping one arbitrary interpretation would produce files that look plausible and are wrong. A future tool would need an explicit plane picker and clear limitations before it could produce a trustworthy result.

One thing worth stating plainly: no tool can recover true NURBS surfaces from a mesh. An STL contains flat triangles and nothing else, so anything claiming to turn one back into a parametric CAD model is fitting new geometry, not recovering yours.