Discord meetings, recorded & written up.
Scriber joins your voice channel, records per-speaker audio, transcribes it locally with Whisper (or the cloud engine you pick), and writes structured Markdown minutes.
Self-hostable in a single container. By default audio never leaves your machine — only the finished transcript is sent to the AI provider you choose (or to nothing at all, with a local model).
A complete meeting pipeline, self-hosted
From a slash command in Discord to polished minutes and a searchable dashboard — nothing leaves your infrastructure that you don't allow.
One-command recording
/scriber start, /scriber stop, /scriber cancel. Scriber joins your voice channel and records per-speaker audio with timestamps.
Transcription, your way
Speech is transcribed on your own server with faster-whisper by default — or by Mistral Voxtral, ElevenLabs Scribe, or Google Chirp, with automatic fallback to local Whisper.
Meeting audio & re-transcription
Keep each meeting's audio (with automatic expiration you control), replay or download it, regenerate the transcript with another engine, and compare versions side by side.
AI minutes, your provider
Structured Markdown minutes via Anthropic, OpenAI, or any OpenAI-compatible endpoint (Ollama, vLLM, LM Studio, LocalAI).
Provider failover
Configure an ordered list of providers. If the first fails, Scriber automatically falls over to the next — and never loses the transcript.
Consent-first recording notice
When recording starts, Scriber posts a notice naming the model and the exact AI target, so everyone can leave before being recorded.
Admin dashboard
Vue 3 dashboard: stats, meeting history, transcript/summary editor, participants with avatars & memory, and live settings.
Per-participant memory
A per-user Markdown memory keeps names of people and projects spelled correctly across meetings, injected into the summary prompt.
REST API
Create scoped API tokens and read (or write) meetings, participants and memories over HTTP with a Bearer token. API docs →
Single container
Bot and dashboard run in one process; all state lives under data/. A Discord hiccup never takes the dashboard down.
Private by design
By default audio is transcribed locally and kept only on your server, with automatic expiration. With a self-hosted summary model, no meeting data leaves your machine at all.
Three commands, zero fuss
Everything happens from Discord. Scriber also stops on its own when it's left alone or hears nothing for two minutes.
/scriber start
Join your voice channel and run it. Scriber joins, posts the recording notice, and transcribes per-speaker audio while you talk — locally by default.
/scriber stop
Scriber leaves, finishes transcribing, sends the transcript to your summary provider, and posts the Markdown minutes in the channel.
/scriber cancel
Leaves the channel and discards everything recorded so far. No transcript kept, nothing sent anywhere.
Auto-stop
If everyone leaves the channel, or nothing is said for 2 minutes, Scriber finishes on its own — exactly like stop.
The data path
Discord voice
Per-speaker Opus audio
Whisper (local)
Transcribed on your server (default)
Transcript
Text saved to data/
AI summary
Your provider → minutes
By default, audio never leaves your machine. Only the finished transcript is sent once to the summary provider you configure — and with a self-hosted model, not even that.
Browse, edit and configure — all in one place
A built-in admin dashboard served from the same container. (Faithful UI previews below.)
Meetings per day
| Started | Channel | Status |
|---|---|---|
| Jul 6, 14:02 | Standup | completed |
| Jul 6, 11:30 | Design sync | summarizing |
| Jul 5, 16:45 | Roadmap | completed |
| Name | Sessions | Last session | |
|---|---|---|---|
| AL | Alex Lindgren | 24 | Jul 6, 2026 |
| PR | Priya Raman | 18 | Jul 6, 2026 |
| JK | Jonas Krause | 15 | Jul 5, 2026 |
| ? | newcomer_42 | 1 | Jul 5, 2026 |
.env.Meeting minutes
The team agreed to ship the avatar column and finalize the docs site.
Decisions
- Adopt MIT license for the public release.
- Publish the docs site from
/docs.
Action items
- Priya: capture real screenshots.
These are recreated UI previews. To show your own instance, drop PNGs into
docs/screenshots/ — see the
screenshots readme.
Running in a few minutes
You need a Discord bot token and at least one AI provider key. The full walkthrough is in the setup guide.
# 1. Get the code
git clone https://github.com/lp177/Scriber.git
cd Scriber
# 2. Configure — set DISCORD_TOKEN and one SUMMARY_PROVIDER block
cp .env.example .env
$EDITOR .env
# 3. Build & run (Docker or Podman)
docker compose up -d
# 4. Open the dashboard
# http://localhost:8080 (login with ADMIN_USERNAME / ADMIN_PASSWORD)
Local-first, consent-first
Audio stays put
Voice is transcribed locally by default, and kept meeting audio stays on your server with an expiration you control (or disable keeping entirely for text-only).
One outbound payload
Only the finished transcript is sent, once, to your chosen summary provider. Use a local model and nothing leaves at all.
Cancel means gone
/scriber cancel discards everything recorded so far. Delete a meeting from the dashboard to remove its files and row.