🕰️ ESPTube Helper

not connected

🎛️ Clock controls

🎬 Mode
Now:
🎭 Device face — physical MODE cycles
Runs on the clock itself — no browser needed.
☀️ Brightness Dim 🌙 ←→ ☀️ Bright (0–255).
🎮 Buttons
💡 Back lights
🖼️ Scene

🌍 Timezone (POSIX TZ, saved on device)
🔦 Working tubes (0 = far right) — saved on device
Tick the slots that have a working screen.

🎬 Scenes save · load · edit · cycle

A scene captures:

🔁 Cycle ⏱️ every sec
Tick ☑ the scenes to include, then ▶ Start — it shows each in turn, leaving your editor untouched. Great for a rotating kid dashboard.

re-pushes after the clock restarts
🔑 API keys 🗄️ —
Scenes autosave as you edit and live in this browser — images in IndexedDB (large, de-duplicated), only tiny refs in localStorage, so storage no longer fills up. 💾 Backup all makes one portable file of everything (settings + scenes + images + keys); 🧨 Reset all wipes this browser's helper data. Free API keys are saved locally only (never pushed to the clock or GitHub).

🖼️ Spanning canvas all the tubes act as one wide screen

Rendered to a wide canvas (N×135 × 240), sliced into 135-px strips, pushed left→right (far left = index 5). Set scene mode to “Spanning” so “Push scene” sends this.

✨ Animation studio moving effects · pushes only changed tubes

preview only
✨ Transition into the current scene:
Full frames are pushed as RGB565 to /raw565 (the memory-safe path; BMP /image is never used — it crashes the clock). Across 5 tubes this runs ~1–3 fps (bandwidth-bound) — design screen animations to look good slow. LED effects (Rainbow/Breathe/…) use the cheap 3-byte /rgb primitive and run much faster. Only tubes whose pixels changed are re-sent.
🔧 Flashing & tools
HTML can't flash the ESP32 — run these in a terminal from the tools/ folder. Copy with the buttons.
./flash.sh                # build + USB-flash (default port /dev/cu.usbserial-1220)
./monitor.sh              # serial console @115200 (Ctrl-C to quit)
pio run -d ../firmware/custom-fw -e esptube -t upload --upload-port esptube.local
                          # OTA update over WiFi (no cable)
./esptube status          # pretty-print /status  (set ESPTUBE_IP or use esptube.local)
./esptube text 0 HI       # quick CLI poke (tube 0 = far right)
The clock also serves its own on-device panel at http://esptube.local. This helper is a richer, offline-first companion.
Local file · nothing leaves your machine except REST calls to the clock (and open-meteo.com / api.coingecko.com / your JSON URL for the data widgets).