The print file
Luwu publish the XGO-Duck as 27 loose STLs. We turned them into one Bambu Studio project for a Bambu Lab H2D, with every part on its own plate and every setting chosen. This is how, and what changed along the way.
At a glance
- 20 plates for the duck, about 41 hours and 421 g, plus the bench stand.
- One big part or one matched pair per plate, so a failed print only costs that plate.
- Needs a 0.4 mm nozzle on both sides. Everything prints from the left one; only the leg links and hip outputs reach for support material on the right.
- Filament: about 260 g of Matte White, 66 g of Matte Grey, 54 g of Matte Marine Blue, 33 g of TPU and 4 g of Support For PLA/PETG.
How the file is built
Nothing was dragged into Bambu Studio by hand. A Python script writes the whole project file from scratch, so any change can be rebuilt in seconds and checked the same way every time.
- Orient every part. A script tries each part on each of its six sides and on its biggest flat faces, scores each pose by overhang area (faces pointing more than 45° down that aren't on the bed) against bed contact, and keeps the best. A few are set by hand: the head plate lies flat, and our own parts print the way they were designed to.
- Lay out the plates. Each plate gets its parts centred in a row or two, with plates spaced on the grid Studio expects.
- Write the settings into the file. The base is Bambu's own "0.12mm Fine @BBL H2D" profile, resolved through its chain of parent profiles and copied in, so Studio and its command line agree. Everything that matters is also written onto each part, because Studio can reload its stock global settings when a file opens but keeps per-part overrides.
- Add the filaments. Five slots, copied from earlier projects saved by the same Studio version: three PLA Matte, TPU, and Support For PLA/PETG. The first four are pinned to the left nozzle, support material to the right.
- Paint supports onto the mesh. The script marks individual triangles as "support here" or "never support here": hole roofs found by a ray test, and two tiny fillets on the head bracket.
- Slice every plate with Bambu Studio's command line, read the time and grams per plate, and run the checks below on the G-code.
Settings
Three recipes, applied per part.
| Parts you see | Brackets, plates, links | TPU | |
|---|---|---|---|
| Which | Body and thigh shells, head plate, bill, feet, hood, face, rings | Everything structural | Foot soles, beak edges |
| Layer height | 0.08 mm | 0.12 mm | 0.16 mm soles, 0.12 mm beak |
| Walls | 3 (4 on the head plate, feet, hood and face) | 4 | 3 |
| Infill | 15% gyroid (30% feet and face) | 40% gyroid (solid for the spacers, clamp and bracket) | 20% gyroid |
| Top and bottom | 12 top layers, 1.0 mm; 10 bottom, 0.8 mm | 8 top, 1.0 mm; 7 bottom, 0.8 mm | Profile default |
| Seams | Aligned, with scarf seams on the outer wall | At the back | At the back |
And for every part:
- Speeds: outer walls 60 mm/s, inner walls 120, infill 100, top surfaces 100, gap fill 50. Overhangs slow to 50, 30 and 15 mm/s as they get steeper. First layer 40. Bambu stores speeds once per nozzle type, so they're filled in for every type; otherwise they only apply to one. Checked mid-print in the G-code.
- Classic wall generator, monotonic top surfaces, precise Z, and 0.15 mm elephant-foot compensation.
- No ironing: it turns matte filament blotchy.
Seven versions in four days
The file went from a 10-hour quick print to 68 hours of careful supports, and back down to 40 once we understood what support material really costs on a two-nozzle printer.
- Four plates by colour (13 Oct, about 10.6 h). Every part oriented and grouped by filament on four plates. Tree supports where needed.
- One part per plate (13 Oct, about 37.5 h). 17 plates, 0.08 mm layers on visible parts, slow outer walls, support material under the body shells, bill and feet.
- Our head added (13 Oct, about 51 h). The hood and rings for the big-eye head, two more plates.
- Support material everywhere (13 Oct, about 66 h). After rough undersides on the first leg links, every supported part got support-material tops. Plus the swappable face.
- Flaw check fixes (14 Oct, about 68 h). Gaps so supports stop welding on, stiffer support columns, a sensible prime tower.
- Fewer nozzle swaps (14 Oct, about 60 h). Support material for the top layers only, and plain white trees inside the hood and battery cage.
- Part-colour supports (16 Oct, about 40 h). Supports in each part's own filament, none inside holes, none at all where a plate doesn't need them.
On 20 October face plate v1 and the bench stand were added, which is where the plate list below stands. The story behind each step is in the diary: one print file, the leg link and forty hours.
Supports, plate by plate
The rules we ended with:
- Supports in the part's own filament, snug to the part, with a small gap so they snap off: 0.16 mm under 0.08 mm layers, 0.12 mm under 0.12 mm layers. That gap also stops supports welding on where they stand on the part rather than the bed.
- No support inside holes up to 16 mm across. They print fine as arches, and support inside them is hard to get out.
- No supports at all on any plate where slicing it without them shows nothing printing over thin air.
- Support material only where a visible underside needs it and it meets the part at only a few heights. On the H2D every switch to it costs a nozzle change, and each one can leave a hair or string.
| Plate | Layer | Time | Supports | Why |
|---|---|---|---|---|
| W1 Body shell, left | 0.08 mm | 1 h 34 min, 16 g | White, snug, 0.16 mm gap | The 30 mm servo-horn roof inside. |
| W2 Body shell, right | 0.08 mm | 1 h 35 min, 16 g | White, snug, 0.16 mm gap | The 30 mm servo-horn roof inside. |
| W3 Thigh shells | 0.08 mm | 1 h 43 min, 18 g | None | Turned out to need none. |
| W4 Battery cage | 0.12 mm | 2 h 28 min, 27 g | White trees, 3 mm branches, plus a 5 mm brim | 44 mm bridges. |
| W5 Base bracket and head servo support | 0.12 mm | 2 h 3 min, 30 g | White, snug, 0.12 mm gap (head servo support only) | Walls that would otherwise start in mid-air. |
| W6 Hip brackets | 0.12 mm | 1 h 5 min, 10 g | White, grid style, 1.2 mm wider | Corner tabs that stick out 4 mm; grid makes their columns solid. |
| W7 Hip outputs | 0.12 mm | 1 h 59 min, 22 g | White, topped with Support For PLA/PETG | Cut back to a few layers of support material on top after it strung on 14 Oct. |
| W8 Leg links | 0.12 mm | 1 h 23 min, 15 g | All Support For PLA/PETG, plus a sacrificial skin | The ankle-spacer recess at the tab tip. |
| W9 Hip plates | 0.12 mm | 16 min, 3 g | None | |
| G1 Head base plate | 0.08 mm | 3 h 56 min, 48 g | Grey, snug, 0.16 mm gap | An internal roof about 85 mm across. |
| G2 Hip and thigh plates | 0.12 mm | 31 min, 6 g | None | |
| G3 Head brackets | 0.12 mm | 1 h 8 min, 10 g | None | Support-free since 16 Oct: the slot roofs print as bridges. Precise Z off, or the prime tower ran off the bed. |
| G4 Neck and ankle spacers | 0.12 mm | 14 min, 2 g | None | The ankle spacers print solid. |
| B1 Bill | 0.08 mm | 1 h 48 min, 18 g | Blue, snug, 0.16 mm gap | The hinge boss underside, otherwise a 9 mm one-sided overhang. |
| B2 Feet | 0.08 mm | 3 h 23 min, 31 g | None | Support-free since 16 Oct: every hole closes as an arch. |
| T1 Foot soles | 0.16 mm | 1 h 4 min, 19 g | None | |
| T2 Beak edges | 0.12 mm | 49 min, 13 g | None | |
| H1 Hood | 0.08 mm | 12 h, 100 g | White trees inside, plus a 6 mm brim inside and out | The floating boss and ledge bottoms under the dome. |
| H2 Face plate, screen clamp and XIAO bracket | 0.08 mm | 1 h 30 min, 13 g | None | Prints front-down, so every pocket opens upwards. |
| H3 Eye ring and camera ring | 0.08 mm | 26 min, 4 g | None | Printed top face down. |
| S1 Head bench stand | 0.2 mm | 3 h 10 min, 89 g | None | A quick, stiff bench tool: 0.2 mm layers, 3 walls, 15% gyroid. |
Before you print
- Load the AMS so slots 1 to 5 are Matte White, Matte Grey, Matte Marine Blue, TPU and Support For PLA/PETG. Any accent colour can go in slot 3.
- If Studio asks about modified filament values when you sync, choose Use Modified Value.
- Slot 4 uses Bambu's "TPU for AMS" preset. Switch it to TPU 95A HF if that's what you load on the external spool.
- Pick the textured PEI plate by hand: Studio remembers your last plate type over the file's.
- Dry the support filament. It picks up moisture and strings; Bambu suggest 12 hours at 60 °C.
- Print the two quickest plates first (G4 and W9, about 15 minutes each) to check colour, finish and screw holes. Once a servo and a bearing arrive, print the hip brackets and leg links and test the fits before the long plates, as the designers suggest.
After printing
- Push the thin skin out of the 5 mm hole at each leg link's tab tip, from the recess side, with a craft knife or a 5 mm drill bit turned by hand.
- Screw counterbores that open on the bed have small support plugs: six in each leg link, four in each hip output. A pin or a 2 mm drill bit turned by hand pushes them out.
- Test the 61700 bearing in the feet's ring. Its top prints as an arch, so it may be a touch tight; scrape lightly if so.
The checks
The slicer warns about some problems in its window but says nothing on the command line, and it doesn't look for others at all. So every change to the file is sliced and run through these scripts before anything is printed.
| Check | What it looks for | What it found |
|---|---|---|
| Ring roofs | Flat ceilings round a hole that carries on upwards, like the leg link's recess | 32, all screw counterbores or the head plate's big ring, all sitting on full pads of support |
| Support towers | Support thin and tall enough for the nozzle to knock over, rated by how stiff it is to sideways push | Two 12 mm pencils on the head bracket, and 21 mm hollow tubes under the hip brackets' tabs |
| Support feet | Support standing on the part, in the part's colour with no gap, which welds on | Plugs in the bill's hinge holes, bits on the body shells' floors, 83 mm² of tree tips inside the hood |
| Unsupported | On a plate sliced with supports off: anything printing over air, how far it reaches, and whether it's a bridge or an overhang | Which plates could lose their supports, and the face plate's drooping lip (which we ignored, once) |
| Support map | Every piece of support on a plate, flagging any inside a hole | Confirms the hole blockers worked |
| Mesh audit | That Luwu's parts are their untouched originals, and that ours have no loose pieces, broken edges or walls under 0.8 mm | All 23 of theirs untouched; two 5 mm³ scraps floating in our hood |
| Nozzle switches and prime tower | Tool changes per plate, and the prime tower's size | 230 switches on one small plate, and a tower 116 mm square |
If you're making your own print file
- Support material on a two-nozzle printer isn't free. Each plate that used it paid about 20 g of prime tower, 10 to 17 g of purge and two or three hours, and every nozzle change risked a hair on the part. Count the tool changes per plate.
- Holes up to about 16 mm don't need support. They print as arches.
- Support that stands on a part needs a gap, or it welds on in the part's own colour.
- Tall, thin supports sway. The slicer never warns you.
- Precise Z on parts of different heights can leave tiny steps that each need a prime tower layer. Ours grew off the bed.
- Write every setting onto each part, and fill in per-nozzle settings for every nozzle type.
- Don't iron matte filament.
- Believe your over-air check, even when the problem looks familiar.
- Try a different orientation before adding supports. The face plate went from a drooping lip to nothing over air just by printing it the other way up.
Can I have the file?
Not yet. It contains Luwu's parts, and their licence isn't final: the stated intent is personal and educational use, with permission needed for anything commercial. We won't share it until Luwu say we can. Their original STLs are in their hardware repository.