SteinWipe Motion Control - BBS X1 User Manual
[{"type":"paragraph","children":[{"t":"text","v":"SWMC Release: BBS_X1_SWMC_Machine_Preset_Feb.15.2.2025.3mf","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Developed On: Bambu Studio V.1.10.1.50","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Shipped Date: Apr.30.2025","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"Welcome","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"This manual covers the BBS_X1_SWMC_Machine_Preset_Feb.15.2.2025 release of SteinWipe Motion Control (SWMC) for the Bambu Lab X1C running Bambu Studio. This is the first STABLE release of SWMC; the milestone release that established the Core 0 architecture after 2.5 months of beta testing.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"This release uses inline SteinSwitch toggles that you enable or disable by editing the gcode directly. If you are looking for the newer SteinSwitch Definitions (SSD) architecture where features are controlled via keywords in your printer notes, see the Apr.28.1.2025 release instead. Core 0 stable is intentionally preserved alongside Core 1 for users who want the proven-stable feature set without the newer SSD layer.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"If you are coming from the Feb.15.1.2025 beta, this stable release is the same architecture with bug fixes and one major TemplateCustomGcode upgrade. Update with confidence.","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"1. What\u0026#39;s in this release","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"1.1 The big picture","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Feb.15.2.2025 is the Core 0 stable release. A \u0026quot;core\u0026quot; is a generation of SWMC defined by how users configure it. In Core 0, configuration happens by editing the gcode itself; specifically, by finding numbered SteinSwitch blocks in the gcode and changing {if true} to {if false} (or vice versa) to toggle features.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"This release ships as a single .3mf file that opens directly in Bambu Studio and installs as a printer preset. Once installed, configuration happens inside the preset\u0026#39;s gcode sections.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"1.2 What\u0026#39;s new versus Feb.15.1.2025 beta","b":false,"i":false}]},{"type":"list","listType":"unordered","items":[{"children":[{"t":"text","v":"ams_detour SteinSwitch at the top of Start Gcode; routes the toolhead through the wiper area on AMS calls","b":false,"i":false}]},{"children":[{"t":"text","v":"Fan cover alarm flipped ON by default; printer pauses if the fan cover falls off instead of silently continuing","b":false,"i":false}]},{"children":[{"t":"text","v":"TemplateCustomGcode upgraded from 41 to 65 lines:\n\nNew G2\/G3 arc moves replace straight-line scrubbing for smoother, quieter wipe cycles with fewer hard corners\nGet-off-part spiral lift at wipe entry\nUser-offset cancel and workspace-reset at exit prevent the slicer travel bug\n\n","b":false,"i":false}]},{"children":[{"t":"text","v":"Indentation and formatting pass across all files for consistency inside conditional blocks","b":false,"i":false}]}]},{"type":"heading","level":4,"children":[{"t":"text","v":"1.3 What\u0026#39;s fixed since Feb.15.1","b":false,"i":false}]},{"type":"list","listType":"unordered","items":[{"children":[{"t":"text","v":"Bambu Studio 1.10.2 \/ 2.0 slicing error (extrusion outside build plate)","b":false,"i":false}]},{"children":[{"t":"text","v":"Nozzle-too-hot issue burning PA test line start point on smooth plate","b":false,"i":false}]},{"children":[{"t":"text","v":"Fan cover detachment no longer allows prints to continue silently","b":false,"i":false}]},{"children":[{"t":"text","v":"Layer counter display lag corrected","b":false,"i":false}]},{"children":[{"t":"text","v":"Motor slip after print when initiating manual filament change","b":false,"i":false}]},{"children":[{"t":"text","v":"Return-to-print slicer bug that could send toolhead outside build volume","b":false,"i":false}]},{"children":[{"t":"text","v":"Long delay before AMS filament cutting (waiting on temps)","b":false,"i":false}]},{"children":[{"t":"text","v":"AMS return-to-print temps not falling fast enough (new temperature gradient logic)","b":false,"i":false}]}]},{"type":"heading","level":2,"children":[{"t":"text","v":"2. Before you install","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"2.1 Requirements","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"You will need a Bambu Lab X1C printer, the Bambu Studio version shown on this release\u0026#39;s card, the .3mf file linked from the release page, and a SteinWipe V1 wiper mount installed on your X1C. The wiper mount is recommended rather than strictly required; most SteinSwitches work without hardware, but the actual wiping features need something to wipe against.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"2.2 Install the wiper first, then calibrate","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"If your SteinWipe wiper mount is not yet installed, install it before running any SWMC gcode. Wiper entry XY error greater than 0.5mm can tear the wiper pad on the very first wipe cycle, so mount alignment matters.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"After the mount is installed, run the calibration gcode from the release resources to measure your mount\u0026#39;s XY offsets. Those values get entered into the Template Custom G-code section once and stay put across updates (as long as you do not re-import the preset from scratch).","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Wiper mount reference","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"wiper_mount_installed | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"SteinWipe V1 wiper mount installed on the rear panel of a Bambu Lab X1C. Mount bolted with M3 hardware through the backing plate - no tape.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"2.3 Skip calibration if","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"You ran calibration on this same wiper mount for a previous SWMC release and have not moved, unbolted, or replaced it. Or, you do not have a SteinWipe mount installed and plan to use only non-wiper features like the modified pause routine or chute tapping; the wipe features need a wiper pad to wipe against.","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"3. Installing the preset","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"These steps apply to the Bambu Studio version listed on this release\u0026#39;s card.","b":false,"i":false}]},{"type":"list","listType":"ordered","items":[{"children":[{"t":"text","v":"Download the .3mf file from the release resources on the release page.","b":false,"i":false}]},{"children":[{"t":"text","v":"Open Bambu Studio.","b":false,"i":false}]},{"children":[{"t":"text","v":"Click the \u0026quot;Add\u0026quot; tool in the toolbar and import the BBS_X1_SWMC_Machine_Preset_Feb.15.2.2025.3mf file.","b":false,"i":false}]},{"children":[{"t":"text","v":"If prompted, choose \u0026quot;Open as Project.\u0026quot;","b":false,"i":false}]},{"children":[{"t":"text","v":"Under the \u0026quot;Prepare\u0026quot; tab, open your printer profile settings.","b":false,"i":false}]},{"children":[{"t":"text","v":"Save this profile as a new preset so updates do not overwrite your customizations.","b":false,"i":false}]},{"children":[{"t":"text","v":"Name the new preset anything you like; something like \u0026quot;X1C SWMC Feb.15.2\u0026quot; works well.","b":false,"i":false}]},{"children":[{"t":"text","v":"Select your new preset from the printer dropdown. You are ready to slice.","b":false,"i":false}]}]},{"type":"paragraph","children":[{"t":"text","v":"The preset ships with sensible defaults already selected for every SteinSwitch. You can use it as-shipped or edit the gcode to change feature toggles (Section 5).","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Import step","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"install_step_1_import | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The Add tool in the Bambu Studio toolbar; click here to import the .3mf file.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Save as preset","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"install_step_2_preset | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Save your imported profile as a new preset under the Prepare tab. Naming it with the core date makes updates easier later.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"4. How SteinSwitches work","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"4.1 The mechanism","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"A SteinSwitch is a numbered, labeled block inside the gcode that controls one feature. The feature\u0026#39;s ON\/OFF state is determined by a single word inside the block: {if true} turns the feature ON, {if false} turns it OFF.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Each SteinSwitch block starts with a comment header telling you what the feature does and how to toggle it. The shape looks like this:","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; Example SteinSwitch block","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";2 SteinSwitch wipe_before_first_z_touch - removes string from last print","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;true\u0026quot; to wipe the nozzle before homing the z on startup","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;false\u0026quot; to skip","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"[feature gcode runs here]","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{endif}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"To toggle this feature off, you find this block in the gcode, change {if true} to {if false}, and save the preset. On the next slice, the feature is disabled.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"4.2 Why this architecture","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Core 0 predates SteinSwitch Definitions (SSDs), the keyword-based architecture introduced in Core 1. Core 0 is kept in production because it is the proven stable baseline; every feature in this release has been field-tested for months. Users who want the newest features and the SSD configuration layer should use the Apr.28.1.2025 release instead. Users who want the most conservative, most tested codebase should stay on Core 0.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"4.3 Where to find and edit SteinSwitches","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"In Bambu Studio, open the Prepare tab, click the gear icon next to your printer preset (or right-click the preset and choose \u0026quot;Edit\u0026quot;), and go to the Machine G-code tab. There are four gcode sections that contain SteinSwitches:","b":false,"i":false}]},{"type":"list","listType":"unordered","items":[{"children":[{"t":"text","v":"Machine Start G-code (12 SteinSwitches)","b":false,"i":false}]},{"children":[{"t":"text","v":"Change Filament G-code (3 SteinSwitches)","b":false,"i":false}]},{"children":[{"t":"text","v":"Layer Change G-code (1 SteinSwitch)","b":false,"i":false}]},{"children":[{"t":"text","v":"Pause G-code (1 SteinSwitch)","b":false,"i":false}]}]},{"type":"paragraph","children":[{"t":"text","v":"The End G-code and Template Custom G-code sections do not contain user-toggle SteinSwitches; leave those alone.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"To find a specific SteinSwitch, copy the comment header block shown in Section 5 for that SteinSwitch, paste it into your text editor\u0026#39;s find function, and it will take you directly to the SteinSwitch in the gcode.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"4.4 Rules for editing","b":false,"i":false}]},{"type":"list","listType":"unordered","items":[{"children":[{"t":"text","v":"Only change {if true} to {if false} or vice versa; do not change other parts of the block","b":false,"i":false}]},{"children":[{"t":"text","v":"Save the preset after any change before slicing","b":false,"i":false}]},{"children":[{"t":"text","v":"If something goes wrong, re-import the .3mf to restore defaults","b":false,"i":false}]}]},{"type":"heading","level":2,"children":[{"t":"text","v":"5. SteinSwitch reference","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The full set of SteinSwitches available in this release, grouped by gcode section and in the order they appear. For each SteinSwitch, the code box shows the exact comment header as it appears in the gcode; copy and paste it into your text editor\u0026#39;s find function to jump directly to that SteinSwitch.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"5.1 Start G-code SteinSwitches","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Routes the AMS tool travel path through the wiper area rather than direct travel. Useful for cleaning the nozzle on every AMS call. Default: OFF. Enable if you are running multi-color prints and want automatic pre-AMS wipes.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; ams_detour","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";1 SteinSwitch ams_detour - sets tool path to chute on AMS","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;true\u0026quot; for a detour to steinwipe before ams","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;false\u0026quot; to skip pre-wipe","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if false}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Removes stringing from the last print by wiping the nozzle before the Z-axis homes. Default: ON. Recommended.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; wipe_before_first_z_touch","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";2 SteinSwitch wipe_before_first_z_touch - removes string from last print","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;true\u0026quot; to to wipe the nozzle before homing the z on startup","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;false\u0026quot; to skip","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Pauses the printer at startup so you can manually inspect the nozzle before printing starts. Default: OFF. Enable for critical prints or after a nozzle change.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; user_nozzle_inspection","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";3 SteinSwitch user_nozzle_inspection","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if false}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Scrapes the nozzle against the steel tab before the startup priming purge. May help with a cleaner purge. Default: ON on textured PEI plate, skipped on smooth plates.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; scrub_nozzle_before_first_purge","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";5 SteinSwitch scrub_nozzle_before_first_purge - may help with a cleaner purge","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Handles residual filament not pulled back during the previous print\u0026#39;s end. Prevents filament bits sticking to the side of the nozzle on the wipe. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; purge_for_unretracted_filament","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";6 SteinSwitch purge_for_unretracted_filament - prevents filament bits sticking to side of nozzle on swipe","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Runs a second cleaning pass immediately before the auto bed leveling probe for cleaner ABL readings. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; secondary_nozzle_clean_before_ABL","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";7 SteinSwitch secondary_nozzle_clean_before_ABL","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Runs a final steel-tab scrub before the main SteinWipe cycle. Helps with probe tip cleanliness for the bed level scan. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; perform_secondary_nozzle_scrub_before_steinwipe","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";8 SteinSwitch perform_secondary_nozzle_scrub_before_steinwipe (clean tip to probe for bed level)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Taps the chute door at the end of the startup purge to knock down any stuck purge material before printing starts. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; chute_tapping (in Start G-code)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";8 SteinSwitch chute_tapping knock down any purge before starting a print","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;true\u0026quot; to use chute tapping","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;false\u0026quot; to skip chute tapping","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Limits the mechanical vibration test (input shaping) to only run when bed leveling is checked in the slicer. Prevents redundant tests on every print. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; mech_test_only_with_bed_cali","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";10 SteinSwitch mech_test_only_with_bed_cali","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Runs the mech test at the center of the printed part rather than a fixed bed location. Better shaping data for off-center prints. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; mech_test_on_part_center","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";11 SteinSwitch mech_test_on_part_center (may help with improved surface finish for off center parts)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Dynamic Auto Bed Leveling; a P1 Series firmware feature (firmware 01.06.01.02+). Not available on X1. Default: OFF. Do not enable on X1.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; use_DABL","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";12 SteinSwitch use_DABL (only works with firmware 01.06.01.02 P1 Series - not available for X1)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;false\u0026quot; to use stock routine with option to modify (SteinSwitch 12)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if false}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Switches the Pressure Advance test line to a higher-accuracy routine. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; use_true_PA_test_line","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";13 SteinSwitch use_true_PA_test_line","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Validates PA test line placement before drawing. Nested inside use_true_PA_test_line; only takes effect when 13 is ON. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; safety_check_pa_line_position","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"; SteinSwitch safety_check_pa_line_position","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Optimizes the travel path from wiper exit to first layer start; reduces stringing carried onto the print. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; no_strings_to_first_layer","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";15 SteinSwitch no_strings_to_first_layer","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Numbers 4 and 9 are unused in Start G-code; development fingerprints from features removed or moved during iteration. Not a bug; safe to ignore.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"5.2 Change Filament G-code SteinSwitches","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"All three SteinSwitches in Change Filament G-code are numbered \u0026quot;1\u0026quot; in the gcode. Search by feature name or by the code box below rather than by number.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Clears the nozzle before each AMS tool change to prevent purge from sticking. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; quick_wipe_before_tool_change","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";1 SteinSwitch quick_wipe_before_tool_change - clears nozzle to prevent purge from sticking","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Taps the chute during AMS swaps to dislodge stuck purge buildup. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; chute_tapping (in Change Filament G-code)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";1 SteinSwitch chute_tapping","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Runs a wipe cycle on the way back to the print after AMS material change. Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; return_to_print_wipe_cycle (in Change Filament G-code)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";1 SteinSwitch return_to_print_wipe_cycle","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"5.3 Layer Change G-code SteinSwitch","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Runs a wipe cycle during layer changes when a wipe is needed (timing coordinated with time lapse captures). Default: ON.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; return_to_print_wipe_cycle (in Layer Change G-code)","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";1 SteinSwitch return_to_print_wipe_cycle","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"5.4 Pause G-code SteinSwitch","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"On resume from a print pause, the toolhead runs a wipe cycle before returning to the print. Prevents stringing on the resumed layer. Default: ON. Disable only if you have wiper alignment issues.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\u0026amp; use_steinwipe_after_pause","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";+++++++++++++++++++++++++++++","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";SteinSwitch use_steinwipe_after_pause","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;true\u0026quot; to enable","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":";Set to \u0026quot;false\u0026quot; to disable","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"{if true}","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/\u0026amp;","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"6. Wiper offset calibration","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"This section only applies if you have the SteinWipe V1 wiper mount installed.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"6.1 Why calibrate","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The wiper sits at a fixed position in the slicer\u0026#39;s coordinate space. Small variations in how your mount was drilled or how the mount bracket sits determine whether the nozzle enters the wiper pad cleanly or off-center. Error greater than 0.5mm can tear the wiper pad on the first wipe cycle.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"6.2 The V3 calibration workflow","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The current approach uses a single .3mf file that walks the toolhead through all 31 offset positions in sequence. The printer\u0026#39;s progress bar flashes different percentages at each position. You watch the nozzle as it moves, and when alignment looks correct, you note the progress bar value. The Offset Chart (embedded below) converts that value to an offset number.","b":false,"i":false}]},{"type":"list","listType":"ordered","items":[{"children":[{"t":"text","v":"Open SteinWipe_XY_Offset_Cali.3mf in Bambu Studio.","b":false,"i":false}]},{"children":[{"t":"text","v":"Enable the calibration routine as instructed in the .3mf notes.","b":false,"i":false}]},{"children":[{"t":"text","v":"Slice and send to the printer.","b":false,"i":false}]},{"children":[{"t":"text","v":"Watch the nozzle as the toolhead cycles through positions.","b":false,"i":false}]},{"children":[{"t":"text","v":"When the nozzle aligns correctly with the wiper, note the progress bar percentage on the display. Reference photos for correct alignment are below.","b":false,"i":false}]},{"children":[{"t":"text","v":"Look up that percentage on the Offset Chart (also below) to get the offset value.","b":false,"i":false}]},{"children":[{"t":"text","v":"Repeat for the other axis if needed.","b":false,"i":false}]},{"children":[{"t":"text","v":"Enter the X and Y offset values into the Template Custom G-code section of your printer preset on the G0 X0 Y0 line, replacing the zeros with your measured values. A screenshot of where this lives is below.","b":false,"i":false}]}]},{"type":"paragraph","children":[{"t":"text","v":"If alignment is perfect at the center position (progress bar at the zero point), leave the user offset at G0 X0 Y0 and you are done.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Correct Y axis alignment","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"cali_y_axis_aligned | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The nozzle correctly aligned on the Y axis during V3 calibration. Note this alignment and the corresponding progress bar percentage.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Correct X axis alignment","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"cali_x_axis_aligned | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The nozzle correctly aligned on the X axis during V3 calibration.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Calibration progress bar","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"calibration_progress_bar | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The printer progress bar signals the current offset position during V3 calibration. Watch the nozzle and note the percentage at the aligned position.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% V3 Offset Chart","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"offset_chart_v3 | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Convert the progress bar percentage to your offset value using this chart. Also available as a separate download from the Dev Pack.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Where to enter your offsets","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"template_custom_gcode_location | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The Template Custom G-code section of your printer preset. Replace the zeros on the G0 X0 Y0 line with your measured offset values.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"6.3 When to recalibrate","b":false,"i":false}]},{"type":"list","listType":"unordered","items":[{"children":[{"t":"text","v":"After installing a new wiper mount","b":false,"i":false}]},{"children":[{"t":"text","v":"After replacing the wiper pad (not always required, but recommended)","b":false,"i":false}]},{"children":[{"t":"text","v":"If you unbolt and re-mount the wiper AND the mount holes were drilled oversized (the mount slides on its bolts)","b":false,"i":false}]},{"children":[{"t":"text","v":"After moving the printer if you suspect mount shift","b":false,"i":false}]}]},{"type":"heading","level":2,"children":[{"t":"text","v":"7. Known issues","b":false,"i":false}]},{"type":"list","listType":"unordered","items":[{"children":[{"t":"text","v":"SteinSwitch numbering has duplicates. In Start G-code, SteinSwitches 8a and 8b share the number \u0026quot;8\u0026quot;. In Change Filament G-code, three SteinSwitches all share the number \u0026quot;1\u0026quot;. When searching the gcode, use the feature name or the code boxes in Section 5 rather than the number.","b":false,"i":false}]},{"children":[{"t":"text","v":"SteinSwitches 4 and 9 are missing from Start G-code. Development fingerprints from features removed or moved during iteration. Not a bug; safe to ignore.","b":false,"i":false}]},{"children":[{"t":"text","v":"G07 typo in Layer Change G-code. Lines 23 and 26 contain G07 where G17 (XY-plane select) is intended. Cosmetic; firmware treats unknown G-codes as no-ops, so no functional impact.","b":false,"i":false}]},{"children":[{"t":"text","v":"Wiper pad damage from bad offset. Always run the offset calibration (Section 6) before your first wipe cycle on a newly installed mount. XY error greater than 0.5mm can rip the wiper pad on the first wipe.","b":false,"i":false}]},{"children":[{"t":"text","v":"Oversized mount holes force repeat calibration. If the mount holes were drilled oversized during installation, the mount will slide on its bolts and need recalibration every time it is unbolted. Correctly sized holes let the mount return to the same position when re-mounted.","b":false,"i":false}]}]},{"type":"heading","level":2,"children":[{"t":"text","v":"8. Reporting bugs","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Issues with this release go to the Leckiestein Discord bug reporting channel for Core Feb.15.2. Report at ","b":false,"i":false},{"t":"link","v":"Discord Bug Channel.","url":"https:\/\/discord.com\/channels\/1327182397673832448\/1367314880859738204","target":"_blank"},{"t":"text","v":" Include a video of the issue, a 3MF diagnostic file (see Discord #faq for how to generate one), and the specific SteinSwitch states (which are ON and which are OFF) when the issue occurred.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"% Discord bug channel example","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"discord_bug_channel_example | scale=100 | caption=bottom","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The Leckiestein Discord bug reporting channels. Each SWMC core family has its own channel; post your bug report in the channel matching the core you are running.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"\/%","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"9. What\u0026#39;s next","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"The Apr.28.1.2025 release replaces Core 0\u0026#39;s inline SteinSwitch architecture with SteinSwitch Definitions (SSDs); keyword-based configuration through printer notes. Core 1 is the newer system but Core 0 stable remains in active maintenance for users who prefer the proven baseline.","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"For advanced features like SteinWipe User Definitions (SWUDs), ProTab hardware support, and the next generation of SWMC, see the Dev Pack Pro listing.","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"10. Licence and liability","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"SWMC modifies printer motion and startup behavior via slicer-level G-code. Use of this profile is at the user\u0026#39;s own risk. The user\/operator assumes full responsibility for machine operation, monitoring, and all outcomes. Leckiestein shall not be held liable for damage, injury, or losses resulting from use, misuse, or modification of this profile preset.","b":false,"i":false}]},{"type":"heading","level":2,"children":[{"t":"text","v":"11. ","b":false,"i":false},{"t":"link","v":"Terms and conditions","url":"https:\/\/leckiestein.com\/policies\/terms-of-service","target":"_blank"},{"t":"text","v":"","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"By purchasing or downloading this release, you agree to the Leckiestein Terms and Conditions for Digital Products, effective January 1, 2025. Full terms are available on the main Leckiestein site.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"11.1 Usage rights","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"Your purchase grants you a ","b":false,"i":false},{"t":"text","v":"personal, non-transferable, non-exclusive license","b":true,"i":false},{"t":"text","v":" to use this release. You may download and use the files for your personal projects, and modify the gcode for your own use.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"11.2 Not allowed","b":false,"i":false}]},{"type":"list","listType":"unordered","items":[{"children":[{"t":"text","v":"Reselling, redistributing, or sharing the .3mf or its embedded gcode","b":false,"i":false}]},{"children":[{"t":"text","v":"Uploading the files to public or private repositories","b":false,"i":false}]},{"children":[{"t":"text","v":"Selling physical items produced from the files without a Tier 3+ commercial license","b":false,"i":false}]}]},{"type":"heading","level":4,"children":[{"t":"text","v":"11.3 Commercial use","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"If you wish to use this release for commercial purposes, you must subscribe to the Pro Maker License Tier (Tier 3+ on Patreon) or purchase a separate commercial license. Any unauthorized commercial use is a violation of these terms.","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"11.4 Non-refundable","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"All digital product sales are final and non-refundable once the files have been downloaded. If you experience technical issues or believe a product has an error, contact Leckiestein via direct messages for assistance (not in comment threads).","b":false,"i":false}]},{"type":"heading","level":4,"children":[{"t":"text","v":"11.5 Copyright","b":false,"i":false}]},{"type":"paragraph","children":[{"t":"text","v":"All intellectual property rights to this release remain with Leckiestein. Any infringement of these rights may result in legal action.","b":false,"i":false}]}]
[{"base":"offset_chart_v3","url":"https:\/\/leckiestein.com\/cdn\/shop\/files\/offset_chart_v3.png?v=1776879866\u0026width=2400","width":800,"height":926},{"base":"cali_y_axis_aligned","url":"https:\/\/leckiestein.com\/cdn\/shop\/files\/cali_y_axis_aligned.jpg?v=1777948631\u0026width=2400","width":512,"height":512},{"base":"wiper_mount_installed","url":"https:\/\/leckiestein.com\/cdn\/shop\/files\/wiper_mount_installed.jpg?v=1776877683\u0026width=2400","width":4032,"height":2268},{"base":"discord_bug_channel_example","url":"https:\/\/leckiestein.com\/cdn\/shop\/files\/discord_bug_channel_example.png?v=1776891401\u0026width=2400","width":740,"height":276},{"base":"template_custom_gcode_location","url":"https:\/\/leckiestein.com\/cdn\/shop\/files\/template_custom_gcode_location.png?v=1776879798\u0026width=2400","width":1774,"height":838},{"base":"install_step_1_import","url":"https:\/\/leckiestein.com\/cdn\/shop\/files\/install_step_1_import.png?v=1776878899\u0026width=2400","width":1046,"height":278},{"base":"install_step_2_preset","url":"https:\/\/leckiestein.com\/cdn\/shop\/files\/install_step_2_preset.png?v=1776878899\u0026width=2400","width":1588,"height":690}]