File formats
STL, GLB, 3MF and G-code: what X3D accepts, the size limit on each, and the difference between a mesh we slice and a file we print exactly as you sent it.
You can upload four kinds of file: STL, GLB, 3MF and G-code. Two of those are meshes we slice for you, and two are files you already sliced that we print exactly as sent. Which kind you upload decides what you can change afterwards and how the price is worked out.
What you can upload#
| Extension | Kind | Limit on the website | What happens to it |
|---|---|---|---|
| .stl | Mesh | 100 MB | We slice it. You pick material, colour, quality, scale and infill. |
| .glb | Mesh (binary glTF) | 100 MB | We slice it. Same options as an STL. |
| .gcode | Already sliced | 40 MB | Printed as-is. Your slicer's settings are the print. |
| .3mf | Already sliced plate export | 40 MB | Printed as-is. Must contain sliced G-code. |
| .gcode.3mf | Already sliced (Bambu / Orca bundle) | 40 MB | Printed as-is. Treated as a 3MF. |
The size limits are memory limits, not policy. A mesh is read as raw bytes, but a sliced file is turned into text and a 3MF's inner G-code decompresses several times over on top of that, so a big sliced file costs far more memory than a big mesh. That is why the sliced ceiling is lower than the mesh ceiling.
Mesh or pre-sliced: the difference that matters#
| A mesh we slice (STL, GLB) | A file you sliced (G-code, 3MF) | |
|---|---|---|
| Who chooses the print settings | You choose material, colour, quality, scale and infill; we choose the rest | You did, in your slicer. We do not touch them. |
| Can you change it after upload | Yes — every option re-quotes live | No. Scale is locked at 100% and the file is treated as fully specified. |
| Where the weight comes from | A real slice where we can run one, otherwise a volume estimate | The filament figure written in the file's own header |
| Where the print time comes from | Throughput for the chosen quality and nozzle | The time estimate written in the file's own header |
| Build-volume check | Enforced — 340×320×340mm, measured in the model's best orientation | Skipped. Your slicer already fitted it to a plate. |
| Multi-colour | Not offered — a model we slice prints in the one colour you pick, at the single-colour price | Whatever your file does. Nothing is added, because the purge is already in your grams and hours. |
A mesh we slice for you#
Upload an STL or a GLB and the model is yours to configure. Material and colour set the rate per gram. Quality picks the layer height — Standard is 0.2mm, Premium is 0.1mm and costs 1.75× the rate. Scale runs from 50% to 300% and infill from 10% to 100%; both change the weight, and the quote updates as you move them.
- Units: an STL is read as millimetres. A GLB carries no unit declaration, so it is read as metres and converted — the glTF convention. If a GLB comes out a thousand times too big or too small, that is why.
- Build volume: the model's three dimensions are sorted and compared against 340 × 340 × 320, so a long thin part that only fits diagonally is still accepted. Anything larger is rejected with its measured size in the message.
- Quotes come from a real OrcaSlicer slice wherever we can run one, not a volume guess. Slicing takes ten seconds to a minute, so the first number on the page may still be the estimate; it settles once the slice returns.
- Above 35% requested infill we fall back to the estimate, because our slice runs at the profile's sparse default and stops being representative of what you asked for.
- Checkout will not sell a print we have not measured. If a slice has not landed yet, checkout answers with a 409 and the message that we price by weight and will not charge before we know it.
A file you already sliced#
A .gcode, .3mf or .gcode.3mf is not a model — it is a set of instructions for a specific printer with a specific nozzle. We read the footprint, the filament it says it uses, the estimated time and the embedded plate preview out of the file, and then print it. Nothing is re-sliced, re-oriented or re-arranged.
- Layer height, infill, wall count, supports, brim, orientation and plate position are whatever you set. None of them can be changed here.
- Scale is locked at 100%. The scale slider does not appear for a sliced file, and the quote treats it as solid rather than applying an infill factor.
- Price is worked out from the filament figure in the file, adjusted for the density of the material you select — so material and colour still change what you pay, because they change the rate per gram.
- The build-volume check is skipped, because your slicer already fitted the plate. The reported footprint can include purge lines and calibration moves, which is why we do not second-guess it.
- A file sliced for a different printer model is a hard failure at the farm, not a warning. Slice for a Bambu H2S or P2S — those are the machines in the fleet.
Importing from a model site#
Instead of a file you can paste a link. Thingiverse, MakerWorld, Printables, Cults3D, MyMiniFactory and Thangs are supported, as is a direct link to an .stl, .glb or .zip. A ZIP holding several STLs is merged into one file. Whatever comes back is then uploaded and checked exactly like a file you picked yourself, so all the rules above still apply.
Through the print API#
/api/print/ordersAPI keySubmit a file and a shipping address as multipart/form-data.
The API accepts the same four extensions and applies one 100 MB ceiling to all of them — the 40 MB sliced limit is a website limit, not an API limit. An extension it does not recognise comes back as 415 with the message: Unsupported file. Send an STL or GLB model, or an already-sliced .gcode / .gcode.3mf.
curl -X POST https://x3dstudios.com/api/print/orders \
-H "Authorization: Bearer $X3D_API_KEY" \
-F "[email protected]" \
-F "material=petg" \
-F "color=Black" \
-F "quantity=2" \
-F "recipientName=Ada Lovelace" \
-F "street1=1 Main St" \
-F "city=Austin" \
-F "state=TX" \
-F "zip=78750"Common rejections#
| What you see | What it means |
|---|---|
| Upload an STL or GLB model, or an already-sliced .gcode / .gcode.3mf. | The extension is not one of the four. OBJ, FBX, STEP and ZIP all land here. |
| That file is too large (max 40MB for 3MF) | A sliced file over the sliced ceiling. Export fewer plates, or send the mesh instead and let us slice it. |
| No sliced GCode found in this .3mf | A project save rather than a plate export. Slice, then Export plate sliced file. |
| We couldn't read a printable mesh from that file. | The mesh could not be parsed, or has no triangles. Re-export it and check it is watertight. |
| This model is …mm — larger than the 340×320×340mm build volume. | Scale it down, or split it into parts and order them together. |