Commit Graph
6215 Commits
Author SHA1 Message Date
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
Miguel Ángel 324671829f feat(cli): hyperframes <dir> opens the project in the app (#6426)
* feat(cli): hyperframes <dir> opens the project in the app

* refactor(cli): one command-word lookup and one rewritten command line for the folder shortcut

* refactor(cli): shorten the folder shortcut comments to fit the comment ratchet
2026-10-26 16:12:41 +00:00
Miguel Ángel d8398c9da7 fix(engine): a video held past its media end keeps following its animation (#6424)
* fix(engine): a video held past its media end keeps following its animation

Fixes #4049.

* fix(engine): drop two comments the names already carry
2026-10-26 16:12:30 +00:00
9ecb13ed69 fix(producer): deduplicate scene font faces before embedding (#6395)
* fix(producer): deduplicate scene font faces before embedding

* fix(producer): address font deduplication review

* docs(help): document render font-face deduplication

The troubleshooting guide this section originally targeted was folded
into docs/help.mdx on main, so the section now lives under the render
troubleshooting entries there.

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

---------

Co-authored-by: James <james.russo@heygen.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:06:29 +00:00
FaLovInXaShu ecc2396e89 docs: connect product-film close-ups to the full workspace (#6209) 2026-10-26 15:33:04 +00:00
Abdullah M. Nazif a07ab50879 fix(examples): align K8s Chrome pin with managed version (#6363) 2026-10-26 15:32:49 +00:00
Muzzy5150 803655a67e fix(cli): isolate benchmark render files (#6403) 2026-10-26 15:32:27 +00:00
kape acd0bc361f fix(producer): honor disabled looping for finite-loop GIF inputs (#3943) 2026-10-26 15:31:13 +00:00
Abdullah M. Nazif dfb7e5a4de fix(media-use): serialize concurrent preference records (#5366)
* fix(media-use): serialize concurrent preference records

* chore: prepare conflict resolution against current main

* fix(media-use): serialize concurrent preference records

* docs(media-use): clarify project preference file guidance

* chore: prepare conflict resolution against current main

* fix(media-use): refresh preference records against main

* chore: prepare conflict resolution against current main

* chore: merge main and refresh preferences skill manifest

* chore: prepare conflict resolution against current main

* chore: merge main and refresh preferences skill manifest

* chore: prepare conflict resolution against current main

* chore: merge main and refresh preferences skill manifest
2026-10-26 15:30:18 +00:00
Miguel Ángel 7d6c02f85a test(player): playbench measures first play, audio joins, automation, cuts and the autoplay fallback (#6418)
* test(player): playbench measures first play, audio joins, automation, cuts and the autoplay fallback

* fix(player): playbench takes-heard windows follow the composition playhead

The host page has no player, so its samples carry no playhead.

The windows fell back to nominal cut times.
2026-10-26 15:15:20 +00:00
Abdullah M. Nazif 2be8bc2b9e fix(cli): preserve UTF-8 across subprocess output chunks (#5273)
* fix(cli): preserve UTF-8 across subprocess output chunks

* chore: prepare conflict resolution against current main

* fix(cli): retain UTF-8 output handling with current main

* chore: prepare conflict resolution against current main

* fix(cli): retain UTF-8 decoding with process teardown updates

* chore: prepare conflict resolution against current main

* fix(cli): preserve decoded subprocess progress on current main

* docs(cli): scope Unicode output guarantees to cancellable workers

* docs(cli): name commands with Unicode-safe diagnostics
2026-10-26 14:58:57 +00:00
Abdullah M. Nazif d1b3471325 fix(cli): describe the restored skip-skills option (#6245)
* fix(cli): describe the restored skip-skills option

* docs(ci): describe the current skills opt-out
2026-10-26 14:58:35 +00:00
SophiaHuangCc 2d695a8436 feat(studio): support GIF export with loop count (#5593)
* feat(studio): support GIF export with loop count

* fix(studio): cap GIF exports at 30 fps

* fix(studio): complete GIF export review follow-ups
2026-10-26 14:57:55 +00:00
Muhtasim Munif Fahim 64cb6556ef fix(lint): add fix hints to the variables-entry and CSS parse findings (#5447)
Closes #5392
2026-10-26 14:57:23 +00:00
jbernard077andClaude Fable 5.1 36a24aeb85 fix(core): the fonts gate starts loading declared faces no laid-out text uses yet (#6415)
* fix(core): the fonts gate starts loading declared faces no laid-out text uses yet

Before composition scripts run, waitForFonts forces one layout and awaits
document.fonts.ready. A face that only script-built text uses has not started
loading at that point, so ready does not wait for it and the script measures
the fallback face. Start every face still unloaded after the forced layout,
under the existing timeout; a load that rejects falls through to the same
timeout warning instead of stopping the scripts.

Refs #5112

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(core): keep the fonts gate's comment share level; cover a face that never settles

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-26 14:56:59 +00:00
Akshar Patel d507323ef9 fix(player): keep new controls in sync with playback (#6373) 2026-10-26 14:53:06 +00:00
Akshar Patel ec866ed1c5 fix(cli): keep audio timings when trimming long recordings (#6375) 2026-10-26 14:52:41 +00:00
Muhtasim Munif Fahim 85dcc193d5 fix(cli): list the examples init --example accepts in docs examples (#5446)
The examples topic listed title-card and video-edit, which do not exist,
and none of the eight examples in registry/examples. List blank plus the
registry examples with their registry-item descriptions, and add a test
that fails when the topic and registry/examples disagree.

Fixes #5393
2026-10-26 14:22:09 +00:00
Miguel Ángel 2d1b5cfbd2 chore: release v0.8.204 (#6423) v0.8.204 2026-10-26 10:16:23 -04:00
Miguel Ángel f6c26141d8 fix(producer): a media src that resolves to the page itself is no source (#6421)
* fix(producer): a media src that resolves to the page itself is no source

A src of '#', '#t=1', '?' or '?x=1' reads back from the browser as the page URL
plus a suffix. decodedUrlPath strips the suffix, so the probe opened index.html as
a media file and failed the render with 'media sources are text documents'.
Discovery now drops any src whose URL without query and hash equals the page URL,
which also covers the blank and whitespace forms from the earlier fix.

* fix(producer): name the page-itself check instead of commenting it
2026-10-26 13:50:50 +00:00
Miguel Ángel f16c23cd99 fix(engine): a slow first Chrome start no longer drops a render to screenshot capture (#6420)
The beginFrame probe now tells a timeout from a real rejection.

A timeout relaunches Chrome and probes once more with a longer budget.

An unsupported answer still falls back at once.
2026-10-26 13:49:57 +00:00
Miguel Ángel dc56b3d20a perf(studio): the layer walk skips clips the runtime hid, so scrubbing a long film stays smooth (#6416)
The off-canvas indicators (always mounted) and the Layers panel rebuild their layer list every
100 ms while a scrub mutates the preview, and each rebuild read the computed style of every element
of every scene, on screen or not. The runtime already hides everything inside a clip its visibility
pass hid, so those subtrees hold no layer: the walk now skips a clip marked data-hf-clip-hidden
with an inline visibility of hidden. The marker constant moves to studio-preview-mark so the runtime
and Studio share one owner.
2026-10-26 13:22:09 +00:00
Miguel Ángel 575f68cf5b fix(producer): a render whose capture stops advancing fails within minutes (#6413)
* fix(producer): a render whose capture stops advancing fails within minutes

* fix(producer): keep the bounded probe read the stall change dropped

* chore(producer): shorten a test comment

* fix(producer): every retry batch gets its own first-frame window; the stall test waits for the render to settle

A retry that runs as several batches opened one stall window for the whole attempt, so a later batch whose browsers take longer than the no-progress window to land a frame was killed where main would have finished. The window now opens per batch. The stall tests also waited a fixed number of turns for real file IO after the last frame, which failed about 3 runs in 10 on a loaded machine; they now wait for the render to settle.

* fix(producer): a test reads the stall error fields instead of suppressions; size budget follows

* test(producer): split the scripted capture attempt into small helpers

* test(producer): the stall test advances fake time only while the scripted capture waits
2026-10-26 12:20:19 +00:00