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).
Tracks the feature requested in discussion #43 (beauty-ad local retouch that follows the product on the face).
Gap:
maskwrites static mask geometry andkeyframeanimates segment transform (position/scale/rotation/alpha/volume), but mask geometry itself is not keyframeable today.Scope: mask geometry as keyframeable properties, via
keyframe --batch: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:
keyframebehaviour for transform properties.docs/draft-schema/01-tracks-and-segments.md.test/, perCONTRIBUTING.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).