X3DStudios

Multi-colour printing

Up to eight colours from a plate you sliced, a Bambu Studio or OrcaSlicer project, or a model generated here: how each is checked and priced, the $25 second-AMS fee, and what cannot print in colour.

The farm prints multiple colours the way a Bambu AMS does: one nozzle, four trays per unit, and a filament change whenever the plate moves from one colour to the next. Up to eight colours, which is two units. Colour reaches a printer three ways, and in all three the price is a real slice of the print in those colours rather than an estimate, so colour costs what its filament changes cost: the purge each one throws away and the machine time it burns.

RouteWho slices itPrice fromColours counted
A plate you sliced (.gcode.3mf)You. We print it exactly as exported.The filament and time in its headerThe filaments in its header
A Bambu Studio or OrcaSlicer project (.3mf)We do, one plate at a time, in the project's own coloursOur slice of every plateThe filaments that lay down plastic
A model generated in the StudioWe do, after painting it with the colours read off its textureOur slice of the painted modelThe filaments that lay down plastic
Five to eight colours on any route adds the $25 second-AMS fee once per order line.

A project in its own colours#

A Bambu Studio or OrcaSlicer project already says what prints where: it carries a filament table, a filament for every part and modifier, and the paint on every painted triangle. Upload the project .3mf at /print as you saved it. The page lists the colours it assigns, each with its slot number and material, and offers Print in N colours or One colour instead. Colour is the default, as it is for a plate you sliced.

  1. 1
    The upload reads the project

    The filament table, the filament each part prints in, and the paint states are read in the same pass that measures the mesh. That reading is an estimate. The slicer then plans the project plate by plate before anything is sliced, and that plan is what decides whether colour is possible: a layer colour change, more than eight filaments, or two filament types on one plate (even PLA with PLA-CF) rule it out, and the card says which.

  2. 2
    Each plate is sliced in its own colours

    In the background, one plate at a time, with the project's own filaments, parts and paint on our standard print profile. The page shows which plate it is on and a clock. A small project takes under a minute; one with many plates can take several. Every finished plate is kept, so an interrupted run carries on where it stopped.

  3. 3
    The slice decides

    A filament counts if it laid down plastic on some plate. With two or more, colour is offered at the price that slice measured: its grams at the project's plastic's rate, and its hours, purge and changes included. With fewer than two the project prints in one colour, and the page says so.

  4. 4
    You order

    Add to Cart and Print & Ship stay closed while colour is chosen and the slice is still running. One colour instead can be ordered as soon as its own weighing finishes, which for a project is one slice per plate, at the size the project was laid out.

  • In colour the project prints at 100% scale on our standard 0.2mm profile, in its own plastic, keeping its parts, modifiers, filament assignments and paint. Its project-wide print settings are not used. Those controls are locked on the page. One colour instead unlocks material and infill, but a project still prints at 100% scale, because it is printed plate by plate as laid out.
  • Each plate prints from one filament type, as your slicer names it. A plate that uses two types cannot print in colour, even PLA with PLA-CF, though both are PLA underneath.
  • Different plates may use different types of one base plastic, such as PLA on one plate and PLA-CF on another, or PETG and PETG-CF. Each plate prints in its own type, and the order is priced at that plastic's rate, PLA's or PETG's. A project with two base plastics, such as PLA on one plate and PETG on another, cannot print in colour.
  • The farm prints a multi-plate project as one job per plate, each sliced again from your original file and loaded with that plate's colours.
  • Checkout never turns a colour order into a single-colour one. If the slice is still running it says so and waits; if colour turned out not to be possible it says why and the item has to be ordered again in one colour.
What the project doesColourWhy
Uses two filament types on one plate, such as PLA and PETG, or PLA and PLA-CFNot offeredEach plate is sliced and printed from one filament type, even when both are PLA underneath.
Uses different base plastics on different plates, such as PLA on one and PETG on anotherNot offeredA colour order is priced as one plastic. PLA on one plate and PLA-CF on another is fine, at PLA's rate.
Changes colour at a set layer heightNot offeredOnly filaments assigned to parts and painted areas are printed in colour.
Switches filament with a height-range modifierNot offeredThe same reason.
Has more than eight filaments that printNot offeredEight is two AMS units.
Assigns one filament, or only one lays down plasticNot offeredIt is a one-colour print.
Colours parts with 3MF colour groups and no filament tableNot offeredAssign the colours to filaments in your slicer and upload the saved project.
Every one of these can still be printed in one colour, and the page gives the reason in plain words.
POST/api/multicolor-sliceSigned in

Make sure a project's colour slice is running, and wait up to about four and a half minutes for it. Answers { pending: true } if it is still going, { deliverable: false, reason } when colour is not offered, or the slice itself.

