top of page

The Master Guide / 13 Sound design and mix · Effects and beds

The earshot listening check

Earshot is a listening aid that reports and never decides; your ear decides. It measures whether a file is the kind of sound described, where each effect lands against the cut, and which cues have no audible sound.

earshot is a listening aid that reports and never decides; your ear decides. It measures whether a file is the kind of sound described, where each effect lands against the cut, and which cues have no audible sound.

Its evidence [best available, not yet validated]: promoted by social posts, with no creator production shown.

What it is. Open source (MIT licence), from github.com/Leonxlnx/earshot. It runs on a laptop's CPU, with two models (CLAP and AST). This Guide checked the version of 4 Nov 2026, and the install steps below fetch that version. Install it once (steps below): about 3 minutes and about 2.8 GB on disk (the environment 1.7 GB, the models 1.1 GB), from GitHub, pytorch.org, PyPI and Hugging Face. The first calls after an install can take several minutes (a cold first timeline took 3 min 38 s); its doctor check loads both models once and times them (steps below).

If you don't work in a terminal, a colleague who does can install and run it. You receive its readings (the rank order, the timeline report, the stretch to trim) and judge them by ear.

Listen first. Do your own pass, and write your verdict on every effect and your pick among the candidates, before you read earshot's readings, so they can't steer your ear. Nothing in the edit moves on a reading alone, and no reading starts a new generation, a new search or any spend.

The three uses (the commands are in Do it yourself, below):

Use

What you do with it

Rank the candidates for one row (ElevenLabs variations, Openverse recordings)

Note the order and each verdict (strong, plausible, weak, no match) beside your own pick.

Check the placed effects against the cut

Each cue reads OK (within a frame), near (within 100 ms), swell (a build peaking within 300 ms), CHECK (a level peak, no clear onset) or NO HIT. Run it on the placed effects, and again on the mix, giving each run's report a new file name.

Find the best stretch of a long recording

Trim to the stretch it gives, then check it in the cut. The window is the row's length in seconds, and a bed is searched as a texture; the default window is 1–5 s.

Write the rank query in plain sound words, one sound per query (source, material, action, character), never the story beat: "a soft airy whoosh", not "a soft glassy whoosh into the lid's twist". In one run the extra word "glass" lowered every whoosh's score and dropped one take from plausible to weak.

The cues file for the timeline check

  • What it holds: one event per one-shot effect: its frame, its kind and its shot (an example below), with the film's frame rate.

  • The frame for a hit: the picture event's frame, which is the hit's timecode-in.

  • The frame for a whoosh or riser: the frame its peak must land on, later than its timecode-in. With cues at the timecode-in, a correctly placed whoosh and riser both read NO HIT.

  • Never the clip's start: that is where the file begins, not where its sound lands.

  • Beds get no cue.

  • CUT lines don't count. A picture cut with no sound of its own reads NO HIT on its CUT line; only the cue lines count.

How far to trust it

  • OK only means an onset was found. It does not mean the effect is heard: see buried sounds below.

  • Timing. The author rates its timing, sync and loudness readings as trustworthy. On a 20-second sample mix (4 Nov 2026), it found the three exposed effects within 0–100 ms of their cues and marked a cue placed 0.5 s off as NO HIT. Loudness was not checked there.

  • Buried sounds. A click placed 38 dB down read NO HIT in two mixes and OK, about 2 dB over its bed, in two others. earshot cannot be relied on to flag a buried effect, so make the quietest effect one of the five moments, and note every other effect that sits only a few dB over its bed.

  • A near is not always late. A near of 100 ms on a whoosh was the file's quiet start before its rush. If you also hear it late, slide the clip so the rush lands on the frame, then run the timeline again.

  • Tags are hints. Its sound-type tags were partly wrong (a falling sweep tagged "uplifter"). A tag never decides anything.

  • It does not judge taste, emotion, speech content or licences. Don't use its critique command, which scores a film against seven tech-launch films, the wrong yardstick for this work. Its llm command uploads audio to Gemini: only if the client's NDA allows it.

When earshot reports NO HIT on a placed effect, note it. If you also hear it buried or missing, raise it, move it or cut it, then run the timeline again.

Do it yourself

Install earshot once (a terminal)

  1. Run these lines in order. They fetch the version this Guide checked (the checkout line pins it) and both models:

git clone https://github.com/Leonxlnx/earshot ~/tools/earshot
git -C ~/tools/earshot checkout 591fa3e
python3 -m venv ~/tools/earshot/.venv
~/tools/earshot/.venv/bin/python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
~/tools/earshot/.venv/bin/python -m pip install -e ~/tools/earshot
~/tools/earshot/.venv/bin/python -m earshot doctor --fetch
  1. doctor --load loads both models once and times them.

Run rank, timeline and find (earshot)

  1. The commands use E=~/tools/earshot/.venv/bin/python.

  2. Rank the candidates for one row:

$E -m earshot rank "a soft airy whoosh" v1.wav v2.wav v3.wav
  1. Check the placed effects against the cut, with the cues file:

$E -m earshot timeline review.mp4 --cues cues.json --detail normal --out timeline_placed_v01.json
  1. A new file name for every run: --out overwrites without warning.

  2. Find the best stretch of a long recording:

$E -m earshot find bazaar.wav "busy street market ambience, distant voices" --kind texture --win 12
  1. --win is the row's length in seconds; add --kind texture for a bed; the default window is 1–5 s.

Write the cues file (a text file)

  1. Write one event per one-shot effect, for example {"fps": 24, "events": [{"f": 288, "kind": "whoosh", "id": "S07"}]}.

  2. Set each event's frame by the rules above: a hit's picture frame, a whoosh's or riser's peak frame, never the clip's start; no cue for a bed.

Sources

  • earshot by Leonxlnx (GitHub; its documentation as of 4 Nov 2026).

bottom of page