Skip to content

py-feat 2.1.3 (AU→mesh PLS v6) — v0.8.29 - #87

Merged
ljchang merged 1 commit into
mainfrom
pyfeat-2.1.3
Sep 7, 2026
Merged

ljchang merged 1 commit into
mainfrom
pyfeat-2.1.3

Conversation

@ljchang

@ljchang ljchang commented Sep 7, 2026

Copy link
Copy Markdown
Member

Picks up py-feat 2.1.3.

Why

py-feat 2.1.2 ships the v2.8 multitask weights but still defaulted the AU→mesh visualization PLS to v5, which was fit on the v2.5c AU space — so plot_face_mesh() / predict_face_mesh() mapped v2.8 AU values through a model fit on a different detector's AU distribution. 2.1.3 defaults to v6, fit on v2.8.

The v6 PLS is fit on 602,427 CelebV-HQ frames / 33,920 videos scored with the exact checkpoint shipped as face_multitask_v28.safetensors. Held-out R² 0.4725 ± 0.0045 (5-fold GroupKFold by video) vs v5's 0.3620.

Scope

No API change. Nothing outside the face-mesh visualization path is affected — detection, AU, emotion, gaze, pose and blendshape outputs are unchanged, so /analyze results are bit-identical.

pyfeat-generator carries its own PLS geometry head (models/pls_torch.pt) and does not consume py-feat/au_to_mesh, so the generate path is untouched by this bump.

Lock handling

The sidecar lock is updated surgically rather than recompiled. py-feat 2.1.2 and 2.1.3 publish byte-identical dependency metadata (22 requirements each), so only the py-feat entry and its two hashes move — every other pin is untouched. A full uv pip compile would have drifted every dependency that published a release since the last compile, which is precisely what the verify-runtime-lock header warns against.

Verification

Ran the same dry-run the CI guard performs (uv pip install --dry-run --require-hashes, macOS arm64, Python 3.12):

  • New lock resolves 82 packages, including py-feat==2.1.3, pyfeat-generator==0.1.1, torch==2.12.1.
  • Control: the pre-edit lock resolves identically apart from that one package, confirming no collateral drift.

(Note MACOSX_DEPLOYMENT_TARGET=14.0 is needed to reproduce locally from Linux — uv's aarch64-apple-darwin target defaults to macOS 13, below torch 2.12.1's macosx_14_0_arm64 floor. The macOS runner in CI is already 14+, so this affects local reproduction only, not the guard.)

Changes

  • requirements.txt, sidecar/runtime/requirements.inpy-feat==2.1.22.1.3
  • sidecar/runtime/requirements.txt — py-feat entry + hashes
  • tauri/src-tauri/{Cargo.toml,Cargo.lock,tauri.conf.json}0.8.280.8.29

🤖 Generated with Claude Code

py-feat 2.1.3 pairs the AU→mesh visualization PLS with the v2.8 detector
weights. 2.1.2 shipped v2.8 weights but still defaulted the PLS to v5,
which was fit on the v2.5c AU space, so plot_face_mesh() /
predict_face_mesh() mapped v2.8 AU values through a model fit on a
different detector's AU distribution.

The v6 PLS is fit on 602,427 CelebV-HQ frames scored with the exact
checkpoint shipped as face_multitask_v28.safetensors. Held-out R² 0.4725
vs v5's 0.3620.

No API change and nothing outside the face-mesh visualization path is
affected — detection, AU, emotion, gaze, pose and blendshape outputs are
unchanged. pyfeat-generator has its own PLS geometry head and is not
touched by this.

The sidecar lock is updated surgically rather than recompiled: py-feat
2.1.2 and 2.1.3 have byte-identical dependency metadata (22 requirements
each), so only the py-feat entry and its two hashes move. A full
`uv pip compile` would have drifted every other pin, which is exactly
what the verify-runtime-lock guard warns against.

Verified with the same dry-run the CI guard performs
(uv pip install --dry-run --require-hashes, macOS arm64, py3.12): the
lock resolves 82 packages including py-feat==2.1.3, and the pre-edit
lock resolves identically apart from that one package.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0134bZ9eANmH4hYyuVoH4r9U
@ljchang
ljchang merged commit 3ffba7d into main Sep 7, 2026
4 checks passed
@ljchang
ljchang deleted the pyfeat-2.1.3 branch September 7, 2026 19:00
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