Install Menu¶
Moonraker and Nginx — K2 Plus¶
K2 Plus differs significantly from K1
On the K1 Series, Moonraker and Nginx are installed by the helper script. On the K2 Plus, both are pre-installed from the factory firmware and run from the read-only /usr/share/ partition. The approach here is therefore fundamentally different: instead of installing from scratch, you are extending the stock installation.
What Ships From the Factory¶
The K2 Plus comes with the following already running:
| Component | Details |
|---|---|
| Fluidd | Served at http://<printer-ip>:4408, static files at /usr/share/fluidd/ |
| Moonraker | Running at 127.0.0.1:7125, config at /usr/share/moonraker/moonraker.conf |
| Nginx | Config at /etc/nginx/nginx.conf, single-file (no conf.d/ directory) |
| Klipper | Running via /usr/share/klippy-env/, config at /mnt/UDISK/printer_data/config/printer.cfg |
You can verify all four are running over SSH:
Architecture Overview¶
Browser → nginx (port 4408)
├── / → /usr/share/fluidd/ (static Fluidd files)
├── /websocket → 127.0.0.1:7125 (Moonraker WebSocket)
├── /printer|api|access|machine|server → 127.0.0.1:7125 (Moonraker REST)
└── /webcam/ → 127.0.0.1:8080 (WebRTC/MJPEG streams)
Moonraker (7125) → /tmp/klippy_uds → Klipper (klippy.py)
Mainsail is not pre-installed. See Mainsail to add it on port 4409.
Moonraker Config Location¶
The stock Moonraker config is at /usr/share/moonraker/moonraker.conf on the read-only system partition.
Do not edit /usr/share/moonraker/moonraker.conf directly
This file is on the read-only system partition and will be overwritten on every firmware update. Any changes made directly to this file will be lost. Use the helper script approach to apply persistent changes.
The stock config includes:
[machine]withprovider: none— meaning Moonraker has no system service management capability. Reboot/shutdown buttons in Fluidd will not work without Host Control Support (see below).- No
[update_manager]section — the Update Manager panel in Fluidd is empty by default. - No
[timelapse]component — see Moonraker Timelapse to add it.
Extending Moonraker with Include Files¶
Because the stock config is read-only, the helper script adds a persistent include directive by patching the moonraker startup. Additional config is written to:
This file survives firmware updates because it lives on /mnt/UDISK/.
Make sure you have followed the Install Helper Script section, then from the script's [Install] Menu install Moonraker Extensions:
The script will:
- Write
/mnt/UDISK/printer_data/config/moonraker.confwith the[update_manager]section and any additional components you enable. - Patch the Moonraker startup to load the include file.
- Restart Moonraker via
/etc/init.d/S56moonraker restart.
Restarting Services¶
The K2 Plus uses OpenWrt rc.d init scripts. There is no supervisorctl command (unlike K1).
# Restart Moonraker
/etc/init.d/S56moonraker restart
# Restart Klipper
/etc/init.d/S55klipper restart
# Restart Nginx
/etc/init.d/S80nginx restart
# Restart the low-level MCU bridge
/etc/init.d/S54klipper_mcu restart
Host Control Support¶
By default, the Reboot and Shutdown buttons in Fluidd do nothing on the K2 Plus because Moonraker's [machine] provider is set to none.
The helper script installs a lightweight host control shim that intercepts these commands and routes them to the appropriate system call.
Install it from the [Install] Menu → Host Control Support.
Once installed, reboot/shutdown from the Fluidd power menu will work correctly.
Adding Mainsail¶
Mainsail is not pre-installed. To add it on port 4409, see Mainsail. The helper script adds a second server block to the nginx config for Mainsail alongside the existing Fluidd block.
Update Manager¶
Once the helper script has written /mnt/UDISK/printer_data/config/moonraker.conf with the [update_manager] section, the Update Manager panel in Fluidd will become active and show available updates for:
- Creality Helper Script itself
- Any additional components you have installed (Fluidd update, Mainsail, timelapse plugin, etc.)
Updates performed via Update Manager do not affect the firmware itself or the read-only /usr/share/ partitions.
Fluidd — K2 Plus¶
Fluidd is the primary web interface on the K2 Plus, pre-installed at port 4408 from the factory. This page covers updating, repairing, and restoring Fluidd using the Helper Script.
Pre-installed
You do not need to install Fluidd — it ships with the K2 Plus. This page is for updating to the latest version or repairing a broken installation.
Access Fluidd¶
Open your browser and navigate to:
Replace <printer-ip> with your printer's IP address (found in Settings → Network on the touchscreen).
Update / Repair Fluidd¶
From the helper script menu, select option 8 — Fluidd (install/update/repair).
When Fluidd is already installed you will be offered:
- Update — download and install the latest release
- Repair — re-download and reinstall the current latest (fixes corrupted files)
- Restore nginx block only — fixes port 4408 access without re-downloading Fluidd
Manual Update via SSH¶
# Download latest Fluidd
wget -O /tmp/fluidd.zip https://github.com/fluidd-core/fluidd/releases/latest/download/fluidd.zip
# Install
mkdir -p /usr/share/fluidd
unzip -q -o /tmp/fluidd.zip -d /usr/share/fluidd
rm /tmp/fluidd.zip
# Restart nginx
/etc/init.d/S80nginx restart
Fluidd Configuration¶
Key Fluidd settings are stored in Moonraker. Once Moonraker Extensions are installed, configure Fluidd from Settings in the web interface.
Camera Setup¶
If the camera is not visible in Fluidd after opening the interface:
- Go to Settings → Cameras
- Enable the existing camera entry, or delete and recreate with: Camera is configured automatically when Camera Support is installed (option 11).
Nginx Configuration¶
Fluidd is served by nginx from /usr/share/fluidd/ on port 4408. The nginx config is at /etc/nginx/nginx.conf.
The K2 Plus nginx config proxies all Moonraker API requests (/printer/, /api/, /machine/, etc.) to 127.0.0.1:7125, and webcam streams to 127.0.0.1:8080–8083.
Do not edit nginx.conf directly
/etc/nginx/nginx.conf is on the writable partition but the Helper Script backs it up before modifying it. If you edit it manually and break nginx, restore the backup:
Mainsail — K2 Plus¶
Mainsail is an alternative web interface to Fluidd. It is not pre-installed on the K2 Plus but can be added by the Helper Script on port 4409, running alongside the stock Fluidd installation.
Installation¶
From the helper script menu, select option 9 — Mainsail (port 4409).
The script will:
1. Download the latest Mainsail release
2. Install static files to /usr/share/mainsail/
3. Add a new nginx server block for port 4409
4. Restart nginx
Access Mainsail¶
After installation:
Update / Repair Mainsail¶
Run the helper script and select option 9 again. If Mainsail is already installed you will be offered:
- Update — download and install the latest release
- Repair — re-download and reinstall
- Restore nginx block only — restore port 4409 without re-downloading
Fluidd vs Mainsail¶
Both interfaces connect to the same Moonraker instance and offer equivalent functionality. Key differences:
| Feature | Fluidd | Mainsail |
|---|---|---|
| Port | 4408 (pre-installed) | 4409 (helper script) |
| UI style | Clean, dashboard-focused | Feature-rich, more settings |
| Timelapse UI | Via plugin | Built-in |
| Spoolman | Via plugin | Built-in |
You can use both simultaneously — they share the same Moonraker backend and printer state.
Mainsail Configuration¶
Mainsail stores its configuration in mainsail.cfg. After installation, add this include to your printer.cfg if you want Mainsail-specific features:
Or add it via the Fluidd/Mainsail editor.
Fans Control Macros — K2 Plus¶
The K2 Plus has a more complex fan topology than the K1 Series. There are three independently controllable output fans, a hotend cooling fan (automatic), and a chamber fan that doubles as both a cooling temperature_fan and a PTC heater companion. This page documents what each fan does, how to control them, and what the helper script macros provide.
K2 Plus fan map differs from K1
The K1 Series has a part cooling fan and a nozzle cleaning fan. The K2 Plus has no nozzle cleaning fan. Do not apply K1 fan macro configs to the K2 Plus.
Fan Hardware Map¶
| Fan | Klipper name | Pin | Type | Notes |
|---|---|---|---|---|
| Hotend (heatsink) | hotend_fan |
nozzle_mcu:PB7 + PB1 |
heater_fan |
Auto — on when extruder > 50°C |
| Part cooling | fan0 |
nozzle_mcu:PB15 |
output_pin PWM |
Controlled by slicer M106/M107 |
| Chamber cooling | chamber_fan |
PA0 |
temperature_fan |
Auto watermark at 35°C target |
| Aux fan | fan2 |
PB4 + PB3 |
output_pin PWM |
Electronics bay / aux cooling |
| Chamber heater fan (PTC) | chamber_fan (heater companion) |
PB14 (inverted) |
heater_fan |
Tied to chamber_heater, enable pin PB2 |
fan0_en
There is an additional output_pin fan0_en on nozzle_mcu:PB6 which acts as an enable gate for the part cooling fan circuit. The helper script macros manage this automatically — do not drive fan0 without first ensuring fan0_en is high.
Controlling Fans via Macros¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install Fans Control Macros.
The installed macros give you named controls usable from Fluidd, Mainsail, or G-code:
Part cooling fan (fan0)¶
The slicer's standard M106 S[value] also controls fan0 directly.
Aux fan (fan2)¶
Chamber temperature target¶
The chamber fan runs in watermark control mode with a default target of 35°C. To raise or lower the cooling setpoint:
Chamber heater¶
The chamber heater is a heater_generic named chamber_heater. Set target temperature:
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=40 ; heat to 40°C
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0 ; off
The PTC heater companion fan (chamber_fan heater_fan) runs automatically when chamber_heater is active and the heater exceeds the configured threshold.
Useful Macros Added by Helper Script¶
| Macro | Purpose |
|---|---|
SAVE_FANS |
Saves current fan speeds to variables |
RESTORE_FANS |
Restores previously saved fan speeds |
FANS_OFF |
Turns off all output fans (does not affect hotend_fan autocontrol) |
CHAMBER_HEAT TARGET= |
Sets chamber_heater target and waits if WAIT=1 |
CHAMBER_COOL |
Disables chamber heater, sets cooling fan to full speed |
These are particularly useful in START_PRINT and END_PRINT macros — the helper script's Useful Macros page shows complete START/END examples that include chamber pre-heat.
START_PRINT Chamber Pre-heat Example¶
For materials requiring a warm chamber (ABS, ASA, PA), add chamber pre-heating to your START_PRINT:
[gcode_macro START_PRINT]
gcode:
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(200)|float %}
{% set CHAMBER_TEMP = params.CHAMBER_TEMP|default(0)|float %}
; Heat bed first
M140 S{BED_TEMP}
; If a chamber temp is requested, start heating the chamber now
{% if CHAMBER_TEMP > 0 %}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={CHAMBER_TEMP}
{% endif %}
M190 S{BED_TEMP} ; wait for bed
; Wait for chamber if needed
{% if CHAMBER_TEMP > 0 %}
TEMPERATURE_WAIT SENSOR="heater_generic chamber_heater" MINIMUM={CHAMBER_TEMP - 2}
{% endif %}
M109 S{EXTRUDER_TEMP} ; wait for extruder
; ... homing, leveling, purge, print start
Notes on duplicate_pin_override¶
The K2 Plus printer.cfg contains a large [duplicate_pin_override] section because several pins are shared between the temperature_fan, heater_fan, and output_pin definitions (most notably PA0 and PC5). Do not remove this section — Klipper will refuse to start if shared pins are not declared in duplicate_pin_override.
[duplicate_pin_override]
pins: PC5,PA0,PC7,PB7,PB8,PB9,PB10,PB5,PB6,PA1,PB15,PB11,PB12,PB13,PA10,PA9,PB2,PB14,PB1
Useful Macros — K2 Plus¶
The helper script installs a set of commonly used macros adapted for the K2 Plus hardware. These replace the K1 Series macro set and account for the K2 Plus's dual-Z, actively heated chamber, CoreXY kinematics, and CFS.
K1 macros are not compatible
Do not copy K1 Series macros to the K2 Plus. Fan pin names, chamber references, and bed dimensions all differ.
Installation¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install Useful Macros.
Macros are written to /mnt/UDISK/printer_data/config/useful_macros.cfg and included from printer.cfg.
START_PRINT¶
The installed START_PRINT macro accepts the following parameters from your slicer:
| Parameter | Default | Description |
|---|---|---|
BED_TEMP |
60 | Bed target temperature |
EXTRUDER_TEMP |
200 | Extruder target temperature |
CHAMBER_TEMP |
0 | Chamber target (0 = no chamber pre-heat) |
FILAMENT_TYPE |
PLA | Used to set sensible defaults |
What it does¶
- Homes all axes (
G28) - Performs Z-tilt adjustment (
Z_TILT_ADJUST) — K2 Plus has dual Z motors - If
CHAMBER_TEMP > 0: starts chamber heater and waits for temperature - Waits for bed temperature (
M190) - Heats nozzle to 80% to avoid ooze during leveling (
M109 S{temp * 0.8}) - Runs KAMP adaptive bed mesh (
BED_MESH_CALIBRATE) if enabled - Heats nozzle to full temperature (
M109) - Runs purge line (
LINE_PURGE) at print boundary - Starts print
Slicer start G-code¶
In OrcaSlicer (or any Klipper-aware slicer), set your machine start G-code to:
START_PRINT BED_TEMP=[bed_temperature_initial_layer_single] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] CHAMBER_TEMP=[chamber_temperature]
END_PRINT¶
What it does:
- Turns off heaters (
M104 S0,M140 S0,SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0) - Moves toolhead to safe park position
- Disables steppers (except Z — holds position to prevent Z drop)
- Turns off fans
- Presents the part (moves bed forward)
PAUSE / RESUME / CANCEL_PRINT¶
The helper script installs improved versions of these macros that:
- Park the toolhead at a configurable safe position on pause
- Save and restore extruder position on resume
- Handle CFS state correctly if a tool change was in progress
WARMUP¶
Pre-heats the printer to a target without starting a print. Useful for letting the chamber stabilize before a critical print.
| Parameter | Description |
|---|---|
BED |
Bed target temperature |
EXTRUDER |
Extruder target (holds at temp for duration) |
CHAMBER |
Chamber heater target |
DURATION |
Soak time in seconds after all temps reached |
Z_TILT_ADJUST Note¶
The K2 Plus has two independent Z stepper motors (stepper_z and stepper_z1) and requires Z_TILT_ADJUST before every print to level the gantry. This is called automatically by START_PRINT. The probe points are:
Do not remove the Z_TILT_ADJUST call from START_PRINT — without it, gantry tilt accumulates over time and causes first-layer inconsistency.
RELOAD_CAMERA¶
Restarts the WebRTC camera service without rebooting the printer:
This calls /etc/init.d/S97webrtc restart via a gcode shell command. Useful when the camera feed drops without a hardware fault.
Requires Klipper Gcode Shell Command
RELOAD_CAMERA requires the Klipper Gcode Shell Command feature to be installed.
Save Z-Offset Macros — K2 Plus¶
The K2 Plus uses a prtouch_v3 strain-gauge probe for bed leveling. Z-offset is stored in the SAVE_CONFIG block of printer.cfg at /mnt/UDISK/printer_data/config/printer.cfg.
Path difference from K1
On K1, config lives under /usr/data/printer_data/config/. On K2 Plus it is /mnt/UDISK/printer_data/config/.
Installation¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install Save Z-Offset Macros.
Usage¶
Adjust Z-offset live during a print using babystepping, then save it permanently:
This writes the current live Z-offset to the [prtouch_v3] section in printer.cfg via SAVE_CONFIG.
To set a specific offset value:
Notes on prtouch_v3¶
The K2 Plus probe uses temperature compensation (enable_not_linear_comp: True) and performs automatic re-probing when the bed or nozzle temperature changes significantly. This means Z-offset can shift slightly between cold and hot starts — the temperature compensation accounts for this. If you notice first-layer variation between cold and warm starts, let the printer reach full print temperature before running Z_TILT_ADJUST and BED_MESH_CALIBRATE.
M600 Support — K2 Plus¶
M600 is the standard filament change G-code command. On the K2 Plus, M600 behavior differs depending on whether you are using single-filament mode or the CFS.
Installation¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install M600 Support.
Single-Filament Mode¶
In single-filament mode, M600 triggers a filament change pause:
- The print pauses (
PAUSE) - The toolhead parks at the configured park position
- The extruder retracts and the nozzle cools slightly to prevent ooze
- A notification is sent (via Fluidd/Mainsail alert, and companion apps if installed)
- You manually swap the filament, then resume with
RESUME
CFS Mode (K2 Plus Combo)¶
When the CFS is active, M600 at a tool-change boundary is handled automatically by the CFS M8200 macro sequence rather than pausing for manual intervention. See CFS — Color Filament System for the full tool-change sequence.
For an unplanned filament runout during a CFS print, the BOX_CHECK_MATERIAL_REFILL macro (triggered by filament_switch_sensor) handles recovery automatically if a loaded backup spool is available.
Config Location¶
The M600 macro is written to /mnt/UDISK/printer_data/config/m600.cfg and included from printer.cfg.
Path difference from K1
On K1, config lives under /usr/data/printer_data/config/. On K2 Plus it is /mnt/UDISK/printer_data/config/.
Klipper Adaptive Meshing & Purging — K2 Plus¶
KAMP (Klipper Adaptive Meshing & Purging) is integrated into the Creality Helper Script. It generates a bed mesh only over the area being printed, reducing homing and leveling time significantly on a large 350×350mm bed.
K2 Plus Bed Mesh Configuration¶
The stock bed mesh covers the full usable bed area:
KAMP will generate an adaptive sub-mesh within these bounds based on your print's actual footprint. A small print in the center of the bed will probe only the center region rather than all 81 points.
Installation¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install Klipper Adaptive Meshing & Purging.
The script installs KAMP to /mnt/UDISK/printer_data/config/ and adds the required [include] directives to printer.cfg.
K2 Plus path
KAMP config files are written to /mnt/UDISK/printer_data/config/ — not /usr/data/ as on K1.
Enabling Object Processing in Moonraker¶
KAMP requires Moonraker's object processing to be enabled so it can read the object boundaries from your G-code file.
Because the stock Moonraker config is on the read-only /usr/share/ partition, the helper script adds the following to /mnt/UDISK/printer_data/config/moonraker.conf:
This is applied automatically when you install KAMP. Moonraker restarts after installation to pick up the change.
Using KAMP in START_PRINT¶
After installation, update your START_PRINT macro to call BED_MESH_CALIBRATE with KAMP:
[gcode_macro START_PRINT]
gcode:
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(200)|float %}
G28 ; home all axes
M190 S{BED_TEMP} ; wait for bed temp
M109 S{EXTRUDER_TEMP * 0.8} ; pre-heat nozzle (not full temp yet, avoid ooze)
BED_MESH_CALIBRATE ; KAMP adaptive mesh (uses object boundaries)
M109 S{EXTRUDER_TEMP} ; full nozzle temp
LINE_PURGE ; KAMP purge line at print edge
Purge options¶
KAMP provides two purge methods:
LINE_PURGE— draws a purge line at the edge of the print area. Recommended for single-material prints.VORON_PURGE— draws a small purge blob. Less commonly used on the K2 Plus.
For CFS multi-material prints, the CFS box.cfg macros handle purging via the purge chute (X=133–160, Y=378). Do not use LINE_PURGE during CFS tool changes — it is only appropriate for the initial purge before the first layer.
KAMP Mesh Name¶
When KAMP is enabled, it creates and loads a bed mesh named kamp for the current print. This does not overwrite your saved default mesh.
To view the active mesh in Fluidd: Tune → Bed Mesh → kamp
Disabling KAMP per Print¶
You can disable KAMP for a specific print from Fluidd by toggling the KAMP button in the tune panel (added by the helper script). When disabled, BED_MESH_CALIBRATE falls back to a full 9×9 mesh across the entire bed.
Improved Shapers Calibrations — K2 Plus¶
The K2 Plus uses a LIS2DW accelerometer connected via SPI to the nozzle MCU. This is different from the K1 Series which uses an ADXL345. The helper script's improved resonance testing procedure works on both, but the Klipper config sections differ.
Hardware Details¶
| Item | Value |
|---|---|
| Accelerometer chip | LIS2DW |
| Interface | SPI (software) |
| CS pin | nozzle_mcu:PA4 |
| SCLK | nozzle_mcu:PA5 |
| MOSI | nozzle_mcu:PA7 |
| MISO | nozzle_mcu:PA6 |
| Axes map | x, z, y |
| SPI speed | 5 MHz |
The stock printer.cfg section:
[lis2dw]
cs_pin: nozzle_mcu:PA4
spi_speed: 5000000
axes_map: x,z,y
spi_software_sclk_pin: nozzle_mcu:PA5
spi_software_mosi_pin: nozzle_mcu:PA7
spi_software_miso_pin: nozzle_mcu:PA6
[resonance_tester]
accel_chip: lis2dw
probe_points:
175,175,175
min_freq: 20
max_freq: 120
accel_per_hz: 100
Your calibrated input shaper values (from the SAVE_CONFIG block):
Installation¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install Improved Shapers Calibrations.
Running Resonance Tests¶
Home the printer first
The resonance tester moves to probe_points (175, 175, 175 by default). Ensure the printer is homed and the bed is clear before running.
From Fluidd or Mainsail console:
; Test X axis
SHAPER_CALIBRATE AXIS=X
; Test Y axis
SHAPER_CALIBRATE AXIS=Y
; Test both axes sequentially
SHAPER_CALIBRATE
The test generates CSV data that the helper script processes to recommend a shaper type and frequency. Results are shown in the console and can be applied to printer.cfg via SAVE_CONFIG.
Manual test (raw data)¶
Raw CSV files are saved to /mnt/UDISK/printer_data/config/ and can be downloaded via Fluidd's file manager for external analysis.
Applying Results¶
After SHAPER_CALIBRATE completes, run:
This writes the recommended shaper type and frequency to the SAVE_CONFIG block in printer.cfg. Klipper restarts automatically to apply the changes.
Re-running After Hardware Changes¶
Re-run SHAPER_CALIBRATE after:
- Changing the nozzle or hotend assembly
- Tightening or replacing belts
- Changing print speed profiles significantly
- Any significant modification to the toolhead mass
The K2 Plus CoreXY kinematics means X and Y shaper values are independent. A change to toolhead mass (e.g. adding a heavier nozzle) primarily affects X; belt tension changes affect both.
Belt Tension Check¶
The K2 Plus includes a [belt_mdl] module for belt tension measurement. Check belt tension via the touchscreen (Settings → Self-check → Belt Tension) or with:
Target tension for both X and Y belts is 140 N with a tolerance of ±0.15 (as configured in printer.cfg). Re-run shaper calibration after any belt adjustment.
Moonraker Timelapse — K2 Plus¶
Moonraker Timelapse is a third-party Moonraker component that creates timelapse recordings of prints by capturing a frame at each layer change.
Installation¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install Moonraker Timelapse.
The component is installed to /mnt/UDISK/printer_data/ and registered in /mnt/UDISK/printer_data/config/moonraker.conf.
Timelapse Video Location¶
Completed timelapse videos are saved to:
Path difference from K1
On K1, timelapse videos are saved to /usr/data/printer_data/timelapse/. On K2 Plus the path is /mnt/UDISK/printer_data/timelapse/.
Videos can be downloaded directly from Fluidd's file manager under the Timelapse section, or via SCP:
Slicer Setup¶
Add the following to your slicer's layer change G-code:
And add this to your END_PRINT macro or slicer end G-code:
Camera¶
Moonraker Timelapse uses the snapshot URL from the camera configuration. Ensure Camera Support is installed before enabling timelapse.
Camera Support for Fluidd and Mainsail — K2 Plus¶
The K2 Plus camera is now supported in both Fluidd and Mainsail via a custom WebRTC bridge. See the Camera Support page for full details.
HelixScreen — K2 Plus¶
HelixScreen is a modern, lightweight touchscreen interface for Klipper 3D printers. It replaces the stock Creality touchscreen UI with a feature-rich Klipper-native interface.
Tested and working on K2 Plus
HelixScreen v0.99.72 was tested and confirmed working on the Creality K2 Plus.
Features¶
- Modern touch UI for Klipper
- Temperature control and monitoring
- Print management and history
- Bed mesh visualization
- Input shaper graphs
- Multi-material (CFS) management
- Auto-updates via Fluidd/Mainsail update manager
Installation¶
Install from the helper script:
Select 12) HelixScreen (touchscreen UI).
Or install manually via SSH:
python3 -c "import urllib.request as u; open('/tmp/install.sh','wb').write(u.urlopen(u.Request('http://dl.helixscreen.org/install.sh', headers={'User-Agent':'helixscreen-installer/1.0'}), timeout=30).read())" && sh /tmp/install.sh
Reboot after installation:
Known Limitations¶
WiFi management unavailable — HelixScreen shows a "WiFi unavailable" warning on the K2 Plus. This is cosmetic only — your printer's WiFi connection is not affected. The K2 Plus uses a proprietary WiFi management system that HelixScreen cannot access.
Updating¶
To update HelixScreen run the helper script and select option 12 again, or via SSH:
You can also update from the Fluidd/Mainsail update manager — HelixScreen registers itself automatically.
Removing¶
To restore the stock Creality touchscreen UI: Select Remove a feature → HelixScreen, or via SSH:
More Information¶
OctoEverywhere — K2 Plus¶
OctoEverywhere provides free remote access to your printer from anywhere in the world — including live webcam, full Fluidd/Mainsail control, and AI print failure detection.
Installation¶
From the Helper Script menu, select option 13 — OctoEverywhere.
Setup¶
-
After installation, check the Moonraker log for the OctoEverywhere plugin URL:
-
Open the URL shown in the log in your browser to link your printer to your OctoEverywhere account.
-
Create a free account at octoeverywhere.com if you don't have one.
-
Once linked, access your printer from anywhere at octoeverywhere.com or via the OctoEverywhere app.
Features¶
- Remote access — full Fluidd or Mainsail interface from any device
- Live webcam — view your print from anywhere
- AI failure detection — Gadget AI monitors your print and pauses on spaghetti detection
- Notifications — print start, finish, pause, and failure alerts
- Secure — end-to-end encrypted, no port forwarding required
Notes for K2 Plus¶
OctoEverywhere has been confirmed working on the K2 Plus. The Moonraker plugin installs as a component and starts automatically with Moonraker.
If OctoEverywhere loses connection after a Moonraker restart:
Then check the log again for the connection status.
Mobileraker Companion — K2 Plus¶
Mobileraker Companion enables push notifications for Klipper using Moonraker. It works on the K2 Plus with one known caveat.
Installation¶
Make sure you have followed the Install Helper Script section, then from the [Install] Menu install Mobileraker Companion.
Known Issue — HeaterFan Parse Error¶
Known compatibility issue
There is a known crash in Mobileraker when connecting to a K2 Plus. The K2 Plus printer.cfg uses a [heater_fan] configuration that Mobileraker's printer builder does not handle correctly, causing the app to fail with:
Status: This is an open issue in the Mobileraker project (issue #429). Check the issue for the latest fix status before installing.
Workaround: If the app crashes on connection, check for an updated Mobileraker release that includes the fix. The companion daemon itself (server-side) installs and runs correctly — the issue is in the mobile app's parsing of the K2 Plus fan configuration.
Configuration¶
After installation, the companion config is at:
Follow the Mobileraker setup guide to link the companion to your mobile app.
Restart¶
The Mobileraker companion runs as a Moonraker component and restarts with Moonraker.
SimplyPrint — K2 Plus¶
SimplyPrint has a dedicated K2 Series setup guide separate from the K1 guide.
Use the K2-specific guide
Do not follow the K1/K1C SimplyPrint setup guide for a K2 Plus. SimplyPrint provides a separate onboarding flow for the K2 series.
Refer to the official SimplyPrint K2 setup guide for current instructions:
SimplyPrint K2 Series Setup Guide
SSH Root Access¶
SimplyPrint requires SSH root access to install its companion. Follow the Enable Root Access section first.
- User:
root - Password:
creality_2024
Data Path Note¶
If SimplyPrint's installer asks for the printer data path or Moonraker config location, use:
Not /usr/data/printer_data/ as stated in the K1 guide.
CFS — Color Filament System (K2 Plus Combo)¶
This page covers the built-in CFS (Color Filament System) that ships with the K2 Plus Combo. The CFS is Creality's multi-material hub allowing automatic filament switching between up to 16 spools (4 units × 4 slots each).
Combo only
This page applies to the K2 Plus Combo. If you have the standalone K2 Plus without the CFS, this hardware is not present and these config sections can be ignored.
How the CFS Works in Klipper¶
The CFS is not a standalone Klipper component — it is fully integrated into the stock printer.cfg via box.cfg. It communicates over a dedicated RS-485 serial bus and is exposed to Klipper through a custom Creality module ([box]).
Config files involved¶
| File | Location | Purpose |
|---|---|---|
box.cfg |
/mnt/UDISK/printer_data/config/box.cfg |
All CFS hardware config, positions, and macros |
printer.cfg |
/mnt/UDISK/printer_data/config/printer.cfg |
Includes box.cfg via [include box.cfg] |
Key hardware sections in box.cfg¶
[serial_485 serial485]
serial: /dev/ttyS5 # dedicated RS-485 port for CFS
baud: 230400
[auto_addr] # automatic address discovery for CFS units
[filament_rack]
not_pin: !PA5 # filament presence sensor for the rack
[box]
bus: serial485
filament_sensor: filament_sensor
# ... cut positions, purge positions, temperatures, velocities
Filament Slot Addressing¶
The CFS addresses filaments using a TxY notation:
- T — fixed prefix
- x — unit number (1–4, one per CFS box)
- Y — slot letter within that unit (A, B, C, D)
Examples: T1A, T1B, T2C, T4D
The M8200 macro translates between Klipper's I parameter (0-based integer index) and this notation:
Filament Change Sequence¶
A full tool-change triggered by M8200 or a slicer Tx command follows this sequence:
- Pre-op (
CR_BOX_PRE_OPT) — move toolhead to safe Z height, prepare state - Move to cut position — X=10 Y=200 (pre-cut), then execute cut
- Cut (
CR_BOX_CUT/M8200 C) — cutter fires at calibratedcut_pos_x - Retract (
CR_BOX_RETRUDE/M8200 R) — pulls filament back to CFS unit - Load new filament (
CR_BOX_EXTRUDE/M8200 L I[slot]) — feeds new filament to toolhead - Purge/flush (
CR_BOX_FLUSH/M8200 F) — extrudes purge length at purge position (X=133–160, Y=378) - End-op (
CR_BOX_END_OPT) — restore fans, move to safe position
Purge and wipe positions (from your calibrated box.cfg)¶
| Position | X | Y |
|---|---|---|
| Pre-cut | 10 | 200 |
| Purge / extrude | 133 | 378 |
| Wipe left | 135–160 | 378 |
| Wipe right | 160–170 | 374 |
| Safe home | 225 | 345 |
| Clean left boundary | 135 | 378 |
| Clean right boundary | 160 | 378 |
Calibrated Cut Position¶
Your printer's cut position has been auto-calibrated and saved in the SAVE_CONFIG block of printer.cfg:
Do not remove the SAVE_CONFIG block
The cut_pos_x value is the result of the cutter calibration routine. If you wipe this block or restore factory settings, you will need to re-run the cutter calibration from the touchscreen before the CFS can operate correctly.
Key Macros¶
These macros are defined in box.cfg and are available in Fluidd/Mainsail:
| Macro | Purpose |
|---|---|
BOX_LOAD_MATERIAL |
Full load sequence for a new spool |
BOX_QUIT_MATERIAL |
Full unload sequence |
BOX_INFO_REFRESH ADDR= NUM= |
Refresh RFID and remaining length for a slot |
M8200 P |
Pre-op (prepare for filament change) |
M8200 C |
Execute cut |
M8200 R |
Retract filament to CFS |
M8200 L I=[slot] |
Load filament from slot (0-based index) |
M8200 F |
Purge/flush new filament |
M8200 O |
End-op (restore state after change) |
BOX_CHECK_MATERIAL_REFILL |
Called automatically on runout |
Slicer Setup (OrcaSlicer)¶
In OrcaSlicer, configure the K2 Plus Combo as a multi-material printer:
- Tool change G-code: Use the
M8200sequence or theT[next_extruder]command. - The stock firmware interprets
T0–T15and translates them to the CFS slot addressing automatically. - Set flush/purge volume to match the values in your
box.cfg(BOX_MATERIAL_CHANGE_FLUSHuses the configured length and velocity).
See the OrcaSlicer page for full slicer configuration.
Troubleshooting¶
CFS not responding / filament not loading
- Verify the RS-485 cable is seated on both the CFS unit and the printer mainboard.
- Check that /dev/ttyS5 is present: ls /dev/ttyS*
- Restart Klipper: /etc/init.d/S55klipper restart
Cut position error after factory reset
- Re-run cutter calibration from Settings → CFS → Cutter Calibration on the touchscreen.
- The calibrated value is written back to the SAVE_CONFIG block in printer.cfg.
Filament sensor always triggered / never triggered
- Check filament_switch_sensor filament_sensor in Fluidd's sensor status.
- The sensor pin is ^!nozzle_mcu:PA11 — the ^ is a pull-up, ! inverts logic. Do not remove these modifiers.
Purge position leaving blobs on print
- Adjust extrude_pos_x and extrude_pos_y in box.cfg to match your waste chute position.
- Adjust clean_left_pos_x / clean_right_pos_x to ensure the wiper fully removes the purge string.
Backup Before Modifying¶
Before editing box.cfg or the CFS-related sections of printer.cfg, back up your config:
cp /mnt/UDISK/printer_data/config/box.cfg /mnt/UDISK/printer_data/config/box.cfg.bak
cp /mnt/UDISK/printer_data/config/printer.cfg /mnt/UDISK/printer_data/config/printer.cfg.bak
Or use the helper script's Backup & Restore Klipper configuration files feature.