Skip to content

Latest commit

 

History

History
322 lines (256 loc) · 15.5 KB

README.de.md

File metadata and controls

322 lines (256 loc) · 15.5 KB

CallNotes — aus Anrufen werden Notizen. Automatisch.

🇬🇧 English  ·  🇩🇪 Deutsch

CallNotes

Du telefonierst am Mac — CallNotes nimmt beide Seiten als getrennte Spuren auf, transkribiert lokal mit Whisper, trennt die Sprecher und legt dir eine fertige, KI-zusammengefasste Notiz ab, wo du willst. Vollautomatisch, aus der Menüleiste.

macOS 14.2+ on-device Lizenz Windows-Version

🪟 Auf Windows? Es gibt ein experimentelles Schwesterprojekt: callnotes-windows


Warum es das gibt

Jedes Call-Recording-Tool braucht entweder einen virtuellen Audio-Treiber (BlackHole/Loopback), einen sichtbaren Meeting-Bot oder ein Cloud-Abo. CallNotes nicht:

  • Core-Audio Process Taps (macOS 14.2+) greifen das Systemaudio nur der Call-App ab — die Gegenseite landet auf ihrer eigenen Spur, Hintergrundmusik nicht.
  • Dein Mikrofon läuft parallel — zwei getrennte Spuren bedeuten perfekte Sprecher-Zuordnung bei 1:1-Anrufen, ganz ohne KI-Raterei.
  • Bei Konferenzen trennt eine lokale Sprecher-Diarisierung (sherpa-onnx) den Mix der Gegenseite in „Sprecher 1..N" — Namen ordnest du per Hör-Schnipsel und Dropdown zu.
  • Transkription läuft on-device — whisper.cpp (Metal) oder NVIDIA Parakeet TDT v3 (die schnellste Option, 25 EU-Sprachen, keine Wiederholungsschleifen) — oder über die Groq-API, wenn du Cloud-Tempo willst. Ein Schalter.
  • KI deiner Wahl für die Zusammenfassung: Claude Code (Standard), jede OpenAI-kompatible API (OpenAI, Groq, OpenRouter) oder komplett lokal via Ollama — oder ganz ohne.

Was du nach dem Auflegen bekommst

Eine fertige Markdown-Notiz, etwa eine Minute später:

  • Kurzfassung, besprochene Punkte, Zusagen & To-dos, offene Fragen (Claude, optional — Sektionen frei wählbar, inklusive Follow-up-Mail-Entwurf)
  • Dialog-Transkript mit Sprechern („Ich: … / Gesprächspartner: …") mit Zeitstempeln
  • Stereo-Audio-Archiv (links = du, rechts = Gegenseite)
  • Abgelegt im Notizen-Ordner (Obsidian-tauglich), optional zusätzlich in Apple Notes, Nextcloud, Notion, gespiegelt auf eine externe Festplatte, plus ntfy-Push aufs Handy

So funktioniert es

So funktioniert CallNotes — vom erkannten Anruf zur Markdown-Notiz

Die Menüleisten-App

Alles sitzt in der Menüleiste (Telefon-Symbol):

  • Live-Ansicht im Anruf — zwei animierte Pegel-Spuren (du + Gegenseite), Anruf-Timer, und ein Popup zum Eintragen der Teilnehmer-Namen, solange du sie noch im Kopf hast
  • Verarbeitungs-Status nach dem Auflegen (Transkription → Sprecher-Erkennung → KI)
  • Sprecher-Zuordnung bei Konferenzen: Hör-Schnipsel je erkannter Stimme abspielen, Name im Dropdown wählen (die KI schlägt Namen vor, die im Gespräch fielen)
  • Letzte Anrufe, Speicherorte (inkl. externer Platte), API-Keys, Integrationen
  • Ersteinrichtungs-Assistent, eingebauter Hilfebereich und ein ⓘ neben jedem Feld — du musst nie raten, was eine Einstellung tut
  • Live-Mikro-Monitor — das Panel zeigt in Echtzeit, welche App gerade dein Mikrofon nutzt, auch eine, die nicht in deiner Anruf-Liste steht (z. B. ein Browser). Ein Klick auf „Diese App immer aufnehmen“ nimmt sie auf — ab dann werden auch Browser-Calls mitgeschnitten.
  • Deutsch & Englisch — die App folgt automatisch deiner Systemsprache

CallNotes Menüleisten-App — Live-Pegel, Sprecher-Zuordnung, Einstellungen

Installation

1. Abhängigkeiten (Homebrew + Xcode Command Line Tools):

brew install whisper-cpp ffmpeg

2. Klonen & installieren:

git clone https://github.com/michaelczesun/callnotes && cd callnotes
./install.sh

Das baut CallNotes.app nach /Programme (die Einstellungs- & Status-App — im Programme-Ordner zu finden bzw. als Telefon-Symbol in der Menüleiste) und den unsichtbaren Aufnahme-Helfer calltap.app nach ~/Applications (nicht verschieben — die Aufnahme-Freigaben hängen daran). Außerdem werden die Sprecher-Modelle (~35 MB) eingerichtet, ~/.config/callnotes/config.json angelegt und beide Hintergrund-Dienste gestartet.

3. Whisper-Modell (einmalig, ~550 MB — auf 8-GB-Macs reicht auch ggml-small.bin):

mkdir -p ~/models && curl -L -o ~/models/ggml-large-v3-turbo-q5_0.bin \
  https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo-q5_0.bin

4. Freigaben — einmal machen. Telefon-Symbol in der Menüleiste anklicken; beim ersten Start öffnet sich der Einrichtungs-Assistent (später: Einstellungen → Ersteinrichtung erneut starten). Im Schritt Freigaben auf „Freigaben jetzt anfordern & prüfen" klicken — die zwei macOS-Dialoge erscheinen (Mikrofon + Systemaudio-Aufnahme für „calltap"), beide erlauben, der Button bestätigt mit grünem Haken. Wichtig: calltap taucht in den Systemeinstellungs-Listen erst nach dieser ersten Anfrage auf — das ist macOS-Verhalten, kein fehlender Eintrag.

