Skip to main content

Paratran

CLI, REST API, and MCP server for audio transcription on Apple Silicon, powered by parakeet-mlx.

The default model (parakeet-tdt-0.6b-v3) achieves 6.34% average WER across 8 English benchmarks and supports 25 languages. Runs ~30x faster than Whisper on Apple Silicon via MLX.

Requirements

  • macOS with Apple Silicon (M1/M2/M3/M4)
  • Python 3.11+
  • ~2 GB memory for the default model

Quick Start

Transcribe audio files directly:

uvx paratran recording.wav

Or start the REST API server and transcribe via client mode (no model reload per file):

uvx paratran serve
uvx paratran -s http://localhost:8000 recording.wav

Install

uv (recommended)

uv tool install paratran

pip

pip install paratran

From source

git clone https://github.com/briansunter/paratran.git
cd paratran
uv sync
uv run paratran

CLI Usage

# Transcribe a single file
paratran recording.wav

# Transcribe multiple files with verbose output
paratran -v file1.wav file2.mp3 file3.m4a

# Output as SRT subtitles
paratran --output-format srt recording.wav

# Output all formats (txt, json, srt, vtt)
paratran --output-format all --output-dir ./output recording.wav

# Use beam search decoding
paratran --decoding beam recording.wav

# Custom model and cache directory
paratran --model mlx-community/parakeet-tdt-1.1b-v2 --cache-dir /Volumes/Storage/models recording.wav

Client Mode

Use --server / -s to send files to a running paratran server instead of transcribing locally. This avoids model loading time on every invocation — start the server once, then transcribe instantly.

# Start the server (loads model once)
paratran serve

# Transcribe via the server
paratran -s http://localhost:8000 recording.wav

# Output and transcription options work in client mode
paratran -s http://localhost:8000 --output-format all --output-dir ./output -v recording.wav

# Set the server URL via environment variable
export PARATRAN_SERVER=http://localhost:8000
paratran recording.wav  # automatically uses the server

CLI Options

Flag Default Description
-s, --server URL of a running paratran server
--api-key Bearer token for an authenticated server
--timeout 60 Server request timeout in seconds
--model mlx-community/parakeet-tdt-0.6b-v3 HF model ID or local path
--cache-dir HuggingFace default Model cache directory
--output-dir . Output directory
--output-format txt txt, json, srt, vtt, or all
--decoding greedy greedy or beam
--chunk-duration 120 Chunk duration in seconds (0 to disable)
--overlap-duration 15 Overlap between chunks
--beam-size 5 Beam size (beam decoding)
--length-penalty 0.013 Length penalty (beam decoding)
--patience 3.5 Patience (beam decoding)
--duration-reward 0.67 Duration reward (beam decoding)
--max-words Max words per sentence
--silence-gap Split at silence gaps (seconds)
--max-duration Max sentence duration (seconds)
--fp32 Use FP32 precision instead of BF16
-v Verbose output

Environment variables: PARATRAN_MODEL, PARATRAN_MODEL_DIR, PARATRAN_SERVER, PARATRAN_API_KEY.

When using client mode, configure --model and --cache-dir on the running server; those options do not change a remote server.

REST API Server

# Start server with local-only defaults
paratran serve

# Custom host, port, and model cache
paratran serve --host 127.0.0.1 --port 9000 --cache-dir /Volumes/Storage/models

# Expose the server only with an API key
paratran serve --host 0.0.0.0 --api-key "$PARATRAN_API_KEY"

The server defaults to 127.0.0.1, limits uploads to 512 MB, and processes one transcription at a time. Non-loopback hosts require --api-key.

API

The REST API is compatible with the OpenAI Audio Transcription API.

GET /health

curl http://localhost:8000/health
{
  "status": "ok",
  "model": "mlx-community/parakeet-tdt-0.6b-v3",
  "model_dir": "/Volumes/Storage/models"
}

POST /v1/audio/transcriptions

Upload an audio file (wav, mp3, flac, m4a, ogg, webm):

