Skip to content

Keyframeable mask geometry on a PIP layer (stroke-following local retouch) #44

Description

@renezander030

Tracks the feature requested in discussion #43 (beauty-ad local retouch that follows the product on the face).

Gap: mask writes static mask geometry and keyframe animates segment transform (position/scale/rotation/alpha/volume), but mask geometry itself is not keyframeable today.

Scope: mask geometry as keyframeable properties, via keyframe --batch:

  • mask position (x, y)
  • mask width and height
  • mask rotation
  • mask feather

Split out to follow-ups, so this issue stays one reviewable piece: the PIP duplicate helper is #77, the validation report is #78. Both get easier once the mask side is settled.

Acceptance criteria:

  • Mask geometry keyframes round-trip through write then read with no drift.
  • Interpolation between two mask keyframes is verified against what CapCut actually renders, not only against our own writer. This is the part with the unknowns in it: the interpolation curve and the property key names are what the issue turns on.
  • No change to existing keyframe behaviour for transform properties.
  • Durations stay on the frame grid, per docs/draft-schema/01-tracks-and-segments.md.
  • Test under test/, per CONTRIBUTING.md.

Notes: direct draft editing only (encrypted JianYing 6.0+ out of scope, already flagged by decrypt/version). The requester offered a sample draft, source video and screenshots in #43 but has not posted since 2026-07-03, so assume a self-built fixture. If bundles are shared here, generate them on v0.18.0 or later, which redacts device identifiers (#59).

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions