Skip to content

feat(player): loading assets shows the blurred frame and the mark, like Desktop - #6934

Merged
miguel-heygen merged 2 commits into
mainfrom
feat/player-loading-mark
Nov 2, 2026
Merged

miguel-heygen merged 2 commits into
mainfrom
feat/player-loading-mark

Conversation

@miguel-heygen

@miguel-heygen miguel-heygen commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

What

While a composition waits on its images, video or fonts (or the video buffers), the web player now shows what Desktop shows: the current frame softly blurred with the HyperFrames mark in the middle and a light passing over it. The opaque "Loading assets" text card is gone. The words stay as the accessible name for screen readers.

Why

The web player's loading card and Desktop's loading look disagreed. People who move between the two saw two different states for the same wait.

Related work

Refs the Desktop loading look. The shader-transition loading panel shares the same element and is unchanged: it still draws its text, progress bar and rows.

How

  • The card gets a mode class while it is the assets or buffering card. It hides the text rows, drops the black background and adds a sheen over the mark. The shader load clears the class when it takes the panel back, so its look is untouched.
  • The frame blur is a host-attribute rule on the iframe and poster (filter: blur(6px) saturate(0.85), eased in and out). It follows assets-loading and buffering, and is off when assets-loading-ui="none", so Desktop (which draws its own) is not blurred twice.
  • The mark already existed in the player; its path data is now one constant that feeds both the visible mark and the sheen's mask, so the light passes over the mark's shape only.
  • Motion is transform and opacity on the sheen. No backdrop-filter. The blur is a plain filter on a frame that is still while it waits, so it paints once. Not measured on Safari hardware in this PR.
  • Reduced motion: the sheen stands still and the blur changes at once.

Known edge: the blur fades to the page colour along the frame's outer edge, as Desktop's does.

Test plan

Fails without the fix: the new shader-loader-state test "marks the card as the quiet look" fails when the mode class is not added (6 of 7 pass, 1 fails), and passes with it (7 of 7).

  • Unit tests added/updated: shader-loader-state.test.ts, 7 passed; whole player suite 577 passed (18 files), exit 0
  • tsc --noEmit, oxfmt --check, oxlint clean on packages/player
  • Manual testing performed: real player in headless Chromium, a composition whose image never answers

Before

Before: opaque text card

After

After: blurred frame and the mark

@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 · 1 important · 0 nits · head a53b8137

The code is fine. The changes are only for two CI checks this PR breaks.

  • blocker: the required check Studio and player captures fails. The body has Before: / After: as plain text, not ## Before / ## After headings, and both images sit under After:. Make each a heading with its own image under it. Edit the text in the UI, not with --body-file, so the attachments stay.
  • important: the Comments ratchet fails. See the inline comment.
Scope

I read all 4 files. I followed hfp-assets through reset, update, showAssetsLoading and hideAssetsLoading, and checked that the blur selectors match the timers that set the assets-loading and buffering attributes in hyperframes-player.ts. If a shader load takes the panel back while the frame is still blurred, its opaque #030504 card covers the blur, so that case is fine. The fails without the fix: line holds: I removed the classList.add("hfp-assets") call, got 1 failed and 6 passed, then put it back and got 7 of 7. CI, Player perf, Safari perf and CodeQL were still running when I reviewed.

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Edit accuracy: accurate 271 (base branch 271), smooth 102 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)

@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 — 2 resolved, 0 open, 0 new · a53b813 → b9d11ea

@miguel-heygen
miguel-heygen added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit e3a7cdd Nov 2, 2026
130 of 131 checks passed
@miguel-heygen
miguel-heygen deleted the feat/player-loading-mark branch November 2, 2026 17:38
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