Voice Memos Backups

The voice-memos job type backs up the macOS recording store and produces private JSON transcripts, summaries, tags, indexes, and speaker diarization. There is no separate Voice Memos Makefile.

jobs:
  - job-id: memos
    type: voice-memos
    restic-repository-ids: [personal-b2]
    source: {}

An empty source uses the standard recordings directory and managed summaries. Use source.recordings-dir or source.summaries-dir to override either path.

Run without a Voice Memos subcommand to open a described arrow-key menu of all user-facing operations:

uv run restic-backups voice-memos

After selecting a command, the menu shows its usage, accepts optional arguments, prints the complete copyable command, and shows a final options checkbox. Press Enter to run, select Print only to stop after printing, or select Dry run when the command supports it. Escape moves back one level. Explicit subcommands remain available for scripts.

When a Voice Memos job has several Restic destinations, the TUI asks which repository to inspect or restore before showing the final command. Batch jobs must pass it explicitly, for example:

uv run restic-backups voice-memos snapshots --repository personal-b2

Set RESTIC_BACKUPS_CONFIG first; set RESTIC_BACKUPS_SOPS=1 too when the file is SOPS-encrypted. See Configuration.

Requirements

  • Give the terminal Full Disk Access.
  • Open Voice Memos and wait for iCloud synchronization.
  • Run LM Studio at http://localhost:1234/v1 when producing summaries.
  • Configure a Hugging Face token source for speaker diarization, or set HF_TOKEN directly.

The default recording source is:

~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings

Safe routine

uv run restic-backups voice-memos status
uv run restic-backups job run memos
uv run restic-backups voice-memos transcribe
uv run restic-backups job run memos
uv run restic-backups voice-memos check
uv run restic-backups voice-memos restore latest --target /tmp/voice-memos-restore

The second backup captures newly generated summaries. Verify a restore before deleting recordings from any device; iCloud synchronization is not a backup.

Commands

Command Purpose
snapshots List repository snapshots
check Verify repository structure and metadata
stats Show latest tagged snapshot size and file count
files [SNAPSHOT] List files in a snapshot
restore [SNAPSHOT] --target DIR Restore a snapshot
get UUID [--restore] Resolve a summary to its recording and reveal it
transcribe Incrementally transcribe and summarise
status Count processed, pending, stale, and errored memos
diarize Add speakers to existing transcript segments
diarize-parallel Split pending diarization across worker processes
dashboard [LOG_DIR] Watch parallel worker progress
diarize-status Count transcripts with and without speakers
migrate-layout Move flat JSON records into monthly directories
prune-index Remove index entries whose JSON is missing
rebuild-index Rebuild the index from JSON records on disk
peek Inspect the Voice Memos database schema

Run uv run restic-backups voice-memos COMMAND --help for exact options.

Transcription variants

# Incremental transcription and summaries
uv run restic-backups voice-memos transcribe

# Reprocess all memos or selected UUIDs
uv run restic-backups voice-memos transcribe --all
uv run restic-backups voice-memos transcribe --uuids ABC-123,DEF-456

# Reuse transcripts for new summaries, or omit summaries entirely
uv run restic-backups voice-memos transcribe --summary-only --all
uv run restic-backups voice-memos transcribe --no-summary

# Force retranscription
uv run restic-backups voice-memos transcribe --all --no-summary --force

The available engines are whisper-mlx and whisper-mlx-turbo.

Parallel diarization

export HF_TOKEN=hf_...
uv run restic-backups voice-memos diarize-parallel --workers 3 --dashboard

To keep the credential in a SOPS-encrypted job definition, configure it as an inline token:

source:
  authentication:
    hugging-face:
      token: CHANGE_ME

Use SOPS to set and encrypt that value. {env: HF_TOKEN} and {file: /var/run/secrets/hugging-face/token} remain available for containers and Kubernetes workloads. This credential is used only by diarize and diarize-parallel.

Workers write logs beneath a temporary diarize-chunks-* directory. Use --detach to leave them running without the dashboard, then attach with:

uv run restic-backups voice-memos dashboard

Generated data

The CLI derives the summary directory from the selected voice-memos job. All generated JSON and indexes remain beneath that ignored private directory.