Real-ESRGAN on Mac — and when to use an app instead
Real-ESRGAN is free, open source, runs on Apple Silicon, and produces genuinely good upscales. If you are comfortable in a terminal you can get most of the way to a paid tool's output at zero cost, and anyone telling you otherwise is selling something. What you are actually paying $19 for is video handling, memory management, and not writing the pipeline yourself.
What you get for free
The realesrgan-ncnn-vulkan binary takes an image and gives back a larger one. It is
a single self-contained download, it needs no Python environment, and it uses the GPU. For stills
it is close to a complete answer — batch a folder of photos through it and the results will hold up
against most paid photo upscalers.
It is also the model underneath a surprising number of commercial products. Several tools in this category are, at their core, a licence-checked interface over an open model. That is not a scandal — the interface is real work — but it does mean the gap between free and paid is smaller than pricing implies.
What breaks when you point it at video
Real-ESRGAN has no concept of video. The pipeline you end up building looks like this:
- Explode the video into PNG frames with ffmpeg. A five-minute 30fps clip is 9,000 files and can easily be 40GB of disk.
- Run the upscaler over every frame.
- Reassemble to video, matching the original frame rate exactly.
- Mux the original audio back in without letting the durations drift apart.
Each step has a way to go wrong that costs you the whole run. Frame rate is the classic one: reassemble a 29.97fps source at 30fps and the audio drifts progressively out of sync — imperceptible at the start, half a second out by the end. Variable-frame-rate footage, which is what phones record, makes this worse, because there is no single correct number to use.
Then there is memory. Upscaling a 4K frame to 8K needs a large contiguous allocation, and the naive approach dies partway through a long job. Tiling fixes it, and tiling introduces seams unless the tiles overlap and blend correctly. That specific problem — bounding peak memory without visible tile boundaries — is most of what makes a heavy upscaler usable on a laptop.
And the one it cannot solve at all
Frames are upscaled independently, so the model's guesses vary slightly between consecutive frames. In flat areas — a wall, sky, a jacket — that variation reads as a crawling shimmer. It is invisible in a still comparison and obvious the moment it plays, which is why screenshot-based reviews of upscalers are close to worthless.
You cannot fix that with a shell script, because the fix lives in how frames are processed relative to each other. It is the main quality axis separating tools that use the same underlying model, and it is why Crisp measures it explicitly: the evaluation harness compares frame-to-frame variation in the output against the same measure in the source, so added shimmer shows up as a number rather than an argument.
The honest recommendation
- Use Real-ESRGAN directly if you are upscaling stills, if you are comfortable with ffmpeg, or if you want to understand what these tools actually do. It costs nothing and it is a genuinely good model.
- Use an app when you are doing this on video, repeatedly, and would rather not debug a frame-rate mismatch at midnight. Crisp is $19 once, handles the frame and audio plumbing, keeps peak memory around 11GB even in its heaviest mode, and has a timeline so the upscale runs against your finished cut instead of footage you later discard.
Try the free path first. If it works for you, keep the $19.