Skip to content

fix(core): a timeline set that hides a timed clip hides it in preview and render - #6351

Merged
miguel-heygen merged 3 commits into
mainfrom
fix/preview-set-visibility
Oct 25, 2026
Merged

miguel-heygen merged 3 commits into
mainfrom
fix/preview-set-visibility

Conversation

@miguel-heygen

@miguel-heygen miguel-heygen commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

A tl.set(clip, { visibility: 'hidden' }, 2.67) on a timed clip (data-start / data-duration) is overwritten by the runtime's per-seek visibility pass, which writes visible on every clip inside its window. In a render the pass runs after the timeline, so the clip stayed visible after 2.67; in preview the result depended on the order of the pass and the timeline within each seek. A render that starts mid-timeline (a chunk of a split render) hit it on its first frame.

The pass now hides a clip with visibility: hidden !important. A script's write replaces the declaration and drops the priority, so a plain hidden on a clip inside its window is the script's and is left alone. This does not depend on earlier seeks. A clip authored with inline visibility: hidden is still revealed by the pass, as before. Clips with no script involved are decided exactly as before.

Checked on a fixture (one clip with a set at 2.67, one starting at 1 s): render snapshots at 2.6 s show both visible and at 2.7 s both hidden; before the change both stayed visible. New runtime tests cover the preview seek path and the render seek path, including a first seek past 2.67; they fail without the change. The 102 runtime test files pass.

Known gaps, left for a follow-up because both come from the runtime hiding clips through the same property the script writes:

  • A clip whose window is left and re-entered past the set shows visible: the pass's out-of-window hide overwrites the script's hidden, and GSAP does not re-render a set it already passed.
  • A jump from before the clip's data-start straight past the set leaves a clip with a later start visible: GSAP reads the runtime's own hidden as the set's start value, so hidden to hidden is skipped (trace in a render seek to 3 s: inline visibility: visible after the pass, timeline time 3).

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: REQUEST CHANGES · 1 blocker · 0 important · 0 nits · head 443152a8

A script-hidden clip with timed children now renders half-hidden: the clip hides, but its timed descendants stay visible. Details ↓ inline.

Scope

Read the full diff, plus clipChainVisibleAt, unchangedSincePlayedFrom, clipReveal.ts, and the other code that writes clip visibility (engine screenshotService mask/restore keeps the priority; shader-transitions writes only visible; [style*="visibility: hidden"] selectors still match with !important). Ran the new tests (4/4 pass). Ran jsdom probes against this head and against the PR's base for: a nested timed child, an autoAlpha fade-out, and an autoAlpha from(). The fade cases behave correctly. CI was still running when I posted; no prior reviews.

Comment thread packages/core/src/runtime/init.ts
@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Edit accuracy: accurate 271 (base branch 271), smooth 141 of those

The gate passes.
Smoothness is reported in the artifact, not gated. A case fails only if it fails 2 of 3 runs.

Quarantined, measured but not gated (0)

Unstable (1)

  • seqplainkeys-none-pct-r0-nested-z100: tracking 0.05, pressJump 0, drop 0, reload 0, render 0.02, renderKey -, undo false, teleport true / tracking 0.05, pressJump 0, drop 0, reload 0, render 0.02, renderKey -, undo true, teleport true / tracking 0.05, pressJump 0, drop 0, reload 0, render 0.02, renderKey -, undo true, teleport true

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: APPROVE — 1 resolved, 0 open, 0 new · 443152a8 → 1a42c256. All Actions runs green on this head; src/runtime 102 files / 2,477 tests pass locally.

@miguel-heygen
miguel-heygen added this pull request to the merge queue Oct 25, 2026
Merged via the queue into main with commit 553f2c5 Oct 25, 2026
82 checks passed
@miguel-heygen
miguel-heygen deleted the fix/preview-set-visibility branch October 25, 2026 23:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant