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.
# 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.
# 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:DuskGradient, 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.
# 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✦ 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.
# 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 3840x2160Audio
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.
wispframe record --display 1 \
--system-audio --mic \
--system-audio-gain 0.5 --mic-gain 1.5 \
--out narrated-demo.mp4one 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.
wispframe list-cameras
wispframe record-pip --display 1 --camera <uniqueID> \
--corner br --system-audio --mic --out talk.mp4Compositing
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.
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.8Privacy
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.
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"| API_KEY | sk-live-4f8a…9c2e |
| DB_PASSWORD | hunter2-prod-eu |
| customer@email.com | $1,240.00 |
| AWS_SECRET | wJalrXUtnFEMI… |
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.
# 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.
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.
wispframe to-gif --in clip.mp4 --out clip.gif --width 480 --fps 15CLI & 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.
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.
# 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