This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Reason given by maintainers: discontinued
Antenna
Rust-powered multi-model Speech-to-Text toolkit for Python.
Supported Models
| Model | Backend | GPU | Description |
|---|---|---|---|
| Whisper | Candle | CUDA, Metal | OpenAI's encoder-decoder model (tiny → large-v3) |
| Distil-Whisper | Candle | CUDA, Metal | 2x faster distilled Whisper variants |
| Wav2Vec2 | ONNX | CUDA, TensorRT | Meta's CTC-based model |
| Parakeet | sherpa-rs | CUDA, DirectML | NVIDIA's FastConformer-TDT (600M params, blazing fast) |
Installation
CPU Version
pip install antenna-stt
GPU Version (CUDA)
# Option A: Pre-built wheel
pip install antenna-stt[cuda]
# Option B: Build from source (requires CUDA toolkit)
git clone https://github.com/fiction-ai-studios/antenna.git
cd antenna
pip install maturin
maturin build --release --features cuda
pip install target/wheels/antenna_stt-*.whl
Development Installation
git clone https://github.com/fiction-ai-studios/antenna.git
cd antenna
uv venv && source .venv/bin/activate
uv add --dev maturin pytest pytest-asyncio
# Build options:
uv run maturin develop --release # CPU only
uv run maturin develop --release --features cuda # + Whisper GPU
uv run maturin develop --release --features onnx # + Wav2Vec2
uv run maturin develop --release --features sherpa # + Parakeet
uv run maturin develop --release --features sherpa-cuda # + Parakeet GPU
Quick Start
Basic Transcription
import antenna
# One-liner
result = antenna.transcribe("speech.wav", model_size="base")
print(result.text)
# With more control
audio = antenna.load_audio("speech.wav")
audio = antenna.preprocess_for_whisper(audio)
model = antenna.WhisperModel.from_size("base", device="cuda")
result = model.transcribe(audio)
for segment in result.segments:
print(f"[{segment.start:.2f}s] {segment.text}")
Unified Model Registry
import antenna
# Load ANY model through unified API
model = antenna.load_model("whisper/base", device="cuda")
model = antenna.load_model("distil-whisper/distil-small.en", device="cpu")
model = antenna.load_model("wav2vec2/base-960h", device="cpu") # Requires ONNX
model = antenna.load_model("parakeet/tdt-0.6b-v2", device="cuda") # Requires sherpa
# List all available models
for m in antenna.list_models():
print(f"{m.id}: {m.description}")
Streaming Transcription
import antenna
# Real-time chunk-by-chunk processing
transcriber = antenna.StreamingTranscriber.from_model_id(
"whisper/tiny",
device="cpu",
config=antenna.StreamingConfig.realtime()
)
for chunk in audio_chunks:
events = transcriber.process_chunk(chunk)
for event in events:
if event.is_final():
print(event.text())
transcriber.flush()
Async Streaming
import asyncio
import antenna
async def transcribe():
transcriber = antenna.AsyncStreamingTranscriber.from_model_id(
"whisper/tiny", device="cuda"
)
for chunk in audio_chunks:
events = await transcriber.process_chunk_async(chunk)
for event in events:
if event.is_final():
print(event.text())
await transcriber.flush_async()
asyncio.run(transcribe())
Feature Flags
| Feature | Description | Models Enabled |
|---|---|---|
cuda |
Candle CUDA GPU | Whisper, Distil-Whisper |
metal |
Candle Metal GPU (macOS) | Whisper, Distil-Whisper |
onnx |
ONNX Runtime | Wav2Vec2 |
onnx-cuda |
ONNX with CUDA | Wav2Vec2 (GPU) |
sherpa |
sherpa-rs backend | Parakeet |
sherpa-cuda |
sherpa with CUDA | Parakeet (GPU) |
Build with multiple features:
uv run maturin develop --release --features "cuda,onnx,sherpa-cuda"
Parakeet Models (NEW)
NVIDIA Parakeet is incredibly fast (can transcribe 60min audio in ~1 second).
Setup:
# 1. Build with sherpa feature
uv run maturin develop --release --features sherpa-cuda
# 2. Download model
mkdir -p ~/.cache/antenna/parakeet
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-nemo-parakeet-tdt-0.6b-v2-int8.tar.bz2
tar xvf sherpa-onnx-nemo-parakeet-tdt-0.6b-v2-int8.tar.bz2 -C ~/.cache/antenna/parakeet/
Usage:
import antenna
model = antenna.load_model("parakeet/tdt-0.6b-v2", device="cuda")
result = model.transcribe(audio)
print(result.text)
Variants:
parakeet/tdt-0.6b-v2- English (recommended)parakeet/tdt-0.6b-v3- Multilingual (25 languages)
Audio Processing
import antenna
# Load any format (WAV, MP3, FLAC, OGG, M4A)
audio = antenna.load_audio("podcast.mp3")
# Analyze
stats = antenna.analyze_audio(audio)
print(f"RMS: {stats.rms_db:.1f} dB, Peak: {stats.peak_db:.1f} dB")
# Process
audio = antenna.trim_silence(audio, threshold_db=-40)
audio = antenna.normalize_audio(audio, method="rms", target_db=-20)
audio = antenna.preprocess_audio(audio, target_sample_rate=16000, mono=True)
# Save
antenna.save_audio(audio, "processed.wav")
Model Selection Guide
| Model | Size | Speed | Quality | Use Case |
|---|---|---|---|---|
| Whisper tiny | 39M | ★★★★★ | ★★ | Quick tests |
| Whisper base | 74M | ★★★★ | ★★★ | General use |
| Whisper large-v3 | 1.5G | ★ | ★★★★★ | Best quality |
| Distil-Whisper | ~350M | ★★★★ | ★★★★ | Fast + accurate |
| Wav2Vec2 | 95-317M | ★★★ | ★★★ | CTC decoding |
| Parakeet | 600M | ★★★★★ | ★★★★★ | Fastest + accurate |
GPU Availability Check
import antenna
print(f"CUDA: {antenna.is_cuda_available()} ({antenna.cuda_device_count()} devices)")
print(f"Metal: {antenna.is_metal_available()}")
print(f"ONNX: {antenna.is_onnx_available()}")
print(f"ONNX CUDA: {antenna.is_onnx_cuda_available()}")
Testing
cargo test --features sherpa # Rust tests (129)
uv run pytest tests/ -v # Python tests (226+)
Roadmap
- ✅ Whisper/Distil-Whisper (Candle)
- ✅ Wav2Vec2 (ONNX)
- ✅ Parakeet (sherpa-rs)
- ✅ Streaming API with VAD
- ✅ Async streaming
- ✅ GPU support (CUDA, Metal, DirectML)
- 🔲 Canary (NeMo format)
- 🔲 Conformer (sherpa-rs)
- 🔲 Production HTTP/WebSocket server
License
MIT
Acknowledgments
- PyO3 - Rust-Python bindings
- Candle - ML framework
- sherpa-onnx - Parakeet inference
- ONNX Runtime - Cross-platform inference
- OpenAI Whisper - Original Whisper model
Metadata
Release files for antenna-stt 0.4.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 |
|---|---|---|---|---|
| antenna_stt-0.4.0.tar.gz | 395.8 kB | Without provenance | Details for antenna_stt-0.4.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| antenna_stt-0.4.0-cp313-cp313-manylinux_2_39_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.39+ x86-64 | Details for antenna_stt-0.4.0-cp313-cp313-manylinux_2_39_x86_64.whl |
Total release size: 7.0 MB
Release files / antenna_stt-0.4.0.tar.gz
| Download URL | antenna_stt-0.4.0.tar.gz |
|---|---|
| Size | 395.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7e45cf8df4050ad24590f10f5042f238a2206133633ab1073780d9efc3ff2568
|
|
BLAKE2b-256 checksum How to use checksums |
ec132e558fc328284b3fcb2d97520bc855a2df4106917972cdbb47f381cac116
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.10.2
|
Release files / antenna_stt-0.4.0-cp313-cp313-manylinux_2_39_x86_64.whl
| Download URL | antenna_stt-0.4.0-cp313-cp313-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.13 Linux glibc 2.39+ x86-64 |
|
SHA-256 checksum How to use checksums |
3e5595ff075e206260d9abea6ce86fa0883a436499586d7ed317dfce0d20fedb
|
|
BLAKE2b-256 checksum How to use checksums |
497534537d45091264d81257a8f418e4136741c718b09317edb16002689d70d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.10.2
|
Security for antenna-stt 0.4.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.