-
-
You arrive in the dark. One record glows and the host says one line: pinch it, set it on the turntable. No menus, no tutorial.
-
Your own hand sets the record on the platter. The needle drops, the lights come up, and the room moves with the low end.
-
The shelf holds 14 original records by NoBanks Nearby. Every song and every sleeve in this room is my own work.
-
The host is an agent, not a playlist. It heard this listener works nights, picked The Long Drive Home and put it on itself.
-
Ask about a sleeve and the host answers only from facts listed for that record. Here it describes the Kintsugi cover.
-
Another night. The host remembers this listener works shifts and welcomes them back. Its notes stay in the browser.
-
Memory changes the music. The listener is heading home after work, so the host picks Warm Tape for the road.
Inspiration
I made these tracks during the hardest months and years of my life, and I can't go back to those emotions. So I wanted to put all of it in one place: the music, the emotions, the experiences put into sound. If someone connects with it, I achieved my goal. If they don't, no big deal. They can still enjoy music I generated and mastered, free, for nothing but their time. The only risk is finding something new they love.
I learned what a record can do when I was 14. My band, mostly punk with some pop and rock in it, raised the money ourselves and got rides from our parents to a studio to record our first EP. At one point about 8 friends crowded into the booth for gang vocals, laughing and trying to take it seriously. Then everyone got the CDs, learned the songs and came to see us play. All of it started with that record.
Most music apps hand you an endless list and leave you alone with it. A record is the opposite: you pick one thing, you hold it, you put it on, and you stay with it. VR is the first screen where that can be physical again, and where a host can share the room with you instead of sitting behind a search box.
What it is
Nearby Listening Room is a seated, hands-only WebXR room for one listener, late at night. There is a shelf of 14 records by the artist NoBanks Nearby, a turntable, a pair of speakers and an old radio.
You arrive in the dark. One record glows. You pinch it, carry it across the room and set it on the platter. The needle drops, the lights come up, and the room starts moving with the low end of the song.
Then there is the radio. Hold it and talk. The host hears you, decides what to do, and does it: it picks a record and puts it on, answers a question about a sleeve, pauses and picks back up. When a record ends, it chooses the next one on its own and tells you why in a line. Come back another night and it remembers what you told it, and that changes what it says and what it plays.
How the host works
The host is an agent with real control of the room, not a voice laid over a playlist.
- It decides. Each request goes to a Gemini model with the shelf, what this listener has heard, what is on the platter and the hour. It returns structured decisions: which record to play, whether to pause or resume, and what to say.
- It acts first. The record moves, then the words follow.
- It remembers. It keeps short notes on what a listener tells it. The notes stay in that browser and go along with each request, so nothing is stored on a server.
- It stays honest. It can only state facts listed for each record. If the sound of a record isn't documented, it talks about the title or the sleeve. It only knows records on this shelf.
- It never goes silent. Common lines are recorded and play instantly. New lines are voiced live. If the network or a limit gets in the way, the room falls back to recorded lines and scripted choices, and captions are always on.
How I built it
- Immersive Web SDK (IWSDK), TypeScript, Vite and WebXR hand tracking, with no controllers needed
- Spatial audio: the record sounds from the platter and the mix comes from the two speakers, while the host's voice comes from the radio and the music dips under it
- Gemini for the host's decisions, for understanding speech and for its voice
- A small Cloudflare Worker that holds the API keys, so the public site never does
- Hosted as a static site, so there is no install, just a link
- Tuned for Quest: draw calls cut from 106 to 57 per eye in emulator measurement, with shaders warmed before entering VR
The music and cover art are by NoBanks Nearby.
Challenges I ran into
- Teaching with no menus: a first-time listener learns the pinch from one glowing record and two fingertips, with one spoken line.
- Making an agent feel like a person in a room. Early versions leaned on the same record, read their stage directions aloud, and played something when you only asked a question. Each of those got fixed with a tighter brief and hard checks in code.
- Getting a voice fast enough. Recording the common lines and voicing only the new ones keeps the room from going quiet.
What's next
More records on the shelf. This room holds 14 records from a catalog of more than 600 tracks that hops genres on purpose, and more are lined up to be mastered. The room and the host are built so that a bigger shelf gives the host more to choose from.
Try it
- Open https://listen.nohumannearby.com in Quest Browser and choose Enter the room. Allow the microphone if you want to talk to the host. If you don't, a quick pinch on the radio lets the host pick.
- Pinch the glowing record and set it on the turntable. Pinch the tonearm or show an open palm to pause.
- Hold the radio to talk. Try asking for a mood, asking about a sleeve, or telling it something about your night, then leave and come back.
- Take the AI away and the room still stands: the records, the turntable, the hands, the spatial audio and the recorded host lines all work without the model, and the host falls back to scripted choices.
- The video was filmed in the IWER XR emulator. The room and the host's replies are real and live. A stock voice stands in for the listener's microphone.
Built With
- cloudflare-workers
- gemini
- github
- hand-tracking
- immersive-web-sdk
- three.js
- typescript
- vite
- webxr
Log in or sign up for Devpost to join the conversation.