LocalSR

Release notes /

The Neural Engine
does the work.

LocalSR v0.3.0-beta runs Quick, Real-ESRGAN and JPEG cleanup on the Mac’s Neural Engine, upscales videos about twice as fast and hands them to the Mac’s hardware video encoder.

New in v0.3.0-beta

The Neural Engine on Apple Silicon. Quick photo (SPAN), Real-ESRGAN and JPEG cleanup (FBCNN) now run on the Neural Engine through Core ML, and Best photo (RealPLKSR) runs on the GPU through Core ML. On a MacBook Pro M1 Pro a tile became two to three times as fast (SPAN 19 against 38 ms, Real-ESRGAN anime 95 against 319 ms, FBCNN 61 against 149 ms) while using a fraction of the energy. Other models stay on the GPU.

Checked on your Mac. The first job with a model and tile size prepares it once, which takes up to a minute. LocalSR then runs the first tile both ways and keeps the Neural Engine only if it matches the usual result and is not slower; otherwise the job continues on the GPU. Newer Macs, whose GPUs can outrun the Neural Engine, decide for themselves.

Hardware: Neural Engine. The Neural Engine is its own entry under Advanced → Hardware and the default on Macs that have it; Apple GPU (Metal) keeps every model on the GPU. Before a job the status bar names where the selected model will run.

Videos about twice as fast. Quick runs each frame in one call instead of tiles, and decoding, upscaling and encoding overlap. A 15-second iPhone clip upscaled 4× went from 1.6 to 3.6 frames per second: about two minutes instead of five.

Automatic video format. The new default hands frames straight to the Mac’s hardware HEVC encoder while the next ones are upscaled. No Mac encodes AV1 in hardware, so MKV, HDR preservation, Windows and Linux use AV1, and every format can still be chosen directly.

Play before upscaling. A video plays in the preview before it has a result, with the same controls as a finished comparison, and the zoom controls beside the playback bar no longer disappear.

Installed Mac betas offer this version through the update check. Windows and Linux users download the new installer.

In v0.2.2-beta

One stage for photos and videos. A finished video now sits on the same canvas as a photo. The divider stops at the edges of the frame instead of running across the empty canvas, and the zoom controls, now with 1:1, appear while the pointer is over the video. Scrolling, pinching and View → Fit to Window and Actual Pixels work for videos too, and Original · Split · Enhanced and holding M work as before.

Playback below the frame. Play and pause, the time, a thin scrubber and the speed (0.5×, 1×, 1.5× and 2×) sit in one bar under the video, in the same style as the zoom controls. Space plays and pauses. Both versions still play in sync.

Rotated videos with PyAV 19. Videos whose track carries a rotation, common on phones, stopped the engine when it ran with PyAV 19. The engine now reads the rotation in a way that works from PyAV 12 to 19. The published packages ship PyAV 18.1 and were not affected.

Installed Mac betas offer this version through the update check. Windows and Linux users download the new installer.

In v0.2.1-beta

The divider stays where it is. Zooming and panning used to move the comparison divider with the picture, so a close look at a corner pushed it off screen and showed only one side. It now keeps its place, its line and its handle at every zoom, and both images move underneath it: at 1000 % you still see the original on the left and the result on the right. Fit keeps the divider where you put it.

Original · Split · Enhanced. The two labels above the preview are now a quiet switch: Original shows the whole original, Split the divider, Enhanced the whole result. Your choice stays until the next result, which starts in Split, and the same three views are in the View menu. Hold M to see the original from any view; let go to return. Videos work the same way.

Zoom controls only when you need them. The zoom box moved from the top right of the picture to the bottom right and appears while the pointer is over the image. Scrolling, pinching and View → Fit to Window and Actual Pixels work as before.

Installed Mac betas offer this version through the update check. Windows and Linux users download the new installer.

In v0.2.0-beta

One way to start. Add a photo, choose Quick or Best and press the button at the bottom right. If the model is not on your computer yet, the button says so (Download 4 MB, then upscale) and does both; while it downloads, the same button cancels. The separate download buttons, the first-run download notice and the license box with its own button are gone, and a model’s license is a one-line credit with links to its source and terms.

Plain choices. Quick and Best are described by what you get, and each names the download it still needs. Upscale, Restore and Edit form one switch, and Upscale handles videos too. A line beside the button says what the next job will make, for example 2268 × 4032 → 9072 × 16128 · 4× · Apple GPU (Metal).

