# OBS Overlays Docker Stack LAN-only browser-source overlays for OBS. Each overlay runs in its own Docker container and keeps editable JSON state in `./data`, outside Git, so Portainer redeploys do not wipe the active stream state. ## Services | Overlay | Container | Port | OBS URL | Editor URL | State file | |---|---|---:|---|---|---| | Pokemon Party | `pokemon-party-overlay` | 8765 | `http://SERVER-IP:8765/overlay.html` | `http://SERVER-IP:8765/editor.html` | `./data/pokemon-party/party.json` | | Gauntlet | `gauntlet-overlay` | 8770 | `http://SERVER-IP:8770/overlay.html` | `http://SERVER-IP:8770/editor.html` | `./data/gauntlet/gauntlet.json` | | Blackout Bingo | `blackout-bingo-overlay` | 8780 | `http://SERVER-IP:8780/overlay.html` | `http://SERVER-IP:8780/editor.html` | `./data/blackout-bingo/bingo.json` | ## Portainer Git deployment 1. Push this repo to Gitea. 2. In Portainer, go to Stacks -> Add stack. 3. Choose Git Repository. 4. Paste the Gitea repo URL. 5. Set Compose path to `docker-compose.yml`. 6. Deploy the stack. Redeploy the stack after Git changes to rebuild containers while keeping `./data` state files. ## Local test ```bash docker compose up -d --build curl http://127.0.0.1:8765/overlay.html curl http://127.0.0.1:8770/overlay.html curl http://127.0.0.1:8780/api/bingo ``` ## LAN-only note This stack publishes plain HTTP ports on the Docker host. Do not port-forward these editors to the internet. If remote access is needed later, put them behind VPN or authenticated reverse proxy.