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
| Format | Read | Write | Units | Materials |
|---|---|---|---|---|
| STL | ASCII and binary | ASCII and binary | None | None |
| OBJ | Geometry, normals, uvs, groups, MTL when supplied | Geometry, normals, uvs, groups, optional MTL | None | Names, diffuse colour, opacity, texture filename |
| PLY | ASCII, binary little-endian, binary big-endian | ASCII and binary little-endian | None | Per-vertex colour detected, not carried through |
| 3MF | Units, objects, components, build transforms, base materials | Units, one object per mesh, base materials | Declared | Names and display colour |
| GLB | Scene graph, node transforms, materials, uvs | One node per mesh, base colour materials | Metres, by specification | Base colour factor and opacity |
| glTF | Same as GLB; external .bin must be supplied | Not written (GLB is written instead) | Metres, by specification | Base colour factor and opacity |
| DXF | LWPOLYLINE, POLYLINE, LINE, CIRCLE, ARC, polyline bulges | R12 ASCII, one layer, millimetres declared | Declared in $INSUNITS when present | None |
| PNG / JPG | Height relief only, on the relief conversion pages | Not written: this is not an image tool | Millimetres, from the size you set | None |
| SVG | Filled paths and shapes, full transform stack | Paths, from a 2D source only (not from a mesh) | Millimetres when the drawing declares an absolute size | None |
- 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
- OBJ to STL
- 3MF to STL
- STL to OBJ
- GLB to STL
- PLY to STL
- SVG to STL
- GLB to OBJ
- STL to 3MF
- STL to GLB
- OBJ to GLB
- glTF to STL
- glTF to OBJ
- STL to PLY
- PLY to OBJ
- OBJ to 3MF
- 3MF to OBJ
- GLB to 3MF
- 3MF to GLB
- DXF to STL
- DXF to OBJ
- DXF to 3MF
- DXF to GLB
- SVG to DXF
- DXF to SVG
- PNG to STL
- JPG to STL
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.