A media module, lifted out of ButterflyDreaming.
BDX · AVX · RX — a controller, a viewer and a relay
ButterflyDreaming (BD) is a collaborative arts‑therapy and peer‑counselling system: a corpus of literature, art and music that anonymous users collage together in conversation.
BDX is one of its media modules, taken out and made to stand on its own — a controller, a viewer and a relay, with no database, no corpus and no accounts behind them. Two web pages and a script. It is here so that anyone can play with a typical module, and so that a developer can work on the part they actually care about: what you build runs independently, and goes back into BD unchanged.
Open the controllerSee it. The drawing is based on kolams, grown from an L‑system. Edit the script or move a stepper: two ways of saying the same thing. The script is what is true, and everything else is a view of it.
Send it. copy view URL puts the same live drawing on another device — scan the QR with a phone.
Developer information
Two mechanisms, with two different jobs.
postMessage is the module interface — a
browser API, not a network one. It carries messages between two windows in
the same browser that hold a reference to one another: a page and
its iframe, or a window and the one it opened. Not between two browsers,
and not to another machine — which is exactly why the relay below
exists. The drawing is an iframe, and BDX drives it this way: it sends the
script, and the renderer announces what it drew. That exchange is the whole
contract, and implementing it is what makes something a module.
WebSockets are the viewer transport — how the script reaches a viewer that is not in the page. Two devices have no window between them, so something must stand in the middle: the relay holds a WebSocket to each side and passes messages across. (Socket.IO, so it opens on long‑polling and upgrades.) The relay is substitutable.
Build on it. The renderer is replaceable: anything that honours that contract can stand in its place, and then runs inside ButterflyDreaming unchanged. BDX is the harness — it shows what a host has to provide, and how little that is.
A relay is live behind this copy, so the demo works on click. To run the
whole thing yourself: npm install && npm start, then
http://localhost:8081/bdx.html. To point these pages at a relay
of your own, ?rx=https://your-relay — no forking
required, and remembered for that browser afterwards.
Repository:
github.com/wrcstewart/bdx-demo
— the source, and the reasoning behind every decision in it. CC0.