
Sixty containers on one server
One bare-metal box runs dozens to hundreds of Hoody containers. KSM and BTRFS dedup make the marginal cost near zero.
It's a free Saturday workshop. Two hundred people signed up. You don't want a Zoom 200-seat tier, a Twitch account, or a calendar with three time zones. You stream your screen to one pipe path with ?n=200, paste the receiver URL on the event page, and let two hundred browser tabs do the rest.
ONE PIPE URL · 200 RECEIVERS · ZERO BUFFERING
ffmpeg encodes your X11 display to webm. curl PUTs that stream into /api/v1/pipe/workshop?n=200. The pipe waits until two hundred receivers connect to the same path. Each one is a normal browser tab on the receiver URL with ?video appended — Hoody serves an embedded MSE player. No platform sits in the middle, the bytes never touch a disk, and the URL evicts itself when you stop the encoder.
ffmpeg -f x11grab -i :0 -c:v libvpx -f webm reads the display and writes webm to stdout. Webcam, slide deck, terminal — whatever is on :0.
curl -T - PUTs stdin to /api/v1/pipe/workshop?n=200. The pipe holds the sender open until two hundred receivers connect on the matching path.
Drop the receiver URL with ?video into the event page or DM. No app, no signup, no calendar invite — just a link the attendee clicks.
The pipe returns an HTML page with an embedded MSE video element. Two hundred browser tabs watch the same live stream at the speed of the slowest receiver.
?n=200 caps the audience. The pipe accepts up to 256 receivers and forwards the sender's Content-Type so an in-browser MSE player can decode the stream. Mismatched n returns 400. When you ctrl-C the encoder, the URL evicts itself — there is nothing to delete.
A 200-attendee workshop normally means renting a tier, an account wall, and a recording you didn't want. The pipe URL is what's left after you remove all of that — one egress out of your laptop, zero accounts, zero artifacts to clean up afterwards.
Bytes leave your laptop once. The pipe fans them out. Your uplink does not multiply by audience size — the slowest viewer sets the pace, not your bandwidth.
No Zoom seat tier, no Twitch handle, no YouTube channel. The presenter has Hoody. The two hundred attendees have a browser. That's the whole list.
The pipe is purely streaming — bytes pass through, nothing is written. When you stop the encoder, the URL is dead. No retention policy, no GDPR ticket, no FTC consent dialog about who owns the recording.
n caps at 256 per pipe path. For larger audiences, fan out across several pipe paths from the same encoder, or front the pipe URL with a CDN that aggregates.
The same pipe-and-?video mechanism reads three different ways depending on what kind of room you're filling. They all collapse into the same one-liner.
You did not want to upgrade Zoom for one Saturday afternoon. Stream the screen, paste the URL on the event page, and stop paying for capacity you use four times a year.
Nothing is recorded on a server somewhere. The pipe streams; nothing is stored. Your students do not need a Twitch handle, a Discord, or a Google account to watch — they need a URL.
A meetup link gets reposted, embedded, mirrored. Anyone who has the URL can open it; when you ctrl-C, the URL is gone for everyone. The audience scales without the platform scaling with it.
A workshop, a URL, and 200 quiet seats. No platform, no logins.
The lineup of broadcast tools every event organizer accumulates — each one assumes a tier, an account, or a recording you didn't ask for. The pipe URL assumes none of those.
The next time two hundred people sign up, send them a URL — not a meeting invite.