feat: allow clip animation + ship <hyperframes-player> web component#209
feat: allow clip animation + ship <hyperframes-player> web component#209miguel-heygen merged 1 commit intomainfrom
Conversation
0c10210 to
f57a822
Compare
3d1cc87 to
c3bd8b7
Compare
f57a822 to
11e6111
Compare
This stack of pull requests is managed by Graphite. Learn more about stacking. |
482d8fd to
c8d10c9
Compare
c7ca658 to
645f89f
Compare
f9017ec to
f72835b
Compare
vanceingalls
left a comment
There was a problem hiding this comment.
Review
Nice work — the clip rule relaxation is clean and well-tested, and the player web component is a solid v1. Three items to address:
Must fix
Binary file corruption in play command (packages/cli/src/commands/play.ts)
The /composition/* handler reads all files with readFileSync(filePath, "utf-8"), including images, video, and audio. Binary files will be silently corrupted. Use readFileSync(filePath) (no encoding) for non-text types — the types map already distinguishes them.
Should fix
! non-null assertion (packages/player/src/hyperframes-player.ts)
connectedCallback uses this.getAttribute("src")! — project convention is to use a guard or fallback instead of ! assertions.
Hardcoded 30fps (packages/player/src/hyperframes-player.ts)
DEFAULT_FPS = 30 is used for all duration/seek math (frame / 30, timeInSeconds * 30). Compositions rendered at 60fps will have wrong currentTime and broken seek(). The runtime's timeline message already knows the real fps — include it in the message payload and use it here.
645f89f to
baa3d81
Compare
f72835b to
d75eb66
Compare
d75eb66 to
7ae8359
Compare
vanceingalls
left a comment
There was a problem hiding this comment.
Correction to previous review
Withdrawing the binary file corruption issue. I misread the control flow in play.ts — the non-HTML branch does a second readFileSync(filePath) without encoding, so binary files are served correctly. The initial UTF-8 read is wasteful but not a bug. Apologies for the false alarm.
The two remaining items from the original review still apply:
!non-null assertion (hyperframes-player.ts:71) —this.getAttribute("src")!should use a guard per project convention- Hardcoded
DEFAULT_FPS = 30(hyperframes-player.ts) — seek/duration math will be wrong for 60fps compositions; consider having the runtime communicate fps via thetimelinemessage
Neither is critical — this is good to merge as-is if you'd prefer to address these as follow-ups.
Merge activity
|

Summary
Two independent initiatives that improve agent DX and expand HyperFrames' reach.
Initiative 1: Fix the Clip Animation Footgun
gsap_animates_clip_elementlint rule now uses smart detection — only errors when GSAP animatesvisibilityordisplayon a clip elementInitiative 2:
<hyperframes-player>Web Component@hyperframes/playerpackage — zero dependencies, 3.3KB gzippedplay(),pause(),seek(),currentTime,duration, eventsdocs/packages/player.mdxBefore / After
Clip animation lint
Before (10/10 agents hit this):
After (only errors on actual conflicts):
Embeddable player
Before: No way to embed a composition in a web page.
After:
Test plan
visibility→ 1 error (correct)docs/packages/player.mdx