Skip to main content

VLCaption

Tests License: MIT Python 3.11+

Auto-generate subtitles for whatever is playing in VLC. Fully local — no cloud APIs. On Apple Silicon it uses NVIDIA Parakeet via parakeet-mlx: more accurate than whisper-large-v3 in English, ~10-60x realtime, and it doesn't hallucinate captions over music or silence. Whisper covers ~100 languages as fallback.

Use it

VLC extension (recommended): play a video, open VLC > Extensions > VLCaption - Auto Subtitles, click Generate Subtitles. Subtitles load automatically when ready. The server starts on demand and exits a couple of minutes after VLC quits.

Watch mode (macOS): zero clicks — subtitles whatever VLC plays:

vlcaption watch    # --model auto --interval 3 --overwrite --include-audio --embed

Long files are progressive: a quick pass around the playhead puts subtitles up within seconds, then the full pass replaces them (--no-progressive to disable, --quick-window to size the first pass).

Either way, captions are saved as movie.srt next to movie.mp4, so they auto-load on every future open.

Install

# From PyPI — with uv
uv tool install "vlcaption[mlx]"   # Apple Silicon ([mlx] = fast engines)
uv tool install vlcaption          # elsewhere

# ...or with pip / pipx
pip install "vlcaption[mlx]"
pipx install "vlcaption[mlx]"

vlcaption install                  # set up the VLC extension (optional)

# Or from source
git clone https://github.com/WT-MM/VLCaption.git && cd VLCaption && ./install.sh

Needs VLC, Python 3.11+, and on a Mac ffmpeg (brew install ffmpeg). Manual extension install: copy vlcaption/extension/vlcaption.lua into VLC's lua/extensions/ directory and restart VLC.

Platform support

Developed and tested end-to-end on macOS (Apple Silicon, VLC 3.0.21) only, so far.

Platform Extension Watch mode Auto-load into VLC Engine
macOS Apple Silicon ✅ tested ✅ tested ✅ tested Parakeet (ANE via silicon-asr) / mlx-whisper
macOS Intel should work should work should work faster-whisper (CPU)
Linux untested ❌ ❌ click Refresh faster-whisper (CPU/CUDA)
Windows ❌ ❌ ❌ faster-whisper (CPU/CUDA)

Reports and fixes from other platforms welcome.

Models

Choice Engine Languages Size
auto (default) best available — —
coreml Parakeet on the Neural Engine via silicon-asr EN + 24 European 1.2 GB
coreml-fast Parakeet CTC 110M, ~1000x realtime, draft quality English 0.2 GB
parakeet parakeet-mlx, Apple GPU EN + 24 European 1.2 GB
turbo mlx-whisper / faster-whisper ~100 1.6 GB
tiny…large-v3 mlx-whisper / faster-whisper ~100 75 MB – 3 GB

Models download on first use. auto = CoreML/ANE Parakeet on Apple Silicon (~1.7x faster than MLX at much lower power), Whisper turbo elsewhere (CUDA float16 on NVIDIA, int8 on CPU). The engine chosen is logged per job. No torch/MPS path on purpose: MLX and the ANE beat the MPS Whisper ports and CTranslate2 has no Metal backend.

Embed captions into the video

Lossless remux (mp4/m4v/mov/mkv/webm) — the .srt becomes a subtitle track inside the file:

vlcaption embed movie.mp4               # writes movie.subbed.mp4
vlcaption embed movie.mp4 --replace     # in place (atomic)

Server API

The extension auto-starts the server (port 9839). Run it yourself as vlcaption serve with --host/--port/--device/--exit-with-vlc. Hyphenated aliases (vlcaption-watch, vlcaption-server, ...) also exist. Endpoints: POST /transcribe (file_path, model, language, auto_load), GET /progress, GET /health, POST /shutdown.

Development

uv sync --extra dev --extra mlx
make format && make static-checks && make test

Architecture notes and the design review behind this layout: docs/redesign-2026-07.md.

Troubleshooting

  • Extension missing from menu — check the .lua is in the extensions dir; restart VLC. Menu is under the VLC application menu on macOS.
  • Menu item needs two clicks to reopen — VLC 3.x bug (#27688).
  • "FFmpeg is not installed or not in your PATH" — brew install ffmpeg; if it's installed but the extension-started server can't see it, re-run vlcaption-install (GUI apps don't get Homebrew's PATH).
  • Subtitles generated but invisible — audio-only files have no video surface; check Subtitles > Subtitle Track on videos.
  • Debug logs — VLC > Tools > Messages at verbosity 2, prefix [VLCaption]; server logs: run the launcher in a terminal.

Uninstall

rm ~/Library/Application\ Support/org.videolan.vlc/lua/extensions/vlcaption.lua
rm -rf ~/.config/vlcaption
uv tool uninstall vlcaption   # or delete the cloned repo

Models live in ~/.cache/huggingface/.

License

MIT

Metadata

Release files for vlcaption 0.3.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 vlcaption 0.3.0
File Size Uploaded Provenance
vlcaption-0.3.0.tar.gz 31.4 kB Without provenance Details

Release files / vlcaption-0.3.0.tar.gz

Download URL vlcaption-0.3.0.tar.gz
Size 31.4 kB
Tags Source
SHA-256 checksum
How to use checksums
31bfb8757c4947e39175fd73fbea83a1e41557877dd8954d89a07a000ddfebc7
BLAKE2b-256 checksum
How to use checksums
f0294f6f160f0e3d34d9baf2471c6166f2d49e590bc9e6cc35db31d160ab76bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","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 vlcaption 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.

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