Cookies for analytics and advertising
We use cookies for analytics and advertising, both sent to Google. Refusing changes nothing you can see.Read the privacy page
Converting PLY to STL gets a scanned mesh into the one format every print bureau and legacy slicer accepts. Be clear about the trade: STL holds triangles and nothing else, so the per-vertex colour that made your file a PLY is gone, and a PLY that holds points without faces cannot be converted at all.
Up to 100 files at once. Mixed formats are fine.
They convert one after another and download together as a ZIP.
PLY to STL
Photogrammetry and structured-light scanners write PLY for one reason above all others: the format lets each vertex carry red, green and blue, so the object's appearance travels with its shape without a texture atlas or a second file. That is why a scan of a carving or a face looks like the thing it came from when you open it in MeshLab.
STL, published by 3D Systems in 1987, has no colour, no materials, no attributes and no metadata. It is the triangles and the triangles only. Converting therefore reduces a scan to its silhouette in three dimensions, which is exactly right if it is going to be printed in one material and a genuine loss if anybody was going to look at it. Decide which before you convert, because the PLY is the only copy that has it.
If your PLY holds vertices and declares no faces, the conversion stops with a message saying so. That is not a gap in the converter — it is the correct answer. A point cloud is a set of samples with no surface between them, and producing a surface from it is reconstruction: a modelling operation with parameters, trade-offs and a result you have to inspect.
The work belongs in a tool built for it. MeshLab and CloudCompare both offer Poisson surface reconstruction and ball-pivoting, your scanner's own software almost certainly has a meshing step, and Open3D exposes both from Python. Run one of those, check the result, then convert the meshed PLY here. A converter that quietly guessed at a surface would produce a file that prints as something you never approved.
Binary, always. Eighty bytes of header text, a four-byte little-endian triangle count, then fifty bytes per triangle: twelve for a face normal, thirty-six for three vertices as float32, and two unused attribute bytes left at zero. The total is exactly 84 + 50n, which is also how a reader can tell a binary STL from an ASCII one.
The face normal is recomputed from the winding order of the three vertices and normalised, rather than carried from anything in the PLY. Several slicers ignore the stored value entirely because so many writers get it wrong, but writing a correct one costs nothing and the format has a slot for it. Nothing else in those fifty bytes is available to hold what the PLY had.
Neither PLY nor STL declares a unit, so the coordinates are copied through untouched and the conversion cannot get the scale wrong. It also cannot get it right, and that distinction matters more for scanned data than for anything else in this category.
A structured-light or laser scan usually comes out in millimetres because the device knows its own geometry. A photogrammetry reconstruction from photographs does not: its scale is arbitrary until you give it a reference, and a mesh that looks like a 200 mm object can carry coordinates in the single digits. Measure a feature you know the size of, apply the factor in MeshLab or your slicer, and only then upload. A bureau quoting on the wrong scale quotes on the wrong part.
A scan has holes where the scanner could not see: undercuts, the underside the object was resting on, dark or shiny surfaces that returned nothing. It also frequently has stray islands from background geometry and self-intersections where two passes were merged imperfectly.
None of it is repaired here, and nothing is merged either: the PLY's own vertex list and face indices are used exactly as the file states them, because a meshing step has already made those decisions. The STL then discards the sharing on the way out, since the format stores three full vertices per triangle regardless. Repair belongs in MeshLab's hole filling, Meshmixer's inspector or Blender's 3D-Print Toolbox, and a print bureau's upload check will reject the file until it is done.
ASCII PLY, binary little-endian and binary big-endian. The header is parsed as text even in a binary file, which is how the format is defined, and the element and property declarations are read in order so that the body can be walked with the right stride.
Scalar property types from char and uchar through short, int, float and double are all handled, including their int8 and float32 spellings. A property type outside that set stops with a message naming it rather than misreading the file. List properties are read with their declared count type, and any face with more than three corners is fan-triangulated, which is correct for the convex polygons meshing tools produce.
The vertex element is read for its x, y and z properties. Every other property declared on it — red, green, blue, alpha, nx, ny, nz, quality, confidence, intensity, and whatever custom fields your scanner writes — is stepped over so the stride stays correct and then discarded.
That is worth knowing if the PLY is your archival copy. Scan confidence values and per-vertex normals are frequently what a later processing step needs, and once the file is an STL they cannot be recovered. Keep the PLY. The STL is a derived artefact for one purpose, not a replacement.
STL is what the upload forms expect, and binary STL specifically — several services reject ASCII outright or silently mangle it. The file this converter produces is binary and needs no further preparation beyond whatever repair the mesh itself requires.
Two habits save a rejected order. Check the triangle count before uploading, since bureaus commonly cap it and a raw scan can carry millions; decimating in MeshLab to a few hundred thousand loses nothing a printer can reproduce. And check the bounding box against the size you intend to receive, because the quote is computed from the volume of what you sent.
If you are printing it yourself in PrusaSlicer, Cura or Bambu Studio, convert the PLY to 3MF instead. The unit is declared, the package is validated by construction, and the vertices are stored once rather than three times per triangle.
STL earns the conversion when the far end demands it: an upload form that lists one extension, a slicer that predates 3MF support, a vendor tool that never gained it. That is a real and common situation, and it is the only reason this page exists rather than pointing everyone at the newer format.
| PLY | STL | |
|---|---|---|
| Full name | Polygon File Format | Stereolithography |
| File extension | .ply | .stl |
| Media type | model/ply | model/stl |
| First published | 1994 | 1987 |
| Published by | Stanford University | 3D Systems |
| Licensing | Open standard | Open standard |
| Standing today | Current | Current |
| Opens in a browser | No browser | No browser |
| Considered instead | OBJ | 3MF, OBJ |
Blender reads both PLY and STL, so there is a way to check the result against the original without a second tool.
The two are aimed at different work: PLY at scanning and moving data between programs, STL at 3D printing. That is worth weighing before converting, because the reason one exists is usually the reason the other is awkward.
STL comes from 3D Systems and dates from 1987. Blender, PrusaSlicer and Cura all read it.
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.
No. STL has no colour at all, and the per-vertex red, green and blue that a scan stores in its PLY are not read. If the colour is the point of the model, an STL is the wrong destination and no converter can change that.
Your file holds points but no faces, which is what most scanners output before meshing. Turning points into a surface is reconstruction, not conversion — run Poisson or ball-pivoting reconstruction in MeshLab, CloudCompare or your scanner software first, then convert the meshed result.
Binary, always: an 80-byte header, a 4-byte triangle count, then 50 bytes per triangle. That is what print services expect and it is roughly a fifth the size of the ASCII form of the same mesh.
The coordinates are copied through unchanged, and neither format declares a unit. A photogrammetry mesh has whatever arbitrary scale the reconstruction produced, so measure a known feature and scale the model before you send it anywhere.
ASCII and both binary byte orders, with the standard scalar property types from char through double. The header is parsed on its own because it is text even in a binary file.
No. Scans are rarely closed surfaces, and every gap, island and self-intersection comes through into the STL unchanged. A print bureau will reject a non-manifold upload, so repair before converting rather than after.