Skip to content

[players] Render video viewers through a canvas pipeline#2048

Merged
frankrousseau merged 18 commits into
cgwire:mainfrom
frankrousseau:canvas-player
Jun 12, 2026
Merged

[players] Render video viewers through a canvas pipeline#2048
frankrousseau merged 18 commits into
cgwire:mainfrom
frankrousseau:canvas-player

Conversation

@frankrousseau

@frankrousseau frankrousseau commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Problems

  • Paused seeks could paint a different frame than the one announced — the historical source of off-by-one annotation placements.
  • The visible <video> elements blocked any per-pixel display work (LUTs) and forced the playlist player to juggle element visibility.
  • QA surfaced old player bugs: entity fps ignored on two surfaces (12fps duplicates), laser strokes never fading, stroke caps lost, tile thumbnails drifting, Alt+arrow navigation double-handled.

Solutions

  • Decode in hidden <video> elements, paint through a visible canvas on every requestVideoFrameCallback tick, in VideoViewer and MultiVideoViewer; frameRenderer.js is the seam for a future WebGL/LUT backend. Overlays, wheel and comparison anchor on the canvas.
  • Fix the surfaced bugs: per-entity fps everywhere, laser fade, round caps, measured tile-sprite geometry, single-handled Alt+arrow, no playlist reload on untouched add panel close.
  • Restyle the playlist progress strip and the trim handles; generate timeline stripes at exact frame size; add wheel zoom with a mini-map to the timeline for long clips.
  • Gates: 936 unit tests, prod build, full manual QA.

frankrousseau and others added 18 commits June 12, 2026 12:50
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@frankrousseau frankrousseau merged commit 2a325b9 into cgwire:main Jun 12, 2026
5 checks passed
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