E31F feat(speakers): let an owner turn voice recognition off for a namespace by adeelahmad · Pull Request #644 · adeelahmad/lense · GitHub
[go: up one dir, main page]

Skip to content

feat(speakers): let an owner turn voice recognition off for a namespace - #644

Merged
adeelahmad merged 1 commit into
mainfrom
claude/project-thread-xfmkzn
Oct 18, 2026
Merged

adeelahmad merged 1 commit into
mainfrom
claude/project-thread-xfmkzn

Conversation

@adeelahmad
Copy link
Copy Markdown
Owner

Requested by Adeel · project thread

Description

Before: every namespace kept a voiceprint for each person and matched them across recordings; there was no way to keep voices to each recording only.

After: on People, an owner can turn off "Recognise voices across recordings". Voices are still told apart inside each recording, but no voiceprint is kept and nobody is matched across recordings or namespaces. Turning it off deletes the namespace's voiceprints and the matches waiting for review (names, transcripts and who spoke when stay), so it asks once first; turning it back on recognises people in recordings diarized after that. Recognition stays on by default. Agents use PUT /api/v1/namespaces/<ns>/voices/mode and read voices from GET /speakers.

How: speakers.set_voice_mode stores the mode on the namespace and deletes the voiceprints; diarization skips matching when the mode is separate. The change is audited as voices.mode.

Motivation and Context

Item from the personal feature plan sheet (voiceprints are biometric data; let a household opt out).

Screenshots (if appropriate):

n/a

Steps to reproduce (if appropriate):

People › Recognise voices across recordings › off › Delete voiceprints.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change; ! in the title)

Checklist:

  • The title is a Conventional Commit.
  • My code follows the code style of this project (make hooks checks it on commit).
  • I added or updated tests (tests/api/test_voice_mode.py).
  • My change requires documentation updates, and I have updated docs/ accordingly (docs/processing.md, People and namespaces).
  • Users need more than the title to understand it, so I wrote it under ## Unreleased in CHANGELOG.md. Written as changelog.d/voices-off.md, per build(release): changelog fragments in changelog.d/ instead of one Unreleased section #581.

Done questions (AGENTS.md)

  • Goal: delivers what the user wanted, merged on green CI.
  • Agents: usable through the API, MCP or an assistant tool. PUT /api/v1/namespaces/<ns>/voices/mode.
  • Zero setup: no new prerequisite, .env edit or manual step.
  • Fewest clicks and keystrokes. One switch; the only confirm is for deleting voiceprints, which can't be undone.
  • Configurable: new settings in the web app with defaults; wizard asks only what is required. Per namespace on People, on by default.
  • Light: default install still runs on a Raspberry Pi with cloud models.
  • Private and secure: data local and encrypted, passkeys, threat model updated. Owners only (manage), audited; it removes biometric data rather than adding surface.
  • Cost: cheapest path, model calls in the activity ledger, budgets respected. n/a: no model calls.
  • User decides: consequential or new actions wait for the user; defaults unchanged. Recognition stays on unless an owner turns it off.
  • Upgrades: existing installs upgrade safely (upgrade step for stored-data changes). A namespace without the field reads as recognize, so no upgrade step is needed.
  • Honest: sources cited; labelled built, in progress or planned.
  • Tests, docs and generated files updated (make openapi).
  • Open standards; dependencies keep Lens MIT. n/a: no dependencies.
  • Result reported with evidence; "refine later" items written down. Refine later: re-recognise older recordings when it is turned back on.
  • Reuse: existing Lens code and permissive libraries reused, nothing reinvented. Reuses the speaker store and audit log.

Local CI (ci/local-ci.sh): FastAPI (embedded and server), Next.js (1246 tests), pre-commit and PR title passed.


Generated by Claude Code

@adeelahmad adeelahmad self-assigned this Oct 18, 2026
@adeelahmad
adeelahmad merged commit e6e96ba into main Oct 18, 2026
12 checks passed
@adeelahmad
adeelahmad deleted the claude/project-thread-xfmkzn branch October 18, 2026 17:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

0