"Rebuild the detail, don't just smooth the blur."
Upscalify is a native Mac app that turns a low-resolution or noisy file into a sharper, higher-resolution one — reconstructing real detail rather than stretching pixels. Everything runs on your own machine; nothing is ever uploaded.
- A desktop app you install, not a web service. You download it, run it, and use it locally.
- Real reconstruction with Real-ESRGAN — the same models behind Upscayl.
- Images and video — upscale photos with a before/after slider, and video with the original audio kept.
- Free and private — no account, no billing, no upload. Works offline after a one-time setup.
Most "upscalers" just stretch pixels and sharpen the noise. Upscalify runs the same class of super-resolution models pro tools use — it denoises and reconstructs real detail. It's a small, focused app that does one thing well.
| Platform | Status |
|---|---|
| macOS (Apple Silicon, M1 and later) | ✅ Supported |
| macOS (Intel) | ⏳ Not yet — the current build is Apple Silicon only |
| Windows | ⏳ Not yet — the app is built on Electron (cross-platform), but currently ships macOS-only binaries and installer. Windows support is planned. |
| Linux | ⏳ Not yet |
- Download the
.dmgand drag Upscalify into your Applications folder. - First launch: it's a new, unsigned build, so right-click the app → Open (you only do this once).
- One-time setup: on first run it downloads the upscaling engine (~42 MB). After that it works completely offline.
- Fast (2×) and High quality (4×) modes — exposed by outcome, never by model name.
- Before / after slider — drag right to reveal the upscaled result, left for the original.
- Video upscaling — a quick, temporally stable pass that preserves the original audio.
- Drag & drop or browse — JPG · PNG · WEBP · BMP · TIFF · MP4 · MOV · WEBM.
- On-device — your files never leave your machine.
- Images → Real-ESRGAN (
realesrgan-ncnn-vulkan, GPU-accelerated via Metal). On first launch the app downloads the upstream BSD binary and the Real-ESRGAN x4plus weights (upscayl-lite-4x/upscayl-standard-4x) from the open-source Upscayl repo — the same models Upscayl uses, so results match. Nothing is redistributed in the app itself. - Video → ffmpeg — a deterministic Lanczos scale + unsharp pass that is quick, temporally
stable, and keeps audio. It needs
ffmpegon the machine (brew install ffmpeg). This is the same non-CUDA path the website uses. - SeedVR2 (video AI model) is intentionally not bundled — it requires an NVIDIA CUDA GPU and cannot run on macOS.
There is no server in the loop. Images and video are processed locally using your GPU, and the app works offline after the one-time engine download. No accounts, no telemetry, no upload.
Upscalify/
├── desktop/ # The Mac app (Electron)
│ ├── main.js # Electron main: windows + IPC (input, run, save)
│ ├── preload.js # Safe IPC bridge (contextIsolation)
│ ├── engine.js # First-run download of the Real-ESRGAN binary + models
│ ├── upscale.js # Runs Real-ESRGAN for images
│ ├── video.js # ffmpeg Lanczos+unsharp video path (keeps audio)
│ ├── build/ # App icon (.icns / .png)
│ └── renderer/ # UI (index.html, styles.css, renderer.js)
│
├── site/ # The landing website (Next.js) — deploys to Vercel
│ └── app/ # Homepage (download landing), SEO/AEO/GEO, sitemap, robots
│
└── (root Next.js app) # The original in-browser tool + inference seam (kept for reference)
Desktop app
cd desktop
npm install
npm start # runs the app
npm run dist # builds desktop/dist/Upscalify-<version>.dmgWebsite
cd site
npm install
npm run dev # http://localhost:3000The app (.dmg) — build it, then publish a GitHub Release:
cd desktop && npm run dist
# then: GitHub → Releases → Draft a new release → attach the .dmg → PublishThe website's download buttons point to releases/latest, so a published release makes them live.
The build is unsigned to start; for a clean double-click (no "unidentified developer" prompt),
sign + notarize with an Apple Developer account.
The website — deploy site/ to Vercel:
- Import the repo in Vercel.
- Set Root Directory to
site. - Deploy. Framework auto-detects as Next.js; no env vars needed.
If Upscalify saved you time, you can support the work: