Skip to content

Sinsajo — Real-Time Local Voice Transcription

powered by WebSocket

Self-hosted, Open Source, 100% offline voice transcription. Real-time, low latency, complete privacy.

No cloud. No tracking. Everything runs locally. Models are downloaded from HuggingFace once and then run 100% offline via ONNX Runtime.

Real-time

~150–300ms end-to-end latency. See text as you speak, with Voice Activity Detection (Silero VAD v5) sending only speech segments.

100% Private

Self-hosted Rust server. No API keys, no cloud. Your audio never leaves your network. Optional local WAV/OGG recording.

Multi-platform

Flutter client for Android, iOS, Desktop and Web. Rust server runs anywhere — Docker, bare metal, VPS.

Multi language

Multi-language target selection (en/es/fr/de/pt). English via Parakeet, translation via Canary.

┌─────────────────┐ WebSocket ┌──────────────────┐
│ Flutter Client │ ◄─────────────────────────►│ Rust Server │
│ (Dart/Silero) │ PCM 16-bit / JSON │ (transcribe-rs) │
└─────────────────┘ └──────────────────┘
│ │
│ Silero VAD v5 │ ONNX Model
│ (ONNX Runtime) │
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ AudioService │ │ Canary 180M │
│ + vad package │ │ Flash / │
│ (ML-based) │ │ Parakeet TDT │
└─────────────────┘ └──────────────────┘
  1. Capture — Flutter records PCM 16-bit @ 16kHz
  2. Detect — Silero VAD v5 detects speech (ONNX Runtime)
  3. Transmit — Only speech chunks sent over WebSocket
  4. Transcribe — Rust server runs Canary 180M Flash or Parakeet TDT 0.6B (Int8)
  5. Display — Real-time text + optional server-side WAV/OGG recording

Best for a Linux server or homelab. Models and recordings are persisted in volumes.

docker-compose.yml
services:
sinsajo-server:
image: lutgaru/sinsajo-server:latest
ports: ["8765:8765"]
volumes:
- sinsajo_models:/app/models
- sinsajo_records:/app/records
restart: unless-stopped
volumes:
sinsajo_models:
sinsajo_records:
Terminal window
docker compose up -d
# -> ws://localhost:8765 (auto-downloads ~2-3GB model on first run)

Fastest way to try it — nothing to install.

  1. Make sure your server is running and reachable (ws://YOUR_SERVER_IP:8765)
  2. Open the Web AppTry Web App
  3. In Settings set the server IP, tap the mic and speak

Requires HTTPS for microphone access (GitHub Pages provides it).

Metric Value
Latency ~150–300ms chunk → text
CPU ~20–40% (1 core)
RAM ~500MB (Int8 quantized)
Accuracy ~95% clean Spanish
Bandwidth ~256KB/s (PCM, VAD reduces ~60%)

Configure target language

Pick output language in-app. Canary translates, Parakeet is English-only. Server advertises supported languages via model_info.

Save recordings

Enable save_audio in Settings — server saves WAV/OGG per session to records/ for export.

Tune VAD

Adjust thresholds in audio_service.dart for quiet rooms or noisy environments.