5. Testanruf (länger als 20 Sekunden) — etwa eine Minute nach dem Auflegen liegt die Notiz im Notizen-Ordner. Neugierig? tail -f ~/CallNotes/log/process.log.

Später aktualisieren: cd callnotes && git pull && ./install.sh — Einstellungen und Notizen bleiben erhalten.

Deinstallation

./uninstall.sh          # entfernt Dienste + Apps; Notizen, Config & Modelle bleiben
./uninstall.sh --purge  # entfernt zusätzlich Arbeitsdaten, Config, venv und Modelle

Dein Notizen-Ordner wird nie angetastet.

Unterstützte Call-Apps

FaceTime, iPhone-Anrufe via Continuity, WhatsApp, Zoom, Teams, Signal, Telegram, Discord — alles, was das Mikrofon nutzt. Die Allowlist steht in der Config; die Bundle-ID jeder App findest du mit calltap procs --watch während eines Anrufs (unbekannte Apps landen automatisch im Log).

Konfiguration

Alles liegt in ~/.config/callnotes/config.json — oder du nutzt einfach die Einstellungen in der Menüleiste. Die wichtigsten Felder:

Unter Einstellungen → Anruf-Liste lassen sich Einträge ein- und ausschalten. Die Schalter speichern automatisch. Der Recorder übernimmt Änderungen im Leerlauf innerhalb weniger Sekunden oder nach Ende der laufenden Aufnahme. Deaktivierte Einträge bleiben auch nach einem App-Neustart sichtbar. Die Liste bekannter Apps aktiviert keine neuen Apps automatisch. Neue Apps lassen sich im Mikrofon-Monitor über Diese App immer aufnehmen hinzufügen. Ein abschließendes * erfasst verwandte Prozesse; ein anderes aktiviertes Muster kann dieselbe App weiterhin erfassen. Andere Einstellungen werden weiterhin über Speichern & Neustart übernommen.

Regressionstests: bash tests/run-recording-apps.sh (Xcode Command Line Tools nötig; Tests verwenden temporäre Konfigurationen und starten keine Aufnahme).

Die gewählte Oberflächensprache gilt auch für Fortschrittsmeldungen, Standard-Sprecherlabels, Fehlermeldungen und Benachrichtigungen. Sie ist unabhängig von der Transkriptions- und Notizsprache (language). Vorhandene Statusmeldungen und Sprecherlabels werden für die Anzeige übersetzt; gespeicherte Kennungen, Notizen, Teilnehmernamen und Pfade bleiben erhalten.

