Features
Every feature. Zero overhead.
Each capability below runs inside the same performance budget: less than 0.5% CPU and 20 MB of RAM on top of the engine — 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 --out demo.mp4
wispframe record --window 6660 --out window.mp4
wispframe record --app com.apple.Safari --out safari.mp4
# HEVC or lossless ProRes
wispframe record --codec hevc --out demo.mp4
wispframe record --codec prores --out demo.mov
# all displays at once
wispframe record-all --out-template ~/Movies/multi-{n}.mp4Stills
Screenshots, and the tools around them
A region you drag, a single window, or the whole display — captured at native backing resolution, straight to PNG. Set a countdown when the thing you want only appears after you let go of the mouse, and turn on Copy to clipboard on capture to skip the file entirely.
Scrolling capture is the one thing the App Store build cannot do: driving the page needs the Accessibility permission, which a sandboxed app may not hold, so it refuses up front and points you at `screenshot --region` instead. It handles what doesn't fit on screen: point it at a scrollable region and it auto-scrolls, grabbing and stitching the frames into one tall PNG — a whole web page, chat log, or document in a single image.
Two more live in the same row. The eyedropper samples any pixel on screen and hands you its HEX and RGB, and Pin image floats a still on top of everything so you can keep a reference in view while you work. Annotate opens the captured still in the same editor the videos use — arrows, boxes, blurs, text.
# a region, a window, or the whole display
wispframe screenshot --region 100,100,1200,800 --out shot.png
wispframe screenshot --window 6660 --out window.png
wispframe screenshot --full --delay 3 --out screen.png
# a long page, stitched into one tall PNG
wispframe scroll-capture --region 200,120,1400,900 --out page.png
# sample a pixel, straight to the clipboard
wispframe pick-color --at 640,480 --clipboard✦ 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 \
--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 — or its screen
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.
Plug the phone in with a cable and its SCREEN appears in the same picker, under “Camera and mobile screen”. It records at the device's own resolution — portrait, full size, no preset in the way — and it is a source like any other, so it can sit in a multi-source recording beside a display.
wispframe list-cameras
wispframe record-pip --camera <uniqueID> \
--corner br --system-audio --mic --out talk.mp4
# the phone's screen: the entry whose kind is IosScreen
wispframe record-camera --camera <uniqueID> \
--duration 30 --out phone.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 --mask-bg vision --out out.mp4
# or clean up an existing video
wispframe remove-bg --in input.mp4 --out nobg.mp4 --backend onnx