voxrun
High-performance speech-to-text inference library derived from faster-whisper.
voxrun preserves the existing faster-whisper inference API while packaging the Python implementation as Nuitka-compiled, CPython-specific binary wheels. Nuitka compilation increases reverse-engineering cost; it is not cryptographic encryption and does not make the implementation impossible to reverse engineer.
Installation
voxrun Phase 1 supports Linux x86_64 on glibc 2.28 or newer and CPython 3.10, 3.11, and 3.12. Each wheel is built for a specific CPython ABI.
uv add voxrun
The conventional pip installer is also supported:
python -m pip install voxrun
Do not install the upstream ctranslate2 distribution together with
voxrun-ctranslate2; both provide the ctranslate2 import and their package
files conflict.
Usage
from voxrun import WhisperModel
model = WhisperModel(
"large-v3",
device="cuda",
compute_type="float16",
)
segments, info = model.transcribe("audio.mp3")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
segments is a generator. Consume it to run the transcription to completion:
segments, _ = model.transcribe("audio.mp3")
segments = list(segments)
The existing public APIs remain available, including WhisperModel,
BatchedInferencePipeline, decode_audio, Segment, Word,
TranscriptionInfo, WhisperModel.transcribe(),
BatchedInferencePipeline.transcribe(), download_model, available_models(),
and format_timestamp().
Batched transcription
from voxrun import BatchedInferencePipeline, WhisperModel
model = WhisperModel("turbo", device="cuda", compute_type="float16")
batched_model = BatchedInferencePipeline(model=model)
segments, info = batched_model.transcribe("audio.mp3", batch_size=16)
Contextual biasing
Decoder-level contextual phrases require
voxrun-ctranslate2>=4.8.1.post1, which exposes ctranslate2.ContextGraph.
Calls without context_phrases preserve the graph-free path.
segments, info = model.transcribe(
"audio.mp3",
context_phrases=["NVIDIA", "H200", ("BRM9206", 5.0)],
context_score=3.0,
)
See Contextual biasing for scoring, tokenizer boundaries, graph lifetime, and validation details.
Streaming decode (AlignAtt)
WhisperModel.streaming_decode decodes one step of a SimulStreaming-style
stream. It needs voxrun-ctranslate2>=4.8.1.post2, which has native AlignAtt
(ctranslate2.models.WhisperAlignAttOptions); check with
voxrun.streaming.supports_streaming_decode().
Each call re-decodes the current audio window (at most 30 s) and returns only the tokens that are stable. Decoding stops before a token whose most attended audio frame is too close to the end of the window. The policy runs inside CTranslate2; voxrun prepares features and the prompt, and wraps the result. The caller keeps all stream state:
from voxrun import StreamingDecodeOptions
graph = model.compile_context_graph(["高育安"], 3.0, language="zh") # once per session
stable, previous = [], None
for window, is_final in windows: # growing audio of the current utterance
out = model.streaming_decode(
window,
StreamingDecodeOptions(language="zh", previous_attended_frame=previous, is_final=is_final),
stable_tokens=stable,
context_graph=graph,
)
if out.stop_reason != "alignatt_rewind":
stable += out.tokens
previous = out.last_attended_frame
Behaviour:
- Defaults follow the SimulStreaming reference runtime:
frame_threshold=25,final_frame_threshold=4,rewind_threshold=200(20 ms encoder frames), greedy. - Encoder input. Audio is padded to 30 s with silence before the log-Mel, as
in the reference.
variable_length_input=Trueopts out. - Stable tokens are fed as context and seed the context graph, so a phrase split across calls keeps its bias. The static prompt never seeds it.
- Result fields:
tokens,text,stop_reason, per-tokenattended_frames,last_attended_frame,content_frames,no_speech_probandinference_time_s(complete:generatereturns host token IDs only after the device work). transcribe()andBatchedInferencePipelineare unchanged.
VAD filter
PyAV handles audio decoding, so a separate system FFmpeg installation is not required.
segments, _ = model.transcribe(
"audio.mp3",
vad_filter=True,
vad_parameters={"min_silence_duration_ms": 500},
)
The packaged Silero VAD ONNX model is loaded from voxrun/assets.
Logging
import logging
logging.basicConfig()
logging.getLogger("voxrun").setLevel(logging.DEBUG)
Migration from faster-whisper
The namespace is intentionally breaking; no faster_whisper compatibility
alias is installed.
# Before
from faster_whisper import WhisperModel
# After
from voxrun import WhisperModel
Model repository IDs such as Systran/faster-whisper-large-v3 are external
runtime identifiers and remain unchanged.
Development
The project uses uv as its package and environment manager.
uv sync
uv run pytest
Build and audit the local binary wheel:
uv build --wheel
VERSION="$(uv version --short)"
python scripts/verify_wheel.py --expected-version "$VERSION" dist/*.whl
Nuitka build intermediates and the final wheel are excluded from the public release by the wheel verifier.
Attribution and license
voxrun was originally derived from SYSTRAN/faster-whisper and retains the applicable MIT license notices. See LICENSE.
The ContextGraph design also references the applicable CTranslate2 license and documentation.
Metadata
Release files for voxrun 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| voxrun-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| voxrun-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| voxrun-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 | Details |
Total release size: 5.1 MB
Release files / voxrun-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | voxrun-0.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
655cc308930239cb2a2666cb6cf86382bd0702507cc1baa50e269727791740f7
|
|
BLAKE2b-256 checksum How to use checksums |
2432434b127b952c19cc836fbd93a143d1bc1a414ac16bb0ab0fd7ec7f1ee17a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","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 / voxrun-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | voxrun-0.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c065e9731c812833c184f061966208d53e78af150c1816283c6f8442dc861257
|
|
BLAKE2b-256 checksum How to use checksums |
ceaf4b1cd6c3cbefcc6ab0cf7c7d40a13e41d5c11177dc46abce9e43107ac2b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","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 / voxrun-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | voxrun-0.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
825eaa732c860603c6878f5dc5b2197d9efc34e8ff58b44091f2c2b15d25de5c
|
|
BLAKE2b-256 checksum How to use checksums |
df176d83dc54dc15e502eb699be5a41b6a65f9abe30dc9b4783a74ed64a2dd0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","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}
|