GET/api/generation-colours?generationId=…Signed in

Read-only. Where the colour slice is (status pending, slicing, ready, failed or not-offered), the plates measured so far, the reason when colour is not offered, and the slice once it is ready. This is what /print polls every five seconds.

A ready project slice
{
  "deliverable": true,
  "source": "project",
  "colorCount": 2,
  "palette": ["#1F1F1D", "#F5F5F5"],
  "slots": [1, 3],
  "materials": ["PLA", "PLA"],
  "plates": [{ "plate": 1, "slots": [1, 3] }, { "plate": 2, "slots": [3] }],
  "filamentCm3": 42.6,
  "perFilamentCm3": [30.1, 12.5],
  "seconds": 9240,
  "layers": 180
}

A model generated in the Studio#

On the design page this happens by itself as soon as a design is ready: nothing needs pressing. The colours are read off the model's own texture, each triangle is painted with the filament its colour maps to, and the painted model is sliced. If two or more filaments lay down plastic, Multi-colour is selected, at the price that slice measured, with the single-colour price beside it. If not, Single colour stays selected and the page says why. Reading the colours takes a second; the slice takes a minute or two, and both are kept on the design, so coming back later shows the answer at once without doing it again. A project you uploaded at /print also appears in the design page's History, but it is not offered in colour there, because that page lets scale, material and quality change and a project in colour cannot. The page links back to /print, where the project is ordered in its colours, and it still prints in one colour from the design page.

  • While the colour price is being measured, Add to Cart and Print & Ship wait and say "Pricing the colour print", so a design in several colours is never sold at the one-colour price by accident. "Buy in one colour instead" beside them chooses Single colour and lets you order straight away.
  • Your own choice stands. Pick Single colour, or a filament colour, before the design is ready or while the check runs, and its answer will not switch you to Multi-colour; the Multi-colour option still shows its price, and you can switch either way.
  • One design is never in the slicer twice at once: the page, a second tab and our own background check share one slice. An answer that came back no is kept for a week, so opening the design again does not slice it again.
  • We slice one of your designs in colour at a time by ourselves, and only once it has been open a few seconds. A design you open while another is in the slicer is priced in colour when you press Multi-colour, or later by our background check.
  • If the check cannot finish, because the slicer is busy or the request gave up, the buttons come back with Single colour selected and the page says so. Pressing Multi-colour runs the check again.
  • If the slicer took the design and could not finish it in colour, opening the design again does not start over by itself for half an hour, and longer each time it happens again. Pressing Multi-colour tries again straight away, and counts as one of your 20 colour checks an hour.
  • Checkout prices what you order from the slice we stored, never from the page. A colour order for a design with no colour slice on file is refused rather than printed in one colour.

The count is detected, never asked for. Every triangle's colour is read from its patch of the texture (falling back to vertex colours, then the flat material colour) and weighted by its area; faces pointing down at the very base, which the generator never sees, do not count. Colours are compared in a perceptual colour space, so a black and a navy stay apart while two near-whites merge. The surface is split into many small colour groups and merged back down: two groups are one filament when they are the same colour, or when one is a shadow or highlight of the other and the model itself agrees, because the darker part is scattered across the surface the way baked lighting is, or fades into the lit part instead of meeting it at a hard edge. A colour covering 5% of the surface or more is kept. A smaller one, down to 0.4%, is kept when it is a solid patch of a colour of its own, such as a figure's eyes or cheeks, and dropped when it is scattered specks or only the soft edge between two kept colours. Each colour is reported as it looks in light, not darkened by its own shadow. The result is capped at eight, and each triangle is then painted with the filament it matches once lighting is allowed for, so a shaded white still prints white.

POST/api/detect-colorsSigned in

Count the distinct filament colours in a generated model and return its palette.

Request
generationIdstringrequired
The generation to analyse. It must be yours and its model must be in managed storage.
Response
{
  "colorCount": 3,
  "palette": ["#2f6f4e", "#e8e2d0", "#8c2f2f"],
  "detectedAt": "2026-09-09T12:00:00.000Z",
  "cached": false
}
  • 401 Unauthorized — you are not signed in.
  • 429 Too many analyses — try again shortly. The budget is 30 per hour per account.
  • 400 generationId required — the body carried no generation id.
  • 404 Generation not found — no such generation of yours, or it has no model file.
  • 409 This model is not in managed storage — a model we cannot fetch cannot be sampled.
  • 410 The model file is unavailable — the stored object could not be read.
  • 422 Could not read colours from this model — no texture, vertex colours or material colour to sample.
The count and the price come from the slice, never the request
Every checkout path re-reads the colour count from the stored slice on the generation and re-quotes from it. The number a page sends is for display only, so a tampered request cannot buy an eight-colour print at a one-colour rate, or skip the second-AMS fee.

