Stoatworks Labs

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:latest

Then 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:latest

Or, 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:latest

On 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

ToolImagePortUnraid
simpleRTAghcr.io/stoatworks-labs/simple-rta8525simple-rta
ArrayCADghcr.io/stoatworks-labs/arraycad8523arraycad
Cosplay (preview)No image. Use the hosted copy.
PatchFerret (preview)ghcr.io/stoatworks-labs/patchferret8544patchferret
QuickDawghcr.io/stoatworks-labs/quickdaw8542quickdaw
Songbook LiteNo image. Use the hosted copy.
Blend Calcghcr.io/stoatworks-labs/blend-calc8521blend-calc
Pixel Peekerghcr.io/stoatworks-labs/pixel-peeker8526pixel-peeker
Negative Spaceghcr.io/stoatworks-labs/negative-space8541negative-space
Dead Air (preview)No image. Use the hosted copy.
CANary Flasher (beta)No image. Use the hosted copy.
Aquilon Pitchghcr.io/stoatworks-labs/aquilon-pitch8540aquilon-pitch
Aspect Calcghcr.io/stoatworks-labs/aspect-calc8520aspect-calc
Test Cardghcr.io/stoatworks-labs/test-card8522test-card
Wallslideghcr.io/stoatworks-labs/wallslide8543wallslide
EDID Editor (beta)ghcr.io/stoatworks-labs/edid-editor8529edid-editor
Will My Show Fit? (beta)ghcr.io/stoatworks-labs/willmyshowfit8537willmyshowfit
Thumbnail Generatorghcr.io/stoatworks-labs/thumbnail-generator8528thumbnail-generator
Mynah (reference)ghcr.io/stoatworks-labs/mynah8534mynah
ATEM Fleet AdminNo image. Use the hosted copy.
Showbook liteNo image. Use the hosted copy.
PeepholeNo image. Use the hosted copy.
BirdDog PLAY PatcherNo image. Use the hosted copy.
BirdDog PLAY Flasher (beta)ghcr.io/stoatworks-labs/birddog-play-flasher8539birddog-play-flasher
stagewashghcr.io/stoatworks-labs/stagewash8524stagewash
RFutilsghcr.io/stoatworks-labs/rfutils8420 (host network)rfutils
PDF Presenter LiteNo image. Use the hosted copy.
PowerPoint Font Managerghcr.io/stoatworks-labs/pptx-font-manager8538pptx-font-manager
OpenFont Manager (preview)No image. Use the hosted copy.
openflashghcr.io/stoatworks-labs/openflash8536openflash

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.