Skip to main content

WhisperS2T-Reborn ⚡

An Optimized Speech-to-Text Pipeline for the Whisper Model Using CTranslate2

WhisperS2T-Reborn is a modernized fork of WhisperS2T, an optimized lightning-fast Speech-to-Text (ASR) pipeline. It is tailored for the Whisper model using the CTranslate2 backend to provide faster transcription. It includes several heuristics to enhance transcription accuracy.

Whisper is a general-purpose speech recognition model developed by OpenAI. It is trained on a large dataset of diverse audio and is also a multitasking model that can perform multilingual speech recognition, speech translation, and language identification.

Installation

pip install -U whisper-s2t-reborn

Quick Start

Transcribe a single file

import whisper_s2t

model = whisper_s2t.load_model(model_identifier="large-v3")

files = ['audio1.wav']
lang_codes = ['en']
tasks = ['transcribe']
initial_prompts = [None]

out = model.transcribe_with_vad(files,
                                lang_codes=lang_codes,
                                tasks=tasks,
                                initial_prompts=initial_prompts,
                                batch_size=32)

print(out[0][0]) # Print first utterance for first file
"""
[Console Output]

{'text': "Let's bring in Phil Mackie who is there at the palace...",
 'avg_logprob': -0.25426941679184695,
 'no_speech_prob': 8.147954940795898e-05,
 'start_time': 0.0,
 'end_time': 24.8}
"""

Batch across multiple files

Passing multiple files allows segments from different files to be batched together, making better use of the GPU:

import whisper_s2t

model = whisper_s2t.load_model(model_identifier="large-v3")

files = ['audio1.wav', 'audio2.wav', 'audio3.wav']
lang_codes = ['en', 'en', 'en']
tasks = ['transcribe', 'transcribe', 'transcribe']
initial_prompts = [None, None, None]

out = model.transcribe_with_vad(files,
                                lang_codes=lang_codes,
                                tasks=tasks,
                                initial_prompts=initial_prompts,
                                batch_size=32)

# out[0] = results for audio1.wav, out[1] = results for audio2.wav, etc.
for file_idx, transcript in enumerate(out):
    print(f"File {files[file_idx]}: {len(transcript)} segments")

Word-level alignment

To enable word-level timestamps, load the model with:

model = whisper_s2t.load_model("large-v3", asr_options={'word_timestamps': True})

Word timestamps use a small aligner model (tiny, or tiny.en for English-only models), which is downloaded when you load a model with word timestamps on. The large-v3 family (large-v3, large-v3-turbo, distil-large-v3, distil-large-v3.5) aligns with itself instead. whisper_s2t.default_word_aligner(name) tells you which one a model uses (None when it aligns with itself).

Running on CPU

model = whisper_s2t.load_model("large-v3", device="cpu", compute_type="float32")

Pass compute_type="float32" — CTranslate2 does not run float16 on CPU. Smaller models (base, small) are much more practical for CPU inference.

Supported Models

Model Identifier
Tiny tiny / tiny.en
Base base / base.en
Small small / small.en
Medium medium / medium.en
Large V3 large-v3
Large V3 Turbo large-v3-turbo
Distil Small distil-small.en
Distil Medium distil-medium.en
Distil Large V3 distil-large-v3
Distil Large V3.5 distil-large-v3.5

All models are available in float16, float32, and bfloat16 compute types via CTranslate2-4you on Hugging Face.

Using models offline

Models are downloaded from Hugging Face the first time you load them. To fill a folder in advance (for example, for a machine without internet access), download the model, plus its word aligner if you use word timestamps:

import whisper_s2t

whisper_s2t.download_model("small.en", compute_type="float32", cache_dir="/models")

aligner = whisper_s2t.default_word_aligner("small.en")  # "tiny.en"; None for the large-v3 family
if aligner is not None:
    whisper_s2t.download_model(aligner, compute_type="float32", cache_dir="/models")

Then load from that folder without touching the network:

model = whisper_s2t.load_model("small.en", device="cpu", compute_type="float32",
                               cache_dir="/models", local_files_only=True,
                               asr_options={'word_timestamps': True})
  • Download with the same compute_type you will load with. Each precision is a separate download; other types such as int8 use the float32 files.
  • With local_files_only=True, a model missing from the folder raises huggingface_hub's LocalEntryNotFoundError (a FileNotFoundError) right away, without trying the network.
  • cache_dir uses the Hugging Face cache layout (models--<org>--<repo>/...). Without it, models go to the library's own cache.
  • download_model() also takes force_download=True to fetch the files again, and output_dir= to save a plain copy of the files in a folder, which load_model() accepts as the model identifier.

Benchmarks

Model: distil-large-v3 · FP16 · CUDA · RTX 4090 Engine: whisper-s2t-reborn 1.7.1 · CTranslate2 4.8.1 · torch 2.11.0+cu128 Audio: sam_altman_lex_podcast_367.flac (~2 h 9 min)

Comparing openai-whisper (no batch support) against whisper-s2t-reborn.

Backend Batch Size Time (s) Speedup Inference VRAM (MB)
openai-whisper 1 110.1 1.0× 314
whisper-s2t-reborn 1 65.5 1.7× 393
whisper-s2t-reborn 2 52.6 2.1× 540
whisper-s2t-reborn 4 40.7 2.7× 869
whisper-s2t-reborn 8 35.4 3.1× 1,452
whisper-s2t-reborn 16 32.6 3.4× 2,762
whisper-s2t-reborn 32 31.0 3.6× 5,267
whisper-s2t-reborn 64 30.2 3.6× 10,304

The increased VRAM usage even at batch size 1 is largely due to the VAD model. Openai's implementation doesn't use voice activity detection. The benchmarks folder has the actual scripts used.

Acknowledgements

  • Original WhisperS2T: Thanks to shashig for the original WhisperS2T project that this fork is based on.
  • OpenAI Whisper Team: Thanks to the OpenAI Whisper Team for open-sourcing the Whisper model.
  • CTranslate2 Team: Thanks to the CTranslate2 Team for providing a faster inference engine for Transformers architecture.
  • NVIDIA NeMo Team: Thanks to the NVIDIA NeMo Team for their contribution of the open-source VAD model used in this pipeline.

License

This project is licensed under MIT License - see the LICENSE file for details.

Metadata

Release files for whisper-s2t-reborn 1.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for whisper-s2t-reborn 1.8.0
File Size Uploaded
whisper_s2t_reborn-1.8.0.tar.gz 1.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for whisper-s2t-reborn 1.8.0
File Interpreter ABI Platform
whisper_s2t_reborn-1.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.9 MB

Release files / whisper_s2t_reborn-1.8.0.tar.gz

Download URL whisper_s2t_reborn-1.8.0.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
342c7dd291aa667230a6a509ebfb1a0d8960641ac1fb78424a1a5de14631caf1
BLAKE2b-256 checksum
How to use checksums
5d83b15a9858e4564d9c1f5e38bd212b9e8d737fc42f1dd982d5de11e856ed33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / whisper_s2t_reborn-1.8.0-py3-none-any.whl

Download URL whisper_s2t_reborn-1.8.0-py3-none-any.whl
Size 1.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
5ee923e6b7580534f1229d223d48d8b2c9508dbfb173bbff140b656cc1a56818
BLAKE2b-256 checksum
How to use checksums
9590f8fda7e037b69794343c14e947e0a911e250389283a00ee12a7eb4c10564
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.8.0 This release

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page