Dual extrusion calibration: XY offset, Z offset, ooze and purge

dual_extrusion_calibration-1755816410088

Dual extrusion calibration lines up a printer’s second nozzle with its first so that both lay plastic in the same place (the XY offset) and at the same height (the Z offset), and it stops the idle nozzle from oozing onto the part. It applies to printers with two or more nozzles: IDEX machines, dual-nozzle printers such as the Bambu Lab H2D, and toolchangers such as the Prusa XL. Single-nozzle systems like an MMU or AMS have no second nozzle, so there is no offset to set.

The order that works is Z offset first, then XY offset, then ooze and purge settings, then a verification print. Reference numbers from manufacturers: Bambu Lab designs the H2D’s nozzles to sit 5 mm apart in height, and its sensor-based XY calibration is documented as accurate to about 15–20 µm. Prusa’s manual XL test is built to correct offset errors up to ±1 mm. Your printer’s own routine takes priority over anything generic here.

Affiliate · Featured hardware Snapmaker U1 5X More Speed. 5X Less Waste.

The consumer toolchanger 3D printer: the SnapSwap 4-toolhead system swaps heads in 5 seconds for true multi-color and multi-material printing, with smart calibration and auto filament loading.

  • 4 toolheads · 5 s swap
  • Up to 500 mm/s · 20,000 mm/s²
  • 270 mm cube build volume
  • Multi-color & multi-material
See the Snapmaker U1 →
Snapmaker U1

Calibration order in seven steps

  1. Clean both nozzles and remove residue; make sure the filament is dry and the nozzles are the same type you will print with.
  2. Run the printer’s automatic nozzle offset routine, if it has one.
  3. Set or check the Z offset between the nozzles.
  4. Set or check the XY offset with a two-colour alignment test.
  5. Enable ooze prevention and set idle temperature and purge amounts.
  6. Print a verification model that uses both nozzles on the same layers.
  7. Repeat after any nozzle change, nozzle crash or hotend swap.

What needs calibrating, and where it is set

ParameterWhat it doesWhere it lives
XY offsetLines up the second nozzle’s X and Y position with nozzle 1Printer firmware or menu (Marlin M218, Prusa XL tool settings, Bambu calibration); not in both firmware and slicer
Z offsetMakes both nozzles touch the bed at the same heightFirmware (Marlin M218 T1 Z on DUAL_X_CARRIAGE or SWITCHING_NOZZLE builds) or the printer’s calibration
Idle (standby) temperatureCools the unused nozzle to limit oozingSlicer: ooze prevention and idle temperature
Purge or prime amountFills the nozzle after a tool changeSlicer: minimal purge and wipe tower
Flow and pressure advance per materialKeeps each filament’s line width correctSlicer and firmware, set for each filament separately

Z offset between the nozzles

The nozzles must reach the bed at the same height, or the lower one drags across the print while the other prints in the air. Bambu Lab explains the principle on the H2D: the ideal height difference between the left and right nozzle is 5 mm, so the bed moves 5 mm when it switches nozzles. Assembly errors and nozzle tolerances mean the real figure is slightly different, so in Z calibration each nozzle touches the bed in turn, like homing, and the difference between the two Z positions becomes the offset. The bed height is then compensated by that value during printing.

On firmware you configure yourself, Marlin’s M218 [T<index>] [X<offset>] [Y<offset>] [Z<offset>] sets a hotend’s position relative to hotend 0. The Z value only works with DUAL_X_CARRIAGE or SWITCHING_NOZZLE. M503 shows the current offsets, and M500 saves them when EEPROM_SETTINGS is enabled. In Klipper, SET_GCODE_OFFSET [X=|X_ADJUST=] [Y=|Y_ADJUST=] [Z=|Z_ADJUST=] [MOVE=1] applies a positional offset to future G-code, and ACTIVATE_EXTRUDER EXTRUDER=extruder1 changes the active hotend; a tool-change macro that calls both is the usual way to apply per-tool offsets, but the exact macro depends on your printer.

If your printer has no automatic Z routine, a manual approach is to touch each nozzle to the bed with a feeler gauge or paper and note the difference. This is a general method, not a published figure, so verify it with the test print below.

XY offset: automatic, manual and test prints

PrinterHow the XY offset is setNotes from the maker
Bambu Lab H2D/H2CSettings → Print Calibration → Nozzle Offset Calibration, using a sensor behind the bedDocumented positioning accuracy of about 15–20 µm; can run automatically before a print
Bambu Lab H2D/H2C (high precision)Prints a test with two contrasting filaments and reads it with the toolhead cameraTheoretical XY offset is 7 mm; use one dark and one light filament
Prusa XLAutomatic tool offset calibration, then an optional manual comb testCombs for each tool are compared with Tool 1; values are added under LCD Menu → Settings → Tool → Tool #
Marlin IDEXM218 T1 X… Y…, then M500Marlin’s configuration notes say to set the slicer’s second-extruder X offset to 0 so the offset is not applied twice
KlipperSET_GCODE_OFFSET in a tool-change macroThe command applies offsets to future G-code; MOVE=1 moves the toolhead to apply it immediately

Reading the Prusa XL comb test

