Commit Graph
6237 Commits
Author SHA1 Message Date
Miguel Ángel be4e2e7806 feat(cli): hyperframes open hands the project to the app on Windows and Linux too (#6484) 2026-10-26 23:01:07 +00:00
Miguel Ángel 75bee42919 fix(core): paused preview seeks land on the composition's own frame rate (#6460)
* fix(core): preview seeks land on the composition's own frame rate

* fix(studio): frame step, frame readout and ruler use the composition's frame rate

* fix(studio): an end trim previews the clip's last frame at the composition's frame rate

* refactor(studio): ruler labels follow the ticks' frame rate and fps parsing splits by form

* style(studio): format the ruler label helper and its test

* chore(inspector): raise the package size budget to the measured size plus headroom
2026-10-26 22:54:21 +00:00
Miguel Ángel 6b7d6dfb2e test(cli): the mid-render orphan test waits for three Chrome processes alive at once (#6489) 2026-10-26 22:53:12 +00:00
Ular Kimsanov bab9ed58ad chore(cli): tag the studio download link with where it was shown (#6471)
* chore(cli): tag the studio download link with where it was shown

The terminal hint, hyperframes open and the browser editor button now add
src=cli or src=browser-editor to the download link. The download route
already records src, so these downloads stop landing in no source.

* chore(cli): drop the DownloadSource doc comment the type name already says

* chore(cli): leave the no-build fallback link untagged, since only the download route reads src
2026-10-26 21:39:35 +00:00
Ular Kimsanov 930c7dff50 docs(guides): put Open Design and 4K rendering back in their page titles (#6483)
/guides/open-design was folded into design-tools in August and the 4K
guide was retitled "Render in 4K"; Google stopped showing us for "open
design" and "4k render". The titles name them again.
2026-10-26 21:37:51 +00:00
Ular Kimsanov 86dba83972 docs(studio-app): name the Windows app's words, keys and settings folder (#6478)
* docs(studio-app): name the Windows app's words, keys and settings folder

The app says PC where a Mac says Mac and takes Ctrl where a Mac takes Cmd;
its settings live in %APPDATA%\HyperFrames. Cut out object here needs the
Mac image engine (Apple silicon, macOS 14+); Remove background runs on any
computer.

* docs(guides): split picture and video cut out requirements

Pictures cut out on Apple silicon with macOS 14+ or Intel with macOS
13.3+ (imageModels.mjs DARWIN_FLOOR); video cut out needs Apple silicon
(imageIpc.mjs models.video checks arm64).
2026-10-26 21:37:48 +00:00
Miguel Ángel 59d5e4fec8 fix(cli): check and snapshot fail fast on a missing browser path and say while Chrome downloads (#6479)
* fix(cli): check and snapshot fail fast on a missing browser path and say while Chrome downloads

* fix(cli): a non-interactive Chrome download gives up after one stall, naming the env var and doctor
2026-10-26 21:28:41 +00:00
Ular Kimsanov c4d73299bd docs: search keywords so pricing and npx skills searches find their answers (#6472)
Mintlify search keywords on the FAQ (pricing, price, cost, free...) and
the skills guide (npx skills, skills add...). Last week pricing searches
found a clicked result 8% of the time and npx skills 0%.
2026-10-26 21:21:59 +00:00
Miguel Ángel dfd2028f16 fix(studio): a clip that cannot be read gives up after two retries with one typed line (#6477)
* fix(studio): a clip that cannot be read gives up after two retries with one typed line

* fix(studio): a clip whose stream breaks mid-read also fails with the typed line
2026-10-26 21:08:46 +00:00
Vance IngallsandClaude Opus 5.5 08d3745391 fix(producer): retry segmented capture on a screenshot session after a drawElement failure (#6437)
The segmented route had no drawElement recovery: a suspect small frame, a
missing paint record, a renderer stall or a failed self-verification failed
the whole render, where the streaming and disk paths re-render via
screenshot. Catch those errors around the segmented stage, replan with
forceScreenshot (segmentation kept), close the probe and retry once.

The retry discards the segment directory and manifest, including segments
resumed from an earlier run: the plan hash does not cover the capture mode,
drawElement and screenshot segments are not byte-identical, and segmented
drawElement segments are never self-verified.

A screenshot retry whose first segment encoder cannot spawn now keeps
forceScreenshot when it drops to plain streaming.

— Via

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 21:07:21 +00:00
Vance IngallsandClaude Opus 5.5 e47fdad7d0 fix(producer): open a fresh segmented session when the probe has risk frames (#6434)
* fix(producer): open a fresh segmented session when the probe has risk frames

Since #6318 the gate-check probe is planned with deFrameFallback: true, so
it can carry deRiskFrames. The segmented stage reuses that probe for its
first session and captures every frame with captureFrameToBuffer, which
cannot hand a risk frame to a screenshot session: the first one throws
"frame needs screenshot capture, which this capture path cannot hand over"
and the segmented route has no drawElement catch, so the render fails.

Close such a probe and open a fresh segmented session instead; those are
created with deFrameFallback: false and keep the whole-render screenshot
fallback.

— Via

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* refactor(producer): name the risk-frame probe condition instead of commenting it

The comment ratchet does not allow a file's comment share to rise.

— Via

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 21:07:19 +00:00
Miguel Ángel 1df003dfb7 fix(cli): a file given as the project folder names the folder to pass (#6476) 2026-10-26 20:51:08 +00:00
Miguel Ángel 933ae3eb5b fix(engine): a failed drawElement worker encode takes the fresh-session recovery (#6470)
* fix(engine): a failed drawElement worker encode takes the fresh-session recovery

The encode result is awaited after its frame was produced.

Its failure reached the stage as a plain error, so the render ended.

It now surfaces as a drawElement capture failure, like a failed produce.

* fix(engine): drop the comments from the encode failure wrapper
2026-10-26 19:50:02 +00:00
James RussoandClaude Opus 5.5 25b7cbd453 feat(docs): download links carry the docs visitor's PostHog id (#6468)
* feat(docs): download links carry the docs visitor's PostHog id

hyperframes.dev counts each Studio download in PostHog, but it cannot read the
docs' posthog cookie (another domain), so a download clicked here lands under
an id with none of this visit's pageviews. A docs script now adds the id as
ph_id when a download link is clicked, and puts the link back afterwards so a
copied link never carries it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(docs): forward the PostHog id only to the download URL, and only with consent

The id now goes only to https://hyperframes.dev/studio/download, the one
address the docs link to, never another subdomain or plain http. It is not
forwarded when PostHog is not running on the page, when the visitor opted out
of PostHog capture, or when the browser sends Do Not Track or Global Privacy
Control.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 19:39:07 +00:00
Miguel Ángel 9b339e37cb fix(ci): the producer integration test list is data, not part of the pinned selection logic (#6467) 2026-10-26 19:29:17 +00:00
Ular Kimsanov e42318d08b chore: claim the hyperframes library on context7 (#6411)
Adds the url and public_key context7 gives the owner when claiming,
so the HeyGen team can manage the library and apply for verification.
2026-10-26 19:03:27 +00:00
Ular Kimsanov 772cc95e86 chore: list the hosted HyperFrames MCP in the official MCP registry (#6408)
Adds server.json for registry.modelcontextprotocol.io under the
io.github.heygen-com namespace, pointing at HeyGen's hosted server.
Today the registry lists only a third-party paid clone.
2026-10-26 19:03:24 +00:00
Ular Kimsanov 08eeb49795 chore(cli): npm homepage points to hyperframes.heygen.com (#6407)
The hyperframes package had no homepage, so npm linked the GitHub
readme. The publish job rewrites only the name, so this field reaches
npm on the next release.
2026-10-26 19:03:21 +00:00
Abdullah M. Nazif 5279b6f476 fix(parsers): resolve media source writes in their lexical scopes (#5255) 2026-10-26 18:59:36 +00:00
Miguel Ángel 020e6c99f3 fix(check): a mask that cuts descenders and a shared scene's own selector are handled (#6454)
* fix(check): a mask that cuts descenders and a shared scene's own selector are handled

* test(core): update the page-build goldens for the scoped selector rewrite

* fix(core): a shared scene's authored-id selector rewrites to the mount without a second pattern
2026-10-26 18:58:49 +00:00
Miguel Ángel 6dee9d144c fix(cli): init creates its files where hard links are refused, with no Developer Mode needed (#6463) 2026-10-26 18:50:41 +00:00
Miguel Ángel 306f21a1ba fix(cli): composition path errors name the resolved entry and project directory (#6458) 2026-10-26 18:21:04 +00:00
Miguel Ángel 8f618c5ffe fix(cli): the Windows Chrome check reads the file version, not chrome.exe --version (#6459)
* fix(cli): the Windows Chrome check launches Chrome instead of trusting chrome.exe --version

* refactor(cli): shorten the Windows Chrome version comment to fit the comment ratchet

* test(cli): pin the platform in the Unix Chrome preflight tests so Windows runs them as written

* fix(cli): the Windows Chrome check reads the file version, not chrome.exe --version
2026-10-26 15:39:09 -04:00
Miguel Ángel 74905aeff6 fix(cli): Windows preview and catch-up records move to LOCALAPPDATA, a refused log no longer blocks (#6461)
* fix(cli): Windows preview and catch-up records move to LOCALAPPDATA, a refused log no longer blocks

* fix(cli): a refused preview log falls back to the null device and drops the extra comments

* fix(cli): Windows catch-up record goes under LOCALAPPDATA/hyperframes like the other records
2026-10-26 15:27:54 -04:00
Miguel Ángel 9ebc1f8a13 fix(cli): the check and snapshot project lock works where hard links are refused (#6464)
* fix(cli): the check and snapshot project lock works where hard links are refused

* refactor(cli): drop the project lock comment to fit the comment ratchet
2026-10-26 15:12:20 -04:00
Miguel Ángel 85fdc9aa88 chore: release v0.8.206 (#6469) v0.8.206 2026-10-26 15:00:57 -04:00
Miguel Ángelandlorenzozanee 15367a9f62 fix(studio): a media preview retries after its file or project changes (#6451)
Co-authored-by: lorenzozanee <wyz0707@proton.me>
2026-10-26 18:15:56 +00:00
Miguel Ángelandlorenzozanee 25e5ab733b fix(studio): give the prompt preview editor an accessible name (#6450)
Co-authored-by: lorenzozanee <wyz0707@proton.me>
2026-10-26 18:15:46 +00:00
Miguel Ángel ed51e6a345 chore(parsers): raise the package size budget to the measured size plus headroom (#6457) 2026-10-26 18:11:02 +00:00
Miguel Ángel 3e16603d37 fix(render): a PNG's colour tags no longer change its pixels in preview, check, snapshot or render (#6453)
* fix(render): a PNG's colour tags no longer change its pixels in preview, check, snapshot or render

* fix(render): the play and present server also serves a PNG without its colour tags

* fix(render): bundled pages inline a PNG without its colour tags too
2026-10-26 17:48:57 +00:00
Miguel Ángel e3e93aa7fe fix(core): paused preview and render show the same, correct video frame (#6432)
* feat(core): one function gives the media time that shows the frame starting at an instant

* fix(core): paused preview and render show the same, correct video frame

* fix(core): register the media-clock subpath in its descriptor and keep the reason beside the test

* fix(core): media seeks lead by 10 us so Chrome's timestamp rounding never shows the prior frame

* fix(core): generated pages lead media seeks by a literal, on every generator branch
2026-10-26 17:48:51 +00:00
Miguel Ángel 4a5ee73614 fix(producer): a composition with no timeline-registering script no longer waits 45 s at setup (#6436)
* fix(producer): a composition with no timeline-registering script no longer waits 45 s at setup

The render waited the full timeout for every composition that never registers a timeline, such as one driven by canvas or requestAnimationFrame.

* fix(producer): module and importing scripts still count as able to register a timeline

* fix(producer): a failed script keeps the readiness wait, and the page scan runs once
2026-10-26 17:28:56 +00:00
Miguel Ángel 5148326fd6 fix(cli): a killed CLI no longer leaves its child processes running (#6431)
* fix(cli): a killed CLI no longer leaves its child processes running

* test(cli): shorten the reaper fixture comment to fit the comment ratchet
2026-10-26 17:28:50 +00:00
Miguel Ángel 121bf20e99 perf(studio): a scrub's state messages re-read the preview's compositions at most every 500 ms (#6429) 2026-10-26 17:27:26 +00:00
Miguel Ángel f1b5d89a1e perf(studio): the layer walk keeps its selector index, so scrubbing into new scenes is cheaper (#6427)
* perf(studio): the layer walk keeps its selector index, so scrubbing into new scenes is cheaper

* perf(studio): the layer walk keeps its selector index, so scrubbing into new scenes is cheaper
2026-10-26 17:27:19 +00:00
Miguel Ángel 37f14fdcb1 fix(snapshot): video frames keep the colours render gives the same footage (#6425)
* fix(snapshot): video frames keep the colours render gives the same footage

* fix(snapshot): say so once when video colours cannot be matched to render

* test(snapshot): cut the HEVC fixture's encode time so the flake gate stays inside its timeout

* style(snapshot): format the HEVC fixture line
2026-10-26 17:27:13 +00:00
Miguel Ángel ad4d3fad13 fix(producer): convert HEIC images to JPEG at compile time (#6455)
* fix(producer): convert HEIC images to JPEG at compile time

Tiled HEIC photos probe as several video streams, so the media-type
preflight rejected them as image:video, and Chrome cannot decode HEIC.
Sniff the ftyp brands of every <img>, join and rotate the tile grid with
ffmpeg, verify the declared size, and swap in a cached JPEG.

* fix(producer): shorten the HEIC prep comments

* fix(producer): name host tool failures and keep a failed HEIC preview image as authored

Also: HEIC tests run in the integration lane; the primary grid is picked by default disposition.

* chore(producer): raise the package size budget for the HEIC prep
2026-10-26 13:56:13 -04:00
Aron Lee 95aba51e20 test(lint): cover three caption rules that had no tests (#5436)
* test(lint): cover three caption rules that had no tests

Refs #5388

* test(lint): pin the caption CSS gate on the group textShadow rule

Refs #5388
2026-10-26 17:25:18 +00:00
Miguel Ángelandlorenzozanee 37543d223a fix(cli): hide the Windows console for the port lookup and clipboard (#6449)
Co-authored-by: lorenzozanee <lorenzozanee@users.noreply.github.com>
2026-10-26 17:25:01 +00:00
James RussoandClaude Opus 5.5 c9e86a3b01 docs(changelog): weekly digest 2026-10-19-2026-10-26 (#6447)
* docs(changelog): weekly digest 2026-10-19-2026-10-26

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* docs(changelog): embed weekly video for 2026-10-19 to 2026-10-26

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 17:22:48 +00:00
Miguel Ángel d83bf997b0 feat(cli): check catches audio the render would lose or play as silence (#6439)
* feat(cli): check catches audio the render would lose or play as silence

check gains an Audio section, read from the media list the render mixes:
- error: a clip's source has no audio the render can read (its mix fails,
  the film ships without sound)
- warning: a clip starts past the end of its file, or the part it plays
  is silent
- info: the film has no sound at all

The bundle and media list are now built once and shared with the HDR
inspection; the audio pass runs while the browser pass does.

Fixes #2775

* fix(cli): check reports an unreadable audio source the way render handles it

A source with no audio track is refused by render's own media-type rule, now exported from the producer and called by check; a source that does not decode as audio fails the mix and stops the render.

* perf(cli): check samples a long clip at a few spots before reading all of it for silence

Sound at any spot ends the decode; a clip is only called silent after its whole played part is read.

* chore(cli): drop a comment the shared finding helper's name already says
2026-10-26 17:02:57 +00:00
Miguel Ángel 0979e32a8d fix(core): a composition behind a wrapper takes its host's start (#6435)
* fix(core): a composition behind a wrapper takes its host's start

Fixes #4334.

* fix(core): a composition inside a timed wrapper starts with the wrapper

The nearest host or timed wrapper above a mounted root sets its start, so its clock starts when the wrapper shows it, matching how CSS animations already pick their clip.

* test(producer): re-pin the test classification digest
2026-10-26 16:48:57 +00:00
Muzzy5150 0cc14ddb8e fix(cli): validate play and present ports (#6402) 2026-10-26 16:15:54 +00:00
Miguel Ángel 83a29e9209 fix(engine): name the element a failing root composition script looked up (#6430)
* fix(engine): name where a root composition script threw and the element it looked up

* style(engine): format throw-site helper

* fix(engine): shorten the throw-site comment

* fix(engine): name a lookup only when the throwing line holds exactly one
2026-10-26 16:15:42 +00:00
Miguel Ángel 1c4a1c1620 Merge pull request #6446 from heygen-com/release/v0.8.205
chore: release v0.8.205
v0.8.205
2026-10-26 12:51:59 -04:00
Miguel Ángel 17d320de00 docs(quickstart): name Windows in the Studio app line (#6448) 2026-10-26 12:46:07 -04:00
Miguel Ángel d0c54776fa docs(studio-app): add the Windows install steps (#6445) 2026-10-26 12:42:45 -04:00
Miguel Angel Simon Sierra b4eab1a8c1 chore: release v0.8.205 2026-10-26 12:41:40 -04:00
Miguel Ángel e34f9f01d8 Merge pull request #6442 from heygen-com/feat/cli-windows-app-download
feat(cli): offer the HyperFrames app download on Windows
2026-10-26 12:40:27 -04:00
Miguel Ángel b76b529372 feat(cli): offer the HyperFrames app download on Windows
The CLI and Studio now point Windows to the app download.

Studio names the Windows download in its install steps.
2026-10-26 12:23:42 -04:00