overcast-wiretap
Use this skill to analyze audio recordings you already hold (a call, a voicemail, a
field recording): how many people speak, what the background reveals about where it
was recorded, and whether two clips share a voice or a phrase. Use the broad
overcast skill and overcast/reference/verbs.md for exact flags.
Workflow
- Transcribe the recording and read its background scene on the default
backend.
--describesurfaces the whole audio scene (traffic, trains, a PA announcement, church bells) — the "enhance the background noise" move that places a recording — and is a tinycloud/Cloudglue multimodal feature, so do all the transcript/describe work FIRST, before binding any speech-only provider:
overcast doctor --json
overcast case init --json
overcast listen ./call.wav --json # speech transcript + time-anchored segments
overcast listen ./call.wav --describe --json # background audio scene (tinycloud describe)
overcast view ./call.wav --spectrogram --json # visual inspection artifact (tones, hums, edits)
- Isolate voices from noise and re-transcribe the cleaned track — a second pass often recovers words the first missed:
overcast enhance ./call.wav --ops voice-isolate,denoise --json # bundled-ffmpeg filter (fast, lossy)
overcast enhance ./call.wav --ops separate --json # true source separation → a track per speaker
# (local pyannote: scripts/visual-db-uv.sh --voice + HF_TOKEN, or fal)
overcast listen <enhanced-record-id> --json
- Separate the speakers.
--diarizeneeds a diarize-capable listen provider (the default tinycloud/Cloudgluelistenis speech-transcript only and rejects--diarize). Bind ElevenLabs for this — but do it LAST, after the describe / multimodal steps above, because ElevenLabs Scribe is speech-only and drops the audio-scene describe:
overcast provider setup apply --verb listen --choice elevenlabs --yes --json
overcast listen ./call.wav --diarize --json # -> <diarize-record-id> (speaker-labeled)
- Verify a speaker's identity across recordings with the local voice-print DB
(speaker embeddings, not phrase matching —
scripts/visual-db-uv.sh --voice, no token needed). Scores are rank scores, not liveness: a cloned/synthetic voice can score high, so corroborate before naming anyone:
overcast index create voices --type voice-print --local --json
overcast voice add ./call.wav --index voices --json # enroll each recording
overcast voice match ./voicemail.m4a --index voices --json # which recordings share this voice?
overcast voice match ./call.wav ./known-sample.wav --diarize --json # WHICH diarized speaker matches (HF_TOKEN)
voice answers WHO is speaking (enroll a reference, then rank where/which). To
ask whether two clips are the SAME RECORDING (a re-upload/leak of an identical
file — a different question), fingerprint them with the local audio-fp DB,
which matches exact audio through transcode/noise but NOT pitch/speed:
overcast index create clips --type audio-fp --local --json
overcast audio add ./call.wav --index clips --json
overcast audio match ./leaked.mp3 --index clips --min-margin 2 --json # same recording? time-offset aligned
Full drills: overcast-voiceprint (WHO is speaking) and overcast-audio-match
(same recording surfaced again).
- Record per-speaker and per-clue observations, then correlate across recordings.
Cite the speaker-labeled
<diarize-record-id>for who-said-what claims (not the step-1 transcript record):
overcast note "Speaker 2: PA announces 'platform 4' at 00:38 → rail station" --ref <diarize-record-id> --at 38 --confidence medium --json
overcast ask "which recordings share a speaker, phrase, or background cue? cite record.id + time" --verb listen --json
- Turn confirmed clues into findings and export; always leave a
tldrnote:
overcast finding create "call.wav and voicemail.m4a share Speaker 2's phrasing + station PA — likely same caller/location" --ref <diarize-record-id> --confidence medium --json
overcast note "3 recordings; 2 speakers on call.wav; background = rail station; cross-clip voice overlap on 2 of 3" --tag tldr --json
# Wait for the note result before exporting, so the TL;DR is included.
overcast brief --export ./wiretap.html --json
Output
A per-recording speaker breakdown with timestamps, the background-scene clues that
locate or date it, any cross-clip voice/phrase overlaps, and the spectrogram
artifacts — each cited by record.id + media.at.
Caveats
--diarize needs a diarize-capable listen provider: the default tinycloud/Cloudglue
listen transcribes speech only and errors on --diarize — bind ElevenLabs
(provider setup apply --verb listen --choice elevenlabs --yes) for speaker
separation. Bind it LAST: ElevenLabs Scribe is speech-only and drops the audio-scene
--describe, so run all transcript/describe/multimodal work on the default backend
first, then rebind for the diarize pass. Diarization LABELS speakers ("Speaker
1/2"), it does not IDENTIFY them —
a name is a corroborated inference, never a diarizer output. voice match scores
speaker similarity, not liveness — a cloned/synthetic voice can score high and the
same speaker scores lower across languages or heavy compression, so treat a voice
match as a lead to corroborate, never an identification. voice-isolate on the
bundled ffmpeg is a filter, not source separation — for a real per-speaker split use
enhance --ops separate (local pyannote via scripts/visual-db-uv.sh --voice +
HF_TOKEN and the accepted pyannote license, or fal), or bind ElevenLabs
(--verb enhance --choice elevenlabs) for stronger isolation; either way re-listen
to confirm the cleaned transcript rather than trusting it blind. Background-cue
geolocation is suggestive, not definitive.