root cb60172b51 fix(mac-worker): handle MLX segments as list/tuple in addition to dict
lightning-whisper-mlx returns segments as [start, end, text] lists
(not dicts) in some versions, which broke transcribe(). Normalize all
three observed shapes: str output, list/tuple segments, dict segments.
Also fall back to joining segment texts when top-level text is empty.
2026-05-13 16:00:30 +00:00

Voice-Agent

Self-hosted Transkriptions- und Protokollsystem für Sitzungsaufzeichnungen — vollständig lokal, DSGVO-konform.

Vollständiges Lastenheft: siehe need.md

Architektur

Benutzer
  │
  ▼  HTTP (Upload)
┌─────────────────────────────┐         ┌──────────────────────────────┐
│  LXC-Container              │  HTTP   │  Mac (Apple Silicon)         │
│  - FastAPI + HTML/JS UI     │ ──────► │  - FastAPI Worker            │
│  - SQLite Job-Store         │         │  - lightning-whisper-mlx     │
│  - Result-Verzeichnis       │ ◄────── │  - Ollama (llama3.1:8b)      │
│  - Nginx Reverse Proxy      │         │  - python-docx               │
└─────────────────────────────┘         └──────────────────────────────┘
  • LXC: keine AI-Verarbeitung — nur Uploads, Job-Tracking, Auslieferung.
  • Mac: Stateless API. Erhält Audio/Text, gibt Transkripte / Zusammenfassungen / Protokolle / DOCX zurück.

MVP-Funktionsumfang (v0.1)

  • Audio-Upload (MP3, WAV, M4A, MP4, OGG, FLAC, max. 500 MB)
  • Whisper-Transkription auf dem Mac
  • Ollama-Zusammenfassung (Beschlüsse, Aufgaben, Teilnehmer)
  • Strukturiertes Sitzungsprotokoll
  • DOCX-Export
  • Speaker-Diarization (Prio 2)
  • Auth / Benutzerverwaltung (Prio 2)
  • PDF-Export (Prio 2)

Schnellstart

1. Mac einrichten

Siehe mac-worker/README.md.

2. LXC provisionieren

Mit dem Toolkit-Skill /proxmox-lxc (oder manuell). Anschließend auf dem LXC:

sudo bash <(curl -sSL https://git.cynfo.net/christian/voice-agent/raw/branch/main/deploy/install.sh)

oder nach git clone:

cd /var/www/voice-agent
sudo ./deploy/install.sh

3. Konfigurieren

/var/www/voice-agent/lxc-frontend/.env öffnen und MAC_API_URL auf die LAN-IP des Macs setzen, dann:

sudo systemctl restart voice-agent

4. Verwenden

Browser auf http://<LXC-IP>/ öffnen, Audio hochladen, fertig.

Verzeichnisstruktur

voice-agent/
├── lxc-frontend/        # FastAPI Web-App (läuft im LXC)
│   ├── app/
│   ├── requirements.txt
│   └── .env.example
├── mac-worker/          # FastAPI AI-Worker (läuft auf dem Mac)
│   ├── app/
│   ├── requirements.txt
│   └── .env.example
├── deploy/              # systemd / nginx / install.sh
├── config/              # Toolkit-Konfiguration (project.env)
├── .claude/             # KI-Agenten Skills
├── need.md              # Lastenheft
└── README.md

Sicherheit

  • Vollständig lokaler Betrieb. Keine Cloud-Calls.
  • HTTPS via Reverse-Proxy ist Aufgabe der Infrastruktur (Let's Encrypt o. Ä.).
  • Mac-Worker hat keine Auth — Betrieb nur im internen Netz.
  • Uploads / Ergebnisse unter /var/lib/voice-agent/ — bei Bedarf Backup einplanen.
Description
Self-hosted AI transcription system (LXC web frontend + Mac AI worker)
Readme 525 KiB
Languages
Python 51.6%
JavaScript 23.9%
CSS 11.9%
Shell 7.7%
HTML 4.6%
Other 0.3%