Skip to content

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

Closed

Description

@codeonym

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

Problem

The recorder deliberately excludes the system cursor. Its clean master shows clicks without a pointer, and a full-page view can be hard to follow. GH-5 now supplies the fitted master and events on the final delivery timeline; GH-7 adds visual emphasis without changing that timeline.

Change

  • Automatically polish the MP4 produced by record, using the existing FFmpeg installation. Preserve the clean retimed master, its calibration offset, original speech clips and normalized voice bus (story decisions 012–013; ticket decision 005).
  • Draw one white arrow with a dark outline following the logged eased paths. Keep its apparent size constant during zoom. Draw an expanding blue ring at every click, fading over 400 ms (decision 004).
  • Clicks trigger a 650 ms eased zoom-in, capped at 4/3 (about 1.33×). Keep zoom until 2000 ms after the most recent click or typing finishes, then ease out over 800 ms. Activity during the zoom extends it; hover and scrolling alone do not trigger zoom (decisions 001–002 and 006).
  • Follow the cursor smoothly while zoomed. Add optional CSS target bounds to click and typing events in the compatible version 1 event log. Keep the crop inside the source frame and reduce zoom as needed to show the visible target with padding. Existing logs without bounds use click-point framing, without a whole-element visibility guarantee (decision 003).
  • Use the shipped 1440p master for default 1080p delivery. This corrects the earlier 4K wording, superseded by Replay a demo script on a virtual display and write a silent MP4 with step timings #2 decision 005. Optional 4K capture remains in its existing story follow-up.
  • Preserve delivery frame count/FPS, speech placement, transcript and caption times. Use final retimed events once, without applying Hold each step for its voice clip, mux the audio, and check sync and reproducibility #5 holds a second time.

Out of scope

Sound effects (GH-8), optional 4K/GPU capture, OS-specific cursor styles, new CLI commands or script controls, intro/outro cards, burned-in captions, and the existing odd-viewport recorder follow-up. No follow-ups are taken up.

Done when

  • The sample demo shows the pointer following moves and a ripple beginning at each click's time within one delivery frame.
  • Zoom follows the agreed activity timing, stays at or below 4/3, and keeps the visible target bounds framed; oversized or partly off-screen targets are limited by what the clean master actually captured.
  • Zoom stays inside the source and does not upscale beyond the available source resolution. Cursor size stays constant at delivery scale.
  • Repeated renders of identical master/events/settings produce identical decoded video frames on the same image. Independent browser recordings retain the story's existing ±150 ms comparison contract, rather than requiring identical MP4 bytes.
  • Frame count, audio duration/placement, source WAV hashes, transcript/caption times, silent output, and clean-master behavior remain covered by automated checks.
  • Unit, media and full recording checks pass; a concrete polished narrated demo is visually reviewed, and render time/memory are recorded.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions