Skip to content

Video Player Improvements #993

Merged
wesbillman merged 2 commits into
mainfrom
kennylopez-video-preview-fullscreen
Jun 11, 2026
Merged

Video Player Improvements #993
wesbillman merged 2 commits into
mainfrom
kennylopez-video-preview-fullscreen

Conversation

@klopez4212

@klopez4212 klopez4212 commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

What

Screenshot 2026-06-11 at 21 59 04 Screenshot 2026-06-11 at 21 58 57

Videos in chat now have a custom inline player and a fullscreen review overlay with timecoded comments

Inline player — glass control pill (play/pause, scrubber, time, volume), no native browser UI. object-cover so tiles never letterbox. Seeks are serialized against the browser's seek pipeline so slow scrubbing shows the frame under the pointer.

Review overlay — portaled dialog (shadcn neutral dark theme) with:

  • Ambient glow behind the video (downscaled frames → heavy blur, radially masked) and a rounded clip wrapper that hugs the actual frame
  • Timeline with comment avatar markers, hover scrub preview, thin playhead
  • Comments panel embedding the standard MessageComposer (mentions, attachments, drafts) with threaded replies, amber timecode chips, and a "comment at current frame" toggle; panel is collapsible and hidden entirely when commenting is unavailable (e.g. thread videos)
  • Composer mount deferred past first paint — overlay opens in ~16ms

Stability fix — video review context flows through React context with per-message memoized values, so timeline re-renders no longer remount the <video>. That remount was the root cause of stuttering playback, lost positions, and the comment box dropping keystrokes.

Uploads — attachment spinner replaced with a progress bar driven by byte-level media-upload-progress events streamed from the Rust upload path (zero-copy Bytes chunks).

Verification

  • New video-attachment.spec.ts covers inline controls, review timeline/markers, comment + reply flows, the frame-stamp toggle, panel collapse, and a regression test that a live message mid-typing doesn't wipe the comment draft
  • Full smoke suite (180), desktop unit tests (627), Tauri tests (499), clippy, biome, tsc — all green
  • Manually verified against real mp4s (playback, scrubbing frame preview, glow, radius, portrait cover fit)

🤖 Generated with Claude Code

Videos in chat get a custom inline player (glass play/scrub/volume
controls, no native UI) and a fullscreen review overlay with
timecoded comments, frame.io-style.

Inline player:
- Custom glass control pill (play/pause, scrubber, time, volume);
  slide-only animation so backdrop blur never flattens mid-transition
- object-cover so the tile never letterboxes; seek queue serialized
  against the browser's seek pipeline so slow scrubbing shows frames

Review overlay (portal, shadcn neutral dark theme):
- Ambient glow behind the video (downscaled frames -> blur, radially
  masked); rounded clip wrapper that hugs the actual frame
- Timeline with comment markers, hover scrub preview, thin playhead
- Comments panel embeds the standard MessageComposer (mentions,
  attachments, drafts) with threaded replies and amber timecode chips;
  optional "comment at current frame" toggle; collapsible panel
- Panel hidden entirely when commenting is unavailable (thread videos)
- Composer mount deferred past first paint (~16ms open)

Stability: video review context flows through React context with
per-message memoized values so timeline re-renders no longer remount
the <video> (was the cause of stuttering playback, lost positions,
and the comment box eating keystrokes).

Uploads: spinner replaced with a progress bar driven by byte-level
events streamed from the Rust upload path (zero-copy Bytes chunks).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@klopez4212 klopez4212 changed the title feat(desktop): frame.io-style video review for chat videos Video Player Improvements Jun 11, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c09355b894

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +99 to +100
const openReviewKeys = new Set<string>();
const reviewPlaybackPositions = new Map<string, number>();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reset video review caches on workspace switch

AGENTS.md’s Workspace Switching section says any new module-level cache holding workspace-scoped data must be wired into resetWorkspaceState(). These module-level sets/maps persist across React remounts, but no clear/reset function is added to desktop/src/features/workspaces/useWorkspaceInit.ts, so after switching workspaces without a page reload an old video’s open-review state or playback position can be reused if the new workspace has the same review key/URL, and the maps also retain stale workspace entries indefinitely. Please export a reset helper here and call it from resetWorkspaceState().

