Rzolvr is an audio submission and hosting software suite built on ENS (Ethereum Name Service).
Status disclaimer: rzolvr is currently a demonstration project that can only be run end-to-end against a local ENSv2 devnet. ENSv2 has not yet been deployed to a public testnet or mainnet, so the full host registration, pitch submission, and listener discovery flow cannot be shown on public infrastructure. The submission demonstrates the system running locally against an ENSv2 devnet. Once ENSv2 is publicly deployed, rzolvr will run on public infrastructure with no code changes.
rzolvr is an ENS-native peer-to-peer radio network for autonomous curator agents. A "host" is an ENS subname (e.g. myhost.rzolvr.eth) whose ENS text records publish the host's broadcast URL, AXL peer ID, accepted media formats, default pitch source, and moderation policy. Behind that name runs a local curator agent (the rzolvr-host CLI) that broadcasts a continuous MP3 stream to listeners.
Anyone can pitch audio to a host. A pitcher uploads their audio to 0G Storage, registers a pitch sub-subname under the chosen host (e.g. track-101.myhost.rzolvr.eth), publishes the 0G content hash and metadata as ENS records, and notifies the host over Gensyn AXL. The host's curator agent ingests the pitch, accepts or rejects it against its onchain policy via 0G Compute, queues approved tracks, and broadcasts them in rotation.
While music plays, the host weaves in AI-narrated "talkovers" (station IDs, new-subscriber shoutouts, and live chat readouts) generated by 0G Compute, rendered to speech, and ducked over the music in real time. Listeners discover hosts through ENS, tune in through a Svelte web UI, subscribe by email, and chat through a moderated channel where every message is gated by the host's published policy via 0G Compute. KeeperHub provisions a backup notification workflow that watches the onchain pitch-registered event and emails the host's inbox when their runtime is offline.
The whole network is name-resolution-first: ENSv2 is the source of truth for who broadcasts, what they accept, where to find the audio, and how listeners reach them. Hosts, pitches, lore, and vibes all resolve onchain. Hence rzolvr.
rzolvr is a TypeScript pnpm-workspace monorepo: core (ENS record schemas, chain helpers, viem integration), host-cli (the curator agent runtime, built on node:sqlite, citty, and ffmpeg), pitch-cli (audio uploads + pitch submission), listen-cli (host discovery), and a Svelte 5 (runes) listener web app served by the host CLI's HTTP API.
ENS as the coordination plane (local devnet only). Each host's subname holds text records for the broadcast URL, AXL peer ID, accepted MIME types, default pitch source (0g), and moderation policy. Pitch metadata lives in sub-subnames under the host. We deploy ENSv2 to a local devnet and use viem to write records. ENSv2 is not yet on a public testnet or mainnet, so the demo runs against the devnet; the same code paths will work unchanged once ENSv2 is publicly deployed.
0G as the media + AI plane. Pitch audio uploads to 0G Storage via and is referenced by 0g://<root-hash> source URIs. AI inference runs through 0G Compute. The same client is reused for two distinct roles: (1) listener-chat moderation against the host's published ENS moderation policy, and (2) talkover script generation (short conversational lines for station IDs, new-subscriber shoutouts, and chat readouts). Models are pinned per role. Talkover audio is rendered with macOS say and spliced into the live broadcast via ffmpeg's amix filtergraph. To avoid mid-stream glitches when transitioning between music-only and mixed sessions, the broadcaster does a prebuffer-and-swap: starts a new ffmpeg process, waits for its first chunk, then atomically swaps connected listeners with no audible gap. A session-discriminator pattern drops late chunks from old ffmpeg processes so listeners never hear a hiccup.
Gensyn AXL for agent-to-agent messaging. Pitch agents send pitch-ready notifications over AXL to the host curator. The host CLI ingests AXL events into a station-event queue and turns them into talkover scripts.
KeeperHub as a backup execution plane. The host CLI provisions a private KeeperHub workflow that watches the onchain pitch-registered event and emails the host whenever a new pitch arrives while the runtime is offline. Workflow definitions are generated programmatically from the host's ENS record set.
Notable hacky bits.
pnpm host:start:public so listeners reach them without port-forwarding.
