Subject: Shoro RoyStatus: acceptingLast observed: New York
build 0019 · 2026

Bushwick Nightcrawlers

Rat critics review Bushwick, in ultrasonic

Collaborators
Madhura Redij
Built with
JavaScript, Tone.js, Web Audio, Claude Code
Live
Bushwick Nightcrawlers, image on file
Summary of findings

A sound piece scored for one intersection at night. Click a pin on a hand-drawn map of Myrtle and Broadway and a rat reviews the venue above it, Yelp style, spoken in recorded squeaks. Reviews layer up as you click, over the sound of the corner. The interface is the score.

Two rats outside my apartment. A rat couple lived outside my apartment and came out together at night to forage. They might be dirty, but they were pretty good at dirty dancing. Then exterminators came through the block, and I was sadder than I expected. A few days later the burrow opened up again. I wanted to know what they were saying.

The form came from a Scientific American piece on researchers recording New York's rats with ultrasonic microphones. One rat talked to itself inside a garbage bag, "perhaps offering a Yelp review for passing comrades." I took that literally, for my final project in Sam Mejias's Sound in Art class at Parsons School of Design.

The opening field notes, three cards on the rats of New York
The piece opens on the research while the voices load behind it.

Yelp is the form.

The reviewers are fictional and the places are real: ten pins around the JMZ stop, including the platform, an alley and two venues that closed this year. The reviews borrow the voice of Grime Square's writers, credited on the piece, and the epigraph is Aaron Tomey's line from it, "The vermin aren't the customers."

Attached · platesThe reviews7 plates
Attached · platesThe reviews7 plates

Razor Whisker, the earnest show kid, rates a show by how hard the floor shook.

  1. Plate 1 of 7

    Razor Whisker, the earnest show kid, rates a show by how hard the floor shook.

  2. Plate 2 of 7

    DJ Nibblers is the cocaine rat: all caps, run-on, and only does diet.

  3. Plate 3 of 7

    Mira Wong-Witherspoon gets it from both sides: three stars, for a room that's changing.

  4. Plate 4 of 7

    The Wyckoff Six are a six-rat polycule. They review as one "we", then process it for four hours.

  5. Plate 5 of 7

    Rosemary Rib took over Caffeine Underground when the humans left. The venue is the performance.

  6. Plate 6 of 7

    Comrade Crumb posts like DSA Twitter, and is really Wystan Pemberton-Whitford III from Connecticut.

  7. Plate 7 of 7

    Rash closed in February, so its pin opens a tombstone instead of a review.

Plate 1 of 70019.02[A]
0019.02[A]

The mechanism is the voice. Every word is a recorded squeak. Most come from rodent recordings on Freesound. The rest come from Tachibana's laboratory dataset, ultrasonic calls of rats on cocaine, slowed down into human hearing.

In the default register each word gets one squeak, picked fresh on every click by the squeak's length, the word's punctuation and the rat's personality. No playback repeats.

In the second register the rats speak their own language. Words become runs of syllables, and each syllable's squeak is seeded from its consonants and vowel, so "rat" and "rats" sound the same, and so do "crumb" and "crumbs". Every rat says a syllable the same way, in its own voice. The language is stable because its rules are.

Keywords trigger effects on the voice: one word opens a hole in the sound, another fizzes.

Thebackstockroomratsconsiderthemselvesresidentproletariatandgatekeepthespilled-ricecornerfromusstreetcomrades,internalcontradiction.

co · one squeak, four times

In the second register, the same syllable always gets the same squeak.
Attached · decisionHow the rats talk
Attached · decisionHow the rats talk

TakenGenerative by default, so every click picks fresh squeaks.

RejectedOne fixed rendering per review.

WhyRats don't archive their language. A review that sounded the same every time would be a recording of a rat, and the piece is meant to be a rat talking. The stable version exists, but you have to ask for it.

TakenEach word waits for the last squeak to finish.

RejectedA fixed gap between words.

WhyThe pace comes out of the squeaks picked. Short squeaks make fast talk and long ones drag, so a rat whose voice runs long sounds tired without anyone setting a tempo. Sentence ends draw the longest squeaks, so a period has room to ring out.

TakenThe cocaine recordings are a register some rats live in and others slip into.

RejectedGiving the whole bank to one rat.

WhyDJ Nibblers speaks only in it, Pinky Mae mostly, Razor Whisker and Edible Eddie now and then, the rest never. Any rat who says a trigger word drops into it for that word, the way an accent slips. These words never break into syllables, so DJ Nibblers is the one rat who never speaks the language.
0019.03[B]

The corner keeps playing.

Under it all runs the corner itself: the JMZ overhead, the drone of the street, small bits of activity. Every ninety seconds to three minutes, a train passes overhead.

A review keeps playing, quieter, after you close it. Older voices sink under a low-pass filter and more reverb as new ones arrive, each placed in the stereo field where its pin sits on the map. By the end, the corner is louder than when you arrived.

Attached · embedThe Bushwick Nightcrawlerslive
Attached · embedThe Bushwick Nightcrawlerslive
0019.04[C]
Ownership

I designed the engine and wrote the rats, with Claude Code for the code. Madhura Redij illustrated the map and every pin, and the piece looks the way it does because of her.

Looking back

A joke needs a rigorous system to stay funny for more than a minute. The comedy is in the premise. The staying power is in the rules that keep each rat consistent, so a listener learns a rat by its voice. The default register works against that: if every click picks new squeaks, nobody can send a friend the take that made them laugh. That's why the stable register exists, and why it's opt-in.

I kept the build plain: no framework, no build step, and one serverless function for the shared reaction counts, with no accounts and no tracking. The voices are 172 audio files, so there's a lot to load before the rats can speak. At first a slow connection let people in before they were ready, into silence. Now the way in only lights up once they can talk, and a failed load says so instead of going quiet.

The mobile layout went through ten iterations in one day, each fixing the symptom in front of it, before I had the whole layout audited from the root. Then iOS 26 Safari began clipping the review sheets at the bottom of the screen, and I hid the clip under a fade instead of rebuilding the modal. The fade holds.

I wrote every review, every bio and the About page myself, with a standing rule that Claude Code didn't touch the voice. The argument of the piece lives in the engine, though. Generative playback is the claim about orality, and I specified it and listened to it rather than writing it line by line. I'm still working out how to describe that kind of making.

Establish contact

· approach with care
Status
Subject accepting new roles.
Last observed
New York.
Set in Syne Mono; the subject in Pirata One ·built in Next.jsFile maintained by subject.Last amended 2026-10-07© 2026