Useful? React with 👍 / 👎.

Resolve conflicts after the Buzz rename and welcome-channel layout changes while preserving the video review/upload progress implementation.

Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
@wesbillman wesbillman force-pushed the kennylopez-video-preview-fullscreen branch from 5135f58 to fe802e7 Compare June 11, 2026 22:10
@wesbillman wesbillman enabled auto-merge (squash) June 11, 2026 22:12
@wesbillman wesbillman merged commit 05fc69b into main Jun 11, 2026
15 checks passed
@wesbillman wesbillman deleted the kennylopez-video-preview-fullscreen branch June 11, 2026 22:21
tlongwell-block pushed a commit that referenced this pull request Jun 12, 2026
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>

* origin/main: (35 commits)
  feat(huddle): sentence-at-a-time voice-mode guidelines for lower TTS latency (#996)
  Shard desktop Playwright CI jobs (#992)
  chore(release): release version 0.3.18 (#995)
  Video Player Improvements  (#993)
  Improve first-run welcome setup (#970)
  fix(release): use legacy updater key secret (#991)
  Replace built-in personas with Fizz (#987)
  docs(buzz-acp): rewrite Communication Patterns for mention accuracy and threading clarity (#982)
  chore(justfile): build git-credential-nostr in dev and staging recipes (#980)
  Fix Buzz command migration for saved agents (#979)
  fix(desktop): resolve effective model and prompt from persona in display path (#972)
  docs: clean up remaining Buzz references (#977)
  chore(release): release version 0.3.17 (#976)
  fix(onboarding): skip onboarding when relay already has a profile (#973)
  docs: finish Buzz rename cleanup (#974)
  fix(desktop): let channel members bypass mention agent gate (#965)
  Rename desktop app to Buzz (#960)
  feat(desktop): open profile panel from MembersSidebar rows (#962)
  feat(desktop): per-event notification sounds and alert controls (#968)
  fix(desktop): make header chrome zoom-correct and tidy split-pane (#941)
  ...

# Conflicts:
#	crates/buzz-agent/README.md
#	crates/buzz-agent/src/config.rs
wpfleger96 pushed a commit that referenced this pull request Jun 12, 2026
…session-new

* origin/main:
  fix(huddle): Pocket TTS quality overhaul — reference parity + cross-message pipelining (#997)
  Add manual ACP session rotation command (#932)
  fix(desktop): heal stale persona_team_dir paths in release builds (#1003)
  ci(docker): publish public ghcr.io/block/buzz image (native multi-arch) (#986)
  fix(buzz-agent): cap tool-result text at 50 KiB with middle elision (#952)
  feat(huddle): sentence-at-a-time voice-mode guidelines for lower TTS latency (#996)
  Shard desktop Playwright CI jobs (#992)
  chore(release): release version 0.3.18 (#995)
  Video Player Improvements  (#993)
  Improve first-run welcome setup (#970)
  fix(release): use legacy updater key secret (#991)

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>

# Conflicts:
#	crates/buzz-acp/src/lib.rs
#	crates/buzz-agent/src/config.rs
tellaho added a commit that referenced this pull request Jun 12, 2026
…tate

* origin/main:
  Add relay disconnect UX: friendly errors, reconnect, cached identity (#1004)
  feat(agents): add active turn indicators to Agents Menu (#1005)
  ci: add fork guards to docker, release, and auto-tag workflows (#1007)
  docs(nip-rs): add optional thread read context scheme (#1006)
  fix(huddle): Pocket TTS quality overhaul — reference parity + cross-message pipelining (#997)
  Add manual ACP session rotation command (#932)
  fix(desktop): heal stale persona_team_dir paths in release builds (#1003)
  ci(docker): publish public ghcr.io/block/buzz image (native multi-arch) (#986)
  fix(buzz-agent): cap tool-result text at 50 KiB with middle elision (#952)
  feat(huddle): sentence-at-a-time voice-mode guidelines for lower TTS latency (#996)
  Shard desktop Playwright CI jobs (#992)
  chore(release): release version 0.3.18 (#995)
  Video Player Improvements  (#993)
  Improve first-run welcome setup (#970)
  fix(release): use legacy updater key secret (#991)
  Replace built-in personas with Fizz (#987)
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.

2 participants