Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1816 commits
Select commit Hold shift + click to select a range
e1191ed
fix(producer): anchor local-font embedding to its url() occurrence (#…
miguel-heygen Aug 21, 2026
09a5ef7
fix(lint): stop duplicate_composition_id firing on repeated sub-compo…
miguel-heygen Aug 21, 2026
5842dd8
fix(studio): invalidate the preview signature off the watcher that se…
miguel-heygen Aug 21, 2026
41edbfb
fix(lint): surface unloadable media variable defaults, stop reading d…
miguel-heygen Aug 21, 2026
9c73e64
test(engine): give the audio grouping mixes room, and make a stall sa…
miguel-heygen Aug 21, 2026
ea95b7d
fix(cli): stop a caught post-render throw reporting a valid render as…
miguel-heygen Aug 22, 2026
0e9a4f3
feat(audio): open the audio FX, group and mute features to everyone (…
vanceingalls Aug 22, 2026
92a6076
test(engine): budget the ffmpeg audio-level tests, and make a stall s…
miguel-heygen Aug 22, 2026
dac8f9f
feat: add promoted template edit contracts (#3407)
jrusso1020 Aug 22, 2026
6f82acf
chore: release v0.8.8 (#3411)
vanceingalls Aug 22, 2026
718bf5e
fix(producer,cli): surface every tried manifest path in the missing-m…
santhiprakash Aug 22, 2026
073b098
feat(engine): preflight psnr filter availability and force-fallback t…
vanceingalls Aug 22, 2026
277fe0f
fix(studio): cap the timeline FX popover to its gap, and scroll the l…
vanceingalls Aug 22, 2026
8612cfd
fix(studio): put the timeline's portaled surfaces on the tier the oth…
vanceingalls Aug 22, 2026
f0cc9b1
fix(skills): make the carve CLI work against the published core, and …
vanceingalls Aug 22, 2026
c594023
fix(studio): give the group row's caret the panel's glyph and size ba…
vanceingalls Aug 22, 2026
0eca7b1
docs(audio): document the audio effects system (#3420)
vanceingalls Aug 22, 2026
f6e8e8d
chore: release v0.8.9 (#3422)
vanceingalls Aug 22, 2026
7a024cf
fix(studio): name the cause when a render request fails (#3424)
miguel-heygen Aug 22, 2026
59a69a1
chore: release v0.8.10 (#3426)
miguel-heygen Aug 22, 2026
f11b608
test(sdk): render-faithfulness test for serialize() bake contract (WS…
vanceingalls Aug 22, 2026
dd0626a
fix(studio): stop the grouping dialog opening off the bottom of the w…
vanceingalls Aug 23, 2026
65b2299
fix(engine): preserve static dedup across caption runs (#3438)
miguel-heygen Aug 23, 2026
32d58a7
chore: release v0.8.11 (#3440)
miguel-heygen Aug 23, 2026
6faf4d6
fix(core): harden audio FX and group identity (#3444)
vanceingalls Aug 24, 2026
16ff1eb
fix(core): align preview transport with grouped audio (#3445)
vanceingalls Aug 24, 2026
1aec3b4
fix(engine): harden grouped audio rendering (#3446)
vanceingalls Aug 24, 2026
54091b5
feat(lint): validate audio group membership and timing (#3447)
vanceingalls Aug 24, 2026
0f30228
fix(studio): unify audio IDs and group state (#3448)
vanceingalls Aug 24, 2026
8e96ccb
fix(studio): make audio-group edits transactional (#3449)
vanceingalls Aug 24, 2026
89069d2
fix(studio): keep preview state synchronized (#3450)
vanceingalls Aug 24, 2026
4ea018a
fix(studio): align audio rows, automation lanes and headers (#3451)
vanceingalls Aug 24, 2026
f575bda
fix(studio): harden carve and FX rack behavior (#3452)
vanceingalls Aug 24, 2026
0c274f7
fix(studio): reconnect property-panel audio controls (#3453)
vanceingalls Aug 24, 2026
05affaa
feat(studio,core)!: remove solo and the group meter (#3454)
vanceingalls Aug 24, 2026
2685c8f
docs(audio): document grouped audio and its guardrails (#3455)
vanceingalls Aug 24, 2026
2ca578f
chore: release v0.8.12 (#3457)
vanceingalls Aug 24, 2026
95e1ac9
fix(skills): skip mirror fan-out to agents that read the universal st…
santhiprakash Aug 24, 2026
e5a5e6b
fix(cli): keep overlap waivers local to marked text (#3464)
miguel-heygen Aug 24, 2026
ac00560
fix(skills): keep the seam gate's preview attached so --project works…
jrusso1020 Aug 24, 2026
21dc4ae
docs(changelog): weekly digest 2026-08-17–2026-08-24 (#3462)
jrusso1020 Aug 24, 2026
7caf4b8
feat(studio): drag automation segments (#3465)
vanceingalls Aug 24, 2026
3ed971d
chore: release v0.8.13
vanceingalls Aug 24, 2026
3e17ddc
Merge pull request #3467 from heygen-com/release/v0.8.13
vanceingalls Aug 24, 2026
b2fc18b
fix(skills,lint): correct composition-contract claims the code contra…
miguel-heygen Aug 24, 2026
045b3a4
feat(cli): report which catalog items a render actually used (#3470)
miguel-heygen Aug 24, 2026
81069fe
chore: release v0.8.14 (#3474)
miguel-heygen Aug 25, 2026
a562946
fix(scripts): stop the large-file guard firing on text (#3475)
miguel-heygen Aug 25, 2026
cce17da
fix(core): prevent cross-origin Web Audio capture from silencing audio
miguel-heygen Aug 25, 2026
acc6898
fix(core): address review — gate early diagnostic, fix empty crossOri…
miguel-heygen Aug 25, 2026
1e11608
fix: expose promoted template media slots
jrusso1020 Aug 25, 2026
17b6335
Merge pull request #3483 from heygen-com/fix/template-media-contracts
jrusso1020 Aug 25, 2026
71e8e92
fix: document safe template default editing
jrusso1020 Aug 25, 2026
3cacac5
fix(lint): decode JSON attribute entities
jrusso1020 Aug 25, 2026
6eaa2cb
Merge pull request #3485 from heygen-com/fix/template-editor-safe-def…
jrusso1020 Aug 25, 2026
32ef37c
fix(core): correct web-audio-route subpath export resolution
miguel-heygen Aug 25, 2026
3202f3f
fix(producer): trip DE parallel-router circuit breaker on stalls and …
miga-heygen Aug 25, 2026
f7fc001
fix(core): evict cached MediaElementSource on src mutation, soften en…
miguel-heygen Aug 26, 2026
744146e
fix(fonts): cover rendered case variants in subsets
miguel-heygen Aug 25, 2026
38f8f92
feat(cli): expose deterministic font localization
miguel-heygen Aug 26, 2026
ec68d40
fix(cli): keep font localizer process ownership explicit
miguel-heygen Aug 26, 2026
d6de083
feat(cli): stamp font compiler version in localized HTML
miguel-heygen Aug 26, 2026
7c40efb
fix(fonts): harden localizer release diagnostics
miguel-heygen Aug 26, 2026
daf4840
Merge pull request #3492 from heygen-com/fix/font-subset-css-case-tra…
miguel-heygen Aug 26, 2026
740f7ea
chore: release v0.8.15
miguel-heygen Aug 26, 2026
cd6a25d
Merge pull request #3497 from heygen-com/release/v0.8.15
miguel-heygen Aug 26, 2026
a7e8674
fix(producer): fall back to screenshot capture on drawElement canvas-…
miga-heygen Aug 26, 2026
0c9d234
Merge pull request #3481 from heygen-com/fix/web-audio-cross-origin-s…
miguel-heygen Aug 26, 2026
f52ec1c
fix(producer,core): honor relative data-start id-refs in render media…
valeriangalliat Aug 26, 2026
dae5b7b
fix(engine): treat a sentineled cache entry with no frames as a miss …
rajanpanth Aug 26, 2026
9aaa755
fix(studio): dedupe repeated selection telemetry (#3498)
jrusso1020 Aug 26, 2026
4f00336
feat(player): add retained runtime data channels (#3471)
vanceingalls Aug 26, 2026
c9f43eb
fix(engine): preserve source frame identity above 99,999 (#3503)
miguel-heygen Aug 26, 2026
97991bb
fix(engine,producer,lint): resolve <source> children for media extrac…
valeriangalliat Aug 26, 2026
18409c9
fix(cli): keep phrase-level CJK and Thai transcripts as separate cues…
rajanpanth Aug 26, 2026
ee64c3b
fix(engine): stop destroying the AAC priming edit list when muxing (#…
miga-heygen Aug 26, 2026
8392e84
fix(media-use): repoint the dead videogen tier, demote past unusable …
jrusso1020 Aug 26, 2026
720ff5a
chore: release v0.8.16
miguel-heygen Aug 27, 2026
7170dc6
Merge pull request #3522 from heygen-com/release/v0.8.16
miguel-heygen Aug 27, 2026
21bcd57
fix(studio): let a failed DOM edit report that it failed (#3510)
miguel-heygen Aug 27, 2026
94da403
feat(studio): expose Studio's live state to an agentic browser (WebMC…
miguel-heygen Aug 27, 2026
097d901
feat(studio): fall back to a WebMCP polyfill where the browser has no…
miguel-heygen Aug 27, 2026
e5c7dc7
fix(core): read CSS animation opacity through color grading's own hid…
miga-heygen Aug 28, 2026
05275c1
fix(producer): assert render artifact duration and frame count before…
miga-heygen Aug 28, 2026
e69be30
fix(engine): fail render on sub-composition script failures (#3352) (…
miga-heygen Aug 28, 2026
9eb84c9
fix(core,producer): stamp render ids on empty-src media and pair the …
valeriangalliat Aug 28, 2026
4d87f8b
fix(producer): enforce video extraction failures by default (#3372) (…
miga-heygen Aug 28, 2026
f6de05e
chore: release v0.8.17
miguel-heygen Aug 28, 2026
10a9068
Merge pull request #3531 from heygen-com/release/v0.8.17
miguel-heygen Aug 28, 2026
da6514d
fix(studio): update WebMCP test for polyfill fallback
miga-heygen Aug 28, 2026
af1cb1c
fix(studio): update WebMCP test for polyfill fallback (#3532)
miguel-heygen Aug 28, 2026
b28747d
fix(cli): respect timeline-free static compositions (#3533)
miguel-heygen Aug 29, 2026
e4dabf8
fix(cli): prevent keyframe shots overwriting sources (#3534)
miguel-heygen Aug 29, 2026
d99eeef
fix(cli): honor authored playback rate in snapshots (#3536)
miguel-heygen Aug 29, 2026
3dc1856
fix(core): resolve long nested media in local time (#3535)
miguel-heygen Aug 29, 2026
adf9b0c
fix(studio): activate a composition at any path, not just compositions/
rajanpanth Aug 29, 2026
7bd0782
Merge pull request #3547 from rajanpanth/fix/studio-activate-comp-any…
miguel-heygen Aug 29, 2026
5cc2f1b
chore: release v0.8.18
miguel-heygen Aug 29, 2026
bddc9e9
Merge pull request #3548 from heygen-com/release/v0.8.18
miguel-heygen Aug 29, 2026
b71f459
fix(studio): export the composition the user has selected (#3550)
miguel-heygen Aug 29, 2026
0fd70b1
chore: release v0.8.19 (#3551)
miguel-heygen Aug 29, 2026
28be8dd
fix(studio): correct save failure telemetry (#3499)
miguel-heygen Aug 30, 2026
724796e
chore: release v0.8.20 (#3555)
miguel-heygen Aug 30, 2026
0e558d5
feat(studio): let an agent drive Studio's selection and playhead (#3515)
miguel-heygen Aug 30, 2026
3337cc8
feat(studio): give an agent eyes with studio_frame (#3516)
miguel-heygen Aug 30, 2026
859ac62
fix(player): report and fail closed on runtime delivery errors (#3472)
vanceingalls Aug 30, 2026
61ba800
fix(player/runtime): rebind timelines and bound paused seeks (#3489)
vanceingalls Aug 30, 2026
5b45bcc
feat(registry): hw write-on wave — hw-write-title block + control sur…
jbernard077 Aug 31, 2026
f84b4c2
feat(studio): let an agent edit text and styles, guarded (#3518)
miguel-heygen Aug 31, 2026
f18964d
fix(studio): let a hidden sub-composition child be shown again (#3559)
felipecaldas Aug 31, 2026
44c90dd
fix(studio-server): revalidate preview assets on every request (#3565)
miga-heygen Aug 31, 2026
1cb3c74
docs(changelog): weekly digest 2026-08-24–2026-08-31 (#3563)
jrusso1020 Aug 31, 2026
2d6b055
feat(studio): let an agent author motion (#3520)
miguel-heygen Aug 31, 2026
f3099dc
chore: release v0.8.21 (#3570)
miguel-heygen Aug 31, 2026
73aa71c
fix(cli): guard PowerShell process queries against exited PIDs (#3571)
miga-heygen Aug 31, 2026
9097d53
fix(cli): hide Windows child process consoles (#3529)
heygengenesis[bot] Aug 31, 2026
0f7eebd
fix(encoder): signal host interruptions for retry (#3578)
jrusso1020 Sep 1, 2026
38e356f
chore: release v0.8.22 (#3575)
miguel-heygen Sep 1, 2026
45cc343
fix(cli): flag caption-zone by DOM box overlap (#3580)
xuanruli Sep 1, 2026
f42b5ce
ci: optimize Windows test lanes (#3579)
jrusso1020 Sep 1, 2026
8eea3c9
fix(capture): let vision captioning authenticate the way a server can…
WaterrrForever Sep 1, 2026
254fe4b
feat(registry): say what a promoted template's slots mean, not where …
WaterrrForever Sep 1, 2026
6cbe3fb
chore: release v0.8.23 (#3586)
miguel-heygen Sep 1, 2026
db92f8a
test(engine): give the 150-track audio mix test a Windows-sized budge…
jrusso1020 Sep 1, 2026
305de15
fix(catalog): sync tab labels with the sliding indicator (#3267)
AksharP5 Sep 2, 2026
c0887b6
fix(producer): transport safe extraction failure metadata (#3592)
jrusso1020 Sep 2, 2026
aceaaeb
chore: release v0.8.24 (#3593)
jrusso1020 Sep 2, 2026
aab3bfc
fix(registry): clear flowchart selection after click-away (#3262)
AksharP5 Sep 2, 2026
f498be9
feat(registry): add kinetic center build component (#3269)
AksharP5 Sep 2, 2026
6b5b4cb
feat(studio): make agent edits live and explicit (#3581)
miguel-heygen Sep 2, 2026
6b360f5
chore: release v0.8.25 (#3595)
miguel-heygen Sep 2, 2026
81f1a90
fix(studio): rebind paused preview after live edits (#3596)
miguel-heygen Sep 2, 2026
84ed587
chore: release v0.8.26 (#3597)
miguel-heygen Sep 2, 2026
ae7e530
feat(cli): capture reports why a referenced asset is not in the folde…
miguel-heygen Sep 3, 2026
5a5e841
fix(cli): pick the highest-quality favicon and keep its transparent b…
miguel-heygen Sep 3, 2026
da09428
fix(producer): degrade gracefully when font cache directory is unwrit…
miga-heygen Sep 3, 2026
7dc31bd
fix(cli): score apple-touch-icon-precomposed at the 180px default (#3…
miguel-heygen Sep 3, 2026
1a788d6
fix(core): catch PostCSS parse errors instead of dropping composition…
miga-heygen Sep 3, 2026
19ab83f
chore: release v0.8.27 (#3608)
miguel-heygen Sep 3, 2026
8fade97
feat(lint): error when a video or img src is the other media kind (#3…
xuanruli Sep 3, 2026
05b57f9
fix(fonts): make Google Fonts subsetting CSS text-transform aware (#3…
miga-heygen Sep 3, 2026
e0007b8
fix(render): allow resolution scaling for alpha output (#3634)
miguel-heygen Sep 4, 2026
c5224ac
feat(cli): snapshot --against pairs each frame with a reference video…
WaterrrForever Sep 4, 2026
c8300c6
fix(cli): install the published skill set, not every SKILL.md in the …
WaterrrForever Sep 4, 2026
a3954aa
fix(cli): persist what the server answered for a captured page (#3553)
miguel-heygen Sep 4, 2026
0154b40
fix(captions): derive preview GSAP integrity (#3631)
heygengenesis[bot] Sep 4, 2026
faaafbb
fix(cli): split Kokoro text on token overflow (#3041)
miguel-heygen Sep 4, 2026
ece09d8
fix(studio): drop the resurrected WebMCP polyfill assertion (#3556)
miguel-heygen Sep 4, 2026
353b9eb
fix(producer): scale frame coverage by playback rate (#3542)
miguel-heygen Sep 4, 2026
2dc4bbf
feat(cli): forward a reported catalog gap to the feedback channel (#3…
miguel-heygen Sep 4, 2026
709d70c
fix(cli): render SVG selector proof strips (#3537)
miguel-heygen Sep 4, 2026
e147613
fix(cli): upgrade project wrapper pins (#3042)
miguel-heygen Sep 4, 2026
19a512c
fix(cli): count font axes as motion in the sweep fingerprint (#3107)
miguel-heygen Sep 4, 2026
62d3304
fix(embedded-captions): support heroless themes (#3632)
heygengenesis[bot] Sep 4, 2026
bec11b1
fix(runtime): wait for a finite dotlottie duration (#3651)
jrusso1020 Sep 4, 2026
ef63e02
fix(fonts): retain non-Latin subsets for bundled weights (#3652)
jrusso1020 Sep 4, 2026
3bc46a8
fix(studio-server): cascade GSAP cleanup when deleting subtrees (#3655)
jrusso1020 Sep 4, 2026
924b98a
fix(captions): preserve zero plate grain in generated postfx (#3656)
jrusso1020 Sep 4, 2026
d2741b3
fix(studio-server): preserve binary file writes and versions (#3653)
jrusso1020 Sep 4, 2026
29efd5d
docs(registry): document installer metadata (#3658)
jrusso1020 Sep 4, 2026
0ad9c70
fix(lint): give randomness guidance for crypto values (#3659)
jrusso1020 Sep 4, 2026
dd06b32
fix(shader-transitions): preserve gravitational lens start frame (#3660)
jrusso1020 Sep 4, 2026
f7cac72
docs(adopters): add Mini Course Generator (#3662)
jrusso1020 Sep 4, 2026
7b77246
docs(adopters): add PandaStudio (#3663)
jrusso1020 Sep 4, 2026
723cd0d
fix(studio-server): block dangling symlink upload escapes (#3661)
jrusso1020 Sep 4, 2026
c8ddbe0
fix(runtime): align nested activation to export frames (#3640)
miguel-heygen Sep 4, 2026
f334b0e
fix(engine): retry capture screenshot timeouts (#3641)
miguel-heygen Sep 4, 2026
78a28b8
fix(producer): preserve render warning attribution (#3642)
miguel-heygen Sep 4, 2026
2ca4930
fix(producer): follow variable audio duration (#3647)
miguel-heygen Sep 4, 2026
50af764
fix(producer): scale high-quality encode timeout (#3649)
miguel-heygen Sep 4, 2026
c0303fc
fix(engine): fail closed on blocked SRI scripts (#3664)
miguel-heygen Sep 4, 2026
3314168
fix(producer): guard disk capture capacity (#3643)
miguel-heygen Sep 4, 2026
32f9ed9
fix(producer): preserve nested entry asset base (#3645)
miguel-heygen Sep 4, 2026
cb44fe1
fix(producer): constrain delivered AAC true peak (#3644)
miguel-heygen Sep 4, 2026
a93106a
docs(skills): fix creative house style reference links (#3668)
jrusso1020 Sep 4, 2026
6605225
fix(producer): isolate font cache temporary writes (#3669)
jrusso1020 Sep 4, 2026
36ec028
fix(cli): forward GIF and frame-format options in batch renders (#3666)
jrusso1020 Sep 4, 2026
8931414
docs(core): fix published frame adapter reference links (#3667)
jrusso1020 Sep 4, 2026
44208ce
docs(cli): document current publish workflow (#3674)
jrusso1020 Sep 4, 2026
1f9f86c
docs(studio): align stack note with package dependency contract (#3675)
jrusso1020 Sep 4, 2026
7fcb5be
docs(registry): clarify catalog preview staging and published URLs (#…
jrusso1020 Sep 4, 2026
19dee4c
fix(render): serve media assets with registered content types (#3677)
jrusso1020 Sep 4, 2026
65cf87d
fix(core): scope composition root pattern selectors per instance (#3684)
jrusso1020 Sep 5, 2026
a7cdd58
fix(capture): retain opaque and glass button styles (#3685)
jrusso1020 Sep 5, 2026
9ed5002
fix(capture): sample computed shadows on ordinary boxes (#3686)
jrusso1020 Sep 5, 2026
64ce9fd
chore: release v0.8.28 (#3689)
miguel-heygen Sep 5, 2026
00c575d
fix(studio): prevent preview hang on burst external file rewrites (#3…
miga-heygen Sep 5, 2026
ae3d80c
chore: release v0.8.29 (#3690)
miga-heygen Sep 5, 2026
f13037e
fix(engine): isolate chunked encode temporary files (#3680)
jrusso1020 Sep 5, 2026
e5d1d9b
fix(engine): avoid transform regex backtracking (#3704)
jrusso1020 Sep 5, 2026
eec0434
fix(core): avoid grade stats regex backtracking (#3706)
jrusso1020 Sep 5, 2026
c564daf
fix(studio): avoid inline style regex backtracking (#3708)
jrusso1020 Sep 5, 2026
51a3c7e
fix(engine): isolate WAV staging in a private directory (#3709)
jrusso1020 Sep 5, 2026
e9250fc
fix(studio-server): simplify normalized group ID trimming (#3711)
jrusso1020 Sep 5, 2026
7d7003a
fix(studio): match style attributes with explicit quote boundaries (#…
jrusso1020 Sep 5, 2026
fe2cc92
fix(studio-server): bound preview variable insertion scans (#3715)
jrusso1020 Sep 5, 2026
e78da30
fix(core): bound inert region scans in timing compiler (#3717)
jrusso1020 Sep 5, 2026
3610d94
fix(producer): bound existing font-face recognition scans (#3718)
jrusso1020 Sep 5, 2026
b94b5bd
fix(core): bound timing compiler opening tag scans (#3719)
jrusso1020 Sep 5, 2026
e6d2816
fix(cli): publish capture metadata without overwriting files (#3720)
jrusso1020 Sep 5, 2026
b49fba8
fix(cli): preserve concurrent scaffold config creation (#3721)
jrusso1020 Sep 5, 2026
cfdaccb
fix(cli): publish cached synthesis script exclusively (#3722)
jrusso1020 Sep 6, 2026
41551c7
fix(cli): read caption images through checked file descriptors (#3724)
jrusso1020 Sep 6, 2026
be86a1e
fix(render): serve engine and producer files through checked descript…
jrusso1020 Sep 6, 2026
7a07ea9
fix(cli): fetch a page's assets as the same agent that loaded the pag…
miguel-heygen Sep 6, 2026
97fde27
fix(cli): pin Studio bundle, signature and runtime file reads (#3728)
jrusso1020 Sep 6, 2026
1fa31d5
feat(cli): keep every icon a site declares and headline the bare mark…
miguel-heygen Sep 6, 2026
672ea84
fix(cli): clarify publish visibility and claim links (#3730)
miguel-heygen Sep 6, 2026
3874990
chore: release v0.8.30 (#3733)
miguel-heygen Sep 6, 2026
e5b3514
fix(studio-server): publish waveform caches atomically (#3731)
jrusso1020 Sep 6, 2026
f1d0c2e
fix(producer): pin lint entry reads to checked descriptors (#3734)
jrusso1020 Sep 6, 2026
7a2a691
fix(catalog): bind asset reads to checked project files (#3735)
jrusso1020 Sep 6, 2026
39ad272
fix(check): keep auditing when a motion spec is partly unusable (#2805)
xuanruli Sep 7, 2026
051336c
fix(lint): stop three rules matching code a composition only displays…
xuanruli Sep 7, 2026
c59fd16
fix(check): key content_overlap and text_occluded collapse by pair, a…
xuanruli Sep 7, 2026
b0ac581
fix(lint): see the grouped gsap.set that stages a whole scene at once…
xuanruli Sep 7, 2026
0d5d3f3
feat(lint): flag video/img src pointing at an audio file (#3741)
xuanruli Sep 7, 2026
8825def
fix(studio-server): stream preview media byte ranges instead of readi…
miguel-heygen Sep 7, 2026
8958342
fix(studio-server): bridge the node web stream type for the Windows b…
miguel-heygen Sep 7, 2026
30d6f43
chore: release v0.8.31 (#3747)
miguel-heygen Sep 7, 2026
b9aae16
fix(producer): try Windows junctions before copying cached frames (#3…
jrusso1020 Sep 7, 2026
bb89f75
docs(changelog): weekly digest 2026-08-31–2026-09-07 (#3749)
jrusso1020 Sep 7, 2026
dc9fb67
fix(slideshow): retry init at DOMContentLoaded when the children were…
BuddhiLW Sep 7, 2026
e5d89f7
feat(check): flag connectors that point at nothing and stylesheets th…
xuanruli Sep 8, 2026
e027220
fix(engine): isolate static dedup verification seeks (#3768)
heygengenesis[bot] Sep 8, 2026
250afc3
docs: fix broken Claude Design guide link (#3584)
ashokDevs Sep 8, 2026
ab07d67
fix(studio): preserve timeline DOM identity during hydration (#3681)
miguel-heygen Sep 8, 2026
63182f6
fix(cli): reject confirmed unsupported SDR encoders (#3679)
miguel-heygen Sep 8, 2026
131336f
fix(skills): bootstrap npm safely on Windows (#3705)
miguel-heygen Sep 8, 2026
e1ff7e6
fix(lint): flag repeated fromTo state leaks (#3699)
miguel-heygen Sep 8, 2026
2f7b7a9
fix(render): reject unsupported ProRes rate controls (#3702)
miguel-heygen Sep 8, 2026
8fc8294
docs: clarify paused composition roots in project instructions (#3670)
miguel-heygen Sep 8, 2026
00c91d6
fix(check): allow missing caption overrides (#3716)
miguel-heygen Sep 8, 2026
4958a9f
fix(lint): warn on undefined GSAP color variables (#3723)
miguel-heygen Sep 8, 2026
2c14438
fix(lint): flag hidden-style opacity guards (#3694)
miguel-heygen Sep 8, 2026
776c291
fix(check): clip overlap geometry to visible fragments (#3698)
miguel-heygen Sep 8, 2026
78dacc8
fix(skills): accept durationless transition roots (#3683)
miguel-heygen Sep 8, 2026
9308ead
fix(render): bound and recover capture stalls (#3700)
miguel-heygen Sep 8, 2026
5c44cd2
fix(render): probe runtime media source mutations (#3729)
miguel-heygen Sep 8, 2026
400925f
fix(keyframes): resolve helper-returned DOM targets (#3688)
miguel-heygen Sep 8, 2026
e5a6023
fix(skills): guard canonical stores from mirror aliases (#3714)
miguel-heygen Sep 8, 2026
01744f2
fix(media): unify nested start coordinate mapping (#3732)
miguel-heygen Sep 8, 2026
4a72a98
fix(player): pause the hidden loader sheen (#3673)
miguel-heygen Sep 8, 2026
c5b7f6a
fix(check): retry system Chrome after managed launch crash (#3701)
miguel-heygen Sep 8, 2026
6c0ee41
fix(lint): flag autoAlpha on clip elements (#3692)
miguel-heygen Sep 8, 2026
0ce0bb1
fix(runtime): preserve fractional final-frame visibility (#3696)
miguel-heygen Sep 8, 2026
e1fda78
fix(engine): use supported VideoToolbox quality options (#3687)
miguel-heygen Sep 8, 2026
65cc1d6
fix(shader): keep vertex shaders within their WebGL context (#3672)
miguel-heygen Sep 8, 2026
d66cd6d
fix(catalog): publish cache assets without overwriting entries (#3739)
jrusso1020 Sep 8, 2026
a92dc68
fix(skills): read BGM logs without pathname prechecks (#3769)
jrusso1020 Sep 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
50 changes: 50 additions & 0 deletions .agents/skills/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Project-local Codex CLI skills

Skills in this directory are auto-discovered by Codex CLI (verified against
Codex 0.144.3) when the `hyperframes` repo is opened as the working
directory. They are NOT part of the marketplace-distributed plugin (that
set lives under `skills/` and is manifested by `.codex-plugin/`). Two
separate namespaces, on purpose:

- `.agents/skills/` — **repo-native**, run only against this repo
(weekly changelog videos, doctrine-heavy authoring flows). Codex CLI's
project-local skill dir.
- `skills/` — **marketplace-distributable**, installed into other
projects via `npx hyperframes skills` or `npx skills add
heygen-com/hyperframes`.

## Weekly changelog video

The `changelog-video` skill turns a weekly changelog markdown into a
~45–60s branded 1080×1080 MP4 (motion-doctrine layout, Annie VO,
seam-gated cuts, caption rail). It ships pre-configured — fonts,
background pattern, house BGM, lexicon, and the align-captions script
all live inside `changelog-video/`. Its five dependency skills
(`motion-doctrine`, `cut-the-curve`, `captions-overlay`, `seam-craft`,
`oversized-cursor`) sit alongside so the router graph is complete on
clone.

Weekly usage:

1. Regenerate the digest markdown for the target range:
`bun run changelog:weekly --from YYYY-MM-DD --to YYYY-MM-DD` (this
only reads git; the `--write` variant is what the docs cron uses).
2. In Codex CLI at the repo root, invoke `/changelog-video` with the
generated markdown. The agent will present its script +
visualization plan for review before rendering.
3. Accept, and the agent produces `weekly-changelog-<range>.mp4` gated
by `hyperframes check` (0 errors) + `seam-gate verify` (0 fail/warn).

TTS uses the tracked `skills/hyperframes-media/scripts/heygen-tts.mjs`
(no extra install needed). Runtime dependencies you need on PATH:

- Node ≥ 22
- HeyGen CLI ≥ 0.3.0, authenticated via `heygen auth login --oauth`
- `ffmpeg` (for VO wav conversion + frame QA)
- A headless Chrome for HyperFrames rendering (`hyperframes doctor`
will point out the exact ask if it's missing)

The parallel set at `.claude/skills/` is a byte-identical copy so
Claude Code users get the same auto-discover behaviour — keep the two
in sync when editing. A `scripts/check-skill-mirror.mjs` check enforces
this at CI time.
81 changes: 81 additions & 0 deletions .agents/skills/captions-overlay/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
name: captions-overlay
description: Overlay doctrine for the embedded-captions workflow — the caption MODEL (drop / rail / embed) and the rule that captions are an OVERLAY composited on top of the film, never a reserved bottom band you shift content up to avoid. Load when adding captions/subtitles to a talking-head or launch video, when deciding whether a phrase should be dropped, ride the verbatim rail, or be promoted to a scarce embedded climax, when laying out a composition that will carry captions (do NOT reserve a keep-out band), or when centering a composition on the true frame center under captions. Quotes the rail+embed model from embedded-captions and constraint #13 (captions overlay, keep-out band retired) from the product-launch-video scene agent. Applies ON TOP of embedded-captions.
---

# Captions Overlay Doctrine

> **Overlay doctrine — supplements the upstream `embedded-captions` skill. Applies ON TOP of it; do not expect it folded into the upstream skill.**

Two ideas combine here. First, the **caption model** — every spoken phrase is `drop`,
`rail`, or `embed`, and embed is the scarce earned peak, not the default. Second, the
**overlay law** — a caption line is composited ON TOP of the film as an overlay; it is
NOT a reserved zone, so you never shift content up or leave a dead band to "make room"
for it. The two reinforce each other: because captions ride as an overlay (the verbatim
rail in front, the occasional embed behind the subject), the composition keeps its full
frame and centers on the true vertical center.

## The caption model — drop / rail / embed

Every spoken phrase is one of three things (verbatim from `embedded-captions`):

| | What | How it's shown |
| --------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **drop** | filler — um/uh, stutters, self-corrections | not shown |
| **rail** | the default — ordinary spoken content (verbatim) | clean lower-third subtitle, **in front**, readable. A punch word can get an inline `emphasis` highlight (accent colour / active-word pop) — it stays on the rail. |
| **embed** | a promoted peak — the headline beat | one big word composited **behind the subject** (matte occlusion), designed entrance + exit |

**The rail carries most of the text; embed is the scarce, earned peak** — ≤1 per beat,
never two adjacent/co-visible, spaced ≥ a beat apart. A short clip → usually one embed;
a long explainer → ~one per section. Embedding every word is the common mistake.

This is the **Standard** mode shape (rail = the verbatim lower-third; embed = the climax
composited behind the subject). **Cinematic** mode drops the rail and makes everything
embed-style — use it only for pure-cinematic asks, never for explainer / voiceover where
the words must read.

### Rail-first, embed-scarce (the load-bearing rules)

Quoted from the `embedded-captions` non-negotiables:

- **Rail-first for talking-head / explainer.** Don't embed the whole transcript — most
text is the rail; embed only peaks. Embedding everything is the default mistake.
- **Embed is scarce + spaced.** ≤1 embed per sentence/beat, never two adjacent or
co-visible, ≥ a beat apart, at most one `apex`. climax = per-beat peak, **not** "the
single payoff of the entire clip."

## The overlay law — captions are NOT a reserved band

In a generated launch composition, when captions are enabled, finalize composites a
**small, minimal word-by-word caption line** as an overlay layer ON TOP of the whole
film (a single text line, bottom-centered, roughly the bottom ~5-8% of canvas height).
It is an overlay, not a reserved zone (verbatim from constraint #13 of the
product-launch-video scene agent):

- **Center the composition on the TRUE vertical center — y = H / 2** (landscape 540,
portrait 960). Do not shift content up to "make room" for captions; a composition
centered at 0.42 × H with a dead lower band is the bug, not the fix.
- Content may extend to the canvas bottom. Full-bleed subjects, rails, and backgrounds
all welcome.
- **One soft courtesy rule:** avoid parking _critical small readable text_ (a URL line,
a legal line, a sub-caption) exactly in the bottom ~80px center span where the caption
line sits — the overlay would fight it. Large imagery / cards / ambient content under
the captions is fine; the caption skin is designed to read over content.
- There is no machine keep-out gate (the old `captions.mjs keepout` check is retired).
Finalize snapshot QA judges caption-over-content legibility visually.

**When captions are disabled:** identical positioning freedom — the overlay simply
doesn't exist.

## Why these two rules are one doctrine

The model says the rail rides **in front** and an embed is a rare word composited
**behind the subject** — both are layers added to footage that ships untouched. The
overlay law says the caption line is a layer composited **on top** of the whole film,
not a band carved out of the layout. So in both the captioning pipeline and the
launch-video pipeline, captions are an overlay you add, not a zone you reserve:

- Keep the full frame; center on true center; let content run to the edges.
- Make the rail (or the small overlay caption line) carry the verbatim words.
- Promote a word to an embed only at a genuine peak — scarce, spaced, never two at once.
- Reserve nothing; judge legibility of captions-over-content visually, not by a keep-out gate.
Loading