No top bar. The pane headings form the top of the window. The model library opens from View → Models… (⇧⌘M) or Change… under Model, the benchmark from View → Performance and Diagnostics…, and updates from LocalSR → Check for Updates… (Help on Windows and Linux).

A quieter look. The app ships IBM Plex Sans, so every platform shows the same typeface. Corners are square, panels are neutral grey so you judge colour against a neutral surround, and colour appears only on the button that starts work and its progress. Comparisons show the original on the left and the result on the right.

Fixed. New installations start on the GPU instead of the CPU. Choosing Best no longer shows two download buttons for one file. The window fits 1366 × 768 laptops and 1280 × 800 displays, where the start button used to sit under the taskbar.

Windows and Linux move to 0.2 as well, with the same window, in CPU, DirectML, NVIDIA CUDA and AMD ROCm editions. They still do not update themselves; download new versions from this site.

In v0.1.7-beta

Large results open in the comparison view. A 12 MP phone photo enlarged 4× becomes a 195 MP image. LocalSR could save it, but the preview decoder then rejected it as too large. Finished exports now use a separate decoder when needed, which sends a preview of at most 2048 pixels on the longest side to the app. The file you save keeps every pixel.

Less repeated work. The app reuses the latest result preview when it receives the same request twice. If you replace the file, it refreshes the preview.

The README also has clearer wording, a real before-and-after example and a new screenshot of the model library. Installed Mac betas offer this update the next time you open the app.

In v0.1.6-beta

More photo formats. HEIC and HEIF photos from iPhones and cameras, and JPEG XL, open on a Mac through macOS’s own decoders, upright and with their colour profile. AVIF, JPEG 2000 and GIF open too, and camera RAW files from Canon (CR2, CR3), Nikon, Sony, Fujifilm, Olympus, Panasonic, Pentax and others, not only DNG. LocalSR ships no new codec for any of them.

Edit works on 16 GB Macs. The memory check before an edit misread how much memory a Mac has free: it counted only part of it and kept 4 GB in reserve, so it refused FLUX.2 klein 4B on a 16 GB MacBook Pro that macOS itself reported as 70% free. It now asks macOS, keeps 2 GB in reserve, and watches the editor’s real memory use while it runs. On that Mac, with other apps open, an edit at 512 px takes about two minutes and does not swap. FLUX.2 klein 4B Q4_0 is the configuration tested so far; the larger bundles have not run on real hardware yet.

Progress you can see. An edit names what it is doing (reading the photo, reading your instruction, step 2 of 4, finishing the image) with a moving progress bar on the photo and in the status bar. The right model by default: a Mac starts with the best editing model that leaves most of its memory to macOS and your apps, FLUX.2 klein Q4_0 on 16 GB, Q8_0 on 24 to 32 GB and Qwen Image Edit from 36 GB; a model you chose is kept. Fixed: installing a newer disk image over a copy that had updated itself kept the older inference engine.

If you installed an earlier beta, the app offers this update the next time you open it. It replaces the inference engine as well, so the download is about 760 MB.

In v0.1.5-beta

A proper install window. Opening the disk image now shows one window: LocalSR on the left, your Applications folder on the right and an arrow between them. Drag the icon along the arrow and LocalSR is installed. The mounted disk shows the LocalSR icon as well.

A centred icon. The terracotta pixel in the app icon and in the app’s own logo sat slightly right of and below the middle of its crop marks. It is now exactly centred.

In v0.1.4-beta

Edit with a prompt. Edit is a new task beside Upscale and Restore. Select a photo, write what should change (“make it winter”, “remove the sign”) and press Edit selected. The result is a new PNG in your output folder; the original stays untouched, and progress, cancel and the comparison work as for every other job. (Edit is experimental. In this release the memory check was too strict for 16 GB Macs; v0.1.6-beta fixes that.)

Editing models in the library. A new Edit with a prompt group lists Qwen Image Edit 2511 in six sizes, for Macs with 24 GB of memory or more, and FLUX.2 klein 4B in two sizes, the choice for 16 GB Macs. All are Apache-2.0, download only when you choose them (5 to 26 GB) and are checked with SHA-256 before every use. Each one says what it needs and whether it fits this Mac. Qwen Image 2.1 is not offered: its license allows research and evaluation only.

