mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-11-14 21:29:34 +00:00
The controls sat in their own block under the effect rack while the filters they produced appeared inside it, which read as two unrelated features. They are one card now: the voices it listens to, how hard it works, and what the analysis made of that, in the order that explains itself. Strength moved in with them, the separate block is gone, and there is one switch rather than a bypass and a delete — there is nothing meaningful between carving and not carving. It is present whenever another track could be the voice, rather than appearing only once it has already produced something: a control that materialises after the fact cannot be the thing you reach for to start. And it applies itself. A bed with voices above it wants carving, and making the author find the control, name the voices and set a strength before hearing what they already wanted is ceremony. Every candidate, not one — they are analysed together, so "all of them" is the answer rather than a guess. `enabled: false` is what off means, and why the flag exists: with off represented by an absent attribute, selecting the clip again would read as never-configured and the default would carve it straight back on. The picker only offers tracks that could be the voice — music is the thing being carved, a 200 ms sting has no speech in it, and a track playing somewhere else on the timeline cannot mask this one. With exactly one candidate there is nothing to choose, so the voice reads out instead of being a dropdown with one entry; several become boxes to tick, since they are things to include rather than alternatives. Tracks whose names say nothing stay in, and if filtering would empty the picker everything comes back — hiding the track somebody needs is worse than a long list. Three fixes to what values the panel shows: - Switching the carve back on re-analyses. Off drops the filters, so On used to restore the setting and leave the bed uncarved: the switch looked like it worked and the mix was unchanged. - A dragged control stays where it was dropped. The value only returns after the attribute is written and the selection resynced — for a carve, after the analysis that write starts — and dropping back to the prop in that gap made the control snap to where the drag began and then jump to where it ended. Held only until newer information arrives, so a clamp or an undo still wins. - A running analysis clears the previous one and shows a spinner. Moving strength re-derives every one of those numbers, so leaving them up presents settings that are already history as though they were in force. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hyperframes/studio
Browser-based composition editor UI for Hyperframes. Provides a visual timeline, code editor, and live preview for building video compositions.
Install
npm install @hyperframes/studio
What it does
The studio is a React application with:
- Visual timeline — drag, resize, and arrange elements on tracks
- Code editor — edit HTML and GSAP scripts with CodeMirror (syntax highlighting, autocomplete)
- Live preview — see changes in real time as you edit
- Composition inspector — view and modify element properties
Development
The studio is embedded in the hyperframes preview command. To develop the studio UI itself:
cd packages/studio
bun run dev # Start Vite dev server
bun run build # Build for production
bun run typecheck # Type-check
Tech stack
- React 18/19, Zustand (state management)
- CodeMirror 6 (editor)
- Tailwind CSS (styling)
- Vite (bundler)
- Phosphor Icons
Documentation
Full documentation: hyperframes.heygen.com/packages/studio
Related packages
@hyperframes/core— types and parsers used by the editorhyperframes— CLI that serves the studio viahyperframes preview