curl http://localhost:8000/v1/audio/transcriptions \
  -F "file=@recording.m4a" \
  -F "model=parakeet"

OpenAI-compatible parameters

Parameter Default Description
file (required) Audio file to transcribe
model Accepted for compatibility; uses the configured model
response_format json json, text, srt, vtt, or verbose_json
language Accepted for compatibility; language is auto-detected
prompt Accepted for compatibility; prompts are not applied
temperature Accepted for compatibility; temperature is not applied

Paratran-specific parameters

Parameter Default Description
decoding greedy greedy or beam
beam_size 5 Beam size (beam decoding)
length_penalty 0.013 Length penalty (beam decoding)
patience 3.5 Patience (beam decoding)
duration_reward 0.67 Duration reward (beam decoding)
max_words Max words per sentence
silence_gap Split at silence gaps (seconds)
max_duration Max sentence duration (seconds)
chunk_duration 120 Chunk duration for long audio (seconds); 0 disables chunking
overlap_duration 15.0 Overlap between chunks (seconds)
fp32 false Use FP32 instead of BF16

Response formats

json (default):

{"text": "Hello world, this is a test."}

verbose_json (also includes processing_time):

{
  "task": "transcribe",
  "duration": 3.52,
  "processing_time": 0.176,
  "text": "Hello world, this is a test.",
  "segments": [
    {"id": 0, "start": 0.0, "end": 3.52, "text": "Hello world, this is a test."}
  ],
  "words": [
    {"word": "Hello", "start": 0.0, "end": 0.48},
    {"word": " world", "start": 0.48, "end": 0.8}
  ]
}

text: Returns plain text. srt / vtt: Returns subtitles.

Interactive API docs are available at http://localhost:8000/docs.

MCP Server

Paratran includes an MCP server so Claude Code, Claude Desktop, or any MCP client can transcribe audio files directly. Supports both stdio and streamable HTTP transports.

Claude Code (stdio)

Add to .claude/settings.json:

{
  "mcpServers": {
    "paratran": {
      "command": "uvx",
      "args": ["--from", "paratran", "paratran-mcp"]
    }
  }
}

Claude Desktop (stdio)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "paratran": {
      "command": "uvx",
      "args": ["--from", "paratran", "paratran-mcp"]
    }
  }
}

Optionally set PARATRAN_MODEL_DIR in the env block to customize the model cache location.

Streamable HTTP

Run the MCP server over HTTP for local or multi-client access:

paratran-mcp --transport streamable-http --host 127.0.0.1 --port 8000

The MCP endpoint is available at http://localhost:8000/mcp. For HTTP MCP on a non-loopback host, pass both --allowed-root and --api-key; the key is accepted as an Authorization: Bearer token. Loopback HTTP can also be protected with --api-key when multiple local clients share the server.

MCP Tool

The transcribe tool accepts an absolute file path and all the same transcription options as the REST interface. --allowed-root restricts paths to a directory, which is recommended for HTTP MCP.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

paratran-0.6.0.tar.gz (22.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

paratran-0.6.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file paratran-0.6.0.tar.gz.

File metadata

  • Download URL: paratran-0.6.0.tar.gz
  • Upload date:
  • Size: 22.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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}

File hashes

Hashes for paratran-0.6.0.tar.gz
Algorithm Hash digest
SHA256 d316d0c2c940bd04b7d4abec496e7965b75b80a9ae42d56dd07a6a0754d336f2
MD5 e13a74c4577a938646ce0ffb4711f798
BLAKE2b-256 1af6ee191a0362a5d29e3e9fbd9eda919005e43e6750a7afc95da0b779a0adfd

See more details on using hashes here.

File details

Details for the file paratran-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: paratran-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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}

File hashes

Hashes for paratran-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 df16dd9cb4943cfb82405c21e3c17775dd4d221e9c9ddc50bcff54af465e8b1f
MD5 90e774ea681050d2849d86298a84eb50
BLAKE2b-256 4db513394ebfb526214ccf453fe0cafe891f95e9496109608b85b7c3c9e2606f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page