Prusa’s manual calibration is the clearest published procedure for a visual test, and the logic carries over to any multi-nozzle printer. Print the supplied G-code in PLA on a clean sheet (Prusa recommends cleaning with isopropyl alcohol at 90% or higher and avoiding dark colours). Each zone has one comb per tool except Tool 1. For each comb find the two marks that line up best with Tool 1’s comb; the largest mark represents 0 and the medium marks represent 0.5 mm. If you cannot choose between two marks, use their average: if 0 mm and +0.1 mm both look aligned, use +0.05 mm. Add the measured offset to the value already shown for that tool, separately for X and Y, then reprint the test to confirm. Prusa recommends this check after a nozzle crash or when using a custom nozzle.

A generic alignment test

If your printer has no ready-made model, print a thin cross or grid in which one nozzle prints the horizontal lines and the other the vertical ones, using contrasting colours. Measure where the lines meet, change the offset in small steps, and reprint until the lines intersect cleanly. This is a method, not a manufacturer procedure, and it works only if both nozzles are clean and both filaments are dry.

Ooze, standby temperature and purge

An idle nozzle that stays at printing temperature oozes. Prusa’s knowledge base says to keep ooze prevention enabled in PrusaSlicer (Print Settings → Multiple Extruders) because disabling it keeps all extruders at print temperature, which it links to heavy oozing, melt-zone degradation and possible clogging. Temperature variation lowers inactive extruders by an offset, but a filament’s own idle temperature setting takes priority over it. Parked nozzles on the XL also cool down, which helps prevent loaded filament from degrading during long idle periods.

After a tool change the nozzle must be primed. In PrusaSlicer the minimal purge value (Filament settings → Advanced) sets how much material is pushed into the wipe tower; for the Prusa XL the defaults are 15 mm³ for PLA and 35 mm³ for other materials, with 35 mm³ recommended on each extruder for PLA-plus-other combinations. For TPU, which absorbs moisture, Prusa suggests raising it up to 70 mm³ if stringing or oozing occurs. A stabilization cone (apex angle 0–90°) widens the base of a tall, thin wipe tower. On single-nozzle machines the purge is mandatory; on dual-nozzle printers like the H2D, Bambu Lab notes that printing different filaments with different nozzles means switching nozzles rather than flushing the old filament, which cuts the number of flushes. See the purge waste guide for the single-nozzle side.

Diagnosing a bad dual-nozzle print

SymptomLikely causeFix
Second colour shifted sideways or gap between coloursXY offset wrongRerun the offset routine or comb test; check nothing is applied in both slicer and firmware
Second nozzle scrapes the print or bedZ offset wrong (nozzle too low), or a blob on the idle nozzleRecalibrate Z; clean the nozzles; check ooze settings
Second material does not stick or prints in the air on the first layerZ offset wrong (nozzle too high)Recalibrate Z with both nozzles touching the bed
Blobs or thin first lines after each tool changeOoze while parked, or too little purgeEnable ooze prevention; raise minimal purge; dry the filament
Strings between partsIdle nozzle too hot or wet filamentLower idle temperature; dry filament; see string and blob fixes
Colour bleeding at colour edgesNot enough purge or flushIncrease the purge or wipe tower volume; see the purge waste guide linked above
Weak bond between two materials, or the bed temperature suits only oneMaterial pairing or bed temperature chosen from the first filamentCheck pairing; in PrusaSlicer the heatbed temperature comes from the first material by default, and ‘Bed temperature by extruder’ lets you choose the source; see multi-material pairings
Calibration failsDirty or non-magnetic nozzle (Bambu sensor), too little contrast between filaments, or a bent nozzleClean and reseat the nozzle; use the maker’s nozzles; use a dark and a light filament

Common mistakes

  • Calibrating with dirty nozzles. Prusa’s troubleshooting for tool offset errors starts with cleaning the nozzle with a brass brush, and its manual calibration asks you to remove plastic residue from rails and belts because it can change the homing position.
  • Applying the offset twice. Setting the same offset in the slicer and in firmware doubles the error. Marlin’s IDEX notes specifically say to keep the slicer’s second-extruder X offset at 0.
  • Using third-party nozzles that the sensor cannot see. Bambu Lab lists non-magnetic nozzles, such as silicon carbide, as a cause of offset calibration failure.
  • Skipping recalibration after a nozzle swap. Prusa recommends rechecking after a nozzle crash or custom nozzle; the same logic applies to any hotend change.
  • Wet filament. Prusa says to keep the filament dry to limit oozing and degradation in combinations of materials.

Next steps

If you use a single-nozzle filament switcher instead, see the MMU, ERCF and AMS setup. For a comparison of all the technologies, read the multi-color printing overview.

Frequently asked questions

What is the difference between XY and Z offset on a dual extruder?

The XY offset is how far the second nozzle sits from the first in the horizontal plane, and the Z offset is the difference in height between the two nozzle tips. XY errors show as misaligned colours; Z errors show as one nozzle scraping the print or printing in the air.

How often should I recalibrate nozzle offsets?

After any nozzle or hotend change, after a crash, and whenever colours stop lining up. Some printers re-measure automatically before a print; Bambu Lab’s H2D offers an automatic quick calibration that can run before printing, and its high-precision method prints a test with two filaments.

Can I set the offset in the slicer instead of the firmware?

It can work, but pick one place. Marlin’s IDEX configuration notes say to keep the slicer’s second-extruder X offset at 0 when the firmware holds the offset. Applying the same correction in both places double-counts it.

Why does my idle nozzle ooze?

An idle nozzle at print temperature builds pressure in the melt zone and leaks. Enable ooze prevention, lower the idle temperature, dry the filament and raise the minimal purge so the next tool change primes cleanly.

Sources