Self-hosting
The web tools on your own kit, with Docker or Unraid.
The hosted copies load from Cloudflare, which is fine right up until the venue's internet isn't. So most of the tools are also published as Docker images, and you can run them on a laptop, a small box in the rack or the Unraid server at the workshop, then point a browser at that instead.
It's the same build the hosted copy serves, and once it's on your own network it doesn't need the internet to load. 20 of the 30 tools have an image, and the table further down says which.
With Docker
Each image is built by GitHub Actions from the tool's own repo on every push and published to GitHub's container registry under ghcr.io/stoatworks-labs. A static tool is nginx serving the built page on port 80, so running one is a single line:
docker run -d --name blend-calc --restart unless-stopped -p 8521:80 ghcr.io/stoatworks-labs/blend-calc:latestThen it's at http://localhost:8521/. Every tool has its own default port, all listed below, so you can run the lot side by side without any of them arguing over 8080. Each repo also has a docker-compose.yml that does the same thing with docker compose up -d.
To update one, pull the image again and recreate the container:
docker pull ghcr.io/stoatworks-labs/blend-calc:latest
docker rm -f blend-calc
docker run -d --name blend-calc --restart unless-stopped -p 8521:80 ghcr.io/stoatworks-labs/blend-calc:latestOr, with the compose file, docker compose pull && docker compose up -d.
RFutils is the odd one out
RFutils is a service rather than a static page, and it finds receivers with mDNS. Docker's bridge network doesn't pass multicast on, and it doesn't complain about it either: discovery just comes back empty, which looks a lot like a network with no receivers on it. So its container uses the host's network, listens on 8420 and keeps its settings in a folder you mount:
docker run -d --name rfutils --restart unless-stopped --network host -v "$PWD/config:/app/config" ghcr.io/stoatworks-labs/rfutils:latestOn Unraid
The templates live in stoatworks-unraid, which has been in the Community Applications feed since August 2026. Open theApps tab, search for the tool's image name (simple-rta, arraycad and so on, as in the table) and press Install. The template fills in the image and the port, and for RFutils host networking and its config folder, so there's nothing to type unless the port clashes with something you already run. Once it's up, the container's WebUI link opens it.
If the feed hasn't picked a template up yet, add it by hand: Docker,Add Container, then paste the template's raw URL. The table links to every template.
Burrow lists the same tools on its Self-hosted tab, if you'd rather find them there.
Which tools have an image
| Tool | Image | Port | Unraid |
|---|---|---|---|
| simpleRTA | ghcr.io/stoatworks-labs/simple-rta | 8525 | simple-rta |
| ArrayCAD | ghcr.io/stoatworks-labs/arraycad | 8523 | arraycad |
| Cosplay (preview) | No image. Use the hosted copy. | ||
| PatchFerret (preview) | ghcr.io/stoatworks-labs/patchferret | 8544 | patchferret |
| QuickDaw | ghcr.io/stoatworks-labs/quickdaw | 8542 | quickdaw |
| Songbook Lite | No image. Use the hosted copy. | ||
| Blend Calc | ghcr.io/stoatworks-labs/blend-calc | 8521 | blend-calc |
| Pixel Peeker | ghcr.io/stoatworks-labs/pixel-peeker | 8526 | pixel-peeker |
| Negative Space | ghcr.io/stoatworks-labs/negative-space | 8541 | negative-space |
| Dead Air (preview) | No image. Use the hosted copy. | ||
| CANary Flasher (beta) | No image. Use the hosted copy. | ||
| Aquilon Pitch | ghcr.io/stoatworks-labs/aquilon-pitch | 8540 | aquilon-pitch |
| Aspect Calc | ghcr.io/stoatworks-labs/aspect-calc | 8520 | aspect-calc |
| Test Card | ghcr.io/stoatworks-labs/test-card | 8522 | test-card |
| Wallslide | ghcr.io/stoatworks-labs/wallslide | 8543 | wallslide |
| EDID Editor (beta) | ghcr.io/stoatworks-labs/edid-editor | 8529 | edid-editor |
| Will My Show Fit? (beta) | ghcr.io/stoatworks-labs/willmyshowfit | 8537 | willmyshowfit |
| Thumbnail Generator | ghcr.io/stoatworks-labs/thumbnail-generator | 8528 | thumbnail-generator |
| Mynah (reference) | ghcr.io/stoatworks-labs/mynah | 8534 | mynah |
| ATEM Fleet Admin | No image. Use the hosted copy. | ||
| Showbook lite | No image. Use the hosted copy. | ||
| Peephole | No image. Use the hosted copy. | ||
| BirdDog PLAY Patcher | No image. Use the hosted copy. | ||
| BirdDog PLAY Flasher (beta) | ghcr.io/stoatworks-labs/birddog-play-flasher | 8539 | birddog-play-flasher |
| stagewash | ghcr.io/stoatworks-labs/stagewash | 8524 | stagewash |
| RFutils | ghcr.io/stoatworks-labs/rfutils | 8420 (host network) | rfutils |
| PDF Presenter Lite | No image. Use the hosted copy. | ||
| PowerPoint Font Manager | ghcr.io/stoatworks-labs/pptx-font-manager | 8538 | pptx-font-manager |
| OpenFont Manager (preview) | No image. Use the hosted copy. | ||
| openflash | ghcr.io/stoatworks-labs/openflash | 8536 | openflash |
The 10 without an image either arrived after the tools were packaged or are the browser build of an app you can install instead. If there's one you'd like in a container, ask and I'll add it.
BirdDog PLAY Patcher: The page needs a small Cloudflare Worker beside it that fetches Tailscale's packages, because Tailscale's download server sends no CORS header and a browser won't read the file without one. A plain web server would serve the page and lose the Worker, and Add Tailscale would fail on every package, so there's no container for it until somebody writes one that runs the Worker too.
How far this has been tested
Every image here builds in CI, and every one in the table pulled anonymously from the registry when I checked on 29 October 2026. What I haven't done yet is install each one from its template on a real Unraid server, so treat the templates as untried until somebody has. If one misbehaves, theissue tracker on stoatworks-unraidis the place to say so.
The same repo has templates for a handful of services that aren't web tools, ATEM Overseer and srt-router among them. Their own pages and READMEs cover those.