Skip to content

feat: render cursor, click ripples and automatic zoom (#7) - #14

Merged
codeonym merged 2 commits into
mainfrom
feat/7-render-cursor-zoom-polish
Nov 11, 2026
Merged

codeonym merged 2 commits into
mainfrom
feat/7-render-cursor-zoom-polish

Conversation

@codeonym

@codeonym codeonym commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Summary

record now adds a visible cursor, click ripples and automatic target-aware zoom while preserving narration and every delivery frame.

clean retimed master + final events
  → camera plan (zoom ≤4/3, target bounds, eased pointer)
  → FFmpeg crop + constant-size cursor/ripples
  → narrated MP4 on the existing timeline

Zoom eases in over 650 ms, holds until 2 seconds after click/typing activity, and eases out over 800 ms. Typing at the same target extends the hold without restarting an unfinished ease. Optional bounds extend version 1 events compatibly; old logs retain point-based framing. The clean master and original WAVs stay intact. No dependencies or public controls added.

Closes #7

Evidence

  • Before: delivery had no cursor/zoom; first playback review found the initial 300/1000/400 ms camera timing too abrupt. A regression also reproduced a fast pointer escaping during zoom-out.
    After: user approved the revised narrated preview; decoded-frame tests verify sprite visibility, ripple timing, target zoom, frame count and identical repeated renders. Same-target typing no longer restarts the zoom.
  • npm test: 73 tests pass. Type checking, build, package smoke and whitespace checks pass.
  • Full local npm run test:e2e: 24 tests pass before the playback timing revision. Afterward all 11 focused render tests pass on host FFmpeg 9 and image FFmpeg 6; the revised real master/WAV rerender preserves 375 frames / 12.5 seconds. GitHub CI attempts 1 and 2 could not reach tests because Ubuntu package mirrors failed DNS resolution; attempt 3 is still in dependency setup. No required merge checks are configured. Cloud verification remains unconfirmed; local verification and approved playback are the merge evidence.
  • Extracted npm package renders offline without source modules or node_modules. Standards and Spec reviews have no remaining findings.
  • A 12.5-second 1080p narrated render took 41.01 seconds / 814884 KiB peak RSS on the busy test host. Detailed evidence: planning/GH-1-narrated-reproducible-feature-demos/tickets/GH-7-render-cursor-zoom-polish/build-notes.md.

Merge Danger

Door: two-way

Revert restores the previous plain delivery renderer; no data migration or schema-version break.

Blast Radius: recording

Delivery rendering changes for every recording. Frame/audio guards and both FFmpeg versions are covered; zoom is limited to the captured source, and off-screen content cannot be recovered. Sounds and optional 4K capture remain separate work.

@codeonym
codeonym merged commit 4dc3740 into main Nov 11, 2026
0 of 3 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.

Render a smooth cursor, click ripples, zoom on click and follow cursor from the event log

1 participant