2026
SimpleClips
A desktop app that records your screen, trims and crops the clip, sizes it exactly, and compresses it to web weight. I built it to stop juggling Giphy, Adobe Media Encoder, and hand-written ffmpeg. Local only, nothing leaves your machine.
Why I built it
I make a lot of short clips for this site and for work. The old routine was a mess. Record in one tool. Switch to Giphy to make a GIF. Switch to Adobe Media Encoder to transcode. Drop into Claude to write the ffmpeg command when none of those did the thing I needed. Crop somewhere else. Compress somewhere else again.
So I built one app that does all of it. Get footage in, frame and trim it, set the size and quality, export the format you need. That is the whole flow.
What it does
SimpleClips turns a screen recording or an existing video into a short, right-sized clip, without sending anything off the machine.
- Records your screen. Full display or a region you drag a box around. The box shows the true pixel size even on a scaled HiDPI monitor, fades to a thin click-through outline while recording, and never shows up in the capture.
- Takes almost any video. MP4, MOV, GIF, WebM, MKV, AVI, and more. One file, several, or a whole folder. The original is never touched.
- Crops and trims by eye. Drag the corners to frame, drag the timeline handles for in and out, and playback loops inside the trim so you can check your points.
- Sizes it exactly. Scale by percent or type an exact width or height and the other side follows. You can only scale down, never invent pixels.
- One quality slider. Optimized to High fidelity. It changes compression only, never resolution. What you set is what you get.
- Shows the size before you export. A live estimate, plus a "harder estimate" that encodes a real sample at your settings and measures it.
Local only, by design
Nothing leaves your computer. Capture, encoding, and even captions all run locally. Captions use whisper.cpp on-device, so subtitles work with no internet. ffmpeg and whisper ship inside the app, so there is nothing to install and nothing to set up.
It exports to MP4, GIF, WebM, a web bundle, or a long list of other formats, with auto-numbered names so it never overwrites your files. Drop in a batch and "Export & Next" walks the whole queue.
There are two builds of the same product: the original macOS app and a Windows rebuild. Separate codebases, same behavior wherever the platform allows it.
How it's put together
Three command-line tools ride inside the app: ffmpeg does the encoding, ffprobe reads what a file actually is, and whisper.cpp writes captions on-device. Nothing is installed and nothing phones home.
When you drop a file in, ffprobe reads its real size, length, and frame rate. The preview then plays it one of two ways. MP4, MOV, and M4V decode natively in the player. Anything else, like WebM, MKV, AVI, or GIF, gets transcoded into a fast throwaway H.264 proxy with the Mac's hardware encoder, purely so it scrubs smoothly. Your original file is never the thing being edited or exported, only the thing being read.
The brain of the app is one function, plan(). It takes the format and the
quality slider and turns them into the exact ffmpeg arguments: which codec, what
CRF, the filtergraph for crop and scale, the audio bitrate. H.264 formats map to
libx264, WebM to VP9 and Opus, GIF to a two-pass palette. Those arguments are
handed to ffmpeg as a plain list, never glued into a shell string, so a weird
filename can never break or hijack the command.
The size estimate runs on that same plan(). The instant number is pure math,
pixels times frame rate times seconds times a bits-per-pixel figure pulled from
the quality curve, with no encoding at all. When you want a real answer, the
harder estimate actually encodes a few seconds of the clip at your exact export
settings and scales that up, so the figure is measured, not guessed. It stays
locked on that measurement until you change something that would change the size.
🎬 SimpleClips · the pipeline · three bundled command-line tools, every step on your own machine
- 1
Get footage in
Record the screen, or drop in almost any video. The original is never the thing being edited — only the thing being read.
Screen recording (region / fullscreen)Drag-and-drop a file, batch, or folderMP4 · MOV · GIF · WebM · MKV · AVI · …howffprobe reads the real dimensions, length, and frame rate first. The preview then plays it one of two ways: MP4 / MOV / M4V decode natively in the player; everything else (WebM, MKV, AVI, GIF…) is transcoded into a throwaway VideoToolbox H.264 proxy (a tempscpreview_*.mp4) purely so it scrubs smoothly. - 2
Frame & trim — by eye
Drag the crop corners to frame (outside dims), drag the timeline handles for in/out. Playback loops inside the trim so you can check your points.
draggable crop overlaytimeline trim handleslive readout: time · length · resolution · size - 3
Size & quality
Scale by percent or type an exact W×H — the other side follows. One quality slider trades size for detail. Downscale only, compression only.
resolution slider + exact px fieldsOptimized → High fidelityfps slider (≤ source rate)
the brain
plan() — turns your settings into the exact ffmpeg command
One function maps the format + quality slider to real encoder knobs: a codec, a CRF, the crop/scale filtergraph, an audio bitrate. The same plan() feeds the estimate and the export, so the number you preview is the file you get.
Live: instant math — pixels × fps × seconds × bits-per-pixel (read off the quality curve), no encoding at all. Harder estimate: actually encodes a real ~4s sample at your exact export settings and scales it up, so the figure is measured, not guessed. It stays locked on that number until a size-affecting setting changes.
- 4
Export what you need
One click produces the exact format. Names auto-increment so a file is never overwritten, and a batch walks itself with “Export & Next.”
MP4 · GIF · WebM · web bundleMOV · M4V · MKV · AVI · WMV · …auto-numbered (clip, clip_1, …)howffmpeg runs with-progress pipe:1; the app parses the streamedout_time=to drive a determinate bar + ETA. Cancel terminates the process and deletes the partial file.
Local only: capture, encoding, and captions all run on your computer — nothing leaves it, by design. Two builds, one spec: the original macOS app (Swift / SwiftUI, ScreenCaptureKit) and a Windows rebuild (Electron), separate codebases doing the same thing the same way.
Role and stack
Designed and built by me, iteratively, and now I use it all the time. I made it compatible for Windows so a friend could use it too, and added the subtitles feature for my girlfriend, whose primary language is Vietnamese.
Every GIF and WebM on this website was either captured with it or compressed with it to make the site more performant. That is the real proof: the site you are looking at runs on it.
Results
50% lighter
less for visitors to download across the whole site, just from compressing the clips with it.
Under 800 KB
per preview, regularly, so I can progressively load and autoplay them without the page ever feeling heavy.
Stack: a cross-platform desktop app bundling ffmpeg for encoding and whisper.cpp for offline captions, with separate macOS (Swift / SwiftUI) and Windows (Electron) builds.