Skip to content

Latest commit

 

History

History
178 lines (133 loc) · 6.81 KB

File metadata and controls

178 lines (133 loc) · 6.81 KB

Configuration reference

Config file

Persistent configuration lives in ~/.config/call2notes/config.toml (Linux) or %APPDATA%/call2notes/config.toml (Windows). Override with CALL2NOTES_CONFIG.

[default] section

Key Required Description
openai_api_key Yes OpenAI API key (or compatible provider)
openai_model Yes Model name (e.g. gpt-4o-mini)
openai_base_url No Provider base URL (defaults to OpenAI)
data_dir No Data root (default: ~/.local/share/call2notes/)
device No auto (default), cpu, or cuda
summary_prompt No Path to a custom prompt markdown file. Use default.md, support.md, brainstorm.md, memo.md, or chat.md for bundled prompts (see Bundled prompts)
summary_copy_dir No Directory to copy summaries into
summary_template No Output path template (see below)
no_mic No Skip microphone capture (boolean)

[profiles.<name>] sections

Inherit all keys from [default]. Add profile-specific overrides:

Key Description
name Meeting name used when --name is not passed
identify_speakers Match speakers against embeddings.json (boolean)

Environment variables

Every key in [default] has a CALL2NOTES_<UPPERCASE_KEY> env var equivalent (e.g. CALL2NOTES_DEVICE=cpu, CALL2NOTES_SUMMARY_PROMPT=~/my-prompt.md).

Additional env vars:

Variable Description
CALL2NOTES_CONFIG Config file path (default: ~/.config/call2notes/config.toml)
CALL2NOTES_PROFILE Active profile name
CALL2NOTES_MIC_SOURCE Pin a specific mic source; on Windows use default or a device-name substring

Directory layout

<data_dir>/                      ← ~/.local/share/call2notes/ (Linux) / %LOCALAPPDATA%/call2notes/ (Windows)
├── embeddings.json              ← shared speaker embeddings
├── raw_person/                  ← enrolled speaker WAV clips (shared)
│   └── David/seg_0.0-4.2.wav
├── work-daily/                  ← auto-namespaced by profile name
│   ├── raw/
│   │   └── 20260505_1015-daily.wav
│   └── processed/
│       └── 20260505_1015-daily/
│           ├── transcript.txt
│           ├── summary.md
│           └── SPEAKER_00/
│               └── seg_0.0-4.2.wav
└── personal/                    ← another profile
    └── raw/...
  • raw/ and processed/ are per profile under <data_dir>/<profile>/
  • raw_person/ and embeddings.json are shared at the data_dir root

Bundled prompts

Call2Notes ships with these prompts in src/Call2Notes/prompts/. Reference them by filename in summary_prompt:

File Type Language Description
default.md Meeting notes EN + ES Structured bilingual meeting notes with key points, decisions, action items, offtopics, and open questions.
support.md Support / Debugging ES Technical support session notes: problem, diagnosis, root cause, solution, follow-up.
brainstorm.md Brainstorming / Ideation ES Creative session notes: ideas grouped by theme, connections, selected items, actions.
memo.md Voice memo ES Personal voice memo to structured notes: key topics, tasks, questions, reflections.
chat.md Casual conversation ES Adaptive notes for any informal conversation: catch-up, planning, emotional support, desahogo, debate, shared interests, decisions. Adapts depth and sections to conversation type.

Usage example:

[default]
summary_prompt = "support.md"

Or override per run:

call2notes summarize --prompt brainstorm.md

summary_template

Controls where summaries are saved inside summary_copy_dir.

Available variables:

Variable Example
{name} daily
{slug} daily (sanitized)
{recording_id} 20260505_1015
{date} 2026-05-05
{time} 1015
{datetime} 2026-05-05_10-15
{yyyy} 2026
{mm} 05
{dd} 05
{yyyy-mm-dd} 2026-05-05

Default: {yyyy}/{mm}/{dd}_{time}_{slug}.md

Do not use {HH:MM} — colons have special meaning in Python format strings. Use {time} instead.

Subcommands

call2notes init

Create ~/.config/call2notes/config.toml interactively. Optional --data-dir <path>.

call2notes run

Full pipeline: record → transcribe → summarize. Options: --profile, --no-mic, --name, --identify-speakers, --keep-sources.

call2notes record

Raw audio capture only. Requires --output or a profile. Options: --name, --no-mic, --profile.

call2notes transcribe

Diarize and transcribe a raw WAV. Requires --input or a profile. Options: --output, --segments-dir, --identify-speakers, --profile.

call2notes summarize

Generate a summary markdown from a transcript file. Options: --output, --recording-id, --profile.

call2notes doctor

Diagnose effective configuration, paths, device, and list configured profiles. Options: --profile.

call2notes clean

Remove intermediate artifacts. Options: --dry-run, --keep-last N, --segments-only, --raw-only, --processed-only, --from YYYY-MM-DD, --profile.

call2notes speakers collect

Name speakers from a processed directory. Arguments: input_dir. Options: --name (direct mode for a single speaker), --profile.

call2notes speakers enroll

Build or update speaker embeddings from raw_person/ directories. Options: --samples-dir, --output, --profile.

Device selection

  • auto (default): CUDA if PyTorch detects it, CPU otherwise.
  • cpu: force CPU even if CUDA is available.
  • cuda: require GPU, fail fast if unavailable.

Mic source

By default Call2Notes follows the active PulseAudio/PipeWire default source on Linux, or the default microphone selected at recording start on Windows. To pin a specific device:

CALL2NOTES_MIC_SOURCE="alsa_input.usb...source" call2notes record

On Windows, use CALL2NOTES_MIC_SOURCE="Microphone name" with a device-name substring. To find available Linux sources: pactl list sources short | grep input

Speaker naming workflow

  1. Run call2notes run with identify_speakers = false (default).
  2. After transcription, segments are grouped as SPEAKER_00, SPEAKER_01, etc.
  3. Run speakers collect on the processed directory — it reads the transcript, shows example phrases, and lets you enter names.
  4. For each named speaker, the best segments are copied to raw_person/<Name>/.
  5. Run speakers enroll to compute and save embeddings.
  6. Set identify_speakers = true in the profile for future runs.

To name a single speaker directly:

call2notes speakers collect <processed_dir>/SPEAKER_00 --name David --profile work-daily