Lokalisierungstests: bash tests/run-localization.sh. Benachrichtigungen werden nur lokal erfasst und nicht versendet.

Feld Bedeutung
apps Bundle-IDs, deren Mikrofon-Nutzung eine Aufnahme startet
disabledApps deaktivierte Muster für die Einstellungsansicht; keine Sperrliste
tapScope app = nur die Call-App-Familie aufnehmen (Default), global = gesamtes Systemaudio
transcriber / groqApiKey local (whisper.cpp), parakeet (am schnellsten, ./install.sh --with-parakeet) oder groq (Cloud)
summarizer (+ summarizerUrl/Model/ApiKey) claude (Claude Code CLI), openai (jede OpenAI-kompatible API inkl. Ollama/Groq/OpenRouter) oder off
noteSections welche Abschnitte die KI schreibt: Kurzfassung, Besprochen, To-dos, Follow-up-Mail
destinations zusätzliche Ablage: Apple Notes, Nextcloud (WebDAV), Notion
notesDir / audioDir / mirrorDir wohin Notizen, Audio und der Externe-Platte-Spiegel gehen
diarize / diarizeThreshold Mehrsprecher-Erkennung an/aus; Ähnlichkeits-Schwelle, Standard 0.4 (höher = mehr Sprecher)
speakerSelf / context dein Name im Transkript + ein Satz Kontext für bessere Zusammenfassungen

CLI

calltap procs [--watch]     # welche App nutzt gerade das Mikrofon?
calltap record --out DIR    # manuelle Zwei-Spuren-Aufnahme (Ctrl-C stoppt)
bash process-call.sh DIR    # eine Aufnahme (nach)verarbeiten
bash callnotes-sync.sh      # Notizen + Audio auf die externe Platte spiegeln

Wenn etwas hakt

  • Der Freigaben-Button ist grün, aber calltap fehlt in der Liste „Bildschirm- & Systemaudioaufnahme": Alles gut — auf neueren macOS-Versionen erscheinen Tap-Apps stattdessen unter „Nur Systemaudio-Aufnahme" oder trotz erteilter Freigabe gar nicht in den Listen. Die Wahrheit steht im Daemon-Log: grep "Self-Test" ~/CallNotes/log/callwatch.log — „Systemaudio-Tap ok" heißt: Aufnahme funktioniert.
  • Der Systemaudio-Dialog erscheint nie (Mikrofon-Dialog kommt) — und andere Tap-Tools scheitern auf deinem Mac genauso: Das ist ein Problem der Maschine, nicht der App. Am häufigsten auf firmenverwalteten Macs: Ein MDM-/PPPC-Profil kann Bildschirm-/Systemaudio-Aufnahme-Anfragen systemweit blockieren (prüfen: Systemeinstellungen → Allgemein → Geräteverwaltung, oder profiles list im Terminal). Auf privaten Macs kann eine verklemmte Berechtigungs-Datenbank helfen: tccutil reset ScreenCapture at.dasgeht.calltap, danach erneut über den Wizard-Button anfordern. Das Daemon-Log nennt den genauen Fehlercode: grep "Tap verweigert" ~/CallNotes/log/callwatch.log.
  • System-Spur ist stumm (-91 dB): Die Tap-API liefert bei fehlender Systemaudio-Freigabe Stille statt eines Fehlers. Prüfen: Systemeinstellungen → Datenschutz & Sicherheit → Bildschirm- & Systemaudioaufnahme → calltap.
  • Nie ein Freigabe-Dialog erschienen: calltap muss als App-Bundle über launchd laufen (ein nacktes CLI-Binary hat keine Prompt-Identität). ./install.sh macht das richtig.
  • Aufnahme startet nicht: tail -f ~/CallNotes/log/callwatch.log — steht dort „Mikro aktiv bei nicht gelisteter App", die genannte Bundle-ID in apps ergänzen.
  • Gegenseite fehlt bei Electron-Apps (WhatsApp/Discord/Teams): Der Ton läuft oft in einem Helper-Prozess; tapScope: "app" erfasst die ganze App-Familie. Wenn trotzdem etwas fehlt: "global" setzen.
  • Ausgabegerät mitten im Anruf gewechselt (AirPods verbunden): Die laufende Aufnahme kann still werden — vor dem Anruf wechseln.
  • Fehlgeschlagene Verarbeitungen liegen mit Roh-Audio in ~/CallNotes/failed/ und lassen sich mit bash process-call.sh <ordner> erneut anstoßen.

