Skip to content

Multi nozzle printing#575

Closed
LixNix wants to merge 3 commits into
Snapmaker:mainfrom
LixNix-Swap-Org:multi-nozzle-printing
Closed

Multi nozzle printing#575
LixNix wants to merge 3 commits into
Snapmaker:mainfrom
LixNix-Swap-Org:multi-nozzle-printing

Conversation

@LixNix

@LixNix LixNix commented Jul 7, 2026

Copy link
Copy Markdown

Description

This PR brings multi-nozzle-size printing to the Snapmaker U1 — letting each of the U1's four tool heads run a different nozzle diameter and print at its own layer height and line width within a single job. It ports proven, upstream OrcaSlicer functionality and adapts it to this fork's mixed-filament / Local-Z / SSWCP code paths, then adds the U1-specific UX and profile polish to make it usable out of the box.

What's new

1. Filament for Features — per-feature filament selectors (ports OrcaSlicer OrcaSlicer#13607, OrcaSlicer#13887, OrcaSlicer#13937, OrcaSlicer#14042)
The single wall / infill / solid-infill selectors are split into six independent ones: outer wall, inner wall, sparse infill, internal solid infill, top surface, bottom surface. Each defaults to Default (0), meaning "use the object/part's active filament", so existing behavior is unchanged unless a feature is explicitly reassigned.

2. Per-extruder layer height (multi-nozzle-size printing) (ports the multi_nozzle_multi_layer_height work)

  • New per-extruder printer option Preferred layer height (extruder_layer_height): a part whose walls are assigned to a coarser nozzle prints on every Nth layer with correspondingly thicker extrusions wherever its geometry allows (near-vertical walls), falling back to the object layer height elsewhere; sparse infill on such an extruder is combined up to that height instead.
  • Thick layer regions (consistent / adaptive) and Thick layer tolerance control how aggressively runs are combined.
  • Support nozzle diameter (support_nozzle_diameter) keeps support / raft / interface on a single nozzle size on mixed-nozzle printers.
  • Line widths, flows, tool ordering, and the wipe/prime tower are all resolved per extruder, so each nozzle prints with correct extrusion widths.

3. Per-nozzle diameter selection in the Prepare panel
Each of the four nozzle tabs in the sidebar can now be set to its own diameter (previously changing one forced all four to sync). This mirrors the per-extruder behavior of the Printer Settings → Extruder tab.

4. Snapmaker U1 process profiles use % line widths
The U1 process profiles now express every line/extrusion width as a percentage of nozzle diameter instead of fixed mm, so widths auto-scale when a nozzle size changes — users no longer have to hand-edit them. Effective widths at each profile's native nozzle are unchanged.

Backward compatibility

  • No breaking changes for existing projects or presets. The renamed feature-filament keys are migrated automatically on load (handle_legacy maps the old wall_filament / sparse_infill_filament / solid_infill_filament keys to the new *_id keys, and the legacy default value 10), covering process presets, 3MF projects, and imported G-code.
  • All new options are inert at their defaults — a printer with four identical nozzles slices exactly as before.
  • The % profile conversion reproduces the previous mm widths exactly at each profile's native nozzle.
  • Existing fork features (mixed filament / color mixing, Local-Z dithering, SSWCP/Flutter filament sync, prime-tower scheduler) are preserved and routed through the new per-feature/per-nozzle logic.

Screenshots/Recordings/Graphs

  • Prepare panel with the four nozzles set to different diameters
  • Filament for Features settings group (per-feature filament assignment)
  • Printer → Extruder tab showing per-extruder Preferred layer height
  • A sliced preview showing a part printed with mixed nozzle sizes / layer heights

Tests

  • New automated test suite tests/fff_print/test_multi_nozzle_layer_height.cpp (Catch2) covering: layer combining for a coarser-nozzle part, per-feature filament dispatch (top/bottom/solid/gap fill/external bridges), infill combining limits, the support-nozzle-diameter restriction, and validation of invalid configurations (non-integer multiples, below min layer height, exceeding nozzle/max layer height).
  • Updated tests/libslic3r/test_mixed_filament.cpp for the renamed per-feature filament API.
  • Manual verification on the Snapmaker U1: setting different nozzle diameters per tool in the Prepare panel; slicing a model with mixed nozzle sizes / per-extruder layer heights; confirming default (all-equal-nozzle) configs slice identically to before; confirming old projects load with feature filaments migrated correctly.

LixNix added 3 commits July 7, 2026 17:58
Printing with different nozzle sizes is now possible and each extruder can now print at a different semi fixed / semi adaptive layer height depending on user choice.

Includes:
         - Fix Filament for Features (OrcaSlicer#13607)
         - Fix + Support 'Default' filament option, index 0 (OrcaSlicer#13887)
         - Filament for features for SEMM (OrcaSlicer#13937)
         - Divided filament for features (OrcaSlicer#14042)
         - Port of LixNix/OrcaSlicer-multi-nozzle-size-printing commit 944da13
@LixNix

LixNix commented Jul 8, 2026

Copy link
Copy Markdown
Author

There is a minor issue that can cause wrong layer heigth in certain situations will be fixed later today or tomorrow hopefully.

@LixNix

LixNix commented Jul 12, 2026

Copy link
Copy Markdown
Author

closing this pull request due to it being improved and changed branch in #580.

@LixNix LixNix closed this Jul 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant