easytranscriber is an automatic speech recognition (ASR) library for transcription with precise word-level timestamps. While the transcription step itself is well-optimized in most ASR libraries, the surrounding components (data loading, emission extraction, forced alignment) often act as bottlenecks. easytranscriber optimizes these components and supports both ctranslate2 and Hugging Face transformers as inference backends. Notable features include:
- GPU accelerated forced alignment, using Pytorch's forced alignment API. Forced alignment is based on a GPU implementation of the Viterbi algorithm (Pratap et al., 2024).
- Parallel loading and pre-fetching of audio files for efficient data loading and batch processing.
- Flexible text normalization for improved alignment quality. Users can supply custom regex-based text normalization functions to preprocess ASR outputs before alignment. A mapping from the original text to the normalized text is maintained internally. All of the applied normalizations and transformations are consequently non-destructive and reversible after alignment.
- 35% to 102% faster inference compared to
WhisperX. See the benchmarks for more details. - Batch inference support for wav2vec2 models (emission extraction).
Installation
With GPU support
pip install easytranscriber --extra-index-url https://download.pytorch.org/whl/cu128
[!TIP]
Remove--extra-index-urlif you want a CPU-only installation.
Using uv
When installing with uv, it will select the appropriate PyTorch version automatically (CPU for macOS, CUDA for Linux/Windows/ARM):
uv sync
or
uv pip install easytranscriber
Usage
Below, an example is provided of how transcribe an audio file with easytranscriber. We transcribe the first chapter of an audiobook recording of "A Tale of Two Cities". The recording is sourced from LibriVox.
from pathlib import Path
from easyaligner.text import load_tokenizer
from huggingface_hub import snapshot_download
from easytranscriber.pipelines import pipeline
from easytranscriber.text.normalization import text_normalizer
# Download Tale of Two Cities book 1 chapter 1 LibriVox audiobook recording for testing
snapshot_download(
"Lauler/easytranscriber_tutorials",
repo_type="dataset",
local_dir="data/tutorials",
allow_patterns="tale-of-two-cities_short-en/*",
# max_workers=4,
)
tokenizer = load_tokenizer("english") # For sentence tokenization in forced alignment
audio_files = [file.name for file in Path("data/tutorials/tale-of-two-cities_short-en").glob("*")]
pipeline(
vad_model="pyannote",
emissions_model="facebook/wav2vec2-base-960h",
transcription_model="distil-whisper/distil-large-v3.5",
audio_paths=audio_files,
audio_dir="data/tutorials/tale-of-two-cities_short-en",
language="en",
tokenizer=tokenizer,
text_normalizer_fn=text_normalizer,
cache_dir="models",
)
easysearch
easysearch is a built-in lightweight search interface for browsing and querying your transcription outputs. It indexes transcription chunks into a SQLite database with full-text search and serves a web UI with audio playback and synchronized transcript highlighting.
pip install easytranscriber[search]
easysearch --alignments-dir output/alignments --audio-dir data/audio
See the search documentation for details on search syntax, indexing, and configuration options.
Benchmarks
We present throughput comparisons between easytranscriber and WhisperX. See the benchmarks directory for code and details.
WhisperX relies on single-threaded data loading and CPU-based forced alignment, creating a bottleneck that is especially pronounced on hardware with slower single-core performance.
All easytranscriber benchmarks were run using the ctranslate2 backend for transcription.
- PyTorch version: 2.8.0
- CUDA: 12.8
- WhisperX version: 3.7.6
- Model:
KBLab/kb-whisper-large - Language: Swedish (
sv)
Documentation
The documentation is available at kb-labb.github.io/easytranscriber/.
[!TIP] Check out the
easyalignerlibrary for a user friendly pipeline for forced alignment of text and audio.
Acknowledgements
easytranscriber draws heavy inspiration from WhisperX (Bain et al., 2023).
The forced alignment component of easytranscriber is based on Pytorch's forced alignment API, which implements a GPU-accelerated version of the Viterbi algorithm as described in Pratap et al., 2024.
LibriVox for public domain audiobooks used as tutorial examples.
Citation
@online{rekathati2026,
author = {Rekathati, Faton},
title = {Easytranscriber: {Speech} Recognition with Precise
Timestamps},
date = {2026-02-26},
url = {https://kb-labb.github.io/posts/2026-02-26-easytranscriber/},
langid = {en}
}
Metadata
Release files for easytranscriber 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| easytranscriber-0.3.0.tar.gz | 27.2 kB | Without provenance | Details for easytranscriber-0.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| easytranscriber-0.3.0-py3-none-any.whl | Python 3 | none | any | Details for easytranscriber-0.3.0-py3-none-any.whl |
Total release size: 58.5 kB
Release files / easytranscriber-0.3.0.tar.gz
| Download URL | easytranscriber-0.3.0.tar.gz |
|---|---|
| Size | 27.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6913d0ac2868770abdf2226bb3da99308d80f91c75299f51da12a3dc8030f448
|
|
BLAKE2b-256 checksum How to use checksums |
268957abb56d67980b9f42361b6b94cc0507e7f1ee17affcac1d6dba70b7847f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / easytranscriber-0.3.0-py3-none-any.whl
| Download URL | easytranscriber-0.3.0-py3-none-any.whl |
|---|---|
| Size | 31.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f21da8577624c7a0b287fa7df79c58c91c804dbdb4d8a9eb4563788e6c688aea
|
|
BLAKE2b-256 checksum How to use checksums |
ea60e5129b07b2437a4533cc70bdbdcd7b2b6441e18f93566f224328b260ae4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for easytranscriber 0.3.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.