AI column

Sound & music@donghyeok99Staff

earshot: ears for coding agents

Its author made every sound in a 22-second launch film in code, with no recordings and no music track

earshot catches a hit landing 80 ms after the cut, and a new sound made with earshot forge is set on the cut.
earshot catches a hit landing 80 ms after the cut, and a new sound made with earshot forge is set on the cut.
Who
Made by Leon Lin (Leonxlnx), for coding agents that build films, demos and games in code.
When
Released as 0.1.0 on 15 October 2026; the latest is 0.4.0, from 22 October.
Where
Runs locally on CPU only, no GPU. A CLI, a Python API and an MCP server for Claude Code and other agents.

What was hard

An agent can write the code that renders a launch film or a product demo, but it cannot hear the result. A hit that lands 80 ms after the cut, a key press that sounds cheap, music that swells in the wrong place: the agent has no way to notice. So a person has to listen every time and describe in words what is off.

What it does about it

earshot turns sound into evidence an agent can read: what a file sounds like in words, how well it fits a description as a score, and how far it sits from a picture cut in time. Hearing also makes making possible. The agent writes a sound as a physical-synthesis recipe in code, earshot renders candidates and judges them, and the agent reads the critique, rewrites the recipe and runs it again.

earshot sheet on the launch film: frames, sound events, spectrogram, sync
earshot sheet on the launch film: frames, sound events, spectrogram, sync
Frames from the 22 s launch film whose every sound earshot forge made in code
Frames from the 22 s launch film whose every sound earshot forge made in code
earshot describe enter.ogg0.56 s short transient (attack 3 ms, decays in 190 ms). Sounds most like: a single mechanical keyboard key press(z +5.4), a soft key release click (z +3.6) ... [clear reading]. peak -0.1 dBFS, brightness 1.5 kHz ...earshot match key.ogg "a deep thocky mechanical keyboard press" --alts "a clicky blue switch keyboard" "a mouse click"-> strong (z +3.7; would rank #2 among 322 vocabulary descriptions) ...earshot find keys.ogg "a single mechanical key press" --top 40:03.94-0:04.19 (0.24 s stroke, z +4.1 strong); 0:10.60-0:10.86 ...earshot critique film.mp4VERDICT: close - 21 of 23 scored metrics in range ... FIX FIRST: 1. [major] nothing reaches body level until 0:01.01 ...
The README's own run

How it runs inside

  1. 1

    Claude Code → earshot MCP server

    calls describe enter.oggThe MCP server keeps the models loaded and takes one tool call at a time.earshot/mcp_server.py
  2. 2

    earshot MCP server → CLAP and AST models

    the sound against the vocabularyCLAP scores the sound against vocab.json's descriptions as z values; AST adds AudioSet labels.earshot/describe.py
  3. 3

    CLAP and AST models → Claude Code

    'a single mechanical keyboard key press (z +5.4)'It comes back as one paragraph, with measurements such as length, attack and decay.earshot/describe.py
  4. 4

    Claude Code → impact.py recipe

    a physical-synthesis recipe in codeA render() that computes contact, air shock, membrane, sub and hall in layers, with no recording.earshot/forge/recipes/impact.py
  5. 5

    impact.py recipe → forge critic

    renders, pre-screened by measurement1/3-octave balance and envelope rank many renders without models; only the best are heard by CLAP.earshot/forge/search.py
  6. 6

    forge critic → Claude Code

    'decay +2.4 outside the refs'The agent reads the critic's words, rewrites the recipe and runs it again.earshot/forge/critic.py
  7. 7

    forge critic → WAV and report.md

    WAV, report.md, compare.png, audition.wavThe picks, their critique, spectrograms next to the references and a file to listen in pairs.earshot/forge/__init__.py

What goes in, what comes out

earshot describe enter.ogga single mechanical keyboard key press (z +5.4), clear reading
earshot critique film.mp4VERDICT: close, 21 of 23 metrics in range, with what to fix first and when
a recording, click.wav (earshot fit)click_fit.py, a recipe module that re-renders it, with variations and morphs
sfx render whoosh_fast/crisp --apex 0.32a whoosh whose loudest moment sits within 5 ms of the target

Is it for you

Good for

  • Building launch films, product demos or games in code and letting the agent handle the sound too
  • Picking the candidate sound that best fits a description out of many downloads
  • Trimming the right moment out of a long recording, or checking that sounds land on the cuts
  • Making sound effects in code, with no recordings, and varying them

Not for

  • The first use downloads two open models (about 1.1 GB), and each CLI call loads them for 20-40 s; for many calls use the MCP server.
  • It cannot judge taste or emotion, provenance or licences, speech content, or anything above 14 kHz.
  • The reference recordings forge compares against are licensed and not in the repo; bring your own to compare with real ones.
  • The optional LLM critique needs your own Gemini key and your consent to upload the audio.

Reviewed by Devalley’s editor before publishing. How the column is made

Sign in to post, comment and like.Sign in

Report

Reason

Read the community rules