Skip to content

Repository files navigation

Call2Notes

Record calls, diarize speakers with NVIDIA NeMo, transcribe with NVIDIA Parakeet, and summarize with any OpenAI-compatible LLM.

Install

Requires Python 3.13. Recording uses PipeWire on Linux and WASAPI loopback on Windows.

# From source (clone or local copy)
uv tool install .

# From GitLab directly (no clone needed)
uv tool install git+https://gitlab.com/dmmop/call2notes.git

# Run without installing (ephemeral)
uvx call2notes

See docs/troubleshooting.md if installation fails.

Quick start

# 1. Create config (prompts for API keys)
call2notes init

# 2. Run the full pipeline
call2notes run --profile work-daily

# 3. Name speakers collected during transcription
call2notes speakers collect <data-dir>/work-daily/processed/<recording>/
call2notes speakers enroll --profile work-daily

After enrolling, enable identify_speakers = true in your profile to automatically name known speakers in future transcriptions.

Configuration

The CLI reads ~/.config/call2notes/config.toml on Linux or %APPDATA%/call2notes/config.toml on Windows by default. Minimal example:

[default]
openai_api_key = "sk-..."
openai_model = "gpt-4o-mini"

[profiles.work-daily]
name = "daily"
identify_speakers = true

Precedence: CLI flags > environment variables > profile > [default] > built-in defaults.

Summary templates

Call2Notes includes prompt templates for different kinds of recordings. Choose one per profile with summary_prompt, or select it in the GUI before processing.

Template Use it for
default Standard meetings: attendees, summary, key points, decisions, open questions, action items and next steps. Best default for work calls.
brainstorm Brainstorming sessions where capturing all ideas matters more than filtering them. Groups ideas, connections, selected options and follow-up actions.
chat Informal conversations, catch-ups, planning chats, emotional support, debates or mixed personal conversations. Adapts sections to the conversation type.
memo Solo voice notes or quick personal memos. Extracts themes, pending tasks, questions, related people/projects/dates and personal reflections.
support Technical support or debugging sessions. Focuses on problem, environment, diagnosis, root cause, applied solution, workarounds and follow-up.

Example:

[profiles.support]
summary_prompt = "~/call2notes-prompts/support.md"
Advanced options
Option Description
device auto (CUDA if available), cpu, or cuda
summary_template Path template — variables: {name}, {slug}, {date}, {time}, {datetime}, {yyyy}, {mm}, {dd}, {yyyy-mm-dd}
no_mic Record system audio only
CALL2NOTES_MIC_SOURCE Pin a specific mic source; on Windows use default or a device-name substring
--data-dir Override data directory via call2notes init --data-dir <path>

Each profile gets isolated raw/ and processed/ dirs under data_dir/<profile>/. raw_person/ and embeddings.json are shared at the data_dir root.

See docs/configuration.md for the full reference.

Directory layout (Linux shown; Windows uses %LOCALAPPDATA%/call2notes/)

<data-dir>/
├── raw_person/David/seg_*.wav    ← speaker samples (shared)
├── embeddings.json               ← speaker embeddings (shared)
└── <profile>/
    ├── raw/<id>.wav
    └── processed/<id>/
        ├── transcript.txt
        ├── summary.md
        └── SPEAKER_*/seg_*.wav
  • Linux: ~/.local/share/call2notes/
  • Windows: %LOCALAPPDATA%/call2notes/ (e.g. C:\Users\<you>\AppData\Local\call2notes\)

Common commands

Command What it does
call2notes run Record → transcribe → summarize
call2notes doctor Diagnose config, paths, device
call2notes clean Remove old artifacts (WAVs, segments)
call2notes speakers collect <dir> Assign names to diarized speakers
call2notes speakers enroll Build shared speaker embeddings

Cleanup

call2notes clean --dry-run                 # preview
call2notes clean --keep-last 10            # keep 10 most recent raw WAVs
call2notes clean --segments-only           # remove segments, keep WAVs
call2notes clean --keep-last 0             # remove all raw + segments

Transcripts and summaries are never removed.

Manual recovery

call2notes transcribe <raw.wav> --profile <name>
call2notes summarize <transcript.txt> --recording-id <id> --profile <name>

About

Record calls, diarize speakers, transcribe audio, and summarize conversations with OpenAI-compatible LLMs.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages