Self hosted, self contained Docker image of the classic www.asciimation.co.nz/Blinkenlights ASCII Star Wars animation. Same clone as the original site — everything runs client-side in the browser — just with no ads and no analytics, and completely self hosted.
docker run -d --name starwars -p 8080:8080 modem7/docker-starwarsOr Compose, if that's more your thing:
services:
starwars:
image: modem7/docker-starwars
container_name: starwars
ports:
- 8080:8080Open http://localhost:8080 and enjoy.
- Content is entirely local — nothing gets fetched from
asciimation.co.nzor anywhere else once it's running - Built on
nginxinc/nginx-unprivileged, runs asuid 101. No root, anywhere - gzip on, plus the usual security headers (
X-Content-Type-Options,X-Frame-Options,Referrer-Policy,Content-Security-Policy) — seeconf/nginx-site.confif you want the specifics /healthzbacks the built-inHEALTHCHECK, so it actually means something- Multi-arch:
amd64,arm/v6,arm/v7,arm64/v8
Upstream adds new scenes every so often, and I'm not going to remember to go re-mirror the site by hand every time. So:
- Manually:
python3 scripts/update_film_data.py— pulls whatever's current upstream and splices it in. Leaves the player code alone, and deliberately doesn't pull in upstream's ads/analytics or links to pages this image doesn't mirror. - On demand, from GitHub: same thing, run as the Update film data
workflow from the Actions tab. Opens a PR instead of pushing straight to
master, so I get a chance to actually look at it first. - On a schedule: Check content freshness runs weekly and opens a
content-freshnessissue the moment it's out of sync, so I don't have to remember to check either.
I don't trust "the image built" as proof that anything actually works, so
every push/PR touching the image builds it, boots a real container, and
pokes at it: page structure, gzip, the security headers, static assets,
non-root/no-sudo/no-world-writable-files, and a Playwright script that
checks the animation actually advances frames and that Stop()/Play()
etc. do what they say. See .github/workflows/test.yml if you want the
gory details.
.woodpecker.yml does the actual multi-arch build and Docker Hub push once
something's merged to master.
| Tag | Description |
|---|---|
latest |
Latest version |
Not my work, I just packaged it up:
- Simon Jansen made the original asciimation.
- Notes from Mike Edwards, who wrote the player script this is based on:
Replacement telnet at asciimation.mirkwood.net:23/24. Port 23 is the last released Star Wars asciimation by Simon Jansen, and port 24 is Jansen's other goofy asciimation, The death of Jar Jar Binks.
MIT, see LICENCE.txt.

