Self‑hosted, offline transcription — transcribe audio, summarize, annotate, and build on a clean REST API.
Website • Docs • API Reference • Changelog
Scriberr is a self‑hosted offline transcription app for converting audio into text. Record or upload audio, get it transcribed, and quickly summarize or chat using your preferred LLM provider. Scriberr runs on modern CPUs (no GPU required, though GPUs can accelerate processing) and offers a range of trade‑offs between speed and transcription quality.
- Built with React (frontend) and Go (backend), packaged as a single binary
- Uses WhisperX with open‑source Whisper models for accurate transcription
- Clean, distraction‑free UI optimized for reading and working with transcripts
- Accurate transcription with word‑level timing
- Speaker diarization (identify and label speakers)
- Transcript reader with playback follow‑along and seek‑from‑text
- Highlights and lightweight note‑taking (jump note → audio/transcript)
- Summarize and chat over transcripts (OpenAI or local models via Ollama)
- Transcription profiles for re‑usable configurations
- YouTube video transcription (paste a link and transcribe)
- Quick transcribe (ephemeral) and batch upload
- REST API coverage for all major features + API key management
- Download transcripts as JSON/SRT/TXT (and more)
Show screenshots
Minimal transcript reader with playback follow‑along and seek‑from‑text.
Summarize long recordings and use custom prompts.
Generate and manage API keys for the REST API.
Transcribe audio directly from a YouTube link.
Visit the website for the full guide: https://scriberr.app/docs/installation.html
brew tap rishikanthc/scriberr
brew install scriberr
# Start the server
scriberr
Open http://localhost:8080 in your browser.
Optional configuration via .env (sensible defaults provided):
# Server
HOST=localhost
PORT=8080
# Storage
DATABASE_PATH=./data/scriberr.db
UPLOAD_DIR=./data/uploads
WHISPERX_ENV=./data/whisperx-env
# Custom paths (if needed)
UV_PATH=/custom/path/to/uv
Multiline example:
docker run -d \
--name scriberr \
-p 8080:8080 \
-v scriberr_data:/app/data \
--restart unless-stopped \
ghcr.io/rishikanthc/scriberr:latest
Docker Compose:
version: '3.9'
services:
scriberr:
image: ghcr.io/rishikanthc/scriberr:latest
container_name: scriberr
ports:
- "8080:8080"
volumes:
- scriberr_data:/app/data
restart: unless-stopped
volumes:
scriberr_data:
Then open http://localhost:8080.
Scriberr uses the open‑source pyannote models for local speaker diarization. Models are hosted on Hugging Face and require an access token (only used to download models — diarization runs locally).
-
Create an account on https://huggingface.co
-
Visit and accept the user conditions for these repositories:
- https://huggingface.co/pyannote/speaker-diarization-3.0
- https://huggingface.co/pyannote/speaker-diarization
- https://huggingface.co/pyannote/speaker-diarization-3.1
- https://huggingface.co/pyannote/segmentation-3.0
Verify they appear here: https://huggingface.co/settings/gated-repos
-
Create an access token under Settings → Access Tokens and enable all permissions under “Repositories”. Keep it safe.
-
In Scriberr, when creating a profile or using Transcribe+, open the Diarization tab and paste the token into the “Hugging Face Token” field.
See the full guide: https://scriberr.app/docs/diarization.html
Scriberr exposes a clean REST API for most features (transcription, chat, notes, summaries, admin, and more). Authentication supports JWT or API keys depending on endpoint.
- API Reference: https://scriberr.app/api.html
- Quick start examples (cURL and JS) on the API page
- Generate or manage API keys in the app
Issues and PRs are welcome. Please open an issue to discuss large changes first and keep PRs focused.
Local dev overview:
# Backend (dev)
cp -n .env.example .env || true
go run cmd/server/main.go
# Frontend (dev)
cd web/frontend
npm ci
npm run dev
# Full build (embeds UI in Go binary)
./build.sh
./scriberr
Coding style: go fmt ./...
, go vet ./...
, and cd web/frontend && npm run lint
.
Licensed under the MIT License.