Repository navigation
v0.12.0 - printer farm, phone app, one-line install, Arabic docs
Pre-releaseUpgrading: update from Mainsail or Fluidd (or git pull) and restart Klipper (FIRMWARE_RESTART, never while printing) to load the new macros. The slicer's end G-code stays the same, and your settings are kept. AUTO_EJECT_GUARD now checks the bed itself by default (guard_action: "check", see below). Then run ~/klipper-auto-eject/install.sh once over SSH: it asks which of the new parts you want (the web page, your phone from anywhere, notifications, a printer farm) and sets them up.
New here? One line on the printer installs it and asks a few questions:
cd ~ && git clone https://github.com/ahmedbebars/klipper-auto-eject.git && ./klipper-auto-eject/install.shبالعربية: الشروحات الأساسية متاحة الآن بالعربية في docs/ar.
Tested on a Voron Trident 450 with Voron Tap: the printer farm on a real network of five Klipper printers (the search found the other four in about 7 seconds, one of them over both the network and Tailscale, listed once), remote access over Tailscale with HTTPS, the web page installed as an app, and ntfy notifications. The installer was tested in a scratch config folder, with and without the blade.
Changed
- The installer asks what you want. Run with no options from a terminal,
install.shasks a
few yes/no questions in plain words (the blade, the web page, your phone, notifications, more
than one printer) and sets up what you said yes to; the options still work as before. It adds
the Klipper sections auto-eject needs ([exclude_object],[respond],[save_variables]) when
your config lacks them, asking Klipper itself which ones it has, and offers to restart Klipper at
the end, only when it is not printing. Install is one line:
cd ~ && git clone https://github.com/ahmedbebars/klipper-auto-eject.git && ./klipper-auto-eject/install.sh. - On phones, the language list at the top of the web page is a globe button, so the title fits.
Added
-
Documentation in Arabic (
docs/ar/): the home page, getting started, installation, the web
page, remote access, notifications, the printer farm, the FAQ and safety. On the website they
read right to left, with commands left to right. -
New pictures: the page clearing a bed, the app on a phone (clearing the bed, the farm in Arabic,
the blade), the printer farm, its network search and Check a file; and a "works with" row
with the logos of Klipper, Mainsail, Fluidd, OrcaSlicer and PrusaSlicer
(docs/images/logos/README.mdsays where each comes from). -
The farm's network search lists a printer found both on the local network and over Tailscale
once (it compares their network cards), asks only Linux devices on Tailscale, and remembers the
printers you left out: they come last and unticked the next time. -
A printer farm (
install.sh --farm,docs/farm.md): every Klipper printer of the network on
one page, the Printer farm tab, with the ones that need you first: a print to take off, a part
that stayed on the bed, an error, a paused queue. Installed on one printer only: Search the
network finds the others (its own network and Tailscale) and adds them; they need nothing
installed, and printers without auto-eject show their prints too. Buttons per printer: Bed is
clear, Start the queue, Emergency stop (both ask first), Open its own page, rename
or remove; camera pictures come through the farm printer, so the whole farm works from a phone
with remote access on that printer alone. Phones with notifications on get them from every
printer, with its name. It runs in theklipper-auto-ejectservice (push/farm.py), which
nginx publishes at/auto-eject/api/(--farmand--pushadd that to a page installed before). -
AUTO_EJECT_GUARDchecks the bed itself (guard_action: "check", the new default). When
the printer remembers parts from an earlier print that was not ejected, the next print first
homes around them and probes where they were: nothing there, the print simply starts and nobody
has to click Bed is clear; a tall part, it is pushed off first; a thin part such as a
stencil, the print stops until it is taken off. Without a probe that can touch plastic, or with
no free spot to home Z, it stops like"error". -
Thin parts are found reliably: for parts thinner than twice
verify_threshold, the probe also
touches the bare bed on two sides of the part and compares with the lower reading, so a bed a
little out of flat or a purge line next to the part does not hide a 0.4 mm stencil. -
nozzle_part_max_temp(50 °C): a nozzle probe waits until the nozzle is this cool before it
touches where parts are or were, so it cannot dent or stick to a part, with the part fan on to
cool it faster. The wait before homing Z on the bare sheet uses the fan too. -
A dialog after a print that ended without an eject (no
AUTO_EJECTin the end G-code,
cancelled, or stopped): take the parts off and click Bed is clear. -
The web page is an app on phones (PWA). Over HTTPS it installs with its own icon (Android:
Install the app on the page, iPhone: Add to Home Screen) and opens without the browser's
bars; a service worker keeps a copy of its own files, so it opens and shows that the printer is
unreachable without a connection. On phones the sections move to a tab bar at the bottom, and the
page keeps clear of notches and the home indicator. -
Notifications in the app, even while it is closed (Web Push):
install.sh --pushinstalls
theklipper-auto-ejectservice (push/auto_eject_push.py), which watches the printer through
Moonraker and sends each notification, encrypted for that device (RFC 8291, VAPID), to the push
service of every phone or computer that turned them on in the app. Devices subscribe through
Moonraker's database, so the service needs no port; Moonraker restarts it after updates. Each
device chooses whether it also wants every finished print. Android, iPhone (iOS 16.4+, from the
Home Screen) and desktop browsers. -
Notifications on your phone:
install.sh --notifysets up ntfy through Moonraker's
[notifier](a random topic, kept when run again, and an optional notification for every finished
print); the newnotifysetting sends auto-eject's own messages: a part still on the bed, parts
too thin to push, a print that ended without an eject, a print the guard did not start. Tapping a
notification opens the auto-eject page. The installed app also notifies by itself while it is open
or in the background. New guide:docs/notifications.md. -
Remote access for everyone:
install.sh --remotesets up Tailscale so Mainsail and the
auto-eject page open from a phone anywhere, without opening the printer to the internet. It asks
before every step: installs Tailscale if needed, connects the printer, adds the Tailscale range to
Moonraker'strusted_clients(with a backup, restarting Moonraker only when idle) and serves the
printer over HTTPS withtailscale serve.--uninstalltakes the range out again. New guide:
docs/remote-access.md; the web page's Blade and setup tab shows how you are connected and
what is missing.
Fixed
- The farm API read the request only after deciding the answer; on some systems that reset the
connection. http://<printer>/auto-eject/redirected to the page with an absolutehttp://address, so
behind an HTTPS proxy such astailscale servethe page lost HTTPS. The redirect is relative now;
runinstall.sh --webagain to update the nginx file.