Commit Graph

2952 Commits

Author SHA1 Message Date
Miguel Angel Simon Sierra a03f772700 perf(studio): define timeline viewport budgets 2026-07-19 00:00:48 +02:00
Miguel Angel Simon Sierra 09a5e14f2e fix(studio): preserve exact keyframe edit intent 2026-07-16 21:19:32 -04:00
Miguel Angel Simon Sierra 49ed3450e0 fix(studio): harden keyframe edit identity 2026-07-16 18:12:14 -04:00
Miguel Angel Simon Sierra d36c4f9308 fix(parsers): preserve authored keyframe intent 2026-07-16 18:12:13 -04:00
Miguel Angel Simon Sierra b807d95a6c fix(studio): update ease mode optimistically 2026-07-16 18:12:13 -04:00
Miguel Angel Simon Sierra 9e5966ba0a fix(studio): publish keyframe cache refresh atomically 2026-07-16 18:12:13 -04:00
Miguel Angel Simon Sierra c1fd7ba5b9 fix(studio): resolve safe keyframe review findings 2026-07-16 18:12:13 -04:00
Miguel Angel Simon Sierra 63342fc3c3 test(studio): restore hold ease seek coverage 2026-07-16 18:12:13 -04:00
Miguel Angel Simon Sierra 556e0975c5 chore(studio): keep edited modules within size gate 2026-07-16 18:12:12 -04:00
Miguel Angel Simon Sierra 2158ba08a5 feat(studio): bulk-edit easing for merged keyframes 2026-07-16 18:12:12 -04:00
Miguel Angel Simon Sierra 3c17c9a8d8 test(studio): cover expanded keyframe timeline 2026-07-16 18:12:12 -04:00
Miguel Angel Simon Sierra f385e111f0 feat(studio): wire expanded keyframe timeline lanes 2026-07-16 18:12:12 -04:00
Miguel Angel Simon Sierra 4e80941969 refactor(studio): consolidate animation inspector callbacks 2026-07-16 18:12:11 -04:00
Miguel Angel Simon Sierra 179f4c10af feat(studio): add timeline keyframe callbacks 2026-07-16 18:12:11 -04:00
Miguel Angel Simon Sierra f284fb41d5 feat(studio): add keyframe track headers 2026-07-16 18:12:10 -04:00
Miguel Angel Simon Sierra dba0a517d3 feat(studio): add timeline property lanes 2026-07-16 18:12:10 -04:00
Miguel Angel Simon Sierra 84799219e7 feat(studio): add timeline keyframe interactions 2026-07-16 18:12:10 -04:00
Miguel Angel Simon Sierra ff47c390e8 feat(studio): add variable timeline row geometry 2026-07-16 18:12:09 -04:00
Miguel Angel Simon Sierra 050bd2042a feat(studio): add keyframe timeline state 2026-07-16 18:12:09 -04:00
Miguel Angel Simon Sierra ee9141d04d feat(studio): add keyframe ease inspector 2026-07-16 18:11:37 -04:00
Miguel Angel Simon Sierra 0e07d599d7 feat(studio): add keyframe ease controls 2026-07-16 18:09:30 -04:00
Miguel Angel Simon Sierra 3a59b01f6f feat(core): add deterministic keyframe ease runtime 2026-07-16 16:37:26 -04:00
Miguel Angel Simon Sierra 5304a03c4e chore(studio): keep thumbnail store under size limit 2026-07-16 16:37:12 -04:00
Miguel Angel Simon Sierra 1d59e84b23 test(studio): enable thumbnails in the empty-label test (fixes pre-existing failure)
The thumbnails-off-by-default toggle (6b5ea8257) left this test asserting
thumbnail content without enabling thumbnails, so it produced no thumbnail
content and failed. Enable thumbnailsEnabled for the case and reset it in
afterEach; the label ownership assertion is unchanged (TimelineClip owns names).
2026-07-16 16:37:11 -04:00
Miguel Angel Simon Sierra 5274e4d19f fix(studio): resolve Chrome for dev thumbnails via env + puppeteer cache
Dev-server thumbnail generation only probed three hardcoded system Chrome paths,
so on a machine with no system Chrome install (but a Puppeteer-cached
Chrome-for-Testing) it found no browser and every thumbnail request 500'd.
Resolve the executable from PUPPETEER_EXECUTABLE_PATH / CHROME_PATH / CHROME_BIN,
then a broader set of system browsers, then the Puppeteer cache (highest
version).
2026-07-16 16:37:11 -04:00
Miguel Angel Simon Sierra e8a9c7a184 feat(studio): timeline clip thumbnails off by default with a toolbar toggle
Background thumbnail generation (per-clip composition/video frame capture)
lags timeline scrubbing on long videos (#2428). Adds a persisted
thumbnailsEnabled setting, default OFF, so the timeline is snappy out of
the box; a toggle next to Fit in the zoom toolbar turns thumbnails on.
When off, clips render as plain bars (audio still shows its waveform).
2026-07-16 16:37:11 -04:00
Miguel Angel Simon Sierra f38042c01f fix(core): install runtime bridge after transport setup 2026-07-16 16:36:37 -04:00
James Russo 172f2757f0 feat(studio): clarify storyboard review handoff (#2560)
## What changed

- adds a stage-aware review guide for plan, sketch, animation, and final-review states
- makes the review loop explicit: review frames → save feedback → reply in agent chat
- adds copyable agent handoff and approval messages
- keeps frame status agent-owned and presents planned frames before previews exist
- clarifies voiceover ownership, save state, feedback errors, and preview availability
- improves responsive layout and surfaces storyboard warnings without dominating the board
- adds unit coverage for review-stage and handoff-step derivation

## Why

Storyboard reviewers could leave comments, but the UI did not clearly explain when a pass was ready, what to inspect, or how saved feedback reaches the agent. This makes the human-to-agent iteration loop visible while preserving the existing file-based handoff.

## Impact

Users get a clear next action throughout the storyboard lifecycle and can copy the exact message needed to continue the agent workflow. The underlying storyboard and frame-comment formats are unchanged.

## Validation

- `bun run --filter @hyperframes/studio test --run src/components/storyboard/storyboardReviewStage.test.ts` — 13 tests passed
- `bun run --filter @hyperframes/studio typecheck`
- pre-commit: tracked artifacts, lint, formatting, Fallow audit, typecheck
2026-07-16 16:16:42 -04:00
James 68beec0e76 fix(studio): guard storyboard history navigation 2026-07-16 15:49:40 -04:00
James ded443647d fix(studio): address storyboard review feedback 2026-07-16 14:56:11 -04:00
James 73dd38f93e feat(studio): clarify storyboard review handoff 2026-07-16 14:56:11 -04:00
James Russo 4b9135393e Merge pull request #2159 from heygen-com/07-10-refactor_engine_add_browser_leases
refactor(engine): add fingerprinted browser leases
2026-07-16 14:42:06 -04:00
James d4cfa08cb6 fix(engine): escalate hung browser lease closes 2026-07-16 12:58:10 -04:00
James 9b23c00237 refactor(engine): add fingerprinted browser leases 2026-07-16 12:58:10 -04:00
WaterrrForever 3bb26b0f08 docs(skills): make the core set the default install on every surface (#2554)
* docs(skills): make the core set the default install on every surface

A field test showed an agent with a real 'make videos' intent installing
all 19 skills: at install time, every surface it could read pointed at the
full set, while the core-eager / workflow-on-demand design only exists
inside hyperframes/SKILL.md - unreadable until after the install decision.

Two traps made full-install the documented default:
- The README Quick Start used 'skills add --yes': skills.sh force-detects
  agent environments into non-interactive mode, and a non-interactive run
  without --skill installs all 19. Dropping --yes fixes the human path
  (the picker opens with nothing pre-selected), but not the agent path.
- marketplace.json listed the full 'hyperframes' bundle first, under the
  name an agent installing 'hyperframes' matches; core-skills sat second.

Changes, each behavior verified by an isolated run:
- README Quick Start drops --yes (humans get the picker; verified via a
  pty capture that nothing is pre-selected) and points agents and
  non-interactive runs at 'npx hyperframes skills update', which from a
  clean HOME installs exactly the 8 core skills, refreshes stale ones and
  prunes unpublished ones on an existing machine, and is idempotent.
- CLAUDE.md and the docs install guide lead with the same one-liner;
  --all is reworded to explicit-request-only at every surface.
- marketplace.json puts core-skills first and both descriptions steer the
  default choice; the full entry keeps auto-discovery (no allowlist),
  per the skillsManifest core-pin test (56/56 pass).

* docs(skills): close the same install trap in AGENTS.md

Review follow-up on the core-default change: AGENTS.md still carried a
bare 'npx skills add heygen-com/hyperframes' - no --full-depth, and the
same non-interactive-installs-everything trap the README fix closed.
AGENTS.md is the first file Codex/Cursor-family agents read for repo
intent, so it leaked the full-set default to exactly the readers the
core-default policy targets. It now leads with the same core-set
one-liner and policy line as CLAUDE.md.
2026-07-17 00:49:43 +08:00
Miguel Ángel 771145a5c4 fix(registry): remove invalid media from caption components (#2454)
* fix(registry): remove invalid media from caption components

* test(registry): enforce nested media contracts
2026-07-16 12:16:45 -04:00
Miguel Ángel 55ee559e40 fix(lint): catch cold-seek opacity reveals (#2503)
* fix(lint): catch cold-seek opacity reveals

* fix(lint): resolve hidden selector aliases

* style(lint): format gsap rule
2026-07-16 12:03:25 -04:00
Miguel Ángel 9b17a5ad7e fix(cli): avoid Python whisper CLI collision (#2414) 2026-07-16 12:03:21 -04:00
Miguel Ángel ed1f38124b fix(engine): preserve mono audio level (#2392) 2026-07-16 12:03:17 -04:00
Miguel Ángel e846cd6004 fix(cli): fail clearly on unsupported Node versions (#2388) 2026-07-16 12:03:13 -04:00
Miguel Ángel 584be6d64a fix(transcribe): select multilingual model before download (#2303) 2026-07-16 12:03:09 -04:00
Miguel Ángel 75eedf5cc1 fix(cli): time out stalled model downloads (#2415) 2026-07-16 11:45:49 -04:00
Miguel Ángel 335e7483b5 fix(talking-head): preserve source audio (#2260) 2026-07-16 11:30:49 -04:00
Miguel Ángel b8a44e49c9 fix(lint): ignore !important in font families (#2538) 2026-07-16 10:43:17 -04:00
WaterrrForever f8c33cab72 feat(skills): act on stale CLI pin during project resume (#2540)
* feat(skills): probe and bump stale CLI pins during project resume

The entry skill now keeps a resumed project's pinned CLI current instead of
leaving that to a notice nobody acts on. On resuming a project with pinned
scripts, run the read-only probe 'npx hyperframes@latest upgrade --project
. --check'; when it (or the stale-pin stderr notice, or _meta.updateAvailable
from a pinned run) reports the project behind, apply the bump and verify
with 'hyperframes check'. A failed check reverts the bump and keeps the
project on its pinned version, preserving the reproducibility contract the
pin exists for.

The probe matters because the stale-pin notice only exists in >= 0.7.59:
a pinned run of an older CLI prints no warning at all, so a notice-only
trigger never fires for exactly the projects most behind. The probe runs
unpinned, so its behavior never depends on the project's CLI age.

Telemetry: the fleet converges to new releases within about a week via the
background auto-updater and ephemeral npx, but pinned projects form a
persistent stale tail (~10% of weekly actives, e.g. 6.3k users still on
0.6.x three weeks after 0.7.0).

Both skill surfaces now pass an explicit dir ('--project .') because a bare
'--project' followed by another flag consumes that flag as its directory
value and no-ops; the parsing fix is a separate CLI change.

* fix(cli): stop bare --project from eating the next flag as its directory

citty parses --project as a string option, so 'upgrade --project --check'
arrived with project="--check": the dir resolved to a nonexistent path and
the command no-opd with 'No package.json found' while --check was lost.
The documented default-cwd behavior only worked when --project was the
final token — and the trap-prone form is exactly what the scaffolded
template CLAUDE.md instructs.

A leading dash can never be a real directory argument, so resolveProjectArgs
now reclaims the eaten token as the flag the user wrote (--check / --json),
falls back to the current directory, and drops unrelated eaten flags rather
than treating them as paths. Templates and skill references switch to the
explicit-dir form ('--project .'), which behaves correctly on every release
including ones that predate this fix.

* feat(skills): report a successful pin bump in the run summary

Review follow-up on the stale-pin rule: 'hyperframes check' validates
composition structure, not render-output equivalence, so a check-passing
bump can still shift a project's rendered output. The bump stays the right
default for stale projects, but it must not be silent — the summary now
names the old and new version so the user knows the reproducibility
trade was made.
2026-07-16 22:28:11 +08:00
James Russo 1b4cf12cd3 refactor(cli): add stderr diagnostics logger + oxlint guard (#2551) 2026-07-16 09:35:27 -04:00
James Russo d92d1d4f51 fix(cli): keep diagnostics on stderr for --json commands (#2522) 2026-07-16 09:14:39 -04:00
Somansh Reddy 5e78a29af3 docs(guides): add Claude Design → Send to HyperFrames single-file import guide (#2131)
* docs(guides): add Claude Design → Send to HyperFrames single-file import guide

Self-contained authoring guide for the 'Send to HyperFrames' MCP import path
(distinct from the download-ZIP flow): single self-contained HTML wire format,
the composition contract the importer validates, inline-brand-assets fidelity
rules (base64 data: URIs), no bundled/splash artifacts, keep-the-original-as-
reference, a complete worked skeleton, the animation-pattern catalog, and
determinism rules. Reviewed for technical accuracy against a known-good
imported+rendered composition.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(send-to guide): assets must be resolvable (inline OR fetchable URL), not inline-only

Large media can exceed the import size cap, so "inline everything" is wrong for it,
and the import tool description now states "resolvable refs." Align the guide: inline
data: URIs preferred (fonts/images/logos — the only fully self-contained form), a
publicly-fetchable absolute URL allowed for large media, and explicitly forbid relative
paths / local-file variables / expiring-or-private hosts (the media-expiry trap).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 04:43:57 -07:00
Vance Ingalls dbb684fa6c Merge pull request #2535 from heygen-com/fix/runtime-partial-timeline-pause-guard
fix(runtime): tolerate registry timelines without pause() in interactive transport
2026-07-16 03:03:22 -07:00
Vance Ingalls 74f52fcd96 Merge pull request #2534 from heygen-com/fix/panel-sections-audio-layout-style-gate
fix(studio): gate Layout and Style panel sections on the element having a rendered box
2026-07-16 02:43:57 -07:00