feat(transcription): v0.5.0 with global speaker management and trimming

- Backend: Added global speaker rename endpoint
- Backend: Hardened JSON parsing and timestamp offsets
- Frontend: Integrated Speaker Management Bar
- Frontend: Added Trim Start/End (Scissors) and Single Line Delete
- Frontend: Fixed various TypeScript and Syntax issues
- Docs: Full documentation of v0.5.0 features
This commit is contained in:
2026-01-24 21:26:01 +00:00
parent 68f263978a
commit 281014de43
3 changed files with 259 additions and 115 deletions

View File

@@ -1,85 +1,55 @@
# Meeting Assistant (Transcription Tool)
**Version:** 0.4.0
**Status:** Beta (Functional with Editing)
**Version:** 0.5.0
**Status:** Beta (Full Content Management)
Der **Meeting Assistant** ist ein lokaler Micro-Service zur Transkription und Analyse von Audio-Dateien (Meetings, Calls, Interviews). Er kombiniert die Datensicherheit einer lokalen Datenhaltung mit der Leistungsfähigkeit von Googles **Gemini 2.0 Flash** Modell für kostengünstige, hochqualitative Speech-to-Text Umwandlung.
Der **Meeting Assistant** ist eine leistungsstarke Suite zur Transkription und Bearbeitung von Audio-Aufnahmen. Er kombiniert lokale FFmpeg-Verarbeitung mit der Gemini 2.0 Flash AI.
---
## 1. Architektur
## 1. Architektur & Stack
Der Service folgt dem "Sidecar"-Pattern im Docker-Stack und ist vollständig in das Dashboard integriert.
* **Frontend:** React (Vite + Tailwind) unter `/tr/`.
* **Backend:** FastAPI (Python) unter `/tr/api/`.
* **Processing:**
* **FFmpeg:** Zerlegt große Audio-Dateien (> 2 Stunden) in verarbeitbare 30-Minuten-Chunks.
* **Gemini 2.0 Flash:** Führt die Transkription durch und liefert strukturiertes JSON (Sprecher, Zeitstempel, Text).
* **SQLite:** Speichert Metadaten, Status und die bearbeitbaren JSON-Segmente.
* **Storage:** Lokales Docker-Volume für Audio-Uploads.
### Datenfluss
1. **Upload:** User lädt MP3 hoch -> Speicherung in `/app/uploads_audio`.
2. **Chunking:** Backend startet Background-Task -> FFmpeg erstellt Segmente.
3. **Transkription:** Loop über Chunks -> Upload zu Gemini -> JSON-Extraktion -> Offset-Berechnung -> DB-Speicherung.
4. **Assemblierung:** Das Frontend lädt alle Chunks eines Meetings und stellt sie als eine durchgehende Liste dar.
* **FFmpeg Engine:** Automatisches Splitting großer Dateien in 30-Minuten-Segmente.
* **Gemini 2.0 Flash:** AI-Transkription mit Fokus auf JSON-Struktur (Sprecher, Timestamps).
* **Structured Storage:** SQLite speichert jedes Segment als editierbares JSON-Array.
* **Unified UI:** Das Frontend fügt alle Segmente zu einem nahtlosen Dokument zusammen.
---
## 2. API Endpunkte
## 2. Key Features (v0.5.0)
Basis-URL: `/tr/api`
### 🎙️ Intelligente Transkription
* Unterstützt MP3/WAV bis 500MB.
* Native Sprechererkennung und Zeitstempel-Normalisierung über Segmentgrenzen hinweg.
### 👥 Globales Sprecher-Management
* **Speaker Bar:** Eine Übersicht aller im Dokument gefundenen Sprecher.
* **Global Rename:** Mit einem Klick kann ein Sprecher (z.B. "Speaker A") im gesamten Dokument dauerhaft umbenannt werden (z.B. "Thomas").
### ✂️ Präzises Schneiden (Trimming)
* **Trim Start:** Löscht alles *vor* einer ausgewählten Zeile (ideal zum Entfernen von Vorgesprächen).
* **Trim End:** Löscht alles *nach* einer ausgewählten Zeile (entfernt Verabschiedungen).
* **Single Line Delete:** Einzelne Zeilen oder Störgeräusche können individuell entfernt werden.
### 📝 Editor & Export
* **Inline-Edit:** Jeder Textblock und jeder Sprechername kann durch direktes Anklicken korrigiert werden.
* **Copy Full Transcript:** Kopiert das gesamte, bereinigte Transkript inkl. Timestamps in die Zwischenablage.
---
## 3. API Endpunkte
| Methode | Pfad | Beschreibung |
| :--- | :--- | :--- |
| `GET` | `/meetings` | Liste aller Meetings inkl. Status. |
| `POST` | `/upload` | Upload einer Audio-Datei (`multipart/form-data`). |
| `GET` | `/meetings/{id}` | Lädt Meeting-Details inklusive aller Text-Chunks (JSON). |
| `DELETE` | `/meetings/{id}` | Löscht ein Meeting inkl. Dateien komplett. |
| `PUT` | `/chunks/{id}` | Aktualisiert den Inhalt (Text/Sprecher) eines spezifischen 30-Min-Chunks. |
| `GET` | `/meetings` | Liste aller Meetings. |
| `POST` | `/upload` | Audio-Upload & Prozess-Start. |
| `POST` | `.../rename_speaker` | **Neu:** Globale Umbenennung in der DB. |
| `PUT` | `/chunks/{id}` | Speichert manuelle Text-Korrekturen. |
| `DELETE` | `/meetings/{id}` | Vollständiges Löschen. |
---
## 3. Datenbank Schema (SQLite)
## 4. Roadmap
Datei: `transcripts.db`
### `meetings`
* `id`: PK
* `title`, `status`, `duration_seconds`, `file_path`.
### `transcript_chunks`
* `id`: PK
* `meeting_id`: FK
* `chunk_index`: 0, 1, 2...
* `raw_text`: Backup des rohen Gemini-Outputs.
* `json_content`: **JSON** (Editierbar). Struktur: `[{ "time": "MM:SS", "absolute_seconds": 120, "speaker": "A", "text": "..." }]`
---
## 4. Features & Bedienung
### Transkription
* Upload von MP3/WAV Dateien (bis 500MB).
* Automatische Erkennung von Sprechern (Speaker A, Speaker B).
### Editor-Modus (v0.4)
* **Inline Editing:** Klicken Sie auf einen Sprechernamen oder Text, um ihn direkt zu bearbeiten. Änderungen werden sofort gespeichert.
* **Zeilen Löschen:** Fahren Sie mit der Maus über eine Zeile und klicken Sie auf das rote "X", um irrelevante Teile (z.B. Smalltalk) zu entfernen.
* **Sprecher-Aliasing (Ansicht):** Klicken Sie auf den blauen Sprechernamen ("Speaker A"), um ihn für die *aktuelle Sitzung* umzubenennen (z.B. in "Thomas"). *Hinweis: Dies ändert aktuell nur die Ansicht, nicht die Datenbank für alle Zeilen.*
---
## 5. Roadmap / Next Steps
* **v0.5: Global Rename:** Button "Alle 'Speaker A' dauerhaft in DB umbenennen".
* **v0.6: AI Analysis:** "Erstelle Meeting Notes" Button basierend auf dem korrigierten Transkript.
* **v0.7:** Export als Word/PDF.
---
## 6. Troubleshooting
* **Legacy Format:** Bei Dateien, die vor v0.3 hochgeladen wurden, erscheint ein Warnhinweis. Bitte neu hochladen, um die Editier-Funktionen zu nutzen.
* **Upload bricht ab:** Prüfen Sie die Dateigröße (< 500MB).
* **v0.6: AI Insights:** Extraktion von Aufgaben (Action Items) und Zusammenfassungen per Button.
* **v0.7: Search:** Globale Suche über alle Transkripte hinweg.