Releases: csader/splitflap-os
Release list
v0.3.0
What's New
Universal Firmware Provisioning
Automatically discover, identify, assign, diagnose, and de-provision modules running Universal Firmware — all from the Calibration page. (#51)
- Passive RS-485 listener detects unprovisioned module advertisements
- Identify modules by homing them physically
- Assign and de-provision bus IDs with firmware acknowledgement
- Built-in diagnostics: health snapshot, Hall sensor test, and mechanical consistency test
- Transaction-safe serial lock ownership for all command/response exchanges
Calibration: Immediate Preview on Adjustment
Fine-tune corrections now move the module immediately using the firmware g (absolute step goto) command, so you can see the compensation without re-sending the character index. (#52)
Contributors
- @InertiaImpact (Brent S.)
v0.2.7
v0.2.6
Skip Network/Hotspot in Install Script
For users running Splitflap OS on non-Pi hardware (Docker, NAS, Fedora, etc.), the install script now supports skipping all networking setup:
sudo bash setup/install.sh --skip-networkWhat gets skipped
network-managerpackage install- NetworkManager configuration
splitflap-network.service(hotspot fallback)
The main Flask app service installs and runs as normal. This pairs with v0.2.5's configurable serial port for full Docker/NAS support.
v0.2.5
Configurable Serial Port
The serial port is now fully configurable — no more hardcoded /dev/ttyUSB0.
What's new
- Settings UI — new Serial Port section with auto-detect dropdown and manual entry for custom paths (e.g.
/tmp/ttyVSF0) - Environment variable — set
SPLITFLAP_SERIAL_PORTfor Docker or headless deployments - Persists in settings.json — survives restarts without needing env vars
- Runtime reconnect — change ports without restarting the server
Priority order
SPLITFLAP_SERIAL_PORT env var > serial_port in settings.json > /dev/ttyUSB0 default
Docker support
No install script needed — just run the Flask app directly with your port mapped:
docker run -e SPLITFLAP_SERIAL_PORT=/tmp/ttyVSF0 ...
v0.2.4
Continuous Random Spin
Fixes the Random Spin app so modules move independently and continuously, with no collective pause.
Changes
- Each module maintains independent dwell/spin state (no synchronized frame replacements)
- Added
skip_rotation_waitmanifest flag — server no longer waits for all modules to settle before sending the next frame - Modules receive new targets before finishing their current move, producing constant chaotic motion
Also included (since v0.2.1)
- Fix update poll to verify version actually changed before declaring success (v0.2.2)
- Fix /apply_update 500 errors: safe.directory, dirty tree handling, better error messages (v0.2.3)
Upgrade note
If you are on v0.2.0, the update button has a bug. Update manually once:
cd /opt/splitflap-os
git pull origin main
sudo systemctl restart splitflap.serviceAfter that, future UI updates will work correctly.
v0.2.2
Fixes
Update mechanism now verifies version change (#47 feedback)
The update poll was declaring success as soon as the server responded, without checking if the version actually changed. If the service restart failed or hadn't happened yet, it would show "Update complete! v0.2.0" while still on the old version.
Now waits for the server to either go down or return a different version before declaring success. Shows a clear failure message if the version never changes.
Independent per-module random spin (v0.2.1)
Each module now maintains its own dwell/spin state instead of generating synchronized full-frame replacements. No more full-line reveal where all modules pause together.
v0.2.1
Fix: Independent per-module random spin
Resolves feedback on #47 — each module now maintains its own dwell/spin state instead of generating synchronized full-frame replacements. No more "full line reveal" where all modules pause together.
Changes
- Each module independently dwells and spins on its own schedule
- ~8% chance per tick of a module arriving at its target (naturally staggers stops)
- Configurable dwell time via
anim_speedsetting - Version bump to 0.2.1
v0.2.0
What's New
- Unified transition style + speed — 13 order-based styles (diagonal, spiral, center-out, etc.) + sync + slot machine. Global default in Settings, per-app override, per-page override in compose and playlists.
- Schedules + Quiet Hours — time-based app/playlist switching with day-of-week support and overnight ranges. Quiet hours stop the display and suppress notifications.
- App Triggers — event-driven display interrupts. 16 trigger-capable apps (sports score changes, weather alerts, stock thresholds, ISS overhead, and more). Background check loop with exponential backoff and per-trigger cooldowns.
- Global location support — location search replaces US-only ZIP code. Works worldwide. Auto-sets timezone. Per-app location override for weather.
- Random Spin animation — continuous random flaps with staggered module timing for organic motion and sound.
Improvements
- Default (global) option in compose and playlist style dropdowns
- Sim reflects active transition style in real-time
- Smart speed defaults per style (slot→80ms, sync→0ms)
- Trigger system caches geocoding and 52-week stock data to reduce API load
- Exponential backoff on trigger failures prevents rate-limit issues on Pi
- Weather, ISS, and dashboard apps use coordinates directly (no more US-only geocoding)
v0.1.13 — Currency, Venv Install & Bug Fixes
What's New
Currency Symbol Setting
- New Currency Symbol setting in Settings (default
$) - Set to
£,€,¥, etc. — Stocks and Crypto apps display your currency automatically - Works transparently: apps output
$, the server maps it to the correct flap position
Multi-Countdown Support (by @InertiaImpact)
- Up to 5 simultaneous countdowns, each with its own name and target date
- Per-slot enable/disable toggles
- Improved display handling for narrow signs
BirdNET Fixes
- Last 3 mode now shows last 3 unique species instead of last 3 detections
- Fixed cache not invalidating when display mode changes
- Fixed settings not being read correctly
Bug Fixes & Improvements
Install & Compatibility
- Trixie/Bookworm fix: installer now uses a Python venv, avoiding PEP 668
externally-managed-environmenterrors --prefer-binaryflag for much faster installs on Pi Zero W (uses pre-built wheels instead of compiling)- OTA updater now detects missing venv and runs
install.shautomatically on first update
Data Hygiene
- Removed legacy defaults that showed other people's data to new users:
nhl_teams(BOS,DAL),stocks_list(MSFT,GOOG,NVDA),yt_channel_id,mbta_stop/mbta_route - Removed broken migration code that caused NHL scores to appear even with no teams configured
v0.1.12 — Weather, Planes, Calibration & More
What's New
Weather App — Major Update (by @InertiaImpact)
- 4 providers: Open-Meteo (free, no key), WeatherAPI.com, QWeather, OpenWeather
- Open-Meteo is now the default — works out of the box with no API key
- AQI, UV index, pollen — optional pages with color-coded status
- Temperature units: F, C, K
- Configurable refresh rate
- Adapts to any grid size including 4+ rows
- Caches last good pages on error
Existing users: If you had an OpenWeather API key, the provider defaulted to Open-Meteo after this update. Go to Weather settings and switch back to OpenWeather if needed.
Planes Overhead — API Usage Estimates (by @InertiaImpact)
- Per-provider API usage estimates with free tier warnings
Settings System Improvements (by @InertiaImpact)
noticefield type — info/warning/success/error boxes in settings modalsdisabled_when— conditionally disable fields based on other valuespolling_usage_estimate— config-driven API usage calculator with provider profiles- Better merge logic for live schema updates
Calibration Improvements
- Reset Offset button — jump to 2832 in one click (no more clicking +32 hundreds of times, closes #26)
- Direct offset input — type a target value and hit Set
- Auto fine-tune direction fixed — now goes 1→63 (1 step per transition) instead of 63→1 (~63 steps per transition)
Simulator
- Flap animation speed matches real hardware timing (~4.2s for full home, closes #27)
BirdNET App
- Compact display: bird name + confidence on one line
- Smart name shortening (White-Winged Dove → WW Dove, Carolina Chickadee → C. Chickadee)
- Leaderboard: single page with one bird per row, fills grid height
- Lucide icon
- Removed guessed color indicators