Commit Graph
1232 Commits
Author SHA1 Message Date
Xuanru Li 87baff8842 fix(cli): audio --read reports noise beds as ambience, not music (#6536)
* fix(cli): audio --read reports noise beds as ambience, not music

A stretch of the non-voice stems counted as music whenever it was above
-55 dB, so room tone and engine rumble separated into "other" printed as
a music piece. A stretch is now music only with a beat, clear tonal chroma
or more than one leading instrument; otherwise it is ambience with its
level in dBFS, called quiet under -45 dBFS, and breaks lie only between
two runs of music. The header lists only stems that carry sound, with
their level, instead of the separator's six fixed names.

* refactor(cli): audio --read gate carries its meaning in names, not comments

* fix(cli): keep ambience out of downstream music measurements

* fix(cli): measure music beat evidence within each stretch
2026-10-27 09:44:40 +00:00
Miguel Ángel eba78b4ad3 fix(cli): audio accepts several files, as its help says (#6535) 2026-10-27 09:08:48 +00:00
Miguel Ángel 5d7cbc2171 feat(lint): warn when a sub-composition's linked stylesheet names its root id (#6533)
* feat(lint): warn when a sub-composition's linked stylesheet names its root id

* chore(skills): regenerate the skills manifest

* fix(lint): the linked-stylesheet hint names fixes that lint clean
2026-10-27 08:48:57 +00:00
Akshar Patel 2d207cb3a5 fix(cli): validate cloud variables against the selected composition (#6520) 2026-10-27 05:20:00 +00:00
Xuanru LiandJerrai a779206430 feat(cli): capture accepts a local HTML file again (#6498)
* feat(cli): capture accepts a local HTML file again

Adds an explicit --local-file mode. The file's directory (or --local-root) is served
on a loopback port that only Chrome may reach outside the capture proxy; all other
traffic keeps the public-address policy. The URL argument stays public HTTP(S) only.

* fix(cli): local capture output names the file, not the loopback server

In --local-file mode, meta.json, AGENTS.md, extracted files and the returned result
used the temporary 127.0.0.1 origin. One rewriter maps that origin to file:// URLs
under the root, and meta.json records the file as its source. Root and served paths
now resolve with the same native realpath, which Windows needs.

* fix(cli): local capture reads its files from disk and resolves real paths natively

The asset downloader read the local page server with Node's fetch, which an environment proxy
(NODE_USE_ENV_PROXY with HTTP_PROXY) intercepts, so local images and fonts were dropped. It now
reads the file from disk under the server's own checks.

Root and served paths both use the native realpath. The JS realpath kept Windows 8.3 short names
while fs/promises expanded them, so every file answered 404 on Windows.

The default root is the directory the file was named in, so a symlinked entry can no longer widen
it to wherever the link points.

The local-file docs move below the capture policy text so their heading does not swallow it.

* refactor(cli): capture settles a watchdog outcome in one place

* fix(cli): escape every RegExp metacharacter in the local origin rewriter

---------

Co-authored-by: Jerrai <jerrai@heygen.com>
2026-10-27 04:45:32 +00:00
Miguel Ángel 619b8bc4d7 chore: release v0.8.207 (#6510) 2026-10-27 04:33:06 +00:00
Xuanru LiandJerrai 53d3caeac5 feat(cli): capture can route its traffic through an opt-in upstream proxy (#6499)
* feat(cli): capture can route its traffic through an opt-in upstream proxy

HYPERFRAMES_CAPTURE_PROXY=http://host:port sends the capture browser proxy's
forwarded requests and CONNECT tunnels, and every publicRequest download,
to that proxy by hostname instead of dialing a checked public IPv4. Unset,
behaviour is unchanged.

* fix(cli): keep capture comment share flat and close the new CodeQL findings

Test fixtures record what they receive instead of echoing request data, and
capture --video strips line breaks from a failed download's message before
logging it.

* fix(cli): proxied HTTP downloads send no URL fragment, and a malformed proxy credential is refused

The absolute-form request to the upstream used the URL's href, so a fragment such as
sprite.svg#icon went on the request line, which the pinned path never sends and strict proxies
refuse. A malformed percent-escape in the proxy credentials threw a bare URIError instead of the
usual "not a valid proxy URL" error. The test servers label their echoes text/plain.

* fix(cli): strip line breaks from capture --video errors in the form CodeQL recognizes

* fix(cli): capture --video logs errors through a recognized newline sanitizer

---------

Co-authored-by: Jerrai <jerrai@heygen.com>
2026-10-27 02:52:52 +00:00
Xuanru Li 725f069cb9 feat(cli): skip the preview-server scan when HYPERFRAMES_NO_PREVIEW_DISCOVERY=1 (#6503)
render, check and snapshot open project history, which looks for a running
preview by probing 100 loopback ports and 5190. Behind an egress fence every
probe is refused and reported. Setting HYPERFRAMES_NO_PREVIEW_DISCOVERY=1 makes
historyDeps.findServer return null without a request, so history opens directly.

Refs #6204
2026-10-27 02:34:19 +00:00
Miguel Ángel 54d0af57eb feat(engine): render sets a keyframe interval and a peak bitrate cap (#6444)
* feat(engine): encoders cap peak bitrate and place keyframes on a set interval

* style(engine): shorten the rate-cap comment

* style(engine): drop the doc lines the comment ratchet flagged

* feat(producer): mp4 renders honour a keyframe interval and a peak bitrate cap on every encoder path

* style(producer): shorten the delivery encoder file headers

* style(producer): drop a comment line from the segment manifest

* style(producer): shorten the integration test header

* test: delivery encoder tests follow the ffprobe argv contract and run in the integration lane

* feat: the render request, server and Lambda plan carry the keyframe interval and peak bitrate cap

* fix(studio): the Studio render route passes the keyframe interval and bitrate cap to the encoder

* chore(studio-server): drop a comment the helper's name already says

* feat(cli): render and lambda render take --keyframe-interval, --max-bitrate and --buffer-size
2026-10-27 00:29:06 +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
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
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 85fdc9aa88 chore: release v0.8.206 (#6469) 2026-10-26 15:00:57 -04: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 1c4a1c1620 Merge pull request #6446 from heygen-com/release/v0.8.205
chore: release 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 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
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 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
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
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
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
Miguel Ángel 2d1b5cfbd2 chore: release v0.8.204 (#6423) 2026-10-26 10:16:23 -04:00
Ular Kimsanov 9652a6324a docs: Studio app light palette, plus movable film rows and stacked remix shelves on Inspiration (#6414)
* docs: light mode in the studio app's palette

Light mode takes the Studio app light palette (packages/desktop index.css)
instead of the hyperframes.dev beige ground: paper, cards, ink levels and
the light accent ink for links. Plain code text uses the page ink.
Dark mode (Night) is unchanged.

* docs(examples): film rows move by hand and remix shelves stack

The Inspiration film rows drift by a script, as on the homepage
(HyperFramesShowcase): drag, a sideways swipe or shift+wheel moves a row,
and keyboard focus centres a card. Remix shelves are columns that each
stack their cards, so cards of different shapes leave no holes.
2026-10-26 12:17:32 +00:00
Miguel Ángel ff0a56340b chore: release v0.8.203 (#6412) 2026-10-26 07:20:07 -04:00
Xuanru Li a39f7b37d9 feat(cli): check-review inspect attaches the inspector's report to each framed finding (#6409)
* feat(cli): skipContrastInMotion moves to HF_TOOL_CONTEXT check-review

The --skip-contrast-in-motion flag and HYPERFRAMES_CHECK_SKIP_CONTRAST_IN_MOTION
env give way to a check-review capability in HF_TOOL_CONTEXT, so only a harness
turns it on. The skill text and manifest go back to main.

* feat(cli): check-review findingFrames saves one plain frame per finding time

With HF_TOOL_CONTEXT check-review.findingFrames, every error/warning finding in
layout or contrast with a real bbox gets frameTime (the middle sample of its
longest held run, by the heldMs gap rule) and frame (the absolute path of an
unannotated full frame shared by every finding at that time). One seek and
screenshot per distinct time, capped at 60 times with errors first, into the
run's snapshot folder; not listed in snapshots, history or events. Without the
capability, output is unchanged.

* docs(cli): finding-frame comments name the check-review capability, not a flag

* fix(cli): validate finding frame times and preserve cancellation

* fix(cli): count finding frame progress toward the check deadline

* feat(cli): check-review inspect attaches the inspector's report to each framed finding

With findingFrames on, the finding-frames page is served with the
inspector's GSAP hooks. After each frame is captured, every finding framed
at that time is inspected by its data-hf-id, else its selector, and the
inspector's own report is attached as the finding's inspect field. A failed
inspection becomes that finding's { error } and never fails the check.
Without the capability nothing changes.

Drops the unused @types/mime-types devDependency that the dependency audit
flags once packages/cli/package.json is touched.

* fix(cli): stop finding inspections after cancellation

* fix(cli): reject ambiguous finding inspection targets

* fix(ci): build inspector before Windows CLI smoke

* fix(cli): parse viewport HTML with explicit server parser
2026-10-26 10:02:49 +00:00
Ular Kimsanov 3f1950b806 docs(examples): the inspiration page, with films and remixes to start from (#6383)
* docs(examples): the inspiration page, with films and remixes to start from

The Examples page becomes Inspiration: two rows of films made with
HyperFrames, then 41 remixes of popular videos, each crediting and linking
the original post, with how to remix it in the Studio app. The rows play
one film at a time, since a second playing film drops the page from 120 to
30 fps, and they get a Pause button. The block and template tables stay.

* docs(examples): remixes honour reduced motion; one film while the dialog is open

Remix previews now follow reduced motion (read on the first render,
stopped if it turns on), and each film is a button that plays it on
purpose with sound. The film rows stop their previews while a full film
plays in the dialog, so only one film plays at a time. Two remixes get
the credit handles the app lists for them.

* docs(examples): a motion setting change keeps remix cards as they are

The shelf keeps the reduced-motion setting in a ref, so a change no
longer re-renders it and remounts every card: a playing remix, its
focus and its open instructions stay.

* docs(examples): one film at a time across the whole Inspiration page

The dialog paused only the film-row previews, so a chosen remix kept
playing behind it. Any video that starts with sound now makes each remix
card stop its own, and the film rows rest their previews while a film
with sound plays anywhere on the page.

* docs(examples): remix cards and film-row controls in the docs palette

The remix cards used Tailwind zinc greys and white, the film rows the old
green focus ring and fixed tints; they now use the palette tokens, so
they sit on the beige ground and in the Night theme like the rest.
2026-10-26 08:38:20 +00:00
Xuanru Li 12ae82aa8a feat(cli): check-review findingFrames saves one plain frame per finding time (#6401)
* feat(cli): skipContrastInMotion moves to HF_TOOL_CONTEXT check-review

The --skip-contrast-in-motion flag and HYPERFRAMES_CHECK_SKIP_CONTRAST_IN_MOTION
env give way to a check-review capability in HF_TOOL_CONTEXT, so only a harness
turns it on. The skill text and manifest go back to main.

* feat(cli): check-review findingFrames saves one plain frame per finding time

With HF_TOOL_CONTEXT check-review.findingFrames, every error/warning finding in
layout or contrast with a real bbox gets frameTime (the middle sample of its
longest held run, by the heldMs gap rule) and frame (the absolute path of an
unannotated full frame shared by every finding at that time). One seek and
screenshot per distinct time, capped at 60 times with errors first, into the
run's snapshot folder; not listed in snapshots, history or events. Without the
capability, output is unchanged.

* docs(cli): finding-frame comments name the check-review capability, not a flag

* fix(cli): validate finding frame times and preserve cancellation

* fix(cli): count finding frame progress toward the check deadline
2026-10-26 08:28:38 +00:00
Ular Kimsanov a183125e97 docs: an FAQ, a free-agents page, and 30 Days as a numbered list (#6382)
* docs: an FAQ, a free-agents page, and 30 Days as a numbered list

The FAQ answers the questions people ask the docs assistant most, each
linking to its page. Make videos with a free agent shows OpenCode's free
models in the Studio app, local models through Ollama, and how open models
scored in Code2Video. 30 Days of HyperFrames becomes one numbered row per
lesson with its film on hover, and drops a link to a section that no
longer exists.

* docs: 30 Days previews honour reduced motion and have a play button

Hovering a lesson started its film even with reduced motion on, and
keyboard and touch visitors had no way to play it. Hover previews now
follow the setting (read on the first render, and stopped if it turns
on), and each film is a button that plays and pauses on purpose.

* docs: 30 Days plays one chosen film at a time

Choosing a lesson film pauses the one chosen before, so every button
matches its film, and other rows do not preview while a film plays.

* docs: one film at a time across the whole 30 Days page

The page mounts three lesson lists, and each only paused its own films.
A chosen film now plays with sound, and any unmuted start on the page
makes every list stop its own films and drop its choice; previews stay
muted and wait while a film with sound plays.

* docs: 30 Days list in the docs palette

The lesson list used fixed black and white tints; its rules, numbers,
lines and film backgrounds now use the palette tokens, so they match the
beige ground and the Night theme.
2026-10-26 08:09:38 +00:00
Vance Ingalls f8d51f3146 chore: release v0.8.202 (#6404) 2026-10-26 07:55:04 +00:00
Xuanru Li 257bf285ff feat(cli): skipContrastInMotion moves to HF_TOOL_CONTEXT check-review (#6400)
* feat(cli): skipContrastInMotion moves to HF_TOOL_CONTEXT check-review

The --skip-contrast-in-motion flag and HYPERFRAMES_CHECK_SKIP_CONTRAST_IN_MOTION
env give way to a check-review capability in HF_TOOL_CONTEXT, so only a harness
turns it on. The skill text and manifest go back to main.

* fix(cli): satisfy comment ratchet for check capability
2026-10-26 07:42:50 +00:00
Ular Kimsanov a988afa00b docs: one Troubleshooting page, four tabs, and the start pages folded (#6380)
* docs: one Troubleshooting page, four tabs, and the start pages folded

* docs: keep how Studio app updates arrive on the help page

Folding the Studio app troubleshooting page into /help dropped its
"How updates arrive" section: the update button, Settings > Updates
and the Mac menu route, the Automatic updates toggle, and what to do
when an update stalls or cannot check. It is back word for word; every
label is still in the app.
2026-10-26 07:24:33 +00:00
Ular Kimsanov 5472d9eac0 docs: the docs in hyperframes.dev's and the Studio app's colours (#6393)
* docs: the docs in hyperframes.dev's and the Studio app's colours

Light mode takes hyperframes.dev's look: a still of its beige light
ground, a frosted header, its ink, black pill buttons, heavy TT Norms
headlines and a light-weight description. Every other colour comes from
the Studio app: Mintlify's gray scale on the app's warm hue, article
text and catalog greys on the same tokens, and code in the browser
editor's own syntax colours. Dark mode is the app's Night palette.

* docs: code in the browser editor's colours on the hosted build too

Mintlify's hosted build ignores a custom code theme (the preview kept
GitHub's colours), so the code-theme setting goes and each colour of the
default themes (GitHub light, VS Code dark) is mapped by role to the
browser editor's colour for that role. Code blocks and the fade under the
copy button use the code token in both modes.

* docs: map the dark control keywords to the editor keyword colour
2026-10-26 06:40:08 +00:00
Ular Kimsanov 0390f3f908 docs(studio): the browser editor in six pages, named the browser editor (#6379)
* docs(studio): the browser editor in six pages, named the browser editor

* docs(studio): mute where the editor has it, and no solo control

The audio pages still described a solo control and a group-row mute that
the editor does not render. Muting is the speaker button on an audio
track (Mute track / Unmute track), the same toggle on a selected clip,
and the Muted switch; a group is silenced through its members' tracks.
The audio reference drops its solo section for the same reason.
2026-10-26 06:24:53 +00:00
Xuanru Li afdad4ea38 feat(cli): opt-in check flag that leaves out contrast measured mid-animation (#6396)
* feat(cli): opt-in check flag that leaves out contrast measured mid-animation

`hyperframes check --skip-contrast-in-motion`, or
HYPERFRAMES_CHECK_SKIP_CONTRAST_IN_MOTION=1, leaves out a contrast failure
measured while a GSAP tween on the text or an ancestor is running, or while
the text's cumulative opacity is below 1. Repeating tweens and tweens of 4 s
or longer (camera drifts) do not count as motion. Text no GSAP tween targets
is reported as before. With neither set, check is unchanged.

The motion state is read at the same contrast sample, with no extra seek or
screenshot.

* fix(cli): read contrast motion on current GSAP clocks

* fix(cli): keep infinite timeline motion ambient
2026-10-26 06:22:46 +00:00
Miguel Ángel a11280eef0 perf(cli): lambda deploy warms the video function so the first render does not wait for its image (#6376)
* perf(cli): lambda deploy warms the video function so the first render does not wait for its image

A freshly deployed container-image function loads its image on first use, which added about 12 s to the first render's plan on some deploys. Deploy now invokes the function's warm action once after the stack is up (default on, --no-warm skips it). A failed warm-up prints a warning and the deploy still succeeds.

* chore(cli): move the deploy warm-up to its own file, regenerate the skills manifest

Regenerates skills-manifest.json for the lambda reference change, keeps runDeploy under the complexity gate by pulling the warm step into a helper, and leaves sam.ts untouched.

* fix(cli): the deploy warm-up asks the aws CLI for JSON output whatever the profile sets

A profile configured for text or yaml output made the reply unparseable, which printed a spurious warm-up warning.

* refactor(cli): split the reserved-concurrency notice and warm-up gate out of runDeploy
2026-10-26 05:32:53 +00:00
Ular Kimsanov 12030b0ee8 docs(prompting): the Prompt Guide as six topic pages (#6378)
* docs(prompting): the Prompt Guide as six topic pages

* docs(prompting): call the skill the way each agent does

The overview told every own-agent user to start with /hyperframes; Codex
uses $hyperframes, and other agents have their own way. The line now
names both and keeps the caveat the old page had.
2026-10-26 05:11:17 +00:00
Miguel Ángel 3ff8cd8683 chore: release v0.8.201 (#6377) 2026-10-26 04:50:26 +00:00
Ular Kimsanov a4e6bc3254 docs(guides): media pages titled by the task people search for (#6360)
* docs(guides): media pages titled by the task people search for

* docs(guides): background fixes as a visible section; list color grading as an agreed deletion
2026-10-26 01:45:25 +00:00
James RussoandClaude Opus 5.5 f4a48ad3e0 fix(cli): make snapshot --describe opt-in (#6368)
snapshot uploaded every frame to Gemini whenever GEMINI_API_KEY or
GOOGLE_API_KEY was set, even with no flag. Frames now stay local unless
--describe is passed. A bare --describe uses the default prompt (it used
to send an empty one), --describe "question" asks a custom one, and
--describe false still works.

Fixes #6138

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 01:06:29 +00:00
Ular Kimsanov 5353171155 docs(guides): one page per kind of video, with its prompts folded in (#6359)
* docs(guides): one page per kind of video, with its prompts folded in

* docs(guides): two tiles per row on What to make; list the folded prompt pages as agreed deletions
2026-10-25 23:54:11 +00:00
Abdullah M. Nazif 3c016f6280 fix(core): preserve composition startup error stacks (#6353) 2026-10-25 23:26:10 +00:00
Miguel Ángel e003815c30 feat(lint): flag CSS rules that select on the inline style attribute (#6261)
* feat(lint): flag CSS rules that select on the inline style attribute

* docs(lint): keep the new and corrected rule entries to short lines
2026-10-25 23:06:38 +00:00
Abdullah M. Nazif 693447f670 fix(engine): keep capture diagnostics on stderr (#5304)
* fix(engine): keep capture diagnostics on stderr

* chore: prepare conflict resolution against current main

* chore: preserve reviewed fix on current main

* fix(engine): send motion blur diagnostics to stderr

* chore: prepare reviewed capture conflict resolution

* fix(engine): preserve stderr diagnostics across capture updates

* chore: prepare reviewed capture conflict resolution

* fix(engine): preserve stderr for scene callback warnings
2026-10-25 23:04:09 +00:00