-
Notifications
You must be signed in to change notification settings - Fork 0
Installation
⚠️ Back up your printer config before installing. The installer modifies init scripts,printer.cfg, and some Klipper extras. It saves backups to/usr/data/guppyify-backup/, but you should keep your own copy as well.
🖨️ Mounting the screen: the 3D-printable bracket I use to attach the display to the printer is on Thingiverse — Ender-3 V3 KE screen mount. Print it before you start if you don't already have a mount.
🖨️ Alternative mount: if you'd rather keep the screen closer to its original stock position, @DylanUnofficial built Nebula screen mount on Printables. Thanks Dylan!
SSH into your printer and run:
sh -c "$(wget --no-check-certificate -qO - https://raw.githubusercontent.com/coreflake1/guppyscreen/main/scripts/installer.sh)"Use
installer.sh, notinstaller-deb.sh. The-debvariant targets aarch64/systemd/Debian and exits immediately withTerminating... Your OS Platform has not been tested with Guppy Screenon the KE.
The installer:
- Confirms the architecture is
mipsand the screen is <800 px, then selects the small-screen asset. - Verifies
/lib/ld-2.29.sois present and that Moonraker is reachable (localhost:7125). - Downloads the release tarball and extracts it to
/usr/data/guppyscreen/. If you still have the old H.264 camera add-on (go2rtc) installed from a much older version, it's removed automatically at this point to free up memory — this happens every time, no prompt. - Sets up
guppyconfig.json(your app settings — rotation, sensor names, touch calibration, toggles, etc.). If this is a fresh install, it just writes the packaged defaults. If you already have a settings file from a previous install, it merges the packaged defaults underneath it instead of overwriting — anything you've already customized is kept exactly as it was. If one of a few specific settings (likeinvert_z_directionor the log level) differs from the recommended default, it prints a note in the install log so you know it noticed — it does not change your value. - Smoke-tests the binary, wires up Klipper extras, and installs the init script.
- Starts GuppyScreen via
/etc/init.d/S99guppyscreen. - Offers the optional features (see below).
Partway through, the installer asks:
=== Do you want to disable all Creality services (revertible) with GuppyScreen installation? ===
Disable all Creality Services? (y/n):
This prompt only appears if Creality's services aren't already disabled. If you've already
answered y to this on a previous install, the installer detects that and skips straight past it,
printing "Creality services are already disabled — leaving them that way" instead of asking again.
-
y(recommended) — frees up CPU/RAM for the things that matter (Klipper, Moonraker, the screen) by not starting Creality's cloud/app stack. This is what most KE users want. -
n— keeps Creality's services, but the installer still movesMonitoranddisplay-serveraside (renamed to.disable) so OpenKE can own the screen. The trade-off withyis that the Creality Cloud / Creality Print app integration stops working.
It's reversible either way — backups go to /usr/data/guppyify-backup/, and the uninstaller (plus the
notes it prints) restore the originals.
Near the end the installer asks:
=== OpenKE optional features ===
[Y] install all [n] skip all [o] choose each one
Choice (Y/n/o):
-
Yinstalls everything below. -
nskips it all (you can re-run the installer later to add them — it's safe to run again). -
owalks you through each one with its owny/Nprompt, so you can take Axis Twist but skip adaptive mesh + purge, add the camera but not TMC, etc.
What's on offer:
| Feature | What it does | Guide |
|---|---|---|
| Adaptive mesh + purge + park | mesh only the print footprint, adaptive purge line, smart park | guide |
| Axis Twist Compensation | left/right first-layer fix | guide |
| TMC Autotune | quieter, cooler steppers | guide |
| Skew Correction | square parts | guide |
| Firmware Retraction | enables G10/G11 firmware-level retraction commands, if your slicer uses them |
— |
| Screws Tilt Adjust | adds the SCREWS_TILT_CALCULATE bed-levelling helper |
— |
| Creality Nebula camera | image tuning that sticks across reboots | guide |
| Creality macros | M600 filament change (shows a Resume/Ignore/Cancel prompt with Unload/Load/Purge More options — errors from any of its buttons now surface as an on-screen message instead of silently doing nothing), Save Z-Offset (persists z-offset), useful macros (backup/PID/bed-level), Exclude Object | — |
| E-Steps Calibration | guided mark-extrude-measure rotation-distance wizard | guide |
| Pause/Resume/Cancel layer-shift fix | stops the bed crashing into the rail on resume or cancel (y_park 222→220 in both PAUSE and CANCEL_PRINT, which each hardcode their own copy) |
Troubleshooting |
Some of these still need a one-time calibration / slicer setup afterward (the installer can't do the physical part) — each guide walks you through it. Axis Twist is the only one that edits a Klipper core file (
probe.py); the installer backs it up first and the edit is reversible. The layer-shift fix editsgcode_macro.cfg(backed up first, and skipped automatically for either PAUSE or CANCEL_PRINT if your config doesn't have that macro's own stockY222value).
About the Creality macros: these used to come from the Creality Helper Script. Save Z-Offset, M600, useful macros, and E-Steps Calibration redefine sections a stock or Helper-Script config may already own (
[save_variables],[filament_switch_sensor filament_sensor],SET_GCODE_OFFSET,[idle_timeout], the backup/restore/reload-camera macros, extruderrotation_distancehelpers). To avoid a duplicate-section crash, the installer checks first — if none of those sections exist yet, you get OpenKE's own versions outright. If they're already defined elsewhere (e.g. an existing Helper-Script setup), it offers to safely replace them: it checks whether the existing sections are read anywhere else in your active config — not just the same file, since a real setup can easily have a macro's definition in one[include]d file and whatever reads or calls it in a completely different one — including a plain, unquoted gcode-command call from another macro's body, not just aprinter[...]lookup. If any reference turns up, it's a sign of a genuinely working, self-contained setup, not a stray duplicate, and it leaves everything untouched; otherwise, with your confirmation, it backs up the old file, comments out just the conflicting sections, and installs OpenKE's version in their place. Say no to the prompt (or it detects a working setup) and your existing macros keep running exactly as they were. Exclude Object also flipsenable_object_processingon inmoonraker.confwhen safe — including inserting it under an existing[file_manager]section, not just when that section is missing entirely.Moonraker and Nginx are vendored by OpenKE directly (a real clone of the official upstream Moonraker, and the same nginx binary the community K1/KE lineage has used for a while) — the installer no longer fetches either from the Creality Helper Script's repo at install time. Mainsail is also registered with Moonraker's
update_managerautomatically, so it shows up in Mainsail's own "Machine Update" panel instead of needing to be updated by hand.
Restarting after changes: the installer restarts Klipper for you. On the KE, the first restart after a config change occasionally shuts down with a
serialqueue … NoneTypeerror — this is a harmless host-MCU reconnect race, not a config problem. Just Restart Klipper again (Mainsail → Restart, which is more reliable than a bareFIRMWARE_RESTART); a cold boot always clears it. It can take more than one restart. See Troubleshooting.
Coexists with the Creality Helper Script. If you already set any of these up — by hand or via the
Helper Script — the installer detects it and, for M600/Save Z-Offset/useful macros/E-Steps
Calibration specifically, offers to safely swap in OpenKE's own version (see above) rather than just
leaving the old one in place forever; everything else it skips adding a config section you already have
(no duplicate-section crash), and it backs up any Klipper-extras module it overwrites (e.g. an existing
TMC Autotune) to /usr/data/guppyify-backup/ first. The everyday macros — M600/filament, Save
Z-Offset, useful macros, E-Steps Calibration, [exclude_object] — are now shipped by OpenKE (the
Creality macros and E-Steps Calibration options), so a fresh printer gets them outright; on a
printer that already has them (e.g. an existing Helper-Script setup), M600, Save Z-Offset, useful
macros, and E-Steps Calibration offer the safe-replace prompt, Exclude Object is skipped. Either way
it's safe to run on top of
an existing setup — nothing is changed without either a clean "nothing conflicts" state or your explicit
yes at the prompt.
| Change | Reverted by uninstall? |
|---|---|
Extracts release to /usr/data/guppyscreen/
|
Yes — the uninstaller deletes this whole directory (with a confirmation prompt) |
Installs /etc/init.d/S99guppyscreen
|
Yes |
Replaces S50dropbear SSH init script¹ |
No — original saved to backup |
Disables boot display (S12boot_display moved to backup) |
Yes (restored from backup) |
Backs up + optionally removes S99start_app
|
Partially (restored from backup) |
Renames Monitor + display-server to .disable (if chosen) |
Yes (renamed back automatically) |
Adds [include GuppyScreen/*.cfg] to printer.cfg
|
Yes (line removed) |
Creates printer_data/config/GuppyScreen/
|
Yes |
Overwrites calibrate_shaper_config.py in Klipper extras |
No — original saved to backup |
Symlinks guppy_module_loader.py, guppy_config_helper.py, tmcstatus.py
|
Yes |
Replaces matplotlib ft2font.so
|
Partially (original moved to backup) |
¹ The KE's stock S50dropbear has its start call commented out, so SSH does not auto-start on a
clean reboot. The replacement fixes this — SSH will auto-start after install. This one is
permanent by design: even uninstalling OpenKE does not put the stock version back, because the
stock version has a separate startup race with the Creality display service that can leave SSH
unreachable — exactly when you'd most want remote access. See
Resetting & Uninstalling.
Backups are written to /usr/data/guppyify-backup/ before any destructive change. A fresh,
timestamped copy of printer.cfg (printer.cfg.YYYYMMDD-HHMMSS.bak) is taken on every run.
No. Your calibration values — Z-offset, bed mesh, input shaper, skew, axis-twist, TMC Autotune —
live in printer.cfg's SAVE_CONFIG block (and Z-offset in variables.cfg). The installer only adds
includes and copies files; it never rewrites those saved values, so re-running it does not
un-calibrate your printer. The probe-patch backup (probe.py.bak) and the timestamped printer.cfg
backups give you a restore point regardless.
The one thing that does wipe calibrations is a Creality firmware update (it can reset
printer.cfgand erase Klipper-side files) — that's true of any Klipper mod, not OpenKE specifically. After a firmware update, re-run the installer and re-run the affected calibrations.
⚠️ Unstable, for testers only.ke-nextis the active development branch — it can contain half-finished or experimental work between releases. Don't run this on a printer you rely on for real prints unless you're comfortable recovering it yourself (see Uninstall below, or just re-run the normal install command to go back to the latest stable release).
Every push to ke-next builds automatically and publishes to a moving nightly-ke-next prerelease
tag on GitHub. To install the latest one, fetch installer.sh from ke-next itself (not main) and
pin the release tag:
PINNED_RELEASE=nightly-ke-next sh -c "$(wget --no-check-certificate -qO - https://raw.githubusercontent.com/coreflake1/guppyscreen/ke-next/scripts/installer.sh)"Check which commit you're actually running from the on-screen Tune → System Info panel — the
version string is nightly-<commit sha>. Cross-reference that sha against
the nightly-ke-next release page
or ke-next's commit history to see what changed.
To go back to the latest stable release, just run the normal install command again
(no PINNED_RELEASE) — it always resolves the latest actual tagged release, never a prerelease.
sh -c "$(wget --no-check-certificate -qO - https://raw.githubusercontent.com/coreflake1/guppyscreen/main/scripts/installer.sh)" uninstallUninstall stops GuppyScreen, removes /etc/init.d/S99guppyscreen, restores S12boot_display and
S99start_app from backup, renames Monitor / display-server back if they were disabled, removes
the [include GuppyScreen/*.cfg] line from printer.cfg, removes the GuppyScreen config directory, and
removes the Klipper symlinks. So Creality's display/app stack comes back automatically on the next reboot,
whichever install option you picked.
Not automatically restored (originals live in /usr/data/guppyify-backup/):
-
gcode_shell_command.pyandcalibrate_shaper_config.pyin Klipper extras - The
S50dropbearreplacement — restore withcp /usr/data/guppyify-backup/S50dropbear /etc/init.d/S50dropbear -
libeinfo.so.1/librc.so.1symlinks in/lib/ - The print-quality mod modules in Klipper extras (
autotune_tmc.py,motor_constants.py,axis_twist_compensation.py) and theprobe.pyAxis-Twist edit. These are left in place on purpose — removing them would break aprinter.cfgthat still has saved[autotune_tmc]/[axis_twist_compensation]sections. To fully revert, restorecp /usr/data/guppyify-backup/probe.py.bak /usr/share/klipper/klippy/extras/probe.py, delete those modules, and remove the matching sections fromprinter.cfg. The uninstaller prints these exact steps.
A reboot is required after uninstall to restore display services.
- Init script:
/etc/init.d/S99guppyscreen - Binary + data:
/usr/data/guppyscreen/ - Log:
/usr/data/printer_data/logs/guppyscreen.log - Auto-restart on crash is handled by
supervise-daemon(fromk1/k1_mods/respawn/), which needs thelibeinfo.so.1/librc.so.1symlinks created during install.
⚠️ Caveat: because the service is supervised, simplykill-ing the process will cause it to respawn. Use/etc/init.d/S99guppyscreen stopto stop it cleanly.
See Troubleshooting for current installer/upgrade caveats.
Get started
Get great prints
- Calibration walkthrough (A→Z)
- Axis Twist Compensation
- Adaptive meshing + purge
- Square parts (Skew Correction)
- Quieter steppers (TMC Autotune)
Using the screen
Help
- Build from source
- Dev & simulator
- Architecture
- Configuration
- Releases & deployment
- Contributing
- Publishing this wiki
NebulaOS-specific