- python3 -m sandtable install-desktop puts a Gyre icon in the app grid and on
the desktop (freedesktop .desktop entry with a "Quit Gyre" action).
- The icon runs `launch`: starts the web page in the background (no terminal,
own session, log in .cache/server.log) if it isn't running, then opens it.
A dialog shows the reason if it can't start.
- Quit link on the page (local computer only) and `quit`: stop any design,
motors off, close the page.
- Gyre icon (sandtable/static/gyre.svg), also the page's tab icon.
- Simulator takes several lines per tick, so streaming tests aren't slowed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pi/build-image.sh makes a ready-to-flash card: Raspberry Pi OS Lite 2026-10-06
+ the Gyre software as a service on http://gyre.local (port 80), first-boot
setup through cloud-init (user, SSH key, Wi-Fi, packages from the card), USB
host mode on the Zero 2's data port. No root: mtools for the boot partition,
debugfs for the root filesystem. Wi-Fi and credentials stay in the work dir.
Web page: Power off / Restart links when GYRE_POWER_BUTTONS=1 (set by the Pi
service); thumbnails keyed by file contents so pre-made ones ship on the card;
stale thumbnails pruned.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README, build guide, software README, web page header and title, jog page,
desktop alerts and the start-up message now say Gyre. The repo, the Python
package and its commands keep their names (sandTable, python3 -m sandtable),
so links and setups keep working. New web page screenshot.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After the last design (or a Stop), the player sends $SLP (GRBL and FluidNC
sleep), so the motors stop holding and the table is quiet. The page shows
"Motors off"; the next design wakes the controller (reset + unlock) and homes
first, since the arm can be moved by hand while the motors are off. The jog
panel wakes it too. Setting: motion.motors_off_when_done (default true).
Checked on the real Uno: Idle -> $SLP -> Sleep -> reset -> Alarm -> $X -> Idle.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- python3 -m sandtable web: local web page to play designs from a library of
27 built-in patterns, upload .thr or .svg, pause/skip/stop, jog and calibrate.
Reconnects by itself when the USB cable comes back.
- Plays .thr files and built-in generators with an erase spiral between them,
constant ball speed, host-side homing on stock GRBL 1.1 (Uno + CNC shield),
FluidNC for the ESP32 board.
- Home switch guard: patterns never press the switch, so a press means lost
steps and stops the machine at once with an alert.
- lineart.py turns SVG line drawings into one continuous path.
- Tests against a GRBL simulator.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>