# A cursor worth watching

> Lumae hides the real pointer and redraws it: a smoothed path, a lean into fast moves, a press on every click, and artwork that stays sharp under a zoom.

*Source: https://lumae.app/features/smooth-cursor.md. This page in HTML: https://lumae.app/features/smooth-cursor.*

A recorded pointer jitters, snaps between samples, and goes soft the moment you zoom in. Lumae hides the system cursor while it records, keeps the data it needs, and draws the pointer back in at render time.

## At a glance

- **Position sampling:** 60 Hz
- **Cursor image sampling:** 20 Hz
- **Tilt:** capped at 15°
- **Click press:** 76 % over 70 ms
- **Ripple:** 21.5 pt over 0.5 s
- **Artwork density:** 12 px per point

## Recorded, then redrawn

While recording, Lumae samples the pointer's position at 60 Hz and the pointer's *image* at 20 Hz, storing each distinct shape once. Mouse buttons and scroll come from a global event monitor, which needs no extra permission. None of this is keystrokes, and none of it leaves the Mac.

At render time the position for any frame is a Gaussian-weighted average of the samples around it, with the width taken from the Smoothing slider. That makes it stateless: frame 900 renders identically whether you scrubbed to it or played into it, which is what lets the preview and the export agree.

## Lean, press, ripple

The pointer leans into sideways motion. The rotation is proportional to horizontal speed measured in content widths per second, soft-capped with a hyperbolic tangent at 15°, and it pivots on the hot spot so the tip leads and the body swings behind it. Camera motion is excluded, so panning the virtual camera does not tilt the cursor.

A click presses the pointer down towards its tip: eased in over 70 ms, held at 76 % for at least 90 ms so a fast click still reads, and sprung back 160 ms after the recorded mouse-up. A drag therefore stays pressed for its whole length. The ripple is a separate choice: a wave that leaves the pointer's edge and travels about 21.5 points over half a second, thinning from a solid dot to a hairline and fading on a curve so it dies away rather than switching off. A pale core over a wider dark halo keeps it legible on light and dark interfaces alike.

## Four pointers, three click effects

What is drawn and how a click is marked are independent choices, so any of the four pairs with any of the three.

- **As recorded** draws the captured cursor of the moment, so the pointer changes shape with the app exactly as it did on screen.
- **Arrow** pins the plain macOS pointer throughout, which is a different thing: it ignores an app's own idea of a pointer.
- **Touch** draws a fingertip, a translucent disc with a white rim, for demos that will be shown as a mobile flow.
- **Hidden** draws nothing, leaving a clean picture that a ripple can still mark.

Click effects are ring, scale, or none. The ring needs only click data, so it marks clicks even under a hidden pointer; the press needs a pointer to press.

## Sharp at 250 % and under a zoom

AppKit hands most cursors over as 1× and 2× bitmaps, which is why a pointing hand goes visibly soft at demo sizes. macOS keeps the vector artwork for every cursor on disk, so Lumae recognises a captured cursor by its size, hot spot and pixels, then rasterises the matching artwork at 12 pixels per point with the shadow macOS draws under it. A cursor it cannot match is enlarged with Lanczos rather than bilinear, which left a 2× system bitmap visibly soft.

The recording stays self-contained: the artwork is resolved while recording and stored in the project, so the renderer never reads system files.

## Questions

### Does the real cursor still appear in the recording?

Not by default. Lumae hides the system cursor during capture and draws its own, which is what makes smoothing, tilt and the click press possible. You can record with the cursor in the picture instead, in which case Lumae leaves it alone.

### Can I turn the cursor effects off?

Yes, each one separately. Set the pointer to Hidden, the click effect to None, or drag Smoothing and Tilt to zero. An imported clip has no cursor data at all, and the inspector says so rather than showing inert controls.

## Related

- [Automatic zoom](https://lumae.app/features/automatic-zoom.md): Clicks become camera moves, with the timing worked out for you.
- [Motion blur](https://lumae.app/features/motion-blur.md): Camera moves sampled across a shutter, the way a lens does it.
- [Screen recording](https://lumae.app/features/screen-recording.md): Display, window or area, with the metadata the editor needs.
