The Theatre — rpg.actor #
A novel synchronous theatre experience for watching ATmosphereConf VODs on the AT Protocol as an rpg.actor character.
Built for the Streamplace VOD Jam!
Live Version: rpg.actor/theatre
What It Does #
- VOD playback via stream.place HLS infrastructure
- NPC audience that quotes real talk transcripts, speaker bios, and concept definitions (stolen context from ionosphere.tv)
- Popcorn stand — FREE POPCORN for your rpg.actor through a .item system
- Coming Next Board — shows the upcoming talk in the daily playlist
- Player sprite with WASD/arrow key movement and collision (E to interact)
Architecture #
This is a static client-side app.
| File | Role |
|---|---|
theatre.html |
Main page with inline theatre CSS |
js/theatre.js |
Theatre logic (stage, NPCs, VOD playlist, HLS playback, interactions) |
js/atproto.js |
AT Protocol utilities (DID resolution, PDS discovery) |
js/direct-session.js |
App-password auth for character accounts |
js/sprites.js |
rpg.actor sprite animation engine |
js/dist/oauth-manager.js |
AT Protocol OAuth 2.0 (bundled @atproto/oauth-client-browser) |
css/style.css |
Site stylesheet |
css/sprites.css |
Sprite animation CSS |
scripts/download_theatre_records.sh |
ionosphere.tv data fetcher (cache, not live for speed) |
VOD Playback #
Videos are fetched from the stream.place VOD API:
- Catalog: vodslice.sky.boo GraphQL endpoint
- Playback:
vod-beta.stream.placeHLS manifest endpoint - Player: hls.js via CDN
ionosphere.tv Data #
Talk metadata, speaker profiles, concept definitions, and transcript annotations come from ionosphere.tv records stored on the AT Protocol (DID did:plc:lkeq4oghyhnztbu4dxr3joff).
These records are pre-fetched to local JSON files (theatre/records/) via scripts/download_theatre_records.sh to improve load speeds. The script runs periodically on the server. At runtime the theatre reads from these local snapshots rather than hitting the PDS directly.
Equipment System #
The popcorn and shirt interactions use rpg.actor's AT Protocol equipment system (equipment.rpg.give, equipment.rpg.item lexicons). These write records to the user's PDS via authenticated sessions.
Repository Contents #
theatre.html Main HTML page
js/
theatre.js Theatre logic (IIFE, ~2700 lines)
atproto.js AT Protocol utilities
direct-session.js Character session manager
sprites.js Sprite animation engine
dist/oauth-manager.js OAuth client bundle
css/
style.css Stylesheet
sprites.css Sprite animations
theatre/records/
talks.json ATmosphereConf talk metadata
speakers.json Speaker profiles
concepts.json Concept definitions
annotations.json Transcript annotations
vods.json VOD catalog
assets/ Sprites, icons, OG image
scripts/
download_theatre_records.sh Data refresh script
Running Locally #
Serve the root directory with any static file server:
python3 -m http.server 8000
# or
npx serve .
Then open http://localhost:8000/theatre.html.
Note: VOD playback, AT Protocol login, and equipment interactions require network access to external services (stream.place, Bluesky PDS infrastructure, rpg.actor API).
Credits #
- ionosphere.tv — Conference metadata, transcripts, and concept annotations
- stream.place — VOD hosting and HLS playback infrastructure
- vodslice — VOD catalog API
- hls.js — HLS video player library
Disclosure for AI Assistance #
The rpg.actor plugin suite is human designed, AI refined. Claude Code was used for various fixes, formatting, and iteration. Thus, the entire suite is offered unobfuscated and completely free of charge under the MIT license. It does not require any credit for use in projects (commercial or non-commercial). All artworks for the sprite generator are original, were produced exclusively by human hand, and are also free to use in your projects (commercial or non-commercial) under the CC BY 4.0 license with artistic credit to @isilme.reverie.house.
License #
MIT — see LICENSE.