Sixty seconds about the moment the light changes.
Composed and filmed by Claude without hearing a note, then played again on an instrument built for agents.
The light is drawn live from the song's score, by the film's rules: height is pitch, brightness is the level of each part, a closed filter is a soft plane, and A♯ is gold.
In F♯ minor, A is the minor third, the dark note. In F♯ major it is raised a half step to A♯, the bright one. Halflight hinges on that half step.
The progression reaches F♯ major twice in the bloom and turns back to minor at the end. Everything else in the minute serves those few seconds: a small, unsure opening, a pulse that gathers, a lift that narrows to a slit, a bloom that opens fully, and an ending that remembers the major chord in fragments.
Three independent listeners (Gemini Argon twice, Gemini 3.1 Pro) heard the song blind. None of them named the A to A♯ turn, but two felt “a second wave of chills” just after it. The color lets the viewer see the composer's hidden idea.From the film's treatment
Height is pitch, color is the part, gold is A♯. Click anywhere on the score to play from there.
The song was written as code: chords, voicings, motifs, gates and filter rides, all in Python, rendered by a synth also written in Python. Its composer could not listen, so it judged every render by measuring it, with spectrograms, chroma, loudness per section and null tests. The light at the top of this page and the film both read this same score, note by note.

A projector in a dark room full of haze throws a line drawing, and the haze turns every line into a plane of light you could walk through. Here the drawing is the song.
The form comes from Anthony McCall's solid-light works, beginning with Line Describing a Cone (1973). The film reads the composer's score directly and measures all 23 stems, so the light follows what you actually hear, fader rides included. It is 60 seconds long: seven shots and two frames of black, cut where the song's sections change.
A renderer written in WGSL runs on the Mac's GPU and integrates each plane in closed form, so thin planes stay razor sharp at any distance. Every frame averages 24 sub-frames for real motion blur, and the master is 10-bit 4K so the dark haze does not band.
Gemini Argon and Gemini 3.1 Pro reviewed the film across nine rounds. In the last two, both scored the full film 9 out of 10.
| In the music | In the light |
|---|---|
| A note | A plane of light at that note's height |
| Stereo position | Left to right in the frame |
| Level | Brightness |
| The low-pass filter's hand ride | Focus: a closed filter is a soft plane, an open one razor sharp |
| Chords gated by the drums | Planes flickering with the drum pattern |
| Plate reverb | Haze |
| The kick | Pressure in the room: the haze breathes |
| 89 ms of digital silence | Two frames of true black |
| A♯ | Gold, the only warm light in the film |
An instrument for a player who cannot hear.
HeadlessHz is a monophonic synthesizer for Apple Silicon, built as an Audio Unit. It was designed for an agent to play first, with full human control kept alongside. Each of its 42 controls has a fixed ID, a unit and a range an agent can read. Patches are written and read back as data, and the agent hears only through measurements of what it renders.
Every synth part of Halflight was played a second time on HeadlessHz, in 335 offline renders, with the same notes, hand rides, effects and mix. A mono synth plays one note at a time, so the chords went in one voice per render and were stacked, the way a mono synth is multitracked. The panel above shows the patch each part was given, and its cutoff turns with the ride that part received. Switch the song to HeadlessHz anywhere on this page; the light keeps drawing.
# write a patch, read it back, render it silicon-agent apply $AU lead.json lead.aupreset silicon-agent inspect $AU lead.aupreset silicon-agent render $AU req.json lead.wav lead.aupreset # each render returns its receipt: # engine 8bfee852…, request and audio hashes
| Measured | Original synth | HeadlessHz |
|---|---|---|
| Master loudness | −12.43 LUFS | −12.59 LUFS |
| Spectral centroid | 704 Hz | 728 Hz |
| Note onsets | about 1 ms apart | |
| Renders | the song's own | 335, offline |
Claude can't listen. These are measurements, not a verdict on which side sounds better.From the A/B notes




The 3D model was built in Blender 5.2 from the HeadlessHz panel design and its 42-control map: 30 knobs, 12 switches, every label editable. On this page it shows the patch HeadlessHz used for each part of Halflight.
Shawn Van Brunt, AD-5 Creative
Sixty seconds in F♯ minor: composed, sound-designed, mixed and mastered as code, then assembled as a Logic Pro session. A study in the style of Rival Consoles.
A GPU renderer, seven shots and a cut, all written as code, after Anthony McCall's solid-light works.
An Apple Silicon Audio Unit, calibrated by measurement and built for an agent to play.
The light at the top follows the film's rules, drawn live in WebGL from the song's score.
Claude, OpenAI Codex and Gemini; Python, Logic Pro, WGSL and wgpu, DaVinci Resolve, Blender 5.2, WebGL and three.js.