Features

Every feature. Zero overhead.

Each capability below runs inside the same performance budget: less than 0.5% CPU and 20 MB of RAM — most use far less. Built for people who record while their machine is busy.

Capture

Record anything on screen

Pick a display, a single window, or everything one app owns — the source picker shows live hover previews of each, so you never record the wrong window again.

Recordings default to your display's true native resolution — no downscale-then-upscale softness, so text stays razor-sharp on 4K and Retina screens. Switch displays and Native follows; or pick 720p up to 8K explicitly. H.264, HEVC, or ProRes at up to 60fps, encoded entirely in hardware.

Crop to a region with a snipping-tool overlay, or capture every connected display in parallel.

Terminal
# record a display, a window, or an app
wispframe record --display 1 --out demo.mp4
wispframe record --window 6660 --out window.mp4
wispframe record --app com.apple.Safari --display 1 --out safari.mp4

# HEVC or lossless ProRes
wispframe record --display 1 --codec hevc --out demo.mp4
wispframe record --display 1 --codec prores --out demo.mov

# all displays at once
wispframe record-all --out-template ~/Movies/multi-{n}.mp4

✦ New — Studio

Studio polish: the framed look, baked in

Turn a raw screen recording into the beautiful, framed look you see in polished product demos. Studio shrinks and centers your video on a padded canvas, adds rounded corners and a soft drop shadow, and drops it on a backdrop of your choice.

Pick from six gradient presets (Dusk, Sunset, Mint, Slate, Ocean, Mono), a solid color, your own wallpaper image, or a blurred, scaled-up copy of the clip itself. Tune the padding, corner radius, and shadow strength, and render at source size or up to 4K.

Only need part of the frame? Drag a crop rectangle right on the live preview — Studio keeps just that region, then frames and saves it. The same crop is available headless with --crop "x,y,w,h".

It runs on the same zero-copy engine as capture, so the beautify pass barely registers on the CPU. Turn on cursor recording and Studio adds automatic cursor-tracked zoom with click-highlight rings — no keyframes.

Terminal
# frame a recording on a gradient backdrop
wispframe studio --in raw.mp4 --out framed.mp4 \
  --bg gradient:Dusk --padding 8 --radius 16 --shadow 60

# or a blurred copy of the clip itself, at 4K
wispframe studio --in raw.mp4 --out framed.mp4 \
  --bg blur --canvas 3840x2160

# keep only a region, then frame it
wispframe studio --in raw.mp4 --out framed.mp4 \
  --crop 320,180,1280,720 --bg gradient:Dusk
$ cargo build --release
Compiling recorder-core v1.0.0
Finished `release` in under 1% CPU

Gradient, solid, your own image, or a blurred copy of the clip — baked in at under 1% CPU.

✦ New — Subtitler

Automatic subtitles, on-device

Wispframe transcribes your video's speech with an on-device Whisper model — running on Apple Silicon's Metal, so your audio never leaves your Mac. Pick a model (large-v3-turbo by default, right down to a tiny base), and it writes word-accurate captions with a timestamp on every line.

Style them to match what the short-form apps do: 22 one-click presets — from clean captions to word-by-word popups (Pop Word), karaoke fills, soft gradient pills (Aurora, Sunset, Ocean), Neon, Serif, Script, Impact and more — then tweak every field individually: font, weight, size, gradient text and gradient background boxes, outline, shadow, per-line and per-word pills, position, and entrance animation (pop, bounce, slide, typewriter). A colored pill tracks the spoken word, the word fills karaoke-style as it's said, and you can drag the caption to move it or scroll to resize it right on the preview.

Burn the captions into the video, or export a clean SRT or VTT. Everything is scriptable from the CLI and MCP too.

Terminal
# transcribe speech to an SRT (on-device Whisper)
wispframe transcribe --in talk.mp4 --out talk.srt --lang en --words

