首次加载会从 HuggingFace 下载模型,ct2 后端还需一次性转换,而精简的 [ct2] 不含 torch 和 transformers,需额外装 [ct2,convert];hotwords 热词增强仅 Pro 模型支持;模型权重是非商用研究许可,商用需单独授权,Pro 模型仅商用授权。
CrisperWhisper
nyrahealth活跃维护可控语音转写工具,能逐字保留停顿、口吃和语气词,也能输出流畅可读版本,并提供词级时间戳。
Controllable Transcription. Verbatim ( every, filler, pause, stutter, vocal sound) , or intended ( what the speaker meant to say, optimized for readability) with word-level timestamps.
pip install "crisperwhisper[ct2]>=2.0.4"
pip install "crisperwhisper[transformers]>=2.0.4"README 未给出显存要求;NVIDIA GPU(Linux)走 ct2 后端最快,只需装 NVIDIA 驱动,CUDA 库由 pip 提供;纯 PyTorch 后端可在 macOS、Windows 和 CPU 上运行。
可控制转写的语音识别模型,能选择逐字记录口语细节或输出通顺文本,并带词级时间戳
可控语音转写工具,能逐字保留停顿、口吃和语气词,也能输出流畅可读版本,并提供词级时间戳。
核心能力
- 用 mode 参数切换 verbatim 逐字模式与 intended 通顺模式
- 输出词级起止时间与置信度,边界误差约 30ms
- verbatimize 在已有干净文本中插入音频里真实存在的口语现象
- 长音频用条件续写拼接,避免窗口边界重复或丢词
- ct2 后端支持投机解码,并默认抑制 Whisper 循环幻觉
容易踩的坑
- v2.1.0CrisperWhisper 2.1.0最新正式版2026-11-10 · 2026-11-10 13:23 UTC
Forced-aligner word timings
CrisperWhisper can now time words with the nyra forced aligner. For English this gives the most precise word timings.
pip install "crisperwhisper[ct2,align]==2.1.0"from crisperwhisper import CrisperWhisperModel model = CrisperWhisperModel("large") result = model.transcribe("meeting.wav", language="en", timing_method="forced_aligner") for w in result.words: print(w.start, w.end, w.word, w.kind, w.timing_confidence)-
New option:
timing_method="attention"(the default, unchanged) or"forced_aligner", ontranscribe,transcribe_dual,verbatimizeandforced_align. -
Same output format:
result.wordskeeps the same words. The forced aligner replacesstart/endand adds:timing_confidence: how well the audio under the word fits it;kind: word, filler, sound or cutoff;phones: phone-level timings.
result.timing_methodrecords which method was used. -
New
ForcedAlignerclass: usepro=Truefor noisy audio, a custom Hugging Face repo or local model, or align a transcript you already have without loading an ASR model.segment_gapgives faster alignment of long recordings with many pauses. -
English only for now; more languages are coming soon. Other languages raise a warning and keep the attention timings.
-
Optional install: the aligner comes with the new
[align]extra (also part of[all]). The core and[ct2]installs are unchanged.
-
- v2.0.4v2.0.4 — word / token confidence2026-11-06 · 2026-11-06 09:53 UTC
查看更新说明
Features
- Word / token confidence (#63, #24): pass
word_confidence=Truetotranscribe(),transcribe_dual(), orverbatimize(). Each word getsprobability(mean of its token probabilities) andtokens(per-token string, id, and probability). Same flag on both backends.- Token probability is the full-vocabulary softmax of the raw logits at the step that produced the token (before suppression / repair bans).
- On CTranslate2 this is captured inline (
ctranslate2-crisperwhisper>=4.7.1.post4); Transformers usesgenerate(output_logits=True). Ids replaced by coverage fallback, early-EOT recovery, or speculative decoding are teacher-forced. - Implies
word_timestamps=True. Continuation longform only; v1 models are not supported.
See DOCS.md.
Requires
ctranslate2-crisperwhisper>=4.7.1.post4for the zero-extra-pass CT2 path (pip install -U 'crisperwhisper[ct2]').Full changelog: https://github.com/nyrahealth/CrisperWhisper/compare/v2.0.3...v2.0.4
- Word / token confidence (#63, #24): pass
- v2.0.3v2.0.3 — transformers-only install fix, word timestamps for space-less languages2026-09-14 · 2026-09-14 11:33 UTC
查看更新说明
Fixes
- Transformers-only installs work again (#57):
pip install crisperwhisper[transformers](no[ct2]) failed everytranscribe()withModuleNotFoundError: No module named 'ctranslate2'— the backend-agnostic loop detector lived in the ct2-importinghallucinationmodule.find_token_loop/DEFAULT_REPAIR_THRESHOLDSnow live in the dependency-freecrisperwhisper.loop_detection(re-exported fromcrisperwhisper.hallucinationfor back-compat). - Word-level timestamps for space-less languages (#58): Japanese (and zh/th/lo/my/yue) no longer collapse entire passages into a single "word". Word segmentation now splits at complete-unicode-codepoint boundaries for these languages — the same strategy as OpenAI Whisper's
split_tokens_on_unicode— producing character/token-granular timestamps with clean UTF-8. Passlanguage="ja"(etc.) totranscribe()to get the new segmentation. Applies to all paths: short-form, longform (continuation / chunked LCS / token LCS), verbatimize, and the v1 model. - UTF-8 in word timestamps (#56, contributed by @hlevring): each word's tokens are decoded together, so multi-byte codepoints split across BPE tokens no longer surface as U+FFFD in
WordTimestamp.word.
Full changelog: https://github.com/nyrahealth/CrisperWhisper/compare/v2.0.2...v2.0.3
- Transformers-only installs work again (#57):
- v2.0.1v2.0.1 — early-EOT recovery2026-07-23 · 2026-07-23 15:50 UTC
查看更新说明
Context-conditioned early end-of-text recovery for continuation longform.
Some checkpoints (notably large_pro) emit an over-confident EOT at a sentence-final pause when a continuation context is present, truncating the rest of a chunk. This release adds a decode-time gate that detects the premature stop and forces the decode past it, guarded so it never hallucinates into trailing silence/noise:
- Trigger only on a low-confidence stop (P(EOT) < 0.7) that left speech-active audio uncovered (tail 4s non-final / 2s final).
- Confident-termination guard: keep the extension only if it reaches a confident EOT (>= 0.9), else revert.
- Applies to verbatim and intended, on both the ct2 and transformers backends, in transcribe and transcribe_dual.
- Gap-first ordering: healthy chunks pay no extra forward pass.
New: transcribe(early_eot_recovery=True) / transcribe_dual(early_eot_recovery=True); EarlyEotConfig in longform.base.
- v2.0.02.0.02026-07-21 · 2026-07-21 12:05 UTC
查看更新说明
CrisperWhisper 2.0
CrisperWhisper v2 is now the repo's main line: a pip-installable Python package replacing the v1 script collection.
Install
pip install crisperwhisper[ct2] # fast CTranslate2 backend (Linux, CUDA optional) pip install crisperwhisper[transformers] # pure-torch HuggingFace backendHighlights
crisperwhisperpackage on PyPI (version 2.0.0) with two interchangeable backends: CTranslate2 (fast path, speculative decoding) and HuggingFace Transformers (pure torch).- Defaults to the CrisperWhisper 2.0 models (
nyralabs/CrisperWhisper2.0_large, withtiny/base/small/medium/largesize shorthands); legacy v1 model (nyrahealth/CrisperWhisper) still supported via automatic version detection. - Verbatim and intended transcripts in one pass (dual-mode decoding).
- Accurate word-level timestamps, longform transcription, forced alignment, hallucination filtering, hotword boosting (Pro models).
- Full API reference in DOCS.md.
Requirements pairing
The
[ct2]extra requiresctranslate2-crisperwhisper>=4.7.1.post3,<5— the fork published from nyrahealth/CTranslate2 (its wheel version tracks upstream CTranslate2 4.7.1; the fork's GitHub release "2.0.0" ships exactly that wheel). Python >= 3.10.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
CrisperWhisper 2.0
The most accurate verbatim speech recognition you can run in production: controllable, multilingual, and timed to the word.
Release post · Paper · Full documentation · Models · Benchmark
Most speech-to-text systems never actually decide whether to write down what was said or what was meant. They inherit that choice from their training data and apply it inconsistently. CrisperWhisper 2.0 makes it an explicit, controllable choice. One recording, two transcripts:
Verbatim, exactly what was said, in one consistent format:
[um] so we we need to, to reschedule the th- thursday meeting to [uh] march third at nine thirty [laughter]Intended, the clean version the speaker meant, with numbers, dates, and emails formatted the way you'd write them:
So we need to reschedule the Thursday meeting to March 3 at 9:30.
On top of that:
- Word-level timings. Around 30 ms mean boundary error on read speech and 41 ms on conversational speech, the most precise word timing of any system we benchmarked, on both.
- Verbatimize. Upgrade transcripts you already have: given audio plus a trusted clean transcript, the model reproduces your content word-for-word and inserts only the disfluencies and vocal events actually present in the audio (rare-word recall jumps from 6.8% to 96.1% vs. re-transcribing). This turns the world's abundant clean corpora into verbatim ones, ready for TTS data, clinical speech analysis, and dataset construction.
- Multilingual. Verbatim and intended modes work across most languages Whisper supports. CrisperWhisper 2.0 tops the Nyra Verbatim Speech Benchmark leaderboard for disfluency F1 across ten languages, ahead of every closed-source alternative we tested.
- Seamless longform. Audio of any length, transcribed without the usual chunk-boundary artifacts: each window continues from the words already transcribed (conditional continuation), so there are no duplicated or dropped words at the seams and no fragile timestamp-token bookkeeping.
- Production inference. A CTranslate2 runtime with speculative decoding and built-in mitigation of Whisper's looping-hallucination failure mode.
Performance
The Nyra Verbatim Speech Benchmark scores fillers, repetitions, cut-offs, and vocal sounds as separate, typed metrics. Its headline number is disfluency F1: how reliably a system writes down the disfluencies that were actually spoken, without inventing ones that weren't. Averaged over ten languages:
| # | System | Disfluency F1 |
|---|---|---|
| 1 | CrisperWhisper 2.0 Pro | 93.5 |
| 2 | CrisperWhisper 2.0 | 87.8 |
| 3 | ElevenLabs Scribe v2 | 79.2 |
| 4 | Microsoft MAI-Transcribe-1.5 | 77.5 |
| 5 | CrisperWhisper 1.0* | 64.8 |
| 6 | Inworld STT | 59.5 |
| 7 | xAI Grok Speech-to-Text | 42.8 |
| 8 | Deepgram Nova-3 | 37.8 |
| 9 | Fish Audio ASR | 35.0 |
| 10 | AssemblyAI Universal-3 Pro | 30.5 |
* CrisperWhisper 1.0 is English/German-only; its average covers those two languages. English and German use human-labeled evaluation sets; the other eight languages use synthetic verbatim sets. Per-language breakdowns and how the metric is computed are in the benchmark post.
Word-timing accuracy
Mean absolute word-boundary error on read speech (TIMIT), lower is better:
| # | System | Boundary error |
|---|---|---|
| 1 | CrisperWhisper 2.0 | 29.6 ms |
| 2 | xAI Grok Speech-to-Text | 37.1 ms |
| 3 | CTC-seg | 49.3 ms |
| 4 | ElevenLabs Scribe v2 | 51.3 ms |
| 5 | NeMo-FA | 60.0 ms |
| 6 | Deepgram Nova-3 | 63.3 ms |
| 7 | WhisperX | 64.8 ms |
| 8 | Cartesia Ink-Whisper | 69.4 ms |
| 9 | Canary | 85.5 ms |
Scored on exactly the words each system gets right. How the timings are extracted from supervised cross-attention, plus results on conversational speech, are in the aligner post.
Install
# NVIDIA GPU (Linux): fastest, includes speculative decoding.
# An NVIDIA driver is all you need; CUDA libraries arrive via pip.
pip install "crisperwhisper[ct2]>=2.0.4"
# Pure PyTorch: runs anywhere torch does (macOS, Windows, CPU)
pip install "crisperwhisper[transformers]>=2.0.4"
Quickstart
from crisperwhisper import CrisperWhisperModel
model = CrisperWhisperModel() # nyralabs/CrisperWhisper2.0_large
# or pick a size: CrisperWhisperModel("turbo") # turbo / medium / small
# Verbatim transcription (default): every filler, repetition, stutter,
# false start, and vocal event
result = model.transcribe("meeting.wav", language="en")
print(result.text)
# Intended: the clean, readable version
clean = model.transcribe("meeting.wav", language="en", mode="intended")
# Word-level timestamps (and confidences)
result = model.transcribe("meeting.wav", language="en", word_confidence=True)
for w in result.words:
print(f"{w.start:6.2f}-{w.end:6.2f} {w.word} p={w.probability:.2f}")
# Verbatimize: upgrade an existing clean transcript with the
# disfluencies that are actually in the audio
result = model.verbatimize("clip.wav", "I think we should ship it Friday.")
Audio longer than 30 seconds is handled automatically (see
longform below). The first load of a model
downloads it from HuggingFace and, on the ct2 backend, converts it once
into a local cache. That one-time conversion needs torch and
transformers, which the lean [ct2] extra does not install -- add them
once with:
pip install "crisperwhisper[ct2,convert]" # or add [convert] later
A CPU-only torch is enough for the conversion, and the dependencies can
be uninstalled once the converted model is cached. Loading a directory
that already contains a converted CT2 model (model.bin) never needs
them.
Models
| Shorthand | HuggingFace ID | Notes |
|---|---|---|
"large" (default) | nyralabs/CrisperWhisper2.0_large | Best open quality |
"turbo" | nyralabs/CrisperWhisper2.0_turbo | Fastest, with some quality degradation; recommended as the speculative draft |
"medium" | nyralabs/CrisperWhisper2.0_medium | Near-large quality; best tradeoff between size and quality |
"small" | nyralabs/CrisperWhisper2.0_small | Smallest |
"large_pro" / "turbo_pro" / "medium_pro" / "small_pro" | nyralabs/CrisperWhisper2.0_<size>_pro | Pro: our best models, with improved performance, hotword boosting, trained on additional proprietary data |
The standard models are released under a non-commercial research license and are available for commercial licensing. The Pro models are available under commercial license only. For both, get in touch.
Faster inference: speculative decoding (ct2)
A small draft model proposes tokens and the main model verifies them. Same output, 1.3 to 1.4x faster:
model = CrisperWhisperModel("large", draft_model="turbo")
result = model.transcribe("meeting.wav", language="en",
speculative_decoding=True)
What else is in the box
Everything below works out of the box and is covered in depth in DOCS.md:
| Option | What it does |
|---|---|
mode="verbatim" / "intended" | Choose what-was-said vs. what-was-meant per call |
word_timestamps=True | Per-word start/end times from supervised cross-attention alignment |
word_confidence=True | Per-word (and per-token) probabilities on both backends; implies timestamps |
hotwords=[...] | Bias recognition toward names and rare terms (Pro models only) |
model.transcribe_dual(...) | Verbatim and intended in one pass (ct2) |
model.verbatimize(audio, transcript) | Insert real disfluencies into a trusted clean transcript |
model.forced_align(audio, text) | Timings for a transcript you already have |
| Longform | Audio >30s transcribed seamlessly via conditional continuation, with no chunk-boundary duplicates, drops, or stitching |
| Hallucination mitigation | On by default: detects and suppresses Whisper's looping-repetition failure mode during decoding |
compute_type="float16" / "int8_float16" | Quantization |
How it works
Each mechanism has a deep-dive post:
- Measuring verbatimness: the Nyra Verbatim Speech Benchmark. Typed metrics for fillers, repetitions, cut-offs, and vocal sounds instead of one opaque WER number.
- How we unlocked multilingual style-controlled transcription at scale. Verbatim/intended control across languages.
- Turning emergent cross-attention into a precise aligner. Supervising Whisper's alignment heads for word boundaries around 30 ms.
- Longform transcription with conditional continuation. Resolving window seams with the words already transcribed instead of fragile timestamp tokens.
- Closing the verbatim data gap with Verbatimize. Upgrading clean corpora into verbatim ones at scale.
- Faster inference and mitigating hallucinations. The CTranslate2 stack, speculative decoding, and the anti-looping decoder.
Documentation
DOCS.md covers the full API: backends and their trade-offs,
every transcribe() option (including word timestamps and confidence),
dual-mode transcription, forced alignment,
longform strategies, speculative-K tuning, hallucination-repair thresholds,
quantization, model conversion, and the result object.
License
The inference code in this repository is MIT-licensed (see
LICENSE): use it freely, commercially or otherwise.
crisperwhisper/features.py is vendored from
faster-whisper (MIT, SYSTRAN).
The model weights are not MIT. They are released under the Nyra Health Non-Commercial Research License: free for research and other non-commercial use; any commercial use requires a commercial license. The Pro models are available under commercial license only. For commercial licensing of either, contact Nyra.