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.

v2.1.0发布于 2026-11-10 13:23 UTC1,480star +2 / 7 天96fork同步于 2026-11-11 05:46 UTC

怎么上手

由 README 提炼,执行前请确认
pip install "crisperwhisper[ct2]>=2.0.4"
pip install "crisperwhisper[transformers]>=2.0.4"
硬件要求按 README 说明

README 未给出显存要求;NVIDIA GPU(Linux)走 ct2 后端最快,只需装 NVIDIA 驱动,CUDA 库由 pip 提供;纯 PyTorch 后端可在 macOS、Windows 和 CPU 上运行。

纯 CPU 可运行需要 CUDA
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

可控制转写的语音识别模型,能选择逐字记录口语细节或输出通顺文本,并带词级时间戳

可控语音转写工具,能逐字保留停顿、口吃和语气词,也能输出流畅可读版本,并提供词级时间戳。

核心能力

  • 用 mode 参数切换 verbatim 逐字模式与 intended 通顺模式
  • 输出词级起止时间与置信度,边界误差约 30ms
  • verbatimize 在已有干净文本中插入音频里真实存在的口语现象
  • 长音频用条件续写拼接,避免窗口边界重复或丢词
  • ct2 后端支持投机解码,并默认抑制 Whisper 循环幻觉

容易踩的坑

首次加载会从 HuggingFace 下载模型,ct2 后端还需一次性转换,而精简的 [ct2] 不含 torch 和 transformers,需额外装 [ct2,convert];hotwords 热词增强仅 Pro 模型支持;模型权重是非商用研究许可,商用需单独授权,Pro 模型仅商用授权。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v2.1.0
  1. 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", on transcribe, transcribe_dual, verbatimize and forced_align.

    • Same output format: result.words keeps the same words. The forced aligner replaces start/end and adds:

      • timing_confidence: how well the audio under the word fits it;
      • kind: word, filler, sound or cutoff;
      • phones: phone-level timings.

      result.timing_method records which method was used.

    • New ForcedAligner class: use pro=True for noisy audio, a custom Hugging Face repo or local model, or align a transcript you already have without loading an ASR model. segment_gap gives 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.

  2. 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=True to transcribe(), transcribe_dual(), or verbatimize(). Each word gets probability (mean of its token probabilities) and tokens (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 uses generate(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.post4 for 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

  3. 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 every transcribe() with ModuleNotFoundError: No module named 'ctranslate2' — the backend-agnostic loop detector lived in the ct2-importing hallucination module. find_token_loop / DEFAULT_REPAIR_THRESHOLDS now live in the dependency-free crisperwhisper.loop_detection (re-exported from crisperwhisper.hallucination for 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. Pass language="ja" (etc.) to transcribe() 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

  4. 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.

  5. 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 backend
    

    Highlights

    • crisperwhisper package 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, with tiny/base/small/medium/large size 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 requires ctranslate2-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.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    CrisperWhisper 2.0

    PyPI

    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:

    #SystemDisfluency F1
    1CrisperWhisper 2.0 Pro93.5
    2CrisperWhisper 2.087.8
    3ElevenLabs Scribe v279.2
    4Microsoft MAI-Transcribe-1.577.5
    5CrisperWhisper 1.0*64.8
    6Inworld STT59.5
    7xAI Grok Speech-to-Text42.8
    8Deepgram Nova-337.8
    9Fish Audio ASR35.0
    10AssemblyAI Universal-3 Pro30.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:

    #SystemBoundary error
    1CrisperWhisper 2.029.6 ms
    2xAI Grok Speech-to-Text37.1 ms
    3CTC-seg49.3 ms
    4ElevenLabs Scribe v251.3 ms
    5NeMo-FA60.0 ms
    6Deepgram Nova-363.3 ms
    7WhisperX64.8 ms
    8Cartesia Ink-Whisper69.4 ms
    9Canary85.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

    ShorthandHuggingFace IDNotes
    "large" (default)nyralabs/CrisperWhisper2.0_largeBest open quality
    "turbo"nyralabs/CrisperWhisper2.0_turboFastest, with some quality degradation; recommended as the speculative draft
    "medium"nyralabs/CrisperWhisper2.0_mediumNear-large quality; best tradeoff between size and quality
    "small"nyralabs/CrisperWhisper2.0_smallSmallest
    "large_pro" / "turbo_pro" / "medium_pro" / "small_pro"nyralabs/CrisperWhisper2.0_<size>_proPro: 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:

    OptionWhat it does
    mode="verbatim" / "intended"Choose what-was-said vs. what-was-meant per call
    word_timestamps=TruePer-word start/end times from supervised cross-attention alignment
    word_confidence=TruePer-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
    LongformAudio >30s transcribed seamlessly via conditional continuation, with no chunk-boundary duplicates, drops, or stitching
    Hallucination mitigationOn 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:

    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.