A memory guard. Editing runs in its own process. LocalSR checks free memory before it starts, and a small supervisor stops the edit if the Mac runs short or starts to swap, instead of letting the system grind. Edits are 512, 768 or 1024 px on the longest side, one image at a time.

In v0.1.3-beta

Open and Reveal use the file you selected, not whichever result finished last. A user guide opens from Help → LocalSR User Guide, with a one-time welcome that says the update check sends an anonymous count and where to turn it off. The comparison handle stays in the middle of the preview when you zoom, the app is simply called LocalSR, and it declares the macOS 14 minimum its libraries need. Windows and Linux packages, with GPU editions, arrived in this release.

In this release

  • Drop to start. The empty preview is one drop field: drop photos, videos or whole folders, or click it to choose files.
  • Model library. Quick and Best presets, saved recipes that light up when active, and verified model downloads with their licenses.
  • Video export in AV1, VP9 or lossless FFV1, with source timing, orientation and compatible audio kept. HDR preservation exports 10-bit video (Labs).
  • A new icon and a calmer window. The LocalSR crop mark, a centred title and cleaner menus.

Video formats

LocalSR includes only royalty-free or patent-expired media formats, so the app itself never ships H.264, HEVC or AAC codecs. Photos are unaffected.

On macOS those formats go through the codecs that ship with the system, so most phone and camera videos open and export without anything else installed. H.264/HEVC exports written this way go into MP4; for MKV, and for formats macOS cannot read such as WMV, DivX or FLV, install FFmpeg (for example brew install ffmpeg). LocalSR uses an installed FFmpeg automatically, runs it as a separate program, and never downloads or bundles it. Converting through it uses extra disk space for a temporary lossless copy.

Updates

When you open LocalSR, it checks quietly for a newer beta. If one is available, a notice offers Update Now: the update downloads, is verified against LocalSR's signing key, then installs and restarts. While a queue is running, it waits until processing finishes. Settings, recipes and downloaded models are kept.

Earlier alpha builds cannot update themselves. Install the current beta once from the download page; later betas arrive in the app.

Choose the right installer

  • macOS 14+, Apple Silicon: v0.3.0-beta, a DMG that runs on the Neural Engine and the GPU (MPS) with CPU fallback, Developer ID signed and notarized by Apple. This is the most tested build, the only one with Edit, and it updates itself.
  • Windows 10 / 11, x86-64: v0.3.0-beta, an installer that runs on the CPU. It is not code-signed, so SmartScreen warns before it runs, and it does not update itself yet.
  • Linux, x86-64: v0.3.0-beta, an AppImage that runs on the CPU. Make it executable and run it; it does not update itself yet.
  • GPU editions: AMD ROCm for Linux, tested on a Radeon RX 9060 XT in earlier builds; NVIDIA CUDA for Windows and Linux, untested because it has not yet run on an NVIDIA card; and DirectML for Windows, untested, whose photo-denoising results can still differ from the CPU’s. The CUDA and ROCm editions are several gigabytes and come in parts. Details are in the project’s platform notes.

Still in development

Testing the GPU editions on real NVIDIA and more AMD hardware, and Labs features such as SeedVR2 video, de-flicker and HDR preservation are still in progress. Results are reconstructions: inspect text, faces and fine detail before relying on them. Report problems on GitHub Issues.

Models have their own terms

Not sure which model does what? The model guide explains every model, its best use, and its license in plain words — including what to check before downloading or using results commercially.

LocalSR's own code is MIT-licensed. Models download separately and keep their own licenses; each catalog entry shows its author, source and license before download.

Source and licenses

This software uses libraries from the FFmpeg project under the LGPLv2.1. LocalSR does not own FFmpeg. The corresponding source, build instructions and license notices for this build are published with the installer on the source and notices bundle, including the exact FFmpeg, OpenCV, LibRaw and GCC runtime sources. The editing runtime is stable-diffusion.cpp with GGML (MIT); its license notices are inside the app. The Windows and Linux bundles are on the v0.1.3-beta release.

Verify your download

Compare the SHA-256 digest of your downloaded installer with the published checksum file.

On macOS:

shasum -a 256 LocalSR-v0.3.0-beta-macOS-arm64.dmg