A novel theatre experience for viewing synchronized VODs from @stream.place with records pulled from ionosphere.tv — includes FREE POPCORN!
JavaScript 72%
CSS 16%
HTML 11%
Shell 1%

README.md

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.place HLS 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.