Open-source frame server for HUB75 LED matrix displays. Renders Pixlet apps and serves raw pixels to microcontroller clients.
┌─────────────────┐ HTTP ┌──────────────────┐
│ Frame Server │ ◄────────────── │ LED Matrix │
│ (Python) │ GET /frame │ Client │
│ │ ───────────────►│ (MicroPython) │
│ • Pixlet CLI │ raw RGB │ │
│ • App rotation │ + headers │ • Interstate 75W│
│ • Scheduling │ │ • Matrix Portal │
└─────────────────┘ │ • ESP32, etc │
└──────────────────┘
-
Install Pixlet CLI:
# macOS brew install tidbyt/tidbyt/pixlet # Linux/other - see Pixlet docs
-
Install Python dependencies:
cd server pip install -r requirements.txt
Option A: Docker (recommended for deployment)
docker compose up -dOption B: Local Python
cd server
python server.pyServer starts at http://localhost:8080
GET /- Health check / infoGET /frame- Raw RGB pixels + metadata headersGET /frame/preview- PNG preview (8x scaled, for debugging)
Clients fetch GET /frame and receive:
Headers:
X-Frame-Width- Display width (e.g., 64)X-Frame-Height- Display height (e.g., 32)X-Frame-Count- Number of animation framesX-Frame-Delay-Ms- Milliseconds per frameX-Dwell-Secs- How long to show this appX-Brightness- 0-100X-App-Name- Current app name
Body: Raw RGB bytes (width × height × 3 × frame_count)
Edit server/config.yaml:
display:
width: 64
height: 32
brightness: 80
apps:
- name: clock
path: "../apps/clock.star"
duration: 10- Find or write a
.starfile (see Pixlet docs or community apps) - Put it in
apps/ - Add to
config.yaml
clients/interstate75w/- Pimoroni Interstate 75W (MicroPython)- More to come...
For running on a server (Proxmox, NAS, etc.):
# Clone and start
git clone https://github.com/johnfernkas/pixelpush.git
cd pixelpush
docker compose up -d
# View logs
docker compose logs -f
# Restart after config changes
docker compose restartVolumes:
apps/— Add/edit .star files without rebuildingserver/config.yaml— Edit config without rebuilding
pixelpush/
├── docker-compose.yml # Docker orchestration
├── server/
│ ├── Dockerfile # Container build
│ ├── server.py # Flask HTTP server
│ ├── pixlet.py # Pixlet CLI wrapper
│ ├── config.yaml # App configuration
│ └── requirements.txt
├── clients/
│ └── interstate75w/ # MicroPython client
├── apps/ # Pixlet .star apps
│ ├── clock.star
│ └── hello.star
└── README.md
TBD