Transcribe and translate Discord voice messages.
vmt is a Discord app that transcribes voice messages and optionally translates them into 30+ languages via DeepL. It works in servers, group chats, and DMs, and can be installed to a server or to your own account.
Note
If you don't want to deploy or self-host, we run a free hosted instance that supports voice messages up to 3 minutes.
- Right-click a voice message (long-press on mobile)
- Select Apps → Select Voice Message
- Run
/transcribe, optionally passing a language to translate into
| Command | Description |
|---|---|
/transcribe [translate_to] [public] |
Transcribe the selected voice message, optionally translating it into another language |
/languages [public] |
Browse all supported translation languages and their codes |
/help [public] |
Show usage instructions and the command reference |
Responses are only visible to you by default; set public: true to post them to the channel.
Voice messages are decoded with pydub (via FFmpeg) and transcribed with ElevenLabs Scribe when an API key is configured, falling back to Google Speech Recognition through SpeechRecognition otherwise. Translations use the DeepL API.
Every clip is checksummed and cached in a libsql database (a local file by default, or Turso remotely), so the same voice message is never transcribed twice — and cache hits never count against usage quotas. Optional per-user daily quotas (in seconds of audio) keep public instances abuse-proof.
| Path | Description |
|---|---|
apps/bot |
The Discord bot — Python, managed with uv |
apps/web |
vmt.sh — Astro + React site |
- Go to the Discord Developer Portal and create a new application
- Under Installation → Installation Contexts, enable both User Install and Guild Install
- Under Installation → Default Install Settings, add the
applications.commandsscope to both install contexts - Under Bot → Privileged Gateway Intents, enable Message Content Intent (required to read voice message attachments)
- Copy your bot token from the Bot page — you'll need it for the environment variables
- Copy the install link from the Installation page to add the app to your account or server
| Variable | Description |
|---|---|
BOT_TOKEN |
Your Discord bot token from the Developer Portal |
DEEPL_API_KEY |
Your DeepL API key |
DEEPL_FREE_API |
Set to true if using DeepL's free tier (it uses a separate endpoint, api-free.deepl.com); defaults to false |
ELEVENLABS_API_KEY |
Optional. ElevenLabs key for Scribe transcription; unset falls back to free Google Speech Recognition |
TURSO_DATABASE_URL |
Optional. Remote Turso database URL; unset uses a local file at data/vmt.db |
TURSO_AUTH_TOKEN |
Optional. Auth token for the Turso database |
DAILY_LIMIT_SECONDS |
Optional. Per-user daily audio quota in seconds; unset means unlimited |
MAX_VOICE_MESSAGE_DURATION |
Maximum voice message duration in seconds (default: 60) |
git clone https://github.com/antifield/vmt.git
cd vmt
# copy env, fill in credentials
cp apps/bot/.env.example apps/bot/.env
docker compose up -dThe compose file persists the local database to ./data.
This repository deploys to Railway in one click, with a volume mounted at /app/data so the local database survives redeploys. Signing up through our link also grants you $20 in Railway credits.
If you deploy to Railway manually instead of via the template, attach a volume at /app/data and set RAILWAY_RUN_UID=0 (Railway mounts volumes as root, and the container runs as a non-root user). Setting TURSO_DATABASE_URL skips the need for a volume entirely.
You'll need Python 3.13+, uv, and FFmpeg:
- macOS:
brew install ffmpeg - Ubuntu/Debian:
sudo apt-get install ffmpeg - Windows: download from ffmpeg.org, or
choco install ffmpegvia Chocolatey
git clone https://github.com/antifield/vmt.git
cd vmt/apps/bot
# copy env, fill in credentials
cp .env.example .env
uv run python -m vmtThe vmt.sh site lives in apps/web (Astro + React + Tailwind):
cd apps/web
bun install
bun run devantifield/vmt is licensed under the GNU General Public License v3.0. Authored by @dromzeh <marcel@antifield.com>.
You must state all significant changes made to the original software, make the source code available to the public with credit to the original author, original source, and use the same license.
© 2023–2026 Antifield LTD | Registered UK Company No. 15988228 | ICO Reference No. ZB857511