Skip to content

feat(0130-FaceLandmarkerSidecar): 3.12 Face Landmarker → 0124 assist pipe - #132

Merged
Ryan-AI-Studios merged 1 commit into
mainfrom
feature/0130-FaceLandmarkerSidecar
Aug 24, 2026
Merged

feat(0130-FaceLandmarkerSidecar): 3.12 Face Landmarker → 0124 assist pipe#132
Ryan-AI-Studios merged 1 commit into
mainfrom
feature/0130-FaceLandmarkerSidecar

Conversation

@Ryan-AI-Studios

@Ryan-AI-Studios Ryan-AI-Studios commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Summary

  • Optional Python 3.12 Face Landmarker sidecar under scripts/face-landmarker/ (mediapipe==1.0.1) maps 478 → 0124 form-read ids and dumps assist_pixel_capture for existing meshops proportion capture --source px --merge --prefer-merge.
  • Frozen map SoT: src/meshops/proportion/face_landmarker_map.json (+ 3.13 loader). MeshOps never imports mediapipe.
  • Capture + assist preserve method=pose_model through Landmark2D. run.ps1 skip-ok when 3.12 missing.
  • MCP stay 53. No remake / D7. Recipe 1.4.0 / report 1.2.0 unchanged.

Honesty

face_landmarker_sidecar_not_mesh_or_print_success — detector pixels ≠ mesh/print success (Difficulty §12).

Test plan

  • ledgerful verify (ruff / format / basedpyright / pytest)
  • tests/test_proportion_face_landmarker.py T0–T10
  • CI quality + design

Note

Medium Risk
Touches proportion capture/assist serialization and adds an isolated detector path that can fill landmarks; core 3.13 runtime and MCP stay unchanged, but merge/method handling is business-logic.

Overview
Adds an optional Python 3.12 sidecar that maps MediaPipe Face Landmarker (478 points) onto existing 0124 form-read ids and writes assist_pixel_capture JSON for meshops proportion capture --source px. MeshOps stays on 3.13 and never imports mediapipe; operators run run.ps1 / run.py then merge with --prefer-merge.

The frozen map lives in face_landmarker_map.json (packaged with the wheel) plus a 3.13 loader that maps indices, drops Z, skips cranial_vertex, and treats 0/2+ faces as skip. Capture/assist now round-trip method (e.g. pose_model) on landmark dicts. Sidecar missing 3.12/model/face is skip-ok (exit 2). MCP catalog stays at 53 tools.

Reviewed by Cursor Bugbot for commit 31dbd80. Bugbot is set up for automated code reviews on this repo. Configure here.

Optional scripts/face-landmarker runner (mediapipe 1.0.1) dumps assist_pixel_capture for capture --prefer-merge. Frozen map JSON in meshops 3.13; preserve method=pose_model through capture and Landmark2D. MCP stay 53; no remake.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 31dbd80. Configure here.

if n <= 0:
return _write_skip(out, "no_face", n_faces=0)
if n >= 2:
return _write_skip(out, "multi_face", n_faces=n, multi_figure=True)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multi-face skip never triggers

Medium Severity

num_faces=1 is MediaPipe’s maximum faces to return, not an exact-one requirement. With that cap the detector never yields 2+ faces, so the multi_face skip is dead and a multi-face image silently gets one chosen face—against the stated §1 rule not to pick a primary.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 31dbd80. Configure here.

@Ryan-AI-Studios
Ryan-AI-Studios merged commit 687af68 into main Aug 24, 2026
3 checks passed
@Ryan-AI-Studios
Ryan-AI-Studios deleted the feature/0130-FaceLandmarkerSidecar branch August 24, 2026 02:19
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.

1 participant