A plain STL cannot be printed in several colours, and no option on the site will make it one. Colour needs geometry assigned to filaments, and an unpainted mesh has no colour regions. To print your own model in several colours, assign or paint the colours in your slicer and upload the project, or slice it and upload the plate.

A plate you sliced yourself#

  1. 1
    Paint the model in Bambu Studio or OrcaSlicer

    Assign regions to filaments with the colour painting tool. Up to eight filaments: four fit one AMS, and five to eight need the second unit, which adds the $25 fee.

  2. 2
    Slice it for the plate we run

    Bambu Lab H2S, 340 × 320 × 340 mm, 0.4mm nozzle. Your slicer's settings become the print: layer height, infill, supports, orientation and plate position are all fixed inside the file once it is exported.

  3. 3
    Read the change count before you export

    The slicer tells you the filament changes, the filament total and the print time. The grams and the hours are what a price follows, and the change count is the reason they moved, so it is worth a second look before you commit to a layout.

  4. 4
    Export plate sliced file

    That writes a .gcode.3mf with the G-code inside. Prefer to let us slice it? Upload the saved project instead and it is sliced in its own colours, as described above. A bare .gcode is not accepted at /print, because the farm starts every print from a plate 3MF. Keep it under 40MB.

  5. 5
    Upload it at /print

    The header's filament list is read straight out of the file. On this page the price follows the filament total it reports; the hours only bill on an order placed through the print order API (/docs/api/submit-order), which reads both.

    text
    ; filament_type = PLA;PLA;PETG;PLA
    ; filament_colour = #1F1F1DFF;#F5F5F5FF;#B03024FF;#3498DBFF
Filament order matters
The operator maps the k-th filament in your file to an AMS tray, in the order the file lists them. Keep that order stable between revisions and a re-print needs no re-thinking.

The second AMS unit#

One AMS holds four spools. A print using five to eight colours needs a second unit chained on, loaded and mapped, which an operator does by hand once per job. That is the $25 fee: flat, added once per order line and not multiplied by quantity, because ten copies of a six-colour model still have their trays loaded once. It is not the plastic or the machine time, which are already inside the slice's grams and hours. On /print it is its own row in the price, and through the cart it is its own line at Stripe checkout. Print & Ship charges it inside the order's one Stripe line, and your order page counts it in Items either way.

Printed coloursSecond-AMS fee
1 to 4None
5 to 8$25 once per order line
9 or moreNot offered

What a filament change actually costs#

Every change parks the current filament, cuts it, purges the hotend, primes the next one and wipes. Two costs come out of that, and they scale very differently.

CostFigureWhere it comes from
Purge per change84 mm³The Bambu H2S profile OrcaSlicer ships: flush_volumes_matrix 280 mm³ × flush_multiplier 0.3.
Time per change1.3 minutesPark, cut, purge, prime, wipe. The conservative end of an observed figure nearer 1.5.
Changeslayers × (colours − 1)A colour distributed through a part changes on essentially every layer. A colour confined to a few layers, like a logo, changes far less.

Time is what makes multi-colour expensive, not plastic. The table below is what an estimate of those changes comes to. No quote on this site uses that estimate: every colour price is a real slice, which sees exactly how many changes the plate makes, and the estimate is switched off in the pricing code so a print can never be charged for changes that are not in its G-code.

ColoursFilament changesPurge addedMachine time addedBillable weightPer part
100 g0 h40 g$4.80
230031.75 g6.5 h72 g$18.39
360063.50 g13 h104 g$31.98
490095.26 g19.5 h136 g$45.57
A 40 g PLA part, 300 layers, colours mixed through every layer: PLA at $0.12/g plus $1.50/h of change time, before postage. A real slice of a banded or lightly painted model comes out far lower.

How colours reach the trays#

