Files
CheapRetouch/specs/09-person-removal.md
jared 1049057d7d Add Ralph Wiggum agent setup and project specifications
- Add project constitution with vision, principles, and autonomy settings
- Add 15 feature specifications covering full app scope
- Configure agent entry points (AGENTS.md, CLAUDE.md)
- Add build prompt and speckit command for spec creation
- Include comprehensive .gitignore for iOS development

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 23:19:41 -05:00

1.6 KiB

Person Removal Feature

Description

Tap-to-remove people from photos using Vision's person segmentation.

Acceptance Criteria

  • User taps person in photo with Person tool selected
  • VNGenerateForegroundInstanceMaskRequest generates mask for tapped person
  • Mask preview shown with red tint overlay
  • Mask automatically dilated by 2-4px to capture edge pixels
  • User can adjust feather amount before confirming
  • On confirm: mask feathered and passed to InpaintEngine
  • Inpainted result displayed, operation added to stack
  • "Select all people" option available when multiple people detected
  • Multiple people can be removed one at a time
  • Partial occlusion handled (Vision provides usable mask)
  • User can refine mask with brush tool if needed
  • Error handling:
    • No person at tap: "No person found at tap location" toast
    • Low confidence mask: "Does this look right?" confirmation with preview
  • Performance: mask generation < 500ms, inpaint per spec targets

Technical Notes

  • Vision's person segmentation is robust on iOS 17+
  • Use indexesOfInstancesContainingPoint to identify which person was tapped
  • For "select all", combine masks from all detected instances
  • Allow brush refinement by switching to brush tool with existing mask loaded

Edge Cases

  • Person partially out of frame: mask what's visible
  • Person behind object: Vision may include occluding object, allow brush refinement
  • Very small person in photo: may not be detected, suggest zoom or brush
  • Multiple overlapping people: tap selects frontmost, allow sequential removal