Commit Graph
5944 Commits
Author SHA1 Message Date
Abdullah M. Nazif 0aa728b1aa fix(studio-server): decode authored audio attributes for loudness (#5289) 2026-10-24 04:11:25 +00:00
Abdullah M. Nazif bd0be1bdae fix(cli): stage temporary HTML comparisons without recursive copies (#5286) 2026-10-24 04:11:21 +00:00
Abdullah M. Nazif ecf5db7070 fix(core): preserve blocked addresses in mounted import maps (#5277) 2026-10-24 04:11:18 +00:00
Abdullah M. Nazif a1b23f1e4d fix(lint): read actual font CSS declarations (#5221) 2026-10-24 04:11:15 +00:00
Abdullah M. Nazif 9e533f0887 fix(cli): fail benchmarks with no completed renders (#5303) 2026-10-24 04:11:12 +00:00
Abdullah M. Nazif 8a84bedd38 fix(cli): read info metadata from the root composition (#5299) 2026-10-24 04:11:08 +00:00
Abdullah M. Nazif 1001a79419 fix(cli): capture images declared only through srcset (#5298)
* fix(cli): capture images declared only through srcset

* chore: prepare conflict resolution against current main

* fix(capture): retain srcset coverage with validated GIF redirects
2026-10-24 04:11:06 +00:00
Abdullah M. Nazif 0a37f9b9bb fix(parsers): recognize spaced slideshow type attributes (#5326) 2026-10-24 04:11:04 +00:00
Abdullah M. Nazif 410030a733 fix(cli): close asset streams when clients disconnect (#5321)
* fix(cli): close asset streams when clients disconnect

* chore: prepare conflict resolution against current main

* fix(cli): retain asset disconnect cleanup with current main
2026-10-24 04:11:02 +00:00
Abdullah M. Nazif 58752b5cf3 fix(cli): preserve portrait orientation during background removal (#5313) 2026-10-24 04:10:58 +00:00
Abdullah M. Nazif 1e6a2f0ff9 fix(cli): tolerate invalid optional package cache manifests (#5349) 2026-10-24 04:10:53 +00:00
Abdullah M. Nazif c00a1bc1d4 fix(cli): honor HTML attribute casing in frame-rate defaults (#5348)
* fix(cli): honor HTML attribute casing in frame-rate defaults

* chore: prepare conflict resolution against current main

* fix(cli): preserve HTML fps casing with shared cloud defaults
2026-10-24 04:10:49 +00:00
Abdullah M. Nazif 234b87a4bb fix(core): preserve literal percent in beat source paths (#5327)
* fix(core): preserve literal percent in beat source paths

* chore: prepare conflict resolution against current main

* fix(core): retain beat path handling with current main
2026-10-24 04:10:43 +00:00
Abdullah M. Nazif ad06c60c74 fix(cli): preserve stylesheet order during website capture (#5311)
* fix(cli): preserve stylesheet order during website capture

* chore: prepare conflict resolution against current main

* fix(cli): retain captured stylesheet order with current main

* chore: prepare conflict resolution against current main

* fix(capture): retain cascade coverage with validated redirects
2026-10-24 04:10:41 +00:00
Abdullah M. Nazif e10155ce35 fix(cli): detect beats from child media sources (#5310)
* fix(cli): detect beats from child media sources

* chore: prepare conflict resolution against current main

* fix(cli): integrate child beat sources with native decoding
2026-10-24 04:10:38 +00:00
Abdullah M. Nazif 58578fc229 fix(cli): retain metadata when Lottie previews exceed the size limit (#5307) 2026-10-24 04:10:36 +00:00
Abdullah M. Nazif ac6c682a0d fix(cli): show complete history diffs for large text changes (#5305)
* fix(cli): show complete history diffs for large text changes

* fix(cli): read history diff through its original descriptor
2026-10-24 04:10:31 +00:00
Abdullah M. Nazif ba5dde78de fix(engine): preserve Windows RSS samples after a query failure (#5357) 2026-10-24 04:10:28 +00:00
Abdullah M. Nazif cad57bf2aa fix(engine): recognize spaced closing template tags (#5353) 2026-10-24 04:10:26 +00:00
Abdullah M. Nazif bd4d8c6cb5 test: use supported FFmpeg flags for VFR fixtures (#5352) 2026-10-24 04:10:24 +00:00
Abdullah M. Nazif 6fccefe976 fix(engine): retain fresh frames when replacing an empty cache (#5351) 2026-10-24 04:10:21 +00:00
Abdullah M. Nazif e7f6c12b91 fix(cli): tolerate removed files during desktop catch-up (#5350) 2026-10-24 04:10:18 +00:00
Abdullah M. Nazif e0317a23c0 fix(cli): respect image orientation in capture contact sheets (#5295) 2026-10-24 04:10:16 +00:00
Abdullah M. Nazif d94a9d7aab fix(cli): protect batch input from generated manifest (#5294) 2026-10-24 04:10:14 +00:00
Miguel Ángel 0d104e6fca fix(cli): init never touches installed skills and no command removes one (#6168)
* fix(cli): init and skills update only touch HyperFrames skills; --skip-skills works

* fix(cli): init never touches installed skills and no command removes one

* fix(cli): shorten the init skills comment

* fix(cli): shorten the init skills comment

* fix(cli): the stale-skills notice reaches agents that run without a terminal

* test(cli): a run without a terminal now checks skills in the background

* fix(cli): the stale-skills notice also prints on --json runs
2026-10-24 04:08:29 +00:00
Akshar Patel 886e8696df fix(studio): preserve caption text when parsing transcripts (#3896) 2026-10-24 03:00:52 +00:00
Miguel Ángel da3e9b6385 perf(engine): a site's remote files are probed once per render, not once per clip (#6172)
* perf(engine): remote sources of a site keep their probe results for the whole render

* test(engine): probe a content-addressed URL once per render

* style(engine): format the audio probe split
2026-10-24 02:51:47 +00:00
Miguel Ángel cf7266d815 chore: release v0.8.191 (#6170) v0.8.191 2026-10-24 01:40:50 +00:00
Miguel Ángel 8a102f6f9c fix(sdk): a delete is kept hidden when any script lookup could reach it, not only an id (#6165)
* fix(sdk): a delete is kept hidden when any script lookup could reach it, not only an id

* fix(sdk): a lookup argument that is not one closed literal keeps the delete hidden
2026-10-24 01:32:55 +00:00
Vance IngallsandClaude Sonnet 5.5 1c463a2fec fix(core): refuse nested vfx capture canvases and scope host lookups (#4804)
A `<canvas layoutsubtree class="hf-vfx-src">` nested inside another capture
canvas blocks the renderer main thread in drawElementImage, so `check` and
`snapshot` time out with no output. Refuse either direction of the nest with a
reportVfxError and leave the chain unregistered.

Also scope the two host lookups to immediate children (`:scope >`) so a nested
host's src/out canvas is never bound to the outer host, and read the
`data-vfx-ref-visible` flag in resolveCaptureSource so a canvas reached as both
a host's own source and as a ref gets one consistent `visible`/keepBitmap.

Refs #4405

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 01:30:58 +00:00
Poetry Of CodeandClaude Opus 5.5 9ac16b4aa1 fix: install git hooks in linked worktrees (#4387) (#4722)
The prepare guard used `test -d .git`, which is false in a linked
worktree where .git is a file, so lefthook install was silently skipped.
Use `test -e .git` so clones and linked worktrees both install hooks
while non-git directories remain a no-op.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:30:56 +00:00
Dante 7dd83b8513 test: preserve browser cleanup and regression failure evidence (#5773) 2026-10-24 01:30:54 +00:00
Abdullah M. Nazif 5b8e539f96 fix(cli): recognize painted ancestor text backgrounds (#5342)
* fix(cli): recognize painted gradient children on older Chrome

* fix(cli): recognize ancestor image text masks

* fix(cli): report clipped ancestor text on older Chrome
2026-10-24 00:43:33 +00:00
jbernard077andClaude Fable 5.1 e6fba28b66 fix(registry): centre mk-callout-highlight with flex instead of a script-time measurement (#5118)
* fix(registry): centre mk-callout-highlight with flex instead of a script-time measurement

The text box becomes a flex item of a full-frame wrapper (#mk-ch-center),
so its position is laid out by the browser rather than read from a
getBoundingClientRect() taken at script time. That measurement depends on
which font faces are loaded when the script runs; the fonts gate covers only
faces that static markup already uses, so script-built text measures
against the fallback face (#5112). A non-null CONFIG.x / CONFIG.y becomes a
margin offset on that axis. The GSAP y entrance stays on the box, which
carries no CSS transform.

Also drops the scene-exit visibility tail (the runtime hides the clip at
its window end; the 0.02 s tail never reached a frame at 30 fps) and
removes data-layout-allow-occlusion from #mk-ch-box: nothing beneath the
block is text, and the attribute made the contrast audit skip the block's
own words whenever a later full-frame host answered the hit-test probe.

Renders are bit-identical to the measured version when the face is loaded
(nine-scene project at v0.8.135, 1380/1380 frames). CONFIG and the sweep
mechanic are unchanged.

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

* fix(registry): keep only the flex centring in mk-callout-highlight

Address review: restore the scene-exit visibility tail and the layout
occlusion attribute, which belong to family-wide conventions and are out
of scope here, and note the x + maxWidth clip edge in CONFIG.

Refs #5112

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

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-24 00:43:31 +00:00
yi111andYi-111-a 0648f1ed8d fix(lint): recognise .avif and .m4a in the media src kind rule (#4779)
The media_src_kind_mismatch rule classified .mp3 and .jpeg but not .m4a or
.avif, so an <img> pointed at an audio file or a <video> at a still slipped
through for those two formats. Add .avif to IMAGE_SRC_EXT and .m4a to
AUDIO_SRC_EXT.

.ogg stays out: its container can carry Theora video as well as Vorbis or
Opus, so the extension does not name the kind. .m4a is the opposite case --
it is audio-only, and video in the same MP4 container is .m4v, which
VIDEO_SRC_EXT already lists. The .ogg case keeps its existing coverage and
gains an explicit unknown-extension case alongside it.

Refs #4382

Co-authored-by: Yi-111-a <Yi-111-a@users.noreply.github.com>
2026-10-24 00:43:28 +00:00
Abdullah M. Nazif 0e0f7f803a fix(cli): audit audio slots at their authored playback speed (#5300) 2026-10-24 00:43:25 +00:00
Akshar Patel 3fdb544c45 fix(studio): preserve authored caption groups on import (#3900) 2026-10-24 00:43:22 +00:00
Abdullah M. Nazif d25b18a007 fix(producer): close artifact frame validation gaps (#5242)
* fix(producer): close artifact frame validation gaps

* docs(producer): describe quiet artifact metadata validation
2026-10-24 00:43:17 +00:00
Abdullah M. Nazif aac0e7df51 fix(producer): make sparse keyframe advice conditional (#5343)
* fix(producer): make sparse keyframe advice conditional

* fix(producer): clarify sparse keyframes do not affect rendering
2026-10-24 00:43:14 +00:00
Abdullah M. Nazif 051584c222 fix(cli): hide background preview consoles (#5345)
* fix(cli): request hidden consoles for background launches

* fix(cli): keep custom browser windows visible
2026-10-24 00:43:12 +00:00
Jerrai 7a34d6fbe4 docs: align render, fps and transcribe docs with the CLI (#6166)
* docs: align render, fps and transcribe docs with the CLI

- docs/guides/rendering.mdx: default render quality is `looks` (CRF 16),
  not `standard`.
- docs/packages/cli.mdx, render --help (render.ts): default --output is the
  timestamped `renders/<project>_<YYYY-MM-DD>_<HH-MM-SS>.<ext>`.
- skills/hyperframes-cli/references/preview-render.md: local --fps accepts
  1-240 or a rational and defaults to the root data-fps, else 30; only
  lambda and cloudrun are limited to 24, 30, 60.
- skills/hyperframes-cli/references/lint-validate-inspect.md: snapshot
  --range is documented as START,END like every other reference.
- skills/media-use/references/audio.md, skills/media-use/audio/references/
  transcribe.md, skills/hyperframes/references/captions.md: name the entry
  point for each transcription default (transcribe.mjs prefers Parakeet;
  `hyperframes transcribe` uses Parakeet when installed, else the small.en
  whisper model).
- transcribe --model help text and docs/packages/cli.mdx: list `small` and
  `medium`, which the CLI already accepts.
- skills-manifest.json: regenerated hashes for the three skills touched.

— Jerrai

* docs: lambda and cloud run also accept 25 fps

Distributed renders accept 24, 25, 30 and 60 fps (DISTRIBUTED_FPS in
packages/core/src/distributedFps.ts).

- skills/hyperframes-cli/references/preview-render.md: the --fps note
  lists 24, 25, 30, 60 for lambda and cloudrun.
- skills/hyperframes-cli/references/lambda.md, cloudrun.md: --fps lists
  include 25.
- packages/cli/src/docs/rendering.md (`hyperframes docs rendering`): --fps
  said 24, 30 or 60 and --quality defaulted to standard; local render takes
  1-240 or a rational, default root data-fps else 30, and the default
  quality is looks.
- skills-manifest.json: regenerated hyperframes-cli hash.

— Jerrai

* chore(skills): regenerate skills manifest after formatting

The format hook rewrote skill markdown after the manifest hook had hashed
it, leaving the hyperframes-cli hash stale.

— Jerrai
2026-10-24 00:29:56 +00:00
yi111 3fa94b2156 test(lint): cover three media rules that had no tests (#5402)
duplicate_media_discovery_risk, self_closing_media_tag and
placeholder_media_url were defined in media.ts but no test in
media.test.ts mentioned any of their codes.

Adds a trigger case per rule (asserting code and severity) plus
negative cases that pin the boundary each rule actually keys on:
one fingerprint field differing for duplicate discovery, an
explicitly closed tag, and a real src.

Each new test was checked to fail against a disabled rule.
2026-10-24 00:28:17 +00:00
Dante 828adc1ce7 fix(engine): await seek completion during drawElement batches (#5430) 2026-10-24 00:28:13 +00:00
Rudy Mizrahi Celekli 84e6dfd247 fix(cli): exclude rendering flags from tween tail warnings (#5711) 2026-10-24 00:28:10 +00:00
kevin c478110be7 fix(engine): redraw a small drawElement frame before failing the serial capture (#5748)
The serial guard in captureFrameSurface, which segmented capture reaches, threw on any frame under the
size floor. It now draws the frame once more and keeps a byte-identical redraw, as the streaming drain
guard does, so a flat frame no longer fails a segmented render.

Fixes #5685
2026-10-24 00:28:06 +00:00
Meghna VasudevaandClaude Opus 5.5 fb8aadad17 docs(cli): apply review notes from #5442 to open, timeline and history (#6110)
Note that the desktop hand-off in `open` is macOS-only for now, that
`timeline apply --plan` prints only a count without --json, and what
`history undo --who` reverts.

Refs #5386

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:27:59 +00:00
Miguel Ángel 179098936f fix(core): preview fetches only the clips due next, and drops passed clips still downloading (#6160)
* fix(core): preview fetches only the clips due next, and drops passed clips still downloading

A fast-cut film started a fetch per clip inside the look-ahead and let passed clips finish.

* fix(core): a passed clip stays released for the rest of the play

It was refetched each pass inside the look-back window.
2026-10-24 00:15:24 +00:00
Miguel Ángel 19cc96e3f2 test(engine): only h264 is held to identical bytes across host sizes (#6167)
x265 output varies between runs on one host, so that case flaked the merge queue.
2026-10-24 00:15:10 +00:00
Vance IngallsandClaude Sonnet 5.5 e077d9dc74 fix(core): a hidden child of a mover stays out of the blur trail (#6155)
The isolation CSS re-showed every descendant of a mover, so a child the
author hid with visibility:hidden was cropped and smeared into the trail
(240 green px in the repro; 0 in the sharp frame). The hide rule now skips
the mover subtree and the mover alone is made visible, so its descendants
inherit and keep their own visibility.

Found by review of #6106.

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 17:37:41 -07:00
Vance IngallsandClaude Sonnet 5.5 ffc327b44c feat(studio): motion blur panel with Off / Subtle / Strong (#6112)
* feat(studio): motion blur panel with Off / Subtle / Strong

One three-way control in the right dock. Subtle is the default blur
(240 deg shutter, samples sized to the smear); Strong is 720 deg and 64
samples. Writes the root data-motion-blur attributes through the SDK so
renders match and undo works; reads live attributes from the preview.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* fix(studio): motion blur panel edits the file's own root

The edits were worked out against the preview DOM but written to the file,
so a stale preview (undo inside the hold, a slow reload) could save a level
other than the one picked. They are now computed inside the mutation from
the candidate's root. While locked to a sub-composition no level is shown.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* fix(studio): shorten the motion blur tab so the dock strip fits

Five tabs overflowed the default dock width by 10px and clipped a label
(Studio: load smoke). The tab is now titled Blur.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 17:29:42 -07:00