Each AMS holds four spools, and a tray is a slot, not a colour: tray 1 is red today and blue after the next swap. So the job records what was loaded when it was queued, and that record is re-checked before the print starts.

  1. The filament list comes out of the sliced file: semicolon-separated filament_type and filament_colour header fields, one entry per extruder. Tray colours arrive from the printer as 8-digit hex with an alpha channel, which is stripped, because a spool has no transparency.
  2. The operator picks a tray for each entry. A tray matches when the polymer matches and the colour is within a redmean distance of 40. PLA-CF satisfies a PLA order, being the same plastic with fibre in it, while ASA and ABS stay distinct, because UV behaviour is usually why someone chose ASA.
  3. A wrong-plastic tray is not silently accepted. Queuing stays blocked until the operator confirms the substitution, and the confirmation names both materials.
  4. What was in those trays is stored as a fingerprint (PLA:#1F1F1D). At print time it is compared against live telemetry: unchanged, the job starts; changed, the dialog reopens and says a spool changed since this job was queued.
A colour we can name is not always a colour we stock
Twelve colours are stock: Black, White, Red, Cyan, Sakura Pink, Sunny Orange, Green, Yellow, Mint Green, Lavender, Silver and Brown. Anything else can still be named and matched, but it is priced at the custom rate of $0.20/g because the spool has to be bought in for your order.

An already-sliced file is charged from its own numbers#

When you send a sliced file, the slicer has already done the arithmetic: its filament total includes every purge and its time includes every tool change. Those numbers are used as they are, because counting the purge a second time would be a real overcharge. An order placed through the print order API takes both figures verbatim; an upload at /print is priced from the filament total.

One surcharge still applies to a sliced file ordered through the print API: hours that weight cannot explain. A 120 g plate that runs 20 hours spent most of that swapping, not extruding. The quote works out what a normal print of that weight would take and bills the excess at $1.50/h: 120 g of PLA at $0.12 is $14.40, the 14.05 excess hours are $21.07, and the part comes to $35.47 before postage.

PathGrams and hours fromColour surchargeExcess-hour surcharge
Your sliced plate (.gcode.3mf, or a .gcode through the print API)The file's own headerNone, already in the file; $25 at five or more coloursOn a print-API order, yes: hours beyond what the weight implies
Your project in its coloursOur slice of every plateNone, already in the slice; $25 at five or more coloursNo
A generated model in colourOur slice of the painted modelNone, already in the slice; $25 at five or more coloursNo
Anything in one colourOur single-colour sliceNoneNo
No slice yetVolume estimate (walls plus infill)None; checkout will not sell it until it is measuredNo

Fewer changes cost less#

  • Changes are counted per layer, so a taller part in the same colours costs more. Halving the height roughly halves the change count.
  • Two colours cost a third of what four cost in changes: 300 against 900 on a 300-layer part.
  • Colour bands by height change filament far less often than colours mixed through a part, and because every colour price is a real slice, a banded model is charged for the changes it really makes.
  • Printing parts separately in single colours and assembling them is often cheaper than one multi-colour plate, and it costs nothing in machine time.
  • A logo or an inlay on one face needs only the layers it occupies, and the slice sees that.
  • Four colours or fewer avoids the second-AMS fee. Eight is the most any print can use.

Questions

How many colours can one print use?

Eight. One AMS holds four spools, and a fifth colour needs a second unit chained on and loaded by hand, so a print using five to eight colours adds a $25 second-AMS fee, once per order line however many copies. When no printer has a second unit loaded, a five-to-eight colour order is still priced and accepted as normal and prints once one has, which can take longer than the live lead time; the design page and /print say so beside the price whenever that is the case. The farm never starts one on a printer with fewer slots than colours. More than eight is not offered.

How are colours counted?

By what prints. For a project or a generated model we slice it in its colours and count the filaments that actually lay down plastic. One the file assigns but the slicer never feeds, such as a sliver of paint with no solid behind it, is not counted, not charged for and not loaded. A plate you sliced yourself counts the filaments in its own header.

Why does a four-colour print cost so much more than the same model in one colour?

Because the printer spends most of its time swapping, not printing, and every colour price on the site comes from a real slice, so that time and that purge are inside the grams and hours we price from. Each change purges 84 mm³ of filament and takes about 1.3 minutes, and a plate with four colours changes on roughly every layer, so a 300-layer part that is 40 g and half an hour in one colour can measure nearer 136 g and 20 hours in four.

Can I choose which colour goes where?

Yes, in your slicer. Assign filaments to parts or paint the model in Bambu Studio or OrcaSlicer, then upload the saved project, or slice it and upload the plate. A model generated here prints in the colours of its own texture, as we detect them.

Why won't my project print in colour?

The page says why. The usual reasons: one plate uses two filament types, such as PLA and PETG or even PLA and PLA-CF, and each plate prints from one type; different plates use different base plastics, such as PLA on one and PETG on another; the colour changes at a set layer height or through a height-range modifier; more than eight filaments print; or only one filament actually lays down plastic. Each of those can still be printed in one colour.

If I upload an already-sliced multi-colour file, am I charged twice for purge?

No. A sliced file's measured grams and hours already contain every purge and tool change, so nothing is added for them on that path. What colour does change is the rate per gram: +$0.03/g at two colours and +$0.02/g for each colour after (PLA $0.15, $0.17 and $0.19 for two, three and four), on every material, because a colour print spends hours swapping that a one-colour print of the same weight does not. Five or more colours also add the second-AMS fee once.

Related guides