Skip to main content

vcon-mac-wtf

MLX Whisper transcription server for Apple Silicon with WTF/vCon support.

Runs OpenAI's Whisper speech-to-text model locally on Apple Silicon (M1/M2/M3/M4) using the MLX framework for GPU-accelerated inference. Outputs transcriptions in World Transcription Format (WTF) and can enrich vCon documents with transcription analysis.

Features

  • GPU-accelerated Whisper inference on Apple Silicon via MLX
  • OpenAI-compatible API (POST /v1/audio/transcriptions) — drop-in replacement
  • vCon-native API (POST /transcribe) — accepts a vCon, returns enriched vCon with WTF transcription
  • Word-level timestamps
  • Multiple model sizes (tiny through large-v3)
  • Integrates with wtf-server as the mlx-whisper provider

Prerequisites

  • Apple Silicon Mac (M1/M2/M3/M4)
  • Python 3.12+
  • uv (recommended) or pip
  • ffmpeg: brew install ffmpeg

Quickstart

# Install (choose one)
pip install vcon-mac-wtf          # PyPI
brew install your-username/vcon/vcon-mac-wtf  # Homebrew tap

# Or from source
uv sync --all-extras

# Start the server (downloads model on first run)
vcon-mac-wtf
# or: make run
# or: uv run uvicorn vcon_mac_wtf.main:app --host 0.0.0.0 --port 8000

API Endpoints

Health

curl http://localhost:8000/health
curl http://localhost:8000/health/ready

Transcribe Audio (OpenAI-compatible)

curl -X POST http://localhost:8000/v1/audio/transcriptions \
  -F "file=@recording.wav" \
  -F "model=mlx-community/whisper-turbo" \
  -F "response_format=verbose_json"

Response formats: json, text, verbose_json, wtf

Transcribe vCon

curl -X POST http://localhost:8000/transcribe \
  -H "Content-Type: application/json" \
  -d @my_vcon.json

Returns the vCon with WTF transcription analysis appended.

List Models

curl http://localhost:8000/v1/models

Configuration

Variable Default Description
HOST 0.0.0.0 Bind address
PORT 8000 Server port
LOG_LEVEL info Logging level
MLX_MODEL mlx-community/whisper-turbo Default Whisper model
PRELOAD_MODEL true Load model at startup
MAX_AUDIO_SIZE_MB 100 Max upload size
HF_TOKEN - HuggingFace token for faster model downloads (optional)

Copy .env.example to .env to customize. Add HF_TOKEN=hf_xxx to .env before first run to speed up model downloads and avoid rate limits.

Available Models

Short Name Model ID Parameters
tiny mlx-community/whisper-tiny 39M
base mlx-community/whisper-base 74M
small mlx-community/whisper-small 244M
medium mlx-community/whisper-medium 769M
large-v3 mlx-community/whisper-large-v3 1.55B
turbo mlx-community/whisper-turbo 809M

Integration with wtf-server

This server works as a provider for the existing TypeScript wtf-server. Set in the wtf-server .env:

ASR_PROVIDER=mlx-whisper
MLX_WHISPER_URL=http://localhost:8000
MLX_WHISPER_MODEL=mlx-community/whisper-turbo

Publishing

PyPI:

pip install build twine
python -m build && twine upload dist/*

Homebrew: See homebrew/README.md for tap setup. After publishing to PyPI, update the formula url and sha256, then add to your tap.

Development

make install    # Install all deps including dev
make dev        # Run with auto-reload
make test       # Run unit tests
make test-all   # Run all tests including integration
make lint       # Lint with ruff
make format     # Format with ruff

Testing

# Unit tests (no MLX required, uses mocks)
make test

# Integration tests (requires Apple Silicon + MLX)
make test-all

# Coverage
make test-cov

Metadata

Release files for vcon-mac-wtf 0.1.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 vcon-mac-wtf 0.1.0
File Size Uploaded
vcon_mac_wtf-0.1.0.tar.gz 136.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vcon-mac-wtf 0.1.0
File Interpreter ABI Platform
vcon_mac_wtf-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 152.0 kB

Release files / vcon_mac_wtf-0.1.0.tar.gz

Download URL vcon_mac_wtf-0.1.0.tar.gz
Size 136.3 kB
Tags Source
SHA-256 checksum
How to use checksums
bcc069e1409e346534defae7725a5679e1fd92254427628dfe726e663d683382
BLAKE2b-256 checksum
How to use checksums
c709a366547b5cbce81c8c16670f04acc05a51f82adc9bfc2a886aa5c0f5035a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Release files / vcon_mac_wtf-0.1.0-py3-none-any.whl

Download URL vcon_mac_wtf-0.1.0-py3-none-any.whl
Size 15.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4ee16d110e8a54aa9105bcf0643773004b2b0a32b6f1ac17d5e3039178667d4c
BLAKE2b-256 checksum
How to use checksums
0d1165b6ddef59a863b2a5b82e18449a49f13047500674e0d52805a616176b03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Release history Release notifications | RSS feed

This release

0.1.0 This release

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