ASR/STT subtitle generator. Uses Qwen3-ASR, local LLM, Whisper, TEN-VAD. Noise-robust for JAV
2,220
stars
1,087
commits
Python
primary language
Sep 5, 2026
updated
A subtitle generator for Japanese Adult Videos. Free, runs on your own machine, no cloud upload of your media.
Speech recognition models like Whisper are trained on clean, curated speech. JAV audio is the opposite of that, and the mismatch breaks them in specific, well-understood ways:
The acoustic profile. JAV audio has a low signal-to-noise ratio and a high density of non-verbal vocalisations — breathing, gasps, moans — whose spectra often mimic real Japanese syllables (e.g. fu), tricking the model into hearing words where none exist. Add extreme volume swings (whispers to screams) and theatrical role language (yakuwarigo) absent from training corpora, and the model's assumptions stop holding.
Long-form drift and hallucination. These are feature-length recordings, not 30-second clips. Over long stretches of ambiguous audio — silence, rhythmic breathing — the model's attention collapses and it fills the void with repeated or invented text. This is a documented failure mode of Whisper-family models [3, 4, 5].
The pre-processing paradox. Intuition says "denoise first". In practice, blanket denoising and vocal isolation can strip the high-frequency detail the model needs to tell consonants apart, making things worse. Fine-tuning on JAV data has its own trap: good datasets are scarce, so fine-tuned models tend to overfit and become hit-or-miss.
WhisperJAV is built around these three failure points rather than around any single model:
None of this is magic; it is careful plumbing around known model weaknesses, and the defaults are tuned against ground-truth benchmarks. Results still vary with source audio quality.
GUI (recommended): launch WhisperJAV from the desktop shortcut (Windows installer) or run:
whisperjav-gui
Add files, pick a mode, click Start. Subtitles land next to your video as .srt.
Command line:
whisperjav video.mp4 # defaults
whisperjav video.mp4 --mode balanced --sensitivity aggressive
whisperjav /path/to/folder --output-dir ./subtitles # whole folder
Any input FFmpeg can read works: MP4, MKV, AVI, WMV, MP3, WAV, FLAC, and so on. Output is SRT (default), WebVTT, or both (--output-format both).
Every pipeline follows the same overall shape; modes differ in which components they use and how aggressively they are tuned.
flowchart LR
A[Audio<br/>extraction] --> B[Scene<br/>detection]
B --> C[Speech<br/>enhancement<br/><i>optional</i>]
C --> D[Speech<br/>segmentation<br/>VAD]
D --> E[ASR<br/>model]
E --> F[Post-<br/>processing]
F --> G[.srt]
Each stage has several interchangeable providers — the full menu, with strengths and weaknesses, is in Mix-and-match strategies below.
| Mode | Engine | Character |
|---|---|---|
| balanced | Faster-Whisper | Default. Full pipeline; good speed/accuracy balance |
| fidelity | OpenAI Whisper | Slowest, most thorough of the classic pipelines |
| fast | OpenAI Whisper + scene detection | General use, mixed-quality audio |
| faster | Faster-Whisper, minimal preprocessing | Speed first, clean audio |
| qwen (ChronosJAV) | Qwen3-ASR | Modern text-first recognizer |
| anime-whisper (ChronosJAV) | anime-whisper | Anime/JAV-tuned dialogue |
| transformers | HuggingFace | Kotoba and other HF Whisper models |
| crispasr | External | Bring-your-own CrispASR build (experimental) |
Sensitivity applies to every mode: conservative (fewer false positives, good for noisy content) · balanced · aggressive (catches more quiet dialogue; good for whisper/ASMR content — and the tuning target of most of our benchmark work).
Some of the best recognizers for this domain (anime-whisper, Qwen3-ASR and its Japanese finetunes) don't produce reliable timestamps on their own. ChronosJAV runs text generation and timing as separate stages: the VAD provides the time skeleton, the model provides the words. Since v1.9, timestamps come from the VAD frames by default (no aligner model loaded, ~1 GB less VRAM); a Qwen forced-aligner mode remains available in the settings for word-level alignment.
The same decoupled design is why new models can be added without rebuilding the pipeline — anything that turns audio into text can be slotted in.
Different pipelines miss different lines. Ensemble mode runs your file through two pipelines and merges the results.
The v1.9 default pairing: pass 1 = anime-whisper with WhisperSeg VAD, pass 2 = Qwen3-ASR with TEN VAD — two different recognizers and two different VADs, so their blind spots don't overlap.
whisperjav video.mp4 --ensemble \
--pass1-pipeline qwen --pass2-pipeline balanced \
--merge-strategy pass1_primary
pass1_primary / pass2_primary (one pass leads, the other fills gaps), smart_merge, full_merge, pass1_overlap / pass2_overlap, longest--ensemble-serial): finish each file completely before starting the next, so results appear as they're done--pass2-pipeline xxl --xxl-exe ...) or an external CrispASR buildThe Ensemble tab is a mixing desk. Each pass is a free combination of five choices — pipeline × scene detection × audio pre-processing × speech segmentation × ASR model — and the two-pass design is the sixth dimension. The defaults are benchmark-tuned, so you never have to touch any of this; but audio varies a lot, and one deliberate substitution is often worth the experiment. The golden rule: change one thing at a time, so you know what caused the difference.
The recipe that ties the other choices together.
| Pipeline | Strength | Watch out |
|---|---|---|
| balanced | The workhorse: full pipeline, good speed/accuracy, every component swappable | Jack of all trades — specialists beat it on their home turf |
| fidelity | Most thorough classic pipeline; strong on quiet/ASMR content | Slowest option |
| fast | Decent middle ground on mixed-quality audio | Fewer defences than balanced |
| faster | Speed; fine for clean, dialogue-forward audio | Minimal preprocessing = less hallucination protection |
| qwen (ChronosJAV) | Modern text-first recognizer; robust on messy audio | Timestamps come from the VAD, so the segmenter choice matters doubly |
| anime-whisper (ChronosJAV) | Best-in-class on anime-style/JAV dialogue; heavily benchmark-tuned here | Can miss very faint, isolated utterances |
| transformers | Runs any HF Whisper model; best GPU path on Apple Silicon | Uses HF's own chunking — scene/segmenter choices don't apply |
| crispasr / xxl | Bring your own external engine as a pass | Self-contained: WhisperJAV's knobs don't reach inside |
Naming note (CLI users). ChronosJAV is one pipeline with interchangeable recognizers, so qwen and anime-whisper are two backends of it rather than two separate pipelines. The GUI lists them side by side in the pipeline dropdown; on the command line both live under
qwen, and the backend is chosen inside the params:# Qwen3-ASR (the default backend) --pass1-pipeline qwen # anime-whisper, same pipeline, different recognizer --pass1-pipeline qwen --pass1-qwen-params '{"generator_backend": "anime-whisper"}'The usable values for
generator_backendareqwen3andanime-whisper(a third,cohere, exists in the code but is not currently enabled). Note also thatlitagin/anime-whispercan be loaded through the transformers pipeline via--hf-model-id— but that route uses HF's own chunking and does not produce usable per-line timing, so prefer the ChronosJAV route above.
Where the long file gets cut into workable pieces.
| Method | Strength | Watch out |
|---|---|---|
| Semantic | Groups acoustically similar audio; best for full-length features; ChronosJAV default | Occasionally cuts inside speech on very uniform audio |
| Auditok | Energy-based: fast, simple, dependable | Constant background music can mask the pauses it needs |
| Silero | Neural; holds up on noisy audio | Slower than auditok |
| None | No cutting at all | Only sensible for short clips |
Off by default — remember the pre-processing paradox. The "Enhance for VAD only" checkbox is the safest way to use these: the cleaned audio guides speech detection while the model still hears the original.
| Backend | Strength | Watch out |
|---|---|---|
| none | No artefacts, no surprises — the right default | Won't rescue genuinely bad audio |
| ffmpeg-dsp | Transparent classic filters (loudnorm, denoise, compress…); loudnorm genuinely helps very quiet recordings | Aggressive settings dull consonants |
| zipenhancer | Lightweight neural denoise; good against hiss | 16 kHz processing; can soften detail |
| clearvoice | Stronger neural denoise, up to 48 kHz | Heavier; artefact risk on music-heavy audio |
| bs-roformer | Vocal isolation — separates voice from loud BGM | The biggest intervention of all; reserve for music-dominated content |
Decides what the model hears — and in ChronosJAV pipelines, where your timestamps come from. Probably the highest-leverage swap on this list.
| Backend | Strength | Watch out |
|---|---|---|
| WhisperSeg | Trained on Japanese ASMR-style audio; tuned against our ground truth; the JA default | Japanese-specialised — switch it for other languages |
| TEN VAD | Light and quick; good general performer; pass-2 default for diversity | Less JA-specialised than WhisperSeg |
| Silero v3.1 / v4.0 | Solid general-purpose; the recommendation for non-Japanese audio | Tends to miss very quiet Japanese speech |
| Silero v6.2 | Adds max-duration splitting and finer control | Same quiet-speech caveat |
| Faster-Whisper native | Fastest — one recognizer call per scene | Coarser timing than a dedicated VAD |
| FireRedVAD (new, experimental) | Tiny multilingual model, cheap on CPU; early access for feedback | Presets not yet JAV-tuned; needs pip install fireredvad |
| None | The model hears everything | Maximum hallucination exposure on non-speech |
| Model | Pipeline | Strength | Watch out |
|---|---|---|---|
| Whisper large-v2 | classic | The most predictable performer on this domain — that's why it's the default | Not the newest |
| Whisper large-v3 | classic | Newer training | More hallucination-prone on JAV audio |
| Whisper turbo | classic | Fastest Whisper | Some accuracy cost |
| whisper-ja-1.5B (CT2) (new) | balanced | JA finetune, word timestamps intact; strongest results in our scene-length benchmarks | Community model; occasional repetitions (our filters catch most) |
| anime-whisper | ChronosJAV | Excellent anime/JAV dialogue quality | No native timestamps — VAD-timed |
| Qwen3-ASR 1.7B / 0.6B | ChronosJAV | Robust on messy audio; 0.6B fits 4 GB VRAM | No native timestamps — VAD-timed |
| JA Anime-Galgame 1.7B (new) | ChronosJAV | Qwen finetune with published gains on anime speech (CER −27% rel.); recovers lines the base drops | Slightly more junk insertions (post-processing handles most) |
| JA-tuned 1.7B (neosophie) (new) | ChronosJAV | Qwen finetune aimed at proper nouns and kanji-heavy phrasing | No published benchmarks |
| Kotoba family | transformers | Japanese-optimized, light; bilingual variant; good on Apple Silicon | Smaller models — ceiling below the 1.5B+ class |
Everything above multiplies: two passes means two full recipes, then a merge. What makes a good pair is diversity — different recognizers and different VADs, so the passes fail in different places and the merge covers both.
A few known-good recipes:
| Goal | Pass 1 | Pass 2 | Merge |
|---|---|---|---|
| The v1.9 default | anime-whisper · semantic · WhisperSeg · aggressive | Qwen3-ASR · semantic · TEN | pass1_primary |
| Classic + modern | balanced · large-v2 | qwen (or the Anime-Galgame finetune) | pass1_primary |
| Quiet/ASMR recall | fidelity · aggressive | anime-whisper · aggressive | longest |
| Second opinion on the model only | your usual recipe | same recipe, different ASR model | pass1_primary |
Merge strategies. Seven are available (--merge-strategy):
| Strategy | What it does |
|---|---|
pass1_primary | Keeps pass 1 as primary and fills missing parts from pass 2 |
pass2_primary | The mirror image — pass 2 primary, filled from pass 1 |
smart_merge | Automatically picks the better line from each pass |
full_merge | Includes every line from both passes — most recall, most duplicates to clean up |
longest | For each overlapping pair, picks the subtitle with more text content |
pass1_overlap / pass2_overlap | Same as the _primary pair, but tolerates up to 30% overlap when filling — use when the two passes disagree slightly on boundaries |
Save anything that works as a preset so it's one click next time.
Generate and translate in one go, or translate subtitles you already have:
whisperjav video.mp4 --translate # transcribe + translate
whisperjav-translate -i subtitles.srt --provider ollama
| Provider | Cost | Notes |
|---|---|---|
| Ollama | free, local | Recommended local option; auto-starts the server and picks a model for your VRAM |
| DeepSeek | cheap | Good quality/price for this content |
| Gemini | free tier | |
| Claude / GPT / OpenRouter / GLM / Groq | paid API | |
| Local LLM (llama-cpp) | free, local | Legacy option; auto-installs on first use |
Interrupted translations resume where they left off — just run the same command again.
Four tabs:
Sensible defaults everywhere: if you never open a Customize dialog, you get the benchmark-tuned configuration.
| Content | Suggestion | Sensitivity |
|---|---|---|
| Dialogue-heavy drama | balanced | aggressive |
| Anime-style / clear JAV dialogue | anime-whisper | aggressive |
| ASMR / whispering / VR | fidelity or anime-whisper | aggressive |
| Heavy background music | balanced | conservative |
| Amateur / variable audio | fast | conservative |
| Group scenes | faster | conservative |
| Best possible result | ensemble (anime-whisper + qwen) | per-pass defaults |
These are starting points, not rules — see Mix-and-match strategies for how to adapt them.
Already installed? Upgrade with
whisperjav-upgrade(all platforms). Rollback is available:whisperjav-upgrade --rollback.
No Python knowledge needed.
.exe from Releases%LOCALAPPDATA%\WhisperJAV)No local install at all — use the badges at the top of this page. Maintained notebooks for both platforms.
Prerequisites: Python 3.10–3.12, Git, FFmpeg in PATH.
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
installer\install_windows.bat :: auto-detects GPU
installer\install_windows.bat --cpu-only :: or force CPU
Full guide: docs/en/guides/installation_windows_python.md
xcode-select --install
brew install python@3.12 ffmpeg portaudio git
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
python3 -m venv ~/venvs/whisperjav && source ~/venvs/whisperjav/bin/activate
chmod +x installer/install_mac.sh && ./installer/install_mac.sh
M-series chips get MPS acceleration for Whisper pipelines (--mode transformers performs best). The CTranslate2-based modes and the Qwen pipeline currently run on CPU on Mac. Intel Macs are CPU-only.
Full guide: docs/en/guides/installation_mac_apple_silicon.md
Install system packages first (Ubuntu example; see the guide for Fedora/Arch):
sudo apt-get install -y python3 python3-pip python3-venv python3-dev \
build-essential ffmpeg git libsndfile1 libsndfile1-dev
Then:
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
chmod +x installer/install_linux.sh && ./installer/install_linux.sh
You need the NVIDIA driver (450+), but not the CUDA Toolkit — PyTorch bundles its own runtime. GUI needs WebKit2GTK. On distros with externally-managed Python (Ubuntu 24.04+), use a venv; the script detects this and tells you what to do.
Full guide: docs/en/guides/installation_linux.md
Install PyTorch first (pick your platform):
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu128 # NVIDIA
pip install torch torchaudio # Apple Silicon
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu # CPU
Then WhisperJAV with the extras you want:
pip install "whisperjav[all] @ git+https://github.com/meizhong986/whisperjav.git"
Extras: cli, gui, translate, llm, enhance, huggingface, analysis, colab, all.
| Minimum | Recommended | |
|---|---|---|
| OS | Windows 10 / macOS 11 / Ubuntu 20.04 | Windows 11 / macOS 14 / Ubuntu 22.04 |
| Python (source installs) | 3.10 | 3.11 |
| RAM | 8 GB | 16 GB |
| Disk | 8 GB | 15 GB with models |
| GPU | none (CPU works, slowly) | NVIDIA RTX 2060+ or Apple Silicon |
Rough speed per hour of video: RTX GPU 5–10 min · Apple Silicon 8–15 min · CPU 30–60 min.
model.bin error in faster mode — enable Windows Developer Mode (or run once as admin), then delete the cached model folder under %USERPROFILE%\.cache\huggingface\hub.Contributions are welcome — see CONTRIBUTING.md. Development setup:
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
pip install -e ".[dev]"
python -m pytest tests/
MIT. See LICENSE.
Built on the shoulders of: OpenAI Whisper · faster-whisper · stable-ts · Qwen3-ASR · anime-whisper · Kotoba-Whisper · HuggingFace Transformers · PySubtrans — and the testing community, whose feedback and bug reports shape every release.
This tool generates accessibility subtitles. Users are responsible for compliance with applicable laws regarding the content they process.
Python
79.5%
Jupyter Notebook
7.0%
JavaScript
4.9%
Batchfile
2.7%
HTML
2.2%
CSS
1.9%
Shell
1.9%
ASR/STT subtitle generator. Uses Qwen3-ASR, local LLM, Whisper, TEN-VAD. Noise-robust for JAV
2,220
stars
1,087
commits
Python
primary language
Sep 5, 2026
updated
A subtitle generator for Japanese Adult Videos. Free, runs on your own machine, no cloud upload of your media.
Speech recognition models like Whisper are trained on clean, curated speech. JAV audio is the opposite of that, and the mismatch breaks them in specific, well-understood ways:
The acoustic profile. JAV audio has a low signal-to-noise ratio and a high density of non-verbal vocalisations — breathing, gasps, moans — whose spectra often mimic real Japanese syllables (e.g. fu), tricking the model into hearing words where none exist. Add extreme volume swings (whispers to screams) and theatrical role language (yakuwarigo) absent from training corpora, and the model's assumptions stop holding.
Long-form drift and hallucination. These are feature-length recordings, not 30-second clips. Over long stretches of ambiguous audio — silence, rhythmic breathing — the model's attention collapses and it fills the void with repeated or invented text. This is a documented failure mode of Whisper-family models [3, 4, 5].
The pre-processing paradox. Intuition says "denoise first". In practice, blanket denoising and vocal isolation can strip the high-frequency detail the model needs to tell consonants apart, making things worse. Fine-tuning on JAV data has its own trap: good datasets are scarce, so fine-tuned models tend to overfit and become hit-or-miss.
WhisperJAV is built around these three failure points rather than around any single model:
None of this is magic; it is careful plumbing around known model weaknesses, and the defaults are tuned against ground-truth benchmarks. Results still vary with source audio quality.
GUI (recommended): launch WhisperJAV from the desktop shortcut (Windows installer) or run:
whisperjav-gui
Add files, pick a mode, click Start. Subtitles land next to your video as .srt.
Command line:
whisperjav video.mp4 # defaults
whisperjav video.mp4 --mode balanced --sensitivity aggressive
whisperjav /path/to/folder --output-dir ./subtitles # whole folder
Any input FFmpeg can read works: MP4, MKV, AVI, WMV, MP3, WAV, FLAC, and so on. Output is SRT (default), WebVTT, or both (--output-format both).
Every pipeline follows the same overall shape; modes differ in which components they use and how aggressively they are tuned.
flowchart LR
A[Audio<br/>extraction] --> B[Scene<br/>detection]
B --> C[Speech<br/>enhancement<br/><i>optional</i>]
C --> D[Speech<br/>segmentation<br/>VAD]
D --> E[ASR<br/>model]
E --> F[Post-<br/>processing]
F --> G[.srt]
Each stage has several interchangeable providers — the full menu, with strengths and weaknesses, is in Mix-and-match strategies below.
| Mode | Engine | Character |
|---|---|---|
| balanced | Faster-Whisper | Default. Full pipeline; good speed/accuracy balance |
| fidelity | OpenAI Whisper | Slowest, most thorough of the classic pipelines |
| fast | OpenAI Whisper + scene detection | General use, mixed-quality audio |
| faster | Faster-Whisper, minimal preprocessing | Speed first, clean audio |
| qwen (ChronosJAV) | Qwen3-ASR | Modern text-first recognizer |
| anime-whisper (ChronosJAV) | anime-whisper | Anime/JAV-tuned dialogue |
| transformers | HuggingFace | Kotoba and other HF Whisper models |
| crispasr | External | Bring-your-own CrispASR build (experimental) |
Sensitivity applies to every mode: conservative (fewer false positives, good for noisy content) · balanced · aggressive (catches more quiet dialogue; good for whisper/ASMR content — and the tuning target of most of our benchmark work).
Some of the best recognizers for this domain (anime-whisper, Qwen3-ASR and its Japanese finetunes) don't produce reliable timestamps on their own. ChronosJAV runs text generation and timing as separate stages: the VAD provides the time skeleton, the model provides the words. Since v1.9, timestamps come from the VAD frames by default (no aligner model loaded, ~1 GB less VRAM); a Qwen forced-aligner mode remains available in the settings for word-level alignment.
The same decoupled design is why new models can be added without rebuilding the pipeline — anything that turns audio into text can be slotted in.
Different pipelines miss different lines. Ensemble mode runs your file through two pipelines and merges the results.
The v1.9 default pairing: pass 1 = anime-whisper with WhisperSeg VAD, pass 2 = Qwen3-ASR with TEN VAD — two different recognizers and two different VADs, so their blind spots don't overlap.
whisperjav video.mp4 --ensemble \
--pass1-pipeline qwen --pass2-pipeline balanced \
--merge-strategy pass1_primary
pass1_primary / pass2_primary (one pass leads, the other fills gaps), smart_merge, full_merge, pass1_overlap / pass2_overlap, longest--ensemble-serial): finish each file completely before starting the next, so results appear as they're done--pass2-pipeline xxl --xxl-exe ...) or an external CrispASR buildThe Ensemble tab is a mixing desk. Each pass is a free combination of five choices — pipeline × scene detection × audio pre-processing × speech segmentation × ASR model — and the two-pass design is the sixth dimension. The defaults are benchmark-tuned, so you never have to touch any of this; but audio varies a lot, and one deliberate substitution is often worth the experiment. The golden rule: change one thing at a time, so you know what caused the difference.
The recipe that ties the other choices together.
| Pipeline | Strength | Watch out |
|---|---|---|
| balanced | The workhorse: full pipeline, good speed/accuracy, every component swappable | Jack of all trades — specialists beat it on their home turf |
| fidelity | Most thorough classic pipeline; strong on quiet/ASMR content | Slowest option |
| fast | Decent middle ground on mixed-quality audio | Fewer defences than balanced |
| faster | Speed; fine for clean, dialogue-forward audio | Minimal preprocessing = less hallucination protection |
| qwen (ChronosJAV) | Modern text-first recognizer; robust on messy audio | Timestamps come from the VAD, so the segmenter choice matters doubly |
| anime-whisper (ChronosJAV) | Best-in-class on anime-style/JAV dialogue; heavily benchmark-tuned here | Can miss very faint, isolated utterances |
| transformers | Runs any HF Whisper model; best GPU path on Apple Silicon | Uses HF's own chunking — scene/segmenter choices don't apply |
| crispasr / xxl | Bring your own external engine as a pass | Self-contained: WhisperJAV's knobs don't reach inside |
Naming note (CLI users). ChronosJAV is one pipeline with interchangeable recognizers, so qwen and anime-whisper are two backends of it rather than two separate pipelines. The GUI lists them side by side in the pipeline dropdown; on the command line both live under
qwen, and the backend is chosen inside the params:# Qwen3-ASR (the default backend) --pass1-pipeline qwen # anime-whisper, same pipeline, different recognizer --pass1-pipeline qwen --pass1-qwen-params '{"generator_backend": "anime-whisper"}'The usable values for
generator_backendareqwen3andanime-whisper(a third,cohere, exists in the code but is not currently enabled). Note also thatlitagin/anime-whispercan be loaded through the transformers pipeline via--hf-model-id— but that route uses HF's own chunking and does not produce usable per-line timing, so prefer the ChronosJAV route above.
Where the long file gets cut into workable pieces.
| Method | Strength | Watch out |
|---|---|---|
| Semantic | Groups acoustically similar audio; best for full-length features; ChronosJAV default | Occasionally cuts inside speech on very uniform audio |
| Auditok | Energy-based: fast, simple, dependable | Constant background music can mask the pauses it needs |
| Silero | Neural; holds up on noisy audio | Slower than auditok |
| None | No cutting at all | Only sensible for short clips |
Off by default — remember the pre-processing paradox. The "Enhance for VAD only" checkbox is the safest way to use these: the cleaned audio guides speech detection while the model still hears the original.
| Backend | Strength | Watch out |
|---|---|---|
| none | No artefacts, no surprises — the right default | Won't rescue genuinely bad audio |
| ffmpeg-dsp | Transparent classic filters (loudnorm, denoise, compress…); loudnorm genuinely helps very quiet recordings | Aggressive settings dull consonants |
| zipenhancer | Lightweight neural denoise; good against hiss | 16 kHz processing; can soften detail |
| clearvoice | Stronger neural denoise, up to 48 kHz | Heavier; artefact risk on music-heavy audio |
| bs-roformer | Vocal isolation — separates voice from loud BGM | The biggest intervention of all; reserve for music-dominated content |
Decides what the model hears — and in ChronosJAV pipelines, where your timestamps come from. Probably the highest-leverage swap on this list.
| Backend | Strength | Watch out |
|---|---|---|
| WhisperSeg | Trained on Japanese ASMR-style audio; tuned against our ground truth; the JA default | Japanese-specialised — switch it for other languages |
| TEN VAD | Light and quick; good general performer; pass-2 default for diversity | Less JA-specialised than WhisperSeg |
| Silero v3.1 / v4.0 | Solid general-purpose; the recommendation for non-Japanese audio | Tends to miss very quiet Japanese speech |
| Silero v6.2 | Adds max-duration splitting and finer control | Same quiet-speech caveat |
| Faster-Whisper native | Fastest — one recognizer call per scene | Coarser timing than a dedicated VAD |
| FireRedVAD (new, experimental) | Tiny multilingual model, cheap on CPU; early access for feedback | Presets not yet JAV-tuned; needs pip install fireredvad |
| None | The model hears everything | Maximum hallucination exposure on non-speech |
| Model | Pipeline | Strength | Watch out |
|---|---|---|---|
| Whisper large-v2 | classic | The most predictable performer on this domain — that's why it's the default | Not the newest |
| Whisper large-v3 | classic | Newer training | More hallucination-prone on JAV audio |
| Whisper turbo | classic | Fastest Whisper | Some accuracy cost |
| whisper-ja-1.5B (CT2) (new) | balanced | JA finetune, word timestamps intact; strongest results in our scene-length benchmarks | Community model; occasional repetitions (our filters catch most) |
| anime-whisper | ChronosJAV | Excellent anime/JAV dialogue quality | No native timestamps — VAD-timed |
| Qwen3-ASR 1.7B / 0.6B | ChronosJAV | Robust on messy audio; 0.6B fits 4 GB VRAM | No native timestamps — VAD-timed |
| JA Anime-Galgame 1.7B (new) | ChronosJAV | Qwen finetune with published gains on anime speech (CER −27% rel.); recovers lines the base drops | Slightly more junk insertions (post-processing handles most) |
| JA-tuned 1.7B (neosophie) (new) | ChronosJAV | Qwen finetune aimed at proper nouns and kanji-heavy phrasing | No published benchmarks |
| Kotoba family | transformers | Japanese-optimized, light; bilingual variant; good on Apple Silicon | Smaller models — ceiling below the 1.5B+ class |
Everything above multiplies: two passes means two full recipes, then a merge. What makes a good pair is diversity — different recognizers and different VADs, so the passes fail in different places and the merge covers both.
A few known-good recipes:
| Goal | Pass 1 | Pass 2 | Merge |
|---|---|---|---|
| The v1.9 default | anime-whisper · semantic · WhisperSeg · aggressive | Qwen3-ASR · semantic · TEN | pass1_primary |
| Classic + modern | balanced · large-v2 | qwen (or the Anime-Galgame finetune) | pass1_primary |
| Quiet/ASMR recall | fidelity · aggressive | anime-whisper · aggressive | longest |
| Second opinion on the model only | your usual recipe | same recipe, different ASR model | pass1_primary |
Merge strategies. Seven are available (--merge-strategy):
| Strategy | What it does |
|---|---|
pass1_primary | Keeps pass 1 as primary and fills missing parts from pass 2 |
pass2_primary | The mirror image — pass 2 primary, filled from pass 1 |
smart_merge | Automatically picks the better line from each pass |
full_merge | Includes every line from both passes — most recall, most duplicates to clean up |
longest | For each overlapping pair, picks the subtitle with more text content |
pass1_overlap / pass2_overlap | Same as the _primary pair, but tolerates up to 30% overlap when filling — use when the two passes disagree slightly on boundaries |
Save anything that works as a preset so it's one click next time.
Generate and translate in one go, or translate subtitles you already have:
whisperjav video.mp4 --translate # transcribe + translate
whisperjav-translate -i subtitles.srt --provider ollama
| Provider | Cost | Notes |
|---|---|---|
| Ollama | free, local | Recommended local option; auto-starts the server and picks a model for your VRAM |
| DeepSeek | cheap | Good quality/price for this content |
| Gemini | free tier | |
| Claude / GPT / OpenRouter / GLM / Groq | paid API | |
| Local LLM (llama-cpp) | free, local | Legacy option; auto-installs on first use |
Interrupted translations resume where they left off — just run the same command again.
Four tabs:
Sensible defaults everywhere: if you never open a Customize dialog, you get the benchmark-tuned configuration.
| Content | Suggestion | Sensitivity |
|---|---|---|
| Dialogue-heavy drama | balanced | aggressive |
| Anime-style / clear JAV dialogue | anime-whisper | aggressive |
| ASMR / whispering / VR | fidelity or anime-whisper | aggressive |
| Heavy background music | balanced | conservative |
| Amateur / variable audio | fast | conservative |
| Group scenes | faster | conservative |
| Best possible result | ensemble (anime-whisper + qwen) | per-pass defaults |
These are starting points, not rules — see Mix-and-match strategies for how to adapt them.
Already installed? Upgrade with
whisperjav-upgrade(all platforms). Rollback is available:whisperjav-upgrade --rollback.
No Python knowledge needed.
.exe from Releases%LOCALAPPDATA%\WhisperJAV)No local install at all — use the badges at the top of this page. Maintained notebooks for both platforms.
Prerequisites: Python 3.10–3.12, Git, FFmpeg in PATH.
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
installer\install_windows.bat :: auto-detects GPU
installer\install_windows.bat --cpu-only :: or force CPU
Full guide: docs/en/guides/installation_windows_python.md
xcode-select --install
brew install python@3.12 ffmpeg portaudio git
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
python3 -m venv ~/venvs/whisperjav && source ~/venvs/whisperjav/bin/activate
chmod +x installer/install_mac.sh && ./installer/install_mac.sh
M-series chips get MPS acceleration for Whisper pipelines (--mode transformers performs best). The CTranslate2-based modes and the Qwen pipeline currently run on CPU on Mac. Intel Macs are CPU-only.
Full guide: docs/en/guides/installation_mac_apple_silicon.md
Install system packages first (Ubuntu example; see the guide for Fedora/Arch):
sudo apt-get install -y python3 python3-pip python3-venv python3-dev \
build-essential ffmpeg git libsndfile1 libsndfile1-dev
Then:
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
chmod +x installer/install_linux.sh && ./installer/install_linux.sh
You need the NVIDIA driver (450+), but not the CUDA Toolkit — PyTorch bundles its own runtime. GUI needs WebKit2GTK. On distros with externally-managed Python (Ubuntu 24.04+), use a venv; the script detects this and tells you what to do.
Full guide: docs/en/guides/installation_linux.md
Install PyTorch first (pick your platform):
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu128 # NVIDIA
pip install torch torchaudio # Apple Silicon
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu # CPU
Then WhisperJAV with the extras you want:
pip install "whisperjav[all] @ git+https://github.com/meizhong986/whisperjav.git"
Extras: cli, gui, translate, llm, enhance, huggingface, analysis, colab, all.
| Minimum | Recommended | |
|---|---|---|
| OS | Windows 10 / macOS 11 / Ubuntu 20.04 | Windows 11 / macOS 14 / Ubuntu 22.04 |
| Python (source installs) | 3.10 | 3.11 |
| RAM | 8 GB | 16 GB |
| Disk | 8 GB | 15 GB with models |
| GPU | none (CPU works, slowly) | NVIDIA RTX 2060+ or Apple Silicon |
Rough speed per hour of video: RTX GPU 5–10 min · Apple Silicon 8–15 min · CPU 30–60 min.
model.bin error in faster mode — enable Windows Developer Mode (or run once as admin), then delete the cached model folder under %USERPROFILE%\.cache\huggingface\hub.Contributions are welcome — see CONTRIBUTING.md. Development setup:
git clone https://github.com/meizhong986/whisperjav.git
cd whisperjav
pip install -e ".[dev]"
python -m pytest tests/
MIT. See LICENSE.
Built on the shoulders of: OpenAI Whisper · faster-whisper · stable-ts · Qwen3-ASR · anime-whisper · Kotoba-Whisper · HuggingFace Transformers · PySubtrans — and the testing community, whose feedback and bug reports shape every release.
This tool generates accessibility subtitles. Users are responsible for compliance with applicable laws regarding the content they process.
Python
79.5%
Jupyter Notebook
7.0%
JavaScript
4.9%
Batchfile
2.7%
HTML
2.2%
CSS
1.9%
Shell
1.9%