# burn styled captions in, or export SRT <-> VTT
wispframe subtitle --in talk.mp4 --captions talk.srt \
  --out talk-sub.mp4 --preset Karaoke
Subtitles that read right — word by word.

✦ New — Enhance

Upscale and sharpen, on-device

Old footage, a low-resolution capture, a downscaled export — Enhance rebuilds detail with Real-ESRGAN, running on your Mac's GPU through CoreML, or Apple's own built-in VTSuperResolutionScaler (macOS 15.4+) on the Neural Engine. Choose a model and how far to scale (2× or 4×), set a denoise strength, add an optional resolution cap, and every frame is super-resolved and sharpened with seam-free tiling.

It's a heavier pass than the rest, so there's a live progress bar and you can cancel any time — and like everything in Wispframe, it runs entirely on your Mac. Audio passes straight through.

Terminal
# 2x upscale
wispframe enhance --in small.mp4 --out big.mp4 --scale 2

# 4x, capped to 4K
wispframe enhance --in old.mp4 --out 4k.mp4 --scale 4 --max 3840x2160
Blurry in → crisp out.

Audio

System audio and microphone, mixed live

Most recorders make you choose: the app's sound or your voice. Here you toggle both, set per-source gain from 0–200%, and get a single clean AAC track muxed into the file.

No virtual audio drivers, no BlackHole, no routing utilities. It's two checkboxes and two sliders.

Terminal
wispframe record --display 1 \
  --system-audio --mic \
  --system-audio-gain 0.5 --mic-gain 1.5 \
  --out narrated-demo.mp4
System audio100%
Microphone130%

one AAC track out — mixed on the fly

Camera

iPhone as your webcam

Continuity Camera devices show up in the picker next to built-in and USB cameras — no cables, no companion apps. Pick one, choose a corner, and record screen plus camera picture-in-picture, baked into a single file.

The overlay is composited during encoding, so there's nothing to sync or edit afterwards.

Terminal
wispframe list-cameras
wispframe record-pip --display 1 --camera <uniqueID> \
  --corner br --system-audio --mic --out talk.mp4

Compositing

2–9 sources on one canvas

Record live, too: pick 2–9 displays, windows, and apps in the app, hit Record, and they're captured in parallel — the moment you stop, they merge into one video in your chosen layout, carrying source ①'s audio.

Or combine existing recordings into a grid, side-by-side strip, rows, picture-in-picture corners, or a speaker layout with one flag. Perfect for multi-cam tutorials, panel recordings, and before/after comparisons.

You can also composite two videos at an exact pixel rect and time window — with the base video's audio passing through untouched.

And when a preset isn't enough, go full video mixer: the Custom layout lets you drag and resize every source anywhere on the canvas — overlap them, set per-source opacity, and higher-numbered sources draw on top. Dial the canvas up to 8K, and size the picture-in-picture main and corner tile independently.

New: the arrangement doesn't have to stay fixed. Drop layout keyframes on the timeline — side-by-side for the intro, grid at 12 seconds, one source big for the demo — and choose how each change arrives: a hard cut, a slide, an eased glide, or a cross-dissolve. Everything aspect-fits while it moves, so nothing ever distorts mid-transition.

Shape any source: render the webcam as a circle bubble, or any cell as a rounded rect, triangle, or hexagon — in the app's shape picker and headless with --shape 1:circle. And the whole composition saves as a settings file you can re-import, share, or execute in one command: wispframe run compose-settings.json.

Terminal
wispframe compose-grid --sources a.mp4,b.mp4,c.mp4,d.mp4 \
  --layout grid --out quad.mp4

wispframe compose-grid --sources main.mp4,cam.mp4 --out mix.mp4 \
  --place 0:0,0,1920,1080 --place 1:1200,600,600,400 --opacity 1:60

wispframe compose --base screen.mp4 --overlay cam.mp4 \
  --rect 100,50,640,360 --start-at 12.5 --end-at 30 --out pip.mp4

