8000 feat(video): blur faces in a copy of a video for sharing by adeelahmad · Pull Request #699 · adeelahmad/lense · GitHub
[go: up one dir, main page]

Skip to content

feat(video): blur faces in a copy of a video for sharing - #699

Merged
adeelahmad merged 1 commit into
mainfrom
claude/project-thread-xfmkzn
Oct 19, 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: a video's faces could be pixelated only in still pictures; sharing a video meant sharing everyone's face in it.

After: from a video's People tab (one button, with the job's progress), the API or MCP, a person can ask for a copy with faces blurred: every face, only the unnamed ones, or the tracks they pick. ffmpeg blurs each face track's boxes over time as a heavy background step (blur_faces) that respects quiet hours. The copy is kept as an attachment beside the asset, "Faces blurred", and the original is never changed.

An owner can then have visitors (public pages, embeds, share links, IIIF and podcast feeds) play the copy instead of the original. Members keep the original. If the copy is missing, visitors get a 404 rather than the faces. All of this is off until someone asks.

Motivation and Context

Personal feature plan: share videos without exposing people's faces.

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:

Done questions (AGENTS.md)

  • Goal: delivers what the user wanted, merged on green CI.
  • Agents: POST/GET /resources/{rid}/blur-faces, PUT .../blur-faces/visitors; MCP get_face_blur, blur_faces, set_face_blur_for_visitors.
  • Zero setup: uses the ffmpeg and face tracks Lens already has.
  • Fewest clicks and keystrokes: one button, all faces by default; visitors switch is one toggle with an undo toast.
  • Configurable: n/a, per-video choice, no new global setting.
  • Light: runs only when asked, as a heavy step that respects quiet hours.
  • Private and secure: process permission to make, owners to serve to visitors; threat model output row added (md + yaml), validator agrees.
  • Cost: no model calls; ffmpeg only.
  • User decides: nothing is blurred or served differently until a person asks; defaults unchanged.
  • Upgrades: n/a, the copy is a new attachment; no change to stored data shapes.
  • Honest: README built list and docs/requirements.md updated; docs say faces the detector missed stay visible.
  • Tests, docs and generated files updated (make openapi).
  • Open standards; no new dependencies.
  • Result reported; nothing left to refine.
  • Reuse: existing face tracks, jobs queue, attachments and ffmpeg reused.

Local CI: pytest tests/api/test_face_blur.py tests/api/test_jobs.py tests/api/test_mcp.py tests/api/test_photo_map.py tests/api/test_iiif.py (51 passed), ruff, mypy, jest face-blur.test.ts + __tests__/recording* (167 passed), tsc --noEmit, ci/check_requirements.py, ci/validate_threat_model.py all clean; OpenAPI regenerated with no drift.


Generated by Claude Code

A person can ask for a copy of a video with every face, the unnamed ones or
chosen ones blurred. ffmpeg draws a blur over each face track's boxes over
time, as a heavy background step (blur_faces) that respects quiet hours; the
copy is kept as an attachment beside the asset, and an owner can have
visitors play it instead of the original (members keep the original; a
missing copy is never replaced by the faces). API, MCP tools and a one-click
button in the People tab with the job's progress. Off until asked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QFUNzy1QZy5HhKAyJxTAYJ
@adeelahmad adeelahmad self-assigned this Oct 19, 2026
@adeelahmad
adeelahmad merged commit 2c62a26 into main Oct 19, 2026
12 checks passed
@adeelahmad
adeelahmad deleted the claude/project-thread-xfmkzn branch October 19, 2026 22:54
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