Skip to content
This repository was archived by the owner on Apr 19, 2026. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 37 additions & 44 deletions readme.txt → readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Fixes & Improvements:
- Chaning filament_drop_length in filament.json no longer breaks color change behavior.


--== INSTALL ==--
## INSTALL

zMod's dev has indicated he intends to eventually integrate this into zMod, but in the meantime, there are two files to
install on the printer.
Expand All @@ -38,51 +38,52 @@ folder - if you do not have one, create it (you do not need to add anything else

"filament.json" should replace your existing filament.json file. However, if you have customized this and don't want
to replace it, the important things to change are (for ALL filaments):
> filament_unload_before_cutting: Recommended value 20, don't go much higher than that. Might be safer to use a lower
- filament_unload_before_cutting: Recommended value 20, don't go much higher than that. Might be safer to use a lower
value, or even zero, for TPU. Higher values save filament.
> nozzle_clean_length: Note that this parameter's name is very misleading; it actually determines how far the filament
- nozzle_clean_length: Note that this parameter's name is very misleading; it actually determines how far the filament
is pulled back into the 4-in-1 tube after unloading. Anyway, set it to 70 if you have the 4-in-1
tube style without the screw, or 100 if you have the one with it (or aren't sure).
> filament_unload_speed: Double your existing values. The reason for this is that zMod's existing code doubles the value
- filament_unload_speed: Double your existing values. The reason for this is that zMod's existing code doubles the value
when retracting with the IFS alone; since this is the majority of unload, it makes more sense
for this speed to be natively specified (and other values based on it to be halved, instead of
this one doubled).

Ideally, you can use the provided printer profiles. These cover all four options - native screen, zMod-controlled poop
(USE_TRASH_ON_PRINT=1), nopoop, and slicer-controlled poop; and also contain some custom start and filament change gcode
(`USE_TRASH_ON_PRINT=1`), nopoop, and slicer-controlled poop; and also contain some custom start and filament change gcode
to verify settings and improve the behavior of the color change process. (Note that custom gcode is NOT required except
when using USE_TRASH_ON_PRINT=2.)
when using `USE_TRASH_ON_PRINT=2`.)

If you have adjusted filament_unload_before_cutting in your filament.json, in the Printer settings in OrcaSlicer, adjust the
"Nozzle Volume"; this enables more accurate auto-calculated flushing volumes. Calculate this via the following formula:
144 - (filament_unload_before_cutting * 2.405)


`144 - (filament_unload_before_cutting * 2.405)`

The provided profiles are close to the stock AD5X profiles, with the following differences:
- Nozzle volume set to 144 (correct value if filament_unload_before_cutting is zero, and a safe value if it isn't)
- zMod start GCode in place, with additions to check the correct native screen / use_trash_on_print settings are in place
- Filament change GCode to allow max acceleration during filament swaps, and set it back afterwards
- For slicer-controlled poop (USE_TRASH_ON_PRINT=2), the filament change GCode to control this poop is in place
- For slicer-controlled poop (`USE_TRASH_ON_PRINT=2`), the filament change GCode to control this poop is in place
- Z-Hop type set to Normal

There are many debatable changes that should or shouldn't be put in as defaults. I decided to avoid that debate and skip
most of these - but you can absolutely modify them with your own changes if you like. A good way to do this is open two
instances of OrcaSlicer at the same time, edit the new profile in one and your existing profile in the other, and look
for any fields that are highlighted to indicate they're not default values.

Regarding the check for use_trash_on_print settings, unless you disable it, these will automatically be changed to the
Regarding the check for `use_trash_on_print` settings, unless you disable it, these will automatically be changed to the
correct ones when starting a print from these profiles. Therefore, except for the native screen vs non-native screen, you
can simply select the right profile and the start gcode will take care of switching the use_trash_on_print mode.
can simply select the right profile and the start gcode will take care of switching the `use_trash_on_print` mode.


--== USING BAMBU STUDIO ==--
## USING BAMBU STUDIO

!!! BAMBU STUDIO IS ONLY SUPPORTED WITH NATIVE SCREEN OFF AND USE_TRASH_ON_PRINT=2 !!!
**!!! BAMBU STUDIO IS ONLY SUPPORTED WITH NATIVE SCREEN OFF AND `USE_TRASH_ON_PRINT=2` !!!
(You can probably make it work with other configurations, but you're on your own for that. You are welcome to use
my profiles as a starting point. The start gcode will check for this configuration if you are using the provided
profiles.)
profiles.)**

With this version of nopoop, you can use Bambu Studio instead of OrcaSlicer if you prefer. This is very experimental.
Bambu Studio is only supported with USE_TRASH_ON_PRINT = 2, and only supports poop mode. (However, you can effectively
Bambu Studio is only supported with `USE_TRASH_ON_PRINT = 2`, and only supports poop mode. (However, you can effectively
achieve nopoop mode by providing sufficient spare objects for all purge to go to.) One upside is that Bambu Studio
allows you to poop with custom flush volumes while also respecting purge to infill / etc.

Expand All @@ -96,42 +97,43 @@ Note that for some reason, Bambu Studio does not let you edit the nozzle volume
the printer's config json file and changing it there; you will need to restart Bambu Studio afterwards.


--== MODES ==--
## MODES

The mode of behavior for color changes is determined by the SAVE_ZMOD_DATA parameter USE_TRASH_ON_PRINT. To configure
The mode of behavior for color changes is determined by the `SAVE_ZMOD_DATA` parameter `USE_TRASH_ON_PRINT`. To configure
this:
SAVE_ZMOD_DATA USE_TRASH_ON_PRINT=x

`SAVE_ZMOD_DATA USE_TRASH_ON_PRINT=x`

When this is set to 0:
The printer will not poop during color changes. After cutting the filament, the printer will return to the same location
- The printer will not poop during color changes. After cutting the filament, the printer will return to the same location
it was in before the color change, switch the filament while sitting there, and immediately continue with the print.
(Generally, this will be on the wipe tower, unless the current print doesn't have one.) Or in other words - the printer
skips pooping altogether. On the first few layers, the printer will still travel to the poop chute during changes, but
will not produce any poop - this is just to catch leakage and reduce the risk of it forming blobs on the build plate.

When this is set to 1:
During color changes, the printer will produce two poops, of length specified by filament_drop_length in filament.json
- During color changes, the printer will produce two poops, of length specified by filament_drop_length in filament.json
(plus filament_drop_length_add if the two filaments are different materials rather than just different colors). These
poops behave similar to the poops on stock AD5X firmware - ie: they cannot be controlled by the slicer, nor are they
included in its time or material estimates. This is the same as zMod's behavior without nopoop.

When this is set to 2:
Color change behavior can be chosen in the slicer between nopoop mode (ie: same as mode 0), or yes-poop mode. When poop
- Color change behavior can be chosen in the slicer between nopoop mode (ie: same as mode 0), or yes-poop mode. When poop
is enabled in this mode, the poop is controlled by the slicer; as such, it will be included in estimates and will respect
your flush volumes configured in the slicer.

Please note, you can only meaningfully use "Purge to object", "Purge to infill", etc when in nopoop mode. This is a
- Please note, you can only meaningfully use "Purge to object", "Purge to infill", etc when in nopoop mode. This is a
restriction of the slicer - although it will alter the order in which it performs actions after the color change, it will
poop the same amount regardless of these settings. Flush volumes WILL be respected, though! This is a limitation of
OrcaSlicer, and can be bypassed by using Bambu Studio instead (however, Bambu Studio does not allow for any nopoop
mode); should OrcaSlicer fix this in a future update, it should "just work" with poop mode without any further update
to nopoop being necessary.

It appears that it will be possible to use poop mode + purge to these other objects by using Bambu Studio instead of
- It appears that it will be possible to use poop mode + purge to these other objects by using Bambu Studio instead of
OrcaSlicer, but I am still investigating this option.


--== USAGE ==--
## USAGE

The easiest way to use this is to use the provided profiles (you can alter most of the settings, just leave the start gcode
and filament change gcode alone if you don't know what you're doing; *adding* to the start gcode is fine), and leave the
Expand All @@ -155,14 +157,14 @@ head move to the trash chute during color changes. No poop will be produced, but
instead of going into the wipe tower. It is possible to configure this to happen only up to a certain height on the print.

To enable this:
SAVE_VARIABLE VARIABLE=nopoop_trash_skip_height VALUE=5
- `SAVE_VARIABLE VARIABLE=nopoop_trash_skip_height VALUE=5`

This will use the trash chute until the print height reaches 5mm. Beyond that point, color changes will happen at the
wipe tower. If you want to enable this for the entire print, set the skip height to 220 or higher; if you want to disable
it altogether, set the skip height to 0.


--== RECOMMENDATIONS ==--
## RECOMMENDATIONS

Poop mode (Mode 1, or Mode 2 with poop enabled) is recommended for the 0.25 nozzle and for PETG with any nozzle.

Expand All @@ -174,21 +176,12 @@ nozzle volume as described in the install instructions.
Trash skip height is best set to 1 for PETG, and 0.6 for any other material.


--== CONFIGURATION VARIABLES ==--

These can be set via SAVE_VARIABLES VARIABLE=[name] VALUE=[value]

nopoop_trash_skip_height | When in nopoop mode, the printer will still go to the trash when the print is below
| this height, during color changes. 0 to disable, >220 for always.
------------------------------------+---------------------------------------------------------------------------------------
use_trash_on_print | (Existing zMod variable). Existing behavior is maintained for values of 0 and 1; new
| behavior is unlocked by setting this to 2.
------------------------------------+---------------------------------------------------------------------------------------
validate_print_settings_auto_change | Determines what will happen if _VALIDATE_PRINT_SETTINGS is called with parameters that
| do not match the current printer configuration. (This macro is never called by zMod or
| nopoop itself; it exists for the benefit of custom slicer gcode. The provided print
| profiles do use it.)
| -1 : Emit a warning to the console, but continue with the print
| 0 : Abort the print and show an error
| 1 : Change the settings to the correct ones (cannot change display_on/off, will
| abort the print and show an error if that mismatches)
## CONFIGURATION VARIABLES

These can be set via `SAVE_VARIABLES VARIABLE=[name] VALUE=[value]`

| **Variable** | **Definition** |
|---|---|
| `nopoop_trash_skip_height` | When in nopoop mode, the printer will still go to the trash when the print is below this height during color changes. 0 to disable, >220 for always. |
| `use_trash_on_print` | (Existing zMod variable). Existing behavior is maintained for values of 0 and 1; new behavior is unlocked by setting this to 2. |
| `validate_print_settings_auto_change` | Determines what will happen if `_VALIDATE_PRINT_SETTINGS` is called with parameters that do not match the current printer configuration. (This macro is never called by zMod or nopoop itself; it exists for the benefit of custom slicer gcode. The provided print profiles do use it.)<br><br>**Values:**<br>- **-1**: Emit a warning to the console, but continue with the print<br>- **0**: Abort the print and show an error<br>- **1**: Change the settings to the correct ones (cannot change display_on/off; will abort the print and show an error if that mismatches) |