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.
| Route | Who slices it | Price from | Colours counted |
|---|---|---|---|
| A plate you sliced (.gcode.3mf) | You. We print it exactly as exported. | The filament and time in its header | The filaments in its header |
| A Bambu Studio or OrcaSlicer project (.3mf) | We do, one plate at a time, in the project's own colours | Our slice of every plate | The filaments that lay down plastic |
| A model generated in the Studio | We do, after painting it with the colours read off its texture | Our slice of the painted model | The filaments that lay down plastic |
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.
- 1The 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.
- 2Each 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.
- 3The 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.
- 4You 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 does | Colour | Why |
|---|---|---|
| Uses two filament types on one plate, such as PLA and PETG, or PLA and PLA-CF | Not offered | Each 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 another | Not offered | A 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 height | Not offered | Only filaments assigned to parts and painted areas are printed in colour. |
| Switches filament with a height-range modifier | Not offered | The same reason. |
| Has more than eight filaments that print | Not offered | Eight is two AMS units. |
| Assigns one filament, or only one lays down plastic | Not offered | It is a one-colour print. |
| Colours parts with 3MF colour groups and no filament table | Not offered | Assign the colours to filaments in your slicer and upload the saved project. |
/api/multicolor-sliceSigned inMake 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.
/api/generation-colours?generationId=…Signed inRead-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.
{
"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.
/api/detect-colorsSigned inCount the distinct filament colours in a generated model and return its palette.
generationIdstringrequired- The generation to analyse. It must be yours and its model must be in managed storage.
{
"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.
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#
- 1Paint 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.
- 2Slice 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.
- 3Read 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.
- 4Export 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.
- 5Upload 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
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 colours | Second-AMS fee |
|---|---|
| 1 to 4 | None |
| 5 to 8 | $25 once per order line |
| 9 or more | Not 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.
| Cost | Figure | Where it comes from |
|---|---|---|
| Purge per change | 84 mm³ | The Bambu H2S profile OrcaSlicer ships: flush_volumes_matrix 280 mm³ × flush_multiplier 0.3. |
| Time per change | 1.3 minutes | Park, cut, purge, prime, wipe. The conservative end of an observed figure nearer 1.5. |
| Changes | layers × (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.
| Colours | Filament changes | Purge added | Machine time added | Billable weight | Per part |
|---|---|---|---|---|---|
| 1 | 0 | 0 g | 0 h | 40 g | $4.80 |
| 2 | 300 | 31.75 g | 6.5 h | 72 g | $18.39 |
| 3 | 600 | 63.50 g | 13 h | 104 g | $31.98 |
| 4 | 900 | 95.26 g | 19.5 h | 136 g | $45.57 |
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.
- 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.
- 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.
- A wrong-plastic tray is not silently accepted. Queuing stays blocked until the operator confirms the substitution, and the confirmation names both materials.
- 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.
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.
| Path | Grams and hours from | Colour surcharge | Excess-hour surcharge |
|---|---|---|---|
| Your sliced plate (.gcode.3mf, or a .gcode through the print API) | The file's own header | None, already in the file; $25 at five or more colours | On a print-API order, yes: hours beyond what the weight implies |
| Your project in its colours | Our slice of every plate | None, already in the slice; $25 at five or more colours | No |
| A generated model in colour | Our slice of the painted model | None, already in the slice; $25 at five or more colours | No |
| Anything in one colour | Our single-colour slice | None | No |
| No slice yet | Volume estimate (walls plus infill) | None; checkout will not sell it until it is measured | No |
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.
Printing a Bambu Studio or OrcaSlicer project, MakerWorld downloads included, in its colours.
The /print flow, formats, limits and troubleshooting.
Which 3MF is a sliced plate, which is a project, and what each can do.
Per-gram rates, minimums, bulk tiers, the second-AMS fee and shipping.
PLA, PETG, ABS, ASA and TPU, and what each is for.
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
- Bambu AMS Filament Stuck? Multi-Color Errors DecodedBambu AMS filament stuck or colours wrong? This Bambu AMS troubleshooting guide decodes each multi-colour symptom and fixes tangles, jams and bleed.
- Purge Tower Waste: How Much Multi-Color Prints Throw AwayWhat a purge tower is in 3D printing and how much it wastes: 84 mm³ per filament change, what that costs in grams and dollars, and how to cut the waste.
- Silk Filament and Gradient Filament: One Spool, Many ColorsSilk filament adds a glossy sheen and gradient filament shifts color, both from one spool with no filament changes. How they print and what they cost.