Whishper is an open-source, 100% local audio transcription and subtitling suite with a full-featured web UI.
- 🗣️ Transcribe any media to text: audio, video, etc.
- Transcribe from URLs (any source supported by yt-dlp).
- Upload a file to transcribe.
- 📥 Download transcriptions in many formats: TXT, JSON, VTT, SRT or copy the raw text to your clipboard.
- 🌐 Translate your transcriptions to any language supported by Libretranslate.
- 🤖 Translate subtitle tracks with an OpenAI-compatible LLM for context-aware subtitle localization.
- ✍️ Powerful subtitle editor so you don't need to leave the UI!
- Transcription highlighting based on media position.
- CPS (Characters per second) warnings.
- Segment splitting.
- Segment insertion.
- Subtitle language selection.
- 🏠 100% Local: transcription, translation and subtitle edition happen 100% on your machine (can even work offline!).
- 🚀 Fast: uses FasterWhisper as the Whisper backend: get much faster transcription times on CPU!
- 👍 Quick and easy setup: use the quick start script, or run through a few steps!
- 🔥 GPU support: use your NVIDIA GPU to get even faster transcription times!
- 🐎 CPU support: no GPU? No problem! Whishper can run on CPU too.
- Local folder as media input (#15).
- Full-text search all transcriptions.
- User authentication.
- Audio recording from the browser.
- Add insanely-fast-whisper as an optional backend (#53).
-
Support for GPU acceleration.- Non NVIDIA GPU support. Is it possible with faster-whisper?
- Can we do something with seamless_communication?
Whishper is a collection of pieces that work together. The three main pieces are:
- Transcription-API: This is the API that enables running Faster-Whisper. You can find it in the
transcription-apifolder. - Whishper-Backend: This is the backend that coordinates frontend calls, database, and tasks. You can find it in
backendfolder. - Whishper-Frontend: This is the frontend (web UI) of the application. You can find it in
frontendfolder. - Translation (3rd party): This is the libretranslate container that is used for translating subtitles.
- MongoDB (3rd party): This is the database that stores all the information about your transcriptions.
- Nginx (3rd party): This is the proxy that allows running everything from a single domain.
Contributions are welcome! Feel free to open a PR with your changes, or take a look at the issues to see if there is something you can help with.
Check out the development documentation here.
Whishper can translate extracted subtitle tracks through an OpenAI-compatible chat completions API. Configure the backend with:
LLM_TRANSLATION_ENDPOINT=http://ollama:11434/v1/chat/completions
LLM_TRANSLATION_MODEL=qwen2.5:14b
LLM_TRANSLATION_API_KEY=
LLM_TRANSLATION_TIMEOUT_SECONDS=120
LLM_TRANSLATION_CHUNK_SIZE=60
LLM_TRANSLATION_CONCURRENCY=3
LLM_TRANSLATION_MAX_RETRIES=5
# LLM_TRANSLATION_SESSION_HISTORY_CHUNKS=1For troubleshooting, run the backend with -dev and set LLM_TRANSLATION_DEBUG_IO=true to log raw LLM request and response bodies. This can include subtitle text, context, and terminology, so only enable it when debugging locally.
Set LLM_TRANSLATION_SESSION_HISTORY_CHUNKS to a positive number to include recent chunk source/translation pairs as chat history for better terminology consistency. This mode runs chunks sequentially and increases token usage, so it is disabled by default.
In the translation dialog, choose a subtitle track as the source, select LLM as the translation engine, enter a target language such as zh-CN, and optionally provide context or terminology. The translated subtitles are saved as a normal subtitle-track translation, so they can be edited and downloaded from the existing UI.
These screenshots are available on the official website, click any of the following links to see:
- Monero:
82x6cn628oTUXV63DxBd6MJB8d997FhaSaGFvoWMgwihVmgiXYQPAwm2BCH31AovA9Qnnv1qQRrJk83TaJ8DaSZU2zkbWfM - Bitcoin:
bc1qfph44jl4cy03stwfkk7g0qlwx2grldr9xpk086 - Lightning Network (kycnotme)
