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-memosAfter 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-b2Set 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/v1when producing summaries. - Configure a Hugging Face token source for speaker diarization, or set
HF_TOKENdirectly.
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-restoreThe 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 --forceThe 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 --dashboardTo keep the credential in a SOPS-encrypted job definition, configure it as an inline token:
source:
authentication:
hugging-face:
token: CHANGE_MEUse 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 dashboardGenerated data
The CLI derives the summary directory from the selected voice-memos job. All generated JSON and indexes remain beneath that ignored private directory.