voice-isolate
Skill3 starsChanged 4 months agoMITView on GitHub
Extracts clean voice samples from a video. Separates the vocal stem with Demucs, gets speech timecodes with faster-whisper, detects the recurring percussive "taka" SFX by its high-frequency signature in the accompaniment stem, drops the whole word under each detected SFX, and exports the remaining clean spoken phrases as individual sample clips plus a concatenated track. Use when the user gives a video and wants the narrator's voice isolated, clean voice samples for cloning/TTS, a voice-only audio track, background music/SFX removed from speech, or mentions "solo la voz", "aislar la voz", "voz limpia", "muestras de voz", "quitar SFX/música", "canal de voz", isolate/extract voice, voice samples, narrator voice, or vocal stem from a video or reel.
In this repository45 other files it gives its agents.
- asset-generatorSkill
- audio-theaterSkill
- avatar-ambient-sfxSkill
- avatar-camera-anglesSkill
- avatar-framesSkill
- avatar-inventSkill
- avatar-locationSkill
- avatar-reel-composerSkill
- avatar-talking-videoSkill
- bg-music-hqSkill
- bg-musicSkill
- brand-content-strategySkill
- broll-actor-copySkill
- broll-avatar-cameraSkill
- broll-browser-recorderSkill
- broll-coreSkill
- broll-cursorSkill
- broll-finderSkill
- broll-generatorSkill
- broll-storySkill
- broll-terminalSkill
- broll-web-captureSkill
- caption-word-revealSkill
- carousel-generatorSkill
- cuento-reelSkill
- facebook-videosSkill
- gpt-image-2Skill
- instagram-videosSkill
- luxury-hnwi-salesSkill
- onboarding-scriptSkill
- pdf-remixSkill
- reel-discoverySkill
- reel-restyleSkill
- rule-of-six-editSkill
- seedance-2Skill
- sound-effectsSkill
- tiktok-videosSkill
- video-bg-replaceSkill
- video-composeSkill
- video-remixSkill
- video-scene-analysisSkill
- video-transcribeSkill
- viral-video-scriptSkill
- voice-cloneSkill
- youtube-videosSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 63
Add --language es (or en, …) to skip auto-detection.
- Very specific: line 90
Only prominent peaks above it (with a minimum spacing) are taken as taka.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Voice Isolate
Given a video, produce clean voice samples of the narrator: the recurring percussive SFX (a short broadband "taka"/"tk" that bleeds over the voice) is detected and the word it lands on is dropped, so the remaining phrases are clean. The goal is good-quality voice samples (for cloning/TTS), not preserving every word — contaminated words are discarded on purpose.
Pipeline
- ffmpeg extracts the audio from the video.
- Demucs (
htdemucs) splits it into the voice stem and the accompaniment stem (everything that is not voice: music + SFX). - faster-whisper transcribes on the clean voice stem → segments + per-word timecodes (more accurate than transcribing the original mix).
- Taka detection (auto): the SFX is a short broadband transient whose energy spikes in the high band (>5 kHz), while the voice body lives below ~4 kHz. In the accompaniment stem (voice already removed) those transients stand out. The HF energy envelope is peak-picked with an auto-relative threshold, so only prominent taka are flagged — not the near-silent floor.
- Word drop: each detected taka is expanded to the whole word(s) it overlaps and those words are removed from the speech.
- The remaining clean phrases (≥
--min-sample-len) are exported as individualsamples/sample_NNN.wavclips and as one concatenatedvoice_concat.
Requirements
ffmpegon PATH.- Python deps:
pip3 install -r requirements.txt(no librosa/torch beyond Demucs; detection usesscipy.signal). - torch and torchaudio MUST match versions (e.g.
torch==2.5.1+torchaudio==2.5.1). A mismatch makes torchaudio fail to load and Demucs cannot run. Fix withpip3 install "torchaudio==$(python3 -c 'import torch;print(torch.__version__.split("+")[0])')". - First Demucs run downloads model weights (~80MB), cached afterwards.
Quick start
Everything is automatic — taka removal and sample export are on by default:
python3 scripts/extract_voice.py <video> --mp3- Output goes to
<video>_voice/next to the video (override with-o <dir>). - The deliverable is the
samples/folder (clean clips) plusvoice_concat.mp3(all clean phrases concatenated). accompaniment.wavis kept by default so re-runs can reuse the stems (Tuning).- Add
--language es(oren, …) to skip auto-detection.
Report the final stats printed by the script (taka detected, seconds removed,
number of clean samples) and the path to samples/ and voice_concat.mp3.
Outputs (in <video>_voice/)
| File | What it is |
samples/sample_NNN.wav / .mp3 | Main deliverable: each clean spoken phrase as an individual sample clip |
voice_concat.mp3 / .wav | All clean phrases concatenated (taka + their words removed) |
voice_gated.wav | Voice aligned to the original timeline (taka silenced in place) — with --mode both |
vocals_full.wav | Full Demucs voice stem (whole timeline) |
accompaniment.wav | Non-voice stem (where the taka is detected) |
voice.json | Language, segments, per-word timecodes, sfx_detection, sfx_intervals, kept intervals |
voice.srt | Narrator speech subtitles |
Auto-relative threshold (default, no per-video tuning)
The taka is sparse and sits over a near-silent high-frequency floor, so a fixed threshold — or a MAD-based one — collapses and over-triggers. Instead the threshold uses a robust upper spread of the accompaniment's >5 kHz envelope:
threshold = max(--sfx-min-abs, median + k · (p95 − median))Only prominent peaks above it (with a minimum spacing) are taken as taka.
The script prints the computed threshold and count each run
(Umbral auto (taka >5000Hz): median … + k*(p95-median) … = …) and stores it in
voice.json (sfx_detection). This is fully per-video and needs no tuning.
Tuning (fast, no re-separation)
Re-running Demucs is the slow part. After a first run (accompaniment is saved by
default), use --reuse-stems to re-cut in ~5s from the saved
vocals_full.wav + accompaniment.wav + voice.json:
# More taka removed → lower k; keep more voice → raise k:
python3 scripts/extract_voice.py <video> --reuse-stems --mp3 --sfx-k 3Key knobs:
--sfx-k(default4.0): sensitivity. Lower = more taka removed (cleaner remainder, less voice kept); higher = fewer.k≈4removes only the clear taka; drop to3/2if some are still audible, raise to5if too much is cut.--sfx-hf-hz(default5000): the high band where the taka lives. Lower it if the SFX is more midrange; the voice body is below ~4 kHz.--sfx-min-distance(default0.20): minimum spacing (s) between taka peaks.--sfx-half-width(default0.06): half-window (s) around each peak before snapping to the word.--min-sample-len(default0.4): drop clean chunks shorter than this (keeps only usable samples).--sfx-word-pad(default0.04): extra margin when expanding a peak to a word.--no-snap-words: cut exactly the peak instead of the whole word (may leave a half-word; usually not wanted for samples).--no-samples: skip the individual-clip export (keep only the concat).--no-remove-sfx: disable taka detection entirely (raw Demucs voice).
Notes / limitations
- Demucs isolates all vocals, not a specific speaker. With multiple speakers, all voices stay in the stem (no diarization).
- The taka detector targets discrete transient SFX. A continuous music
bed under the voice is not removed by dropping words (it overlaps every word);
for a cleaner stem re-separate with the fine-tuned model
--demucs-model htdemucs_ft(≈4× slower, CPU only — MPS is unsupported for it). --no-demucsskips separation and just trims the original audio by speech VAD (no taka removal).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

