mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-14 18:01:20 +08:00
0d874adc68
enumerateTweens dropped every tween whose targets() held no Element:
if (!targets.length) return;
That silently deleted the proxy-driver idiom — tween a plain object, apply the
motion inside onUpdate — which is real, visible animation. The consequence was
not just a missing row: computeDensity counted zero active tweens across the
tween's span, so findDeadZones reported animating time as DEAD, telling agents
to add motion to a stretch that already had it.
A target-less tween is now kept when a driver reaches it, marked
driver:"onUpdate". The driver can be the tween's own onUpdate, or the
TIMELINE's — the WebGL/uniform idiom is gsap.timeline({ onUpdate: renderFrame })
over children that tween plain uniform objects and carry no onUpdate of their
own, so walk() threads a `driven` flag beside parentOffset.
The discriminator is what keeps this from trading one false reading for
another. A bare `tl.to({}, { duration: D })` spacer produces nothing, and every
preset caption skin ends with exactly such a full-span anchor; counting those
would mask genuine dead zones. So a tween's own onUpdate is proof of work by
itself (a repaint loop need not animate a property), while an inherited driver
additionally requires the tween to change something.
There is no element to select or measure for a driver tween:
* selectorHint is null rather than a placeholder — it feeds
document.querySelector, so it must be absent, not unmatchable;
* bbox sampling is skipped; the report shows "(onUpdate driver)";
* computeFlags guards its geometry flags on bboxes.length, since [].every()
is vacuously true and would report an unmeasured tween as both degenerate
and invisible;
* describeTween says the motion is applied in JS and no geometry was measured;
* the per-element analyses (buildElementLifecycles, detectStaggers) run over
element-backed tweens only, so drivers cannot collapse into one pseudo-
element or invent a stagger. Density, dead zones and the timeline still
count them — those are per-span, which is what a driver has.
Verified end to end: a 4s composition with an element tween over 0-1s and a
proxy driver over 2-4s went from "1/1 tweens, dead zones: 1.5-4s" to "2/2
tweens" with no dead zone.
86 lines
1.7 KiB
JSON
86 lines
1.7 KiB
JSON
{
|
|
"source": "heygen-com/hyperframes",
|
|
"skills": {
|
|
"embedded-captions": {
|
|
"hash": "1c02f679a329bce7",
|
|
"files": 138
|
|
},
|
|
"faceless-explainer": {
|
|
"hash": "1eb3772e62dd71bb",
|
|
"files": 24
|
|
},
|
|
"figma": {
|
|
"hash": "4f524b4962bd8d7c",
|
|
"files": 2
|
|
},
|
|
"general-video": {
|
|
"hash": "49f5216832cb8e91",
|
|
"files": 4
|
|
},
|
|
"hyperframes": {
|
|
"hash": "756a72f58fa3739b",
|
|
"files": 17
|
|
},
|
|
"hyperframes-animation": {
|
|
"hash": "4418a24093c4b1c1",
|
|
"files": 121
|
|
},
|
|
"hyperframes-audio": {
|
|
"hash": "534cea75fe0f2bc6",
|
|
"files": 6
|
|
},
|
|
"hyperframes-cli": {
|
|
"hash": "dc900e2ef0aa16b2",
|
|
"files": 11
|
|
},
|
|
"hyperframes-core": {
|
|
"hash": "4ca81d4092effc62",
|
|
"files": 19
|
|
},
|
|
"hyperframes-creative": {
|
|
"hash": "0068574ecd376e60",
|
|
"files": 78
|
|
},
|
|
"hyperframes-keyframes": {
|
|
"hash": "d00744ff0e669624",
|
|
"files": 3
|
|
},
|
|
"hyperframes-registry": {
|
|
"hash": "d6dfcc8ceb7c8178",
|
|
"files": 12
|
|
},
|
|
"media-use": {
|
|
"hash": "1b0ce647f5c7df95",
|
|
"files": 152
|
|
},
|
|
"motion-graphics": {
|
|
"hash": "1434e22bb0259bbb",
|
|
"files": 23
|
|
},
|
|
"music-to-video": {
|
|
"hash": "0c04f6ed00e90077",
|
|
"files": 132
|
|
},
|
|
"pr-to-video": {
|
|
"hash": "01f46da1e17577ea",
|
|
"files": 30
|
|
},
|
|
"product-launch-video": {
|
|
"hash": "d562efe00647c14b",
|
|
"files": 28
|
|
},
|
|
"remotion-to-hyperframes": {
|
|
"hash": "bf184a65059b95e8",
|
|
"files": 70
|
|
},
|
|
"slideshow": {
|
|
"hash": "6a24a84b0c1a75f9",
|
|
"files": 2
|
|
},
|
|
"talking-head-recut": {
|
|
"hash": "2f5d99f823c48e75",
|
|
"files": 28
|
|
}
|
|
}
|
|
}
|