Commit Graph
5397 Commits
Author SHA1 Message Date
James RussoandClaude Opus 5.5 04f2bcd67a perf(producer): extract distributed video frames in each chunk (#5290)
* perf(producer): extract distributed video frames in each chunk

Plan v2 no longer extracts long constant-frame-rate videos. It ships
each source once and every chunk extracts only the frames it shows, so
Plan time stops growing with video length (#5260).

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

* docs(aws-lambda): plan no longer bounds video length

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

* test(producer): pin deferred compiled sources to every chunk

Each chunk's page loads every <video> src during session init and a
missing file fails the chunk, so a deferred source under compiled/ must
keep reaching every chunk, as it does on main.

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-08 21:50:01 +00:00
Abdullah M. Nazif 2df897aa43 fix(sdk): preserve unquoted escapes in inline styles (#5246) 2026-10-08 21:30:16 +00:00
Abdullah M. Nazif 1449d0d2a1 fix(cli): normalize the audio passage the clip plays (#5222) 2026-10-08 21:29:17 +00:00
Abdullah M. Nazif 1fac5fb29d fix(cli): preserve literal WebVTT cue text (#5236) 2026-10-08 21:16:36 +00:00
Abdullah M. Nazif fe38e8fe12 docs(cli): explain FFmpeg setup without a package manager (#5237) 2026-10-08 20:58:47 +00:00
Abdullah M. Nazif 83b2f5608f fix(cli): bound timeline bars for negative media starts (#5239) 2026-10-08 20:36:35 +00:00
Abdullah M. Nazif b32ce10b77 fix(cli): audit text beneath transparent composition boxes (#5202) 2026-10-08 20:35:23 +00:00
Abdullah M. Nazif f802aedb5b fix(cli): recognize ancestor gradient text masks (#5207) 2026-10-08 20:30:29 +00:00
Abdullah M. Nazif ee64ebe338 fix(cli): route timeline project directories to inspection (#5240) 2026-10-08 20:27:38 +00:00
Abdullah M. Nazif 1094b8ef0e fix(cli): honor authored durations when listing compositions (#5265) 2026-10-08 20:24:39 +00:00
Abdullah M. Nazif 7faff8154f fix(cli): preserve speaker labels in WebVTT cue text (#5233) 2026-10-08 20:24:19 +00:00
Abdullah M. Nazif 9111d9f97e fix(lint): parse inline script type and source attributes (#5220) 2026-10-08 20:23:55 +00:00
Abdullah M. Nazif b4c847aca2 fix(lint): read attribute values with the HTML parser (#5209) 2026-10-08 20:23:18 +00:00
Abdullah M. Nazif c03aa9224d fix(lint): detect optional managed media calls (#5210) 2026-10-08 20:23:08 +00:00
Abdullah M. Nazif c94d992188 fix(core): seek current dotLottie players by frame (#5275) 2026-10-08 20:22:24 +00:00
Abdullah M. Nazif 00729a566d fix(slideshow): validate nested hotspot entries (#5211) 2026-10-08 20:20:56 +00:00
Abdullah M. Nazif e57d8178c4 fix(core): associate GIF delays with their image frames (#5272) 2026-10-08 20:20:44 +00:00
Abdullah M. Nazif 5a7ada63bf fix(cli): validate the complete TTS speed argument (#5264) 2026-10-08 20:20:37 +00:00
Abdullah M. Nazif c9c9f4d363 fix(cli): preserve caption text inside script blocks (#5226) 2026-10-08 20:18:26 +00:00
Abdullah M. Nazif f5aeecdbf4 fix(cli): retain WebVTT timestamps before cue settings (#5224) 2026-10-08 20:18:15 +00:00
Abdullah M. Nazif 2295ed5ea6 fix(cli): encode background-removal WebM colors as BT.709 (#5278) 2026-10-08 20:13:46 +00:00
Abdullah M. Nazif 072de48e08 fix(cli): reuse duplicate Figma nodes within asset batches (#5276) 2026-10-08 20:12:02 +00:00
Abdullah M. Nazif b1aa71d7d5 fix(cli): recover stale media cache entries (#5269) 2026-10-08 20:11:35 +00:00
Abdullah M. Nazif 320de3973b fix(cli): preserve voice placement when ducking empty transcripts (#5271) 2026-10-08 20:09:19 +00:00
Abdullah M. Nazif e6e5f68eba fix(cli): select media streams before reading adopted metadata (#5270) 2026-10-08 20:09:07 +00:00
Abdullah M. Nazif c9ddbd2d42 fix(cli): report snapshot contact sheet failures (#5196) 2026-10-08 20:08:53 +00:00
Abdullah M. Nazif 85360f370a fix(cli): explain hardware GPU screenshot fallback (#5200) 2026-10-08 20:07:01 +00:00
Abdullah M. Nazif 037f731280 fix(cli): close unused download responses before following redirects (#5261) 2026-10-08 20:06:42 +00:00
Abdullah M. Nazif 730a330800 fix(engine): invalidate cached media metadata after file changes (#5258) 2026-10-08 20:04:48 +00:00
Abdullah M. Nazif 58b7a4662d fix(cli): serve empty project assets without a stream error (#5234) 2026-10-08 20:03:36 +00:00
Abdullah M. Nazif b407178f3a fix(cli): validate cached versions in update metadata (#5214) 2026-10-08 20:02:44 +00:00
Abdullah M. Nazif 548426fef4 fix(sdk): decode scoped IDs when replaying patches (#5243) 2026-10-08 20:01:20 +00:00
Abdullah M. Nazif 95d5494baa fix(engine): preserve out-of-range HDR object positions (#5266) 2026-10-08 20:00:37 +00:00
Abdullah M. Nazif 971e1373bd fix(engine): restore discarded warmup timing samples (#5204) 2026-10-08 20:00:27 +00:00
Abdullah M. Nazif ea033bcd5a fix(sdk): preserve fragments with inert document markers (#5219) 2026-10-08 19:58:54 +00:00
Abdullah M. Nazif 8efd9ca523 fix(sdk): drain pending saves and adapter storage on flush (#5285) 2026-10-08 19:51:25 +00:00
Abdullah M. Nazif 29b901dc60 fix(skills): preserve preset color roles in frame contrast checks (#5195) 2026-10-08 19:32:24 +00:00
Abdullah M. Nazif 84bbeee4f3 docs(contributing): explain signature and workflow approval requirements (#5197) 2026-10-08 19:31:57 +00:00
Abdullah M. Nazif 710b7f5bcc docs(skills): preserve glyphs in text reveal masks (#5241) 2026-10-08 19:31:56 +00:00
Abdullah M. Nazif e529fbb015 docs: explain negative z-index stacking contexts (#5201) 2026-10-08 19:31:12 +00:00
Abdullah M. Nazif bb05bbe146 fix(core): test the minimum font size when fitting text (#5283) 2026-10-08 19:30:17 +00:00
Abdullah M. Nazif f478fa6ff5 fix(core): read music sources through the shared HTML scanner (#5281) 2026-10-08 19:30:10 +00:00
James RussoandClaude Opus 5.5 de1ef5a05a fix(engine): extract long video ranges in segments and keep plan uploads flowing (#5280)
* fix(engine): extract long video ranges in segments and keep plan uploads flowing

A distributed render's plan step extracted a whole video in one ffmpeg process,
so a long clip hit ffmpegProcessTimeout (300 s) however much of Lambda's
15-minute limit was left, and every frame then uploaded in batches of 16 that
each waited for their slowest blob.

Ranges longer than two minutes now extract as two-minute segments that run side
by side, each numbered after the last. They sample the same absolute times as a
single pass, so the frames are byte-identical (checked on a 26-minute, 37,440
frame clip). Plan v2 publishing keeps 32 uploads in flight instead of batching.
On a 10 GB Lambda the 26-minute clip's plan step fell from 395 s to 200 s.

The Lambda docs now state the plan-step length bound.

Fixes #5260

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

* fix(engine): split extraction on an integer frame count

The split compared and subtracted float seconds, so 200.3 - 80.3 became
120.00000000000001 s: a second segment got `-t 1.42e-14`, which ffmpeg
rejects, failing an ordinary two-minute range. The frame count now comes from
extractionFrameCountForDuration, the rule a single pass follows, and every
segment takes an exact frame count.

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-08 19:07:46 +00:00
James RussoandClaude Opus 5.5 e07b64101b test(aws-lambda): compare every CDK Lambda payload against the SAM template (#5282)
* test(aws-lambda): compare every CDK Lambda payload against the SAM template

#5259 shipped because CDK drops null-valued payload fields when it renders the
state machine, so the construct's source and its deployed definition disagreed
with nothing to notice. This test reads all six Lambda task payloads from the
synthesized definition and requires each to equal the SAM template's, reading
`States.StringToJson('null')` as the null it sends. A field dropped or renamed
on either side now fails CI, not just AssembleV2's audio.

Refs #5259

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

* test(aws-lambda): discover Lambda tasks for the payload parity check

The parity test took its tasks from helpers that name six states, so a seventh
Lambda task on either side would be skipped and the check would stay green.
It now walks both definitions, Map and Parallel processors included, collects
every lambda:invoke task by name, requires the two name sets to match, then
compares each payload.

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

* test(aws-lambda): key discovered Lambda tasks by their nested state path

Keying tasks by state name let two branches that each hold a RenderChunk
collapse into one entry, so the other's payload went unchecked. Tasks are now
keyed by path (a Map processor as `Map/`, a Parallel branch as `Parallel/<i>/`),
and a regression test keeps two same-named branch tasks apart.

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-08 18:58:33 +00:00
Abdullah M. Nazif 006f87d1f0 fix(aws-lambda): preserve null audio in CDK v2 assembly (#5262) 2026-10-08 18:15:48 +00:00
Miguel Ángel 621ddd4693 fix(studio): stop file names with %, apostrophes or $ from breaking Studio (#5156)
* fix(studio): serve files whose name has a bare percent sign

A browser sends src="100%.png" with the % unescaped, and decoding the whole path threw, so Studio answered 500. Only well-formed escapes are decoded now.

* fix(cli): serve files with a bare percent sign from the check and snapshot server

One shared decode rule for request paths; the image thumbnail route's malformed-escape 400 could no longer fire, so a name that is not a file is a 404.

* fix(cli): name a failed file with a bare percent sign in check

* fix(studio): keep apostrophes and dollar signs in file names when editing attributes

An attribute value is matched by its own quote kind, so src="it's.png" is replaced instead of duplicated, and every insert uses a function replacer, so $1 or $& in a file name is written as is.

* fix(studio): rename references spelled with %20 or &amp; and read quoted media sources

WIP: not yet tested; see the resume note.

* fix(studio): match whole attribute names when editing media sources

* fix(studio): compare decoded names and escape replacement references

* fix(studio): preserve file references across URL and string consumers

* docs: clarify raw file references and URL fields

* fix(studio): keep raw path identity distinct from URL spelling

* fix: share attribute grammar and decode media URLs at their readers

* fix: preserve local filename identity in HTML URL output

* fix: decode entity references before rename candidate matching

* style: format rename entity handling and regressions

* fix: preserve platform file identity when renaming references

* fix(core): decode CSS escapes before rebasing asset URLs

* fix(core): consume CSS continuations before URL encoding

* fix(core): preserve CSS URL identity and escape rebased suffixes

* fix(core): express CSS suffix controls with Unicode categories

* fix(core): preserve URL backslash identity while rebasing

* test(core): respect platform backslash filename semantics

* fix(studio): a dropped file with %, # or ? in its name loads, and an encoded reference renames

* fix(studio): read an authored src as a URL so dropped files with spaces, %, # or ? load

* fix(studio): media routes find files named with ? or #, and the probe reads a src as a URL

* fix(studio-server): one rule for request file paths, so loudness finds files named with %, # or ?

* chore: drop the design note from the change

* fix(core): rename replaced clips whose src is URL-encoded
2026-10-08 16:37:49 +00:00
Miguel Ángel 0b21016905 chore: release v0.8.142 (#5257) v0.8.142 2026-10-08 16:34:18 +00:00
Kenny 4d61c9ff2f fix(studio): delete renders after job cache expiry (#4825) 2026-10-08 09:04:07 -07:00
Miguel Ángel c7d41dee5a fix(cli): enforce capture screenshot limits and report interruptions (#5171)
* fix(cli): enforce capture screenshot limits and report interruptions

* refactor(cli): split screenshot step out of capture animation phase

Keeps the screenshot limit outside the mirrored core-extraction argument
list and moves scroll screenshots into their own step, so both stay under
the audit's duplication and complexity gates with no behaviour change.
2026-10-08 15:41:50 +00:00
Miguel Ángel 8dae5ef89b fix(core): make grading writes previewable and honor computed properties (#5157)
* fix(core): write only authored hue curves, so a single hue curve passes lint

* fix(cli): apply over a grading saved with empty hue curves instead of refusing it

* fix(core): read grading properties from computed style, and stop advising an inline start

* fix(cli): preserve validation during legacy hue repair

* fix(cli): preview grading writes without apply
2026-10-08 15:21:47 +00:00