# switch the arrangement mid-video, with transitions
wispframe compose-grid --sources a.mp4,b.mp4 --out show.mp4 \
  --layout-key 0:sbs --layout-key 12:grid:ease:0.6 \
  --layout-key 40:rows:fade:0.8
cam 1
cam 2
cam 3
cam 4

Privacy

Redaction that can't be undone

Drag boxes over API keys, emails, customer data — choose blur or solid blackout, and it's encoded into the pixels of the output file. Not an overlay, not a filter, not a layer someone can toggle off.

Faces get the same treatment, automatically: blur every face in the video, or click the ones that matter and each is tracked independently, frame by frame, as it moves. Detection runs on-device (Apple Vision, Neural Engine) — no model download, no cloud.

Redactions always render on top of everything else, including text overlays. Privacy wins.

Terminal
wispframe compose --base screen.mp4 --out safe.mp4 \
  --redact 100,100,300,200:solid \
  --redact 500,100,200,150:blur

# blur every face, or track the two you clicked
wispframe compose --base interview.mp4 --out safe.mp4 \
  --redact-faces all
wispframe compose --base interview.mp4 --out safe.mp4 \
  --redact-faces "420,310;1500,360:blur"
production.env — do not stream this
API_KEYsk-live-4f8a…9c2e
DB_PASSWORDhunter2-prod-eu
customer@email.com$1,240.00
AWS_SECRETwJalrXUtnFEMI…

Not a filter someone can remove. Encoded into the pixels.

Reliability

Crash-proof by construction

Recordings are written as fragmented MP4, finalized every two seconds. If your Mac kernel-panics, loses power, or you kill -9 the process at minute 47, the file on disk still opens and plays — you lose at most the last two seconds.

There is no recovery step, no repair tool, no corrupted-file dialog. The file was always valid.

00:00⚡ power loss @ 47:1247:14
✓ 47 min 12 s recovered — plays fine−2 s

# recording is written in 2-second fMP4 fragments

$ kill -9 $(pgrep -f wispframe)

→ recording.mp4 still opens in any player

Overlays

Text & emoji, burned in

Stamp titles, labels, and full-color emoji straight into the encoded stream — position, size, and color per label. CoreText does the rasterizing, so it looks native because it is.

Terminal
wispframe compose --base screen.mp4 --out labeled.mp4 \
  --text "Demo 🎬:100,50:64:#ffff00" \
  --text "LIVE:1600,60:72:#ff3030"

Export

GIFs and multi-codec output

Turn any clip into a share-ready GIF with controllable width and frame rate — from the CLI or one click in the GUI's Done row. Record in H.264 for compatibility, HEVC for size, or ProRes for editing.

Terminal
wispframe to-gif --in clip.mp4 --out clip.gif --width 480 --fps 15

CLI & MCP

A studio your scripts — and your AI — can drive

Every feature is also a headless `wispframe` command: record, compose, caption, upscale, GIF — scriptable, cron-able, CI-able. And the same tools ship as an MCP server, so an AI agent like Claude can run the whole pipeline for you: you describe the outcome, it hands back the finished file.

Terminal
wispframe subtitle --in talk.mp4 --captions talk.json --out final.mp4
# or let your agent do it over MCP:
claude -p "caption talk.mp4 and turn it into a GIF"

Workflow

Gets out of your way

Hit Record and the window disappears; a menu-bar timer is the only sign anything is happening. Stop from anywhere with ⌘⇧. — even with every window hidden. It uses less than 1% CPU, so it never gets in the way of whatever you're recording.

Run several recordings in parallel and watch them in a live session panel. Background removal (Vision on the Neural Engine, or U²-Net via ONNX) runs automatically right after recording, or on any existing video.

Terminal
# record with automatic background removal
wispframe record --display 1 --mask-bg vision --out out.mp4

# or clean up an existing video
wispframe remove-bg --in input.mp4 --out nobg.mp4 --backend onnx