Asyncio LED matrix display for news, weather, crypto, and more
Project description
led-ticker
An asyncio Python toolkit that drives RGB LED matrix panels from a Raspberry Pi via a TOML config. Two reference builds share one codebase and one Docker image:
- Smallsign — Pi 4 + 5× chained 16×32 panels = 160×16 logical canvas
- Bigsign — Pi 5 + 8× P3 32×64 panels in a 2×4 vertical-serpentine layout = 256×64 canvas
Full documentation: https://docs.ledticker.dev
Quick start
git clone https://github.com/JamesAwesome/led-ticker.git
cd led-ticker
make dev
cp config/config.example.toml config/config.toml # or config.bigsign.example.toml
led-ticker --config config/config.toml
For hardware setup, BOM, and wiring diagrams see docs.ledticker.dev/hardware/building-your-own.
Configuration
Everything is configured via a TOML file. Three reference configs ship in config/:
config.example.toml— smallsign starter (160×16)config.bigsign.example.toml— bigsign withpixel_mapper_config, scaling, RP1 tuning (256×64)config.firebird.example.toml— realistic bigsign storefront layout (Firebird Yoga)
Full config reference: https://docs.ledticker.dev/reference/config-options/. Per-widget pages document every knob: https://docs.ledticker.dev/widgets/.
Plugins
Extra widgets (and other extension points) are installed as plugins, declared in a pip-requirements file:
cp config/requirements-plugins.example.txt config/requirements-plugins.txt
# edit to add/remove plugins, then rebuild the image:
docker compose up -d --build
The live config/requirements-plugins.txt is gitignored (it's yours to customize); the tracked .example ships the pool water-temperature widget (type = "pool.monitor") as a starting point. Installed plugins auto-register via their led_ticker.plugins entry point — no [plugins] config change needed.
Pre-flight a config before deploying:
make validate CONFIG=config/config.toml
led-ticker validate checks the config against a registry of decision rules — bad font sizes, scroll-mode + stretch collisions, content-height overflow. Exits non-zero on errors. Useful in CI. Full output format: https://docs.ledticker.dev/tools/validate/.
Development
make dev # Install deps (requires uv)
make test # Run tests (no Docker needed; uses test stubs for rgbmatrix)
make lint # Run ruff linter
make format # Auto-format code
make validate CONFIG=config/config.toml # Pre-flight a config
Tests use a stub rgbmatrix package so they run on any machine — no Raspberry Pi or Docker required. ~1450 tests, ~2 min on a laptop.
New contributors: start with CONTRIBUTING.md (setup, the change flow, where things live). CLAUDE.md holds the load-bearing invariants — the hardware-rendering constraints and per-subsystem rules — and has the step-by-step recipes for adding a widget or transition + the test-stub canvas contract.
Deployment
Docker on Raspberry Pi
docker compose up -d
The compose file mounts ./config read-only into the container so you edit TOML on the host and the container picks it up on restart.
Systemd
deploy/led-ticker.service and deploy/install.sh manage auto-start and auto-restart-on-crash. Full deploy walkthrough: https://docs.ledticker.dev/hardware/building-your-own/.
Hardware
The single Docker image detects the SoC at runtime and selects the BCM2711 GPIO backend (Pi 4) or the RP1 PIO/RIO backend (Pi 5). On the Pi 5 the RP1 RIO backend is the default; the runtime CLI accepts --led-rp1-pio=1 to force the low-CPU PIO backend. For chain ≥ 2 with flicker raise gpio_slowdown from 2 to 3+.
Hardware reference (BOM, wiring, panel-tuning knobs): https://docs.ledticker.dev/hardware/building-your-own/.
Community
- Questions, ideas, show-and-tell: GitHub Discussions
- Bugs & feature requests: Issues
- Contributing: CONTRIBUTING.md
- Be excellent to each other: Code of Conduct
- Security: report privately — see SECURITY.md
- General contact: hello@ledticker.dev
License
MIT © James Awesome
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file led_ticker_core-2.0.0.tar.gz.
File metadata
- Download URL: led_ticker_core-2.0.0.tar.gz
- Upload date:
- Size: 18.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c047a5a5de745d9cd1d43e9616d9d5ab5ffaca8122d770581814c437ca1727c0
|
|
| MD5 |
fdef0c1dd96db88bbd145cf0fedef81d
|
|
| BLAKE2b-256 |
c32746fc2a80320e6473cbed7014082fc6ecb8b634d9b96db17adc19f039941a
|
Provenance
The following attestation bundles were made for led_ticker_core-2.0.0.tar.gz:
Publisher:
publish.yml on JamesAwesome/led-ticker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
led_ticker_core-2.0.0.tar.gz -
Subject digest:
c047a5a5de745d9cd1d43e9616d9d5ab5ffaca8122d770581814c437ca1727c0 - Sigstore transparency entry: 1917070995
- Sigstore integration time:
-
Permalink:
JamesAwesome/led-ticker@3602ff1aef0a96ab4f7ecb269f2437938b543d49 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/JamesAwesome
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3602ff1aef0a96ab4f7ecb269f2437938b543d49 -
Trigger Event:
release
-
Statement type:
File details
Details for the file led_ticker_core-2.0.0-py3-none-any.whl.
File metadata
- Download URL: led_ticker_core-2.0.0-py3-none-any.whl
- Upload date:
- Size: 913.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3357af6e540a886f7ae23f407f86c871970fb97744568169d8cd562dcacdbb41
|
|
| MD5 |
00048734912ec149b4a5effa7519f81f
|
|
| BLAKE2b-256 |
0d0b553395f8226c0b65e42bf0444fcfc028a0893d14dba3611cf4ec4359794e
|
Provenance
The following attestation bundles were made for led_ticker_core-2.0.0-py3-none-any.whl:
Publisher:
publish.yml on JamesAwesome/led-ticker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
led_ticker_core-2.0.0-py3-none-any.whl -
Subject digest:
3357af6e540a886f7ae23f407f86c871970fb97744568169d8cd562dcacdbb41 - Sigstore transparency entry: 1917071146
- Sigstore integration time:
-
Permalink:
JamesAwesome/led-ticker@3602ff1aef0a96ab4f7ecb269f2437938b543d49 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/JamesAwesome
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3602ff1aef0a96ab4f7ecb269f2437938b543d49 -
Trigger Event:
release
-
Statement type: