- Rename Python package: wled_controller -> ledgrab - Rename env var prefix: WLED_ -> LEDGRAB_ (with auto-migration for old vars) - Rename localStorage key: wled_api_key -> ledgrab_api_key (with migration) - Rename HA integration domain: wled_screen_controller -> ledgrab - Update all imports, build scripts, Docker, installer, config, docs - Remove HA integration (moved to ledgrab-haos-integration repo) - Remove hacs.json (belongs in HA repo now) - Add startup warning for users with old WLED_ env vars - All tests pass (715/715), ruff clean, tsc clean, frontend builds
6.8 KiB
Installation Guide
Complete installation guide for the LedGrab server.
Table of Contents
- Docker Installation (recommended)
- Manual Installation
- First-Time Setup
- Configuration Reference
- Troubleshooting
Home Assistant integration has moved to a separate repository: ledgrab-haos-integration
Docker Installation
The fastest way to get running. Requires Docker with Compose.
-
Clone and start:
git clone https://git.dolgolyov-family.by/alexei.dolgolyov/ledgrab.git cd ledgrab/server docker compose up -d -
Verify:
curl http://localhost:8080/health # → {"status":"healthy", ...} -
Open the dashboard: http://localhost:8080
-
View logs:
docker compose logs -f -
Stop / restart:
docker compose down # stop docker compose up -d # start again (data is persisted)
Docker manual build (without Compose)
cd server
docker build -t ledgrab .
docker run -d \
--name ledgrab \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/config:/app/config:ro \
ledgrab
Linux screen capture in Docker
Screen capture from inside a container requires X11 access. Uncomment network_mode: host in docker-compose.yml and ensure the DISPLAY variable is set. Wayland is not currently supported for in-container capture.
Manual Installation
Requirements
| Dependency | Version | Purpose |
|---|---|---|
| Python | 3.11+ | Backend server |
| Node.js | 18+ | Frontend build (esbuild) |
| pip | latest | Python package installer |
| npm | latest | Node package manager |
Steps
-
Clone the repository:
git clone https://git.dolgolyov-family.by/alexei.dolgolyov/ledgrab.git cd ledgrab/server -
Build the frontend bundle:
npm ci npm run buildThis compiles TypeScript and bundles JS/CSS into
src/ledgrab/static/dist/. -
Create a virtual environment:
python -m venv venv # Linux / macOS source venv/bin/activate # Windows (cmd) venv\Scripts\activate # Windows (PowerShell) venv\Scripts\Activate.ps1 -
Install Python dependencies:
pip install .Optional extras:
pip install ".[perf]" # DXCam, BetterCam, WGC (Windows only) pip install ".[notifications]" # OS notification capture pip install ".[dev]" # pytest, black, ruff (development) -
Set PYTHONPATH and start the server:
# Linux / macOS export PYTHONPATH=$(pwd)/src uvicorn ledgrab.main:app --host 0.0.0.0 --port 8080 # Windows (cmd) set PYTHONPATH=%CD%\src uvicorn ledgrab.main:app --host 0.0.0.0 --port 8080 -
Verify: open http://localhost:8080 in your browser.
First-Time Setup
Change the default API key
The server ships with a development API key (development-key-change-in-production). Change it before exposing the server on your network.
Option A -- edit the config file:
# server/config/default_config.yaml
auth:
api_keys:
dev: "your-secure-key-here" # replace the dev key
Option B -- set an environment variable:
export LEDGRAB_AUTH__API_KEYS__dev="your-secure-key-here"
Generate a random key:
openssl rand -hex 32
Configure CORS for LAN access
By default the server only allows requests from http://localhost:8080. To access the dashboard from another machine on your LAN, add its origin:
# server/config/default_config.yaml
server:
cors_origins:
- "http://localhost:8080"
- "http://192.168.1.100:8080" # your server's LAN IP
Or via environment variable:
LEDGRAB_SERVER__CORS_ORIGINS='["http://localhost:8080","http://192.168.1.100:8080"]'
Discover devices
Open the dashboard and go to the Devices tab. Click Discover to find WLED devices on your network via mDNS. You can also add devices manually by IP address.
Configuration Reference
The server reads configuration from three sources (in order of priority):
- Environment variables -- prefix
LEDGRAB_, double underscore as nesting delimiter (e.g.,LEDGRAB_SERVER__PORT=9090) - YAML config file --
server/config/default_config.yaml(or setLEDGRAB_CONFIG_PATHto override) - Built-in defaults
See server/.env.example for every available variable with descriptions.
Key settings
| Variable | Default | Description |
|---|---|---|
LEDGRAB_SERVER__PORT |
8080 |
HTTP listen port |
LEDGRAB_SERVER__LOG_LEVEL |
INFO |
DEBUG, INFO, WARNING, ERROR |
LEDGRAB_SERVER__CORS_ORIGINS |
["http://localhost:8080"] |
Allowed CORS origins (JSON array) |
LEDGRAB_AUTH__API_KEYS |
{"dev":"development-key..."} |
API keys (JSON object) |
LEDGRAB_STORAGE__DATABASE_FILE |
data/ledgrab.db |
SQLite database path |
LEDGRAB_MQTT__ENABLED |
false |
Enable MQTT for HA auto-discovery |
LEDGRAB_MQTT__BROKER_HOST |
localhost |
MQTT broker address |
LEDGRAB_DEMO |
false |
Enable demo mode (sandbox with virtual devices) |
Troubleshooting
Server will not start
Check Python version:
python --version # must be 3.11+
Check the frontend bundle exists:
ls server/src/ledgrab/static/dist/app.bundle.js
If missing, run cd server && npm ci && npm run build.
Check logs:
# Docker
docker compose logs -f
# Manual install
tail -f logs/ledgrab.log
Cannot access the dashboard from another machine
- Verify the server is reachable:
curl http://SERVER_IP:8080/health - Check your firewall allows inbound traffic on port 8080.
- Add your server's LAN IP to
cors_origins(see Configure CORS above).
WLED device not responding
- Confirm the device is powered on and connected to Wi-Fi.
- Test it directly:
curl http://DEVICE_IP/json/info - Check that the server and the device are on the same subnet.
- Try restarting the WLED device.
Low FPS or high latency
- Lower the target FPS in the stream settings.
- Reduce
border_widthto decrease the number of sampled pixels. - Check CPU usage on the server (
htopor Task Manager). - On Windows, install the
perfextra for GPU-accelerated capture:pip install ".[perf]"