Feedback & Fragen

  • 🐛 Etwas kaputt? Ein Issue aufmachen — bitte mit deiner macOS-Version und dem, was das Panel oder ~/CallNotes/log/ gezeigt hat.
  • 💬 Fragen, Ideen oder „hat einfach funktioniert"? Ab in die Discussions — der Ort zum Kommentieren und Tipps austauschen.
  • 📋 Was hat sich je Version geändert? Siehe Changelog oder die Releases-Seite.

FAQ

Funktioniert das auch mit Browser-Calls (Google Meet, Teams-Web)?

Ja. Meet/Teams-Web/Whereby laufen im Browser, stehen also anfangs nicht in der Anruf-Liste. Sobald ein Browser-Call läuft, zeigt der Live-Mikro-Monitor im Panel das an („Chrome nutzt gerade dein Mikrofon“) samt Knopf Diese App immer aufnehmen — ein Klick, und Browser-Calls werden ab dann erfasst. Haken: Es wird dann der ganze Browser-Ton getappt — läuft in einem anderen Tab Musik, kann sie in die Aufnahme bluten; andere Tabs während des Calls stummschalten.

Läuft das auch auf Windows oder Linux?

Dieses Repo ist bewusst macOS-only (14.2+) — die treiberlose Zwei-Spuren-Aufnahme basiert auf Core-Audio-Process-Taps. Aber es gibt ein experimentelles Windows-Schwesterprojekt auf Basis von WASAPI Process Loopback mit derselben Pipeline und demselben Config-Format: callnotes-windows — per CI kompiliert, Tester gesucht. Linux (PipeWire-Streams pro App) ginge analog — öffne ein Issue, wenn du es nutzen würdest. PRs willkommen.

Warum kein App Store / signiertes Binary?

Es ist bewusst ein git clone && ./install.sh-Tool. Alles baut in Sekunden lokal; heruntergeladen werden nur die Whisper- und Diarisierungs-Modelle.

Ich habe Teams/WhatsApp geöffnet und nichts ist passiert?

Das ist so gedacht: Popup und Aufnahme starten, wenn ein Anruf wirklich läuft (die App dein Mikrofon nutzt) — nicht schon beim Öffnen der App. Ruf jemanden an und beobachte das Menüleisten-Symbol. Außerdem: CallNotes ist eine Menüleisten-App (Telefon-Symbol oben rechts) — seit 1.2.1 öffnet ein Doppelklick im Finder das Panel als Fenster, und das Panel zeigt dir, ob der Aufnahme-Dienst läuft (grüner Punkt).

Intel oder Apple Silicon?

Beides. Die Anforderung ist macOS 14.2+, nicht der Chip — Core-Audio- Process-Taps gibt es auch auf Intel-Macs. Auf Intel transkribiert Whisper ohne Metal-Beschleunigung (langsamer); dort lieber das ggml-small-Modell oder den Groq-Transcriber nehmen.

Welche Telefonie-Apps werden unterstützt?

Alles, was das Mikrofon nutzt: FaceTime, iPhone-Anrufe via Continuity, WhatsApp, Zoom, Teams, Signal, Telegram, Discord — eigene Apps nachtragen: siehe Unterstützte Call-Apps weiter oben.

Datenschutz & Recht

Standardmäßig läuft alles lokal (Whisper on-device); nur die Zusammenfassung geht — falls aktiviert — an die Claude-API, Transkription an Groq nur per Opt-in. Informiere deine Gesprächspartner über die Aufnahme. Die Rechtslage ist je Land unterschiedlich (in Österreich ist z. B. die Weitergabe heimlicher Aufnahmen strafbar, § 120 StGB; in Deutschland schon die heimliche Aufnahme, § 201 StGB). Für die rechtmäßige Nutzung bist du selbst verantwortlich.

Lizenz

PolyForm Noncommercial 1.0.0 — frei für private und nichtkommerzielle Nutzung. Verkauf und kommerzielle Nutzung sind nicht erlaubt.


🇬🇧 This page in English