CSR
Chopsticks Super Resolution

Real-time GPU upscaling for your Mac's display — or any single window. Edge-adaptive reconstruction with temporal accumulation, running entirely in Metal.

Install How it works
2.3 MB Apple silicon macOS 14+ 4K @ 125 fps No ML models
The app

One window,
every control.

Pick a source, pick a target resolution, press Start. The output opens in its own window with a live HUD showing exactly what the GPU is doing.

Chopsticks Super Resolution
Real-time display upscaling
Source
Main Display
Target resolution
1080p1920×1080
1440p2560×1440
4K3840×2160
Upscaling method
AutoPick the best available
CSR UltraHighest quality reconstruction
CSR TemporalTemporal accumulation + frame gen
CSR SpatialEdge-adaptive, single frame
MetalFXApple spatial scaler
Metal GPULightweight resample
Tuning
Aspect ratio
Fit
Fill
Frame generation
Sharpness
Running
60 fps · CSR Ultra
Stop
60 FPS CSR Ultra

Capture60 fps
GPU7.99 ms
Scale1920×1080 → 3840×2160
How it works

Nothing ever
leaves the GPU.

ScreenCaptureKit delivers frames that are already GPU-resident, so captured pixels never make a round trip through system memory. Everything after that is Metal compute.

ScreenCaptureKit ──► IOSurface ──► MTLTexture   (zero copy)
                                       │
                        ┌──────────────┴──────────────┐
                        │       optical flow          │  once per captured pair
                        └──────┬───────────────┬──────┘
                               │               │
                  reprojection │               │ interpolation
                               ▼               ▼
                    EASU ─► accumulate ─► RCAS   generated frame
                               │
                               ▼
                  aspect-correct present ──► CAMetalLayer

CSR Ultra

The default. Variance clipping in YCoCg instead of a min/max box, so one outlier pixel cannot let stale history through; a hue-preserving clip toward the current colour; and anti-flicker weighting. A better safeguard means it can accumulate harder.

CSR Temporal

Motion-driven history reprojection with neighbourhood rectification and disocclusion rejection. Kills the shimmer and crawl a purely spatial upscaler shows on text and thin UI lines — the dominant artefact on desktop content.

CSR Spatial

Edge-adaptive spatial upsampling, both stages: a 12-tap neighbourhood with four overlapping 5-tap crosses and the kernel rotated onto the detected edge, then contrast-adaptive sharpening with a per-channel limiter that provably keeps the result in range.

Frame generation

Optional 2× or 3×, driven by the same optical-flow field the temporal path uses. Sharing one flow result is why 3× costs barely more than 2×. Off by default — it interpolates, so it adds latency.

Fallbacks that cannot fail

If a backend will not initialise, CSR walks down to Apple's MetalFX spatial scaler, then to an MPS resample that works on any Metal device. You always get a picture.

Zero-copy capture

Captured frames arrive as IOSurfaces that are already GPU-resident and are wrapped as Metal textures directly. Pixels never make a round trip through system memory on their way into the upscaler.

An honest limitation. Renderer-integrated temporal upscalers need per-pixel motion vectors, a depth buffer and a known jitter sequence from the app that drew the frame. CSR upscales an already-composited desktop, where none of that exists. So it derives motion with its own optical flow, replaces depth with colour-space disocclusion rejection, and has no jitter at all — meaning it buys temporal stability, not jitter-driven sub-pixel reconstruction. Where history cannot be trusted it falls back to the spatial result, so the worst case is CSR Spatial, never a smear.
Performance

4K, in eight
milliseconds.

Mean GPU time per frame on an Apple M1 (8-core GPU), 60 iterations, measured by the app's own --selftest.

Stage1080p → 4K1440p → 4K720p → 1080p
CSR Ultra8.0 ms · 125 fps7.6 ms · 133 fps1.9 ms · 526 fps
CSR Temporal7.7 ms · 130 fps7.2 ms · 139 fps1.8 ms · 545 fps
CSR Spatial5.3 ms · 190 fps4.7 ms · 211 fps1.2 ms · 818 fps
MetalFX3.6 ms · 281 fps3.6 ms · 280 fps0.9 ms · 1066 fps
Metal GPU2.1 ms · 487 fps2.6 ms · 392 fps0.6 ms · 1614 fps
Optical flow (per pair)3.7 ms6.8 ms2.1 ms
Frame generation0.5 ms0.8 ms0.2 ms

Cost scales with the output resolution, not the ratio — 1080p→4K and 1440p→4K cost the same, because both passes run at 4K. Choosing a lower target is the effective lever, not a smaller source.

Requirements

What you need.

CSR is small, but it is a real-time GPU workload. The minimum column is what runs; the recommended column is what runs 4K comfortably.

ComponentMinimumRecommended
Processor
Apple M1
Apple M1 Pro or newer
GPU
7-core Apple GPU (integrated)
14-core or better for 4K + frame gen
Memory
8 GB unified
16 GB for 4K targets
Storage
10 MB free (SSD)
100 MB free for updates
macOS
macOS 14 Sonoma
macOS 15 or newer
Display
Any Retina display
4K panel to see a 4K target at 1:1
Permission
Screen Recording
Granted once, on first capture
Intel Macs are not supported. CSR depends on MetalFX and on the unified-memory zero-copy capture path, neither of which exists on Intel hardware. The installer checks and stops rather than installing something that cannot run. GPU memory use is about 130 MB of private textures for the 4K temporal path.
Install

One line.

Verifies the machine, checks the download against its published SHA-256, installs to Applications, and runs the built-in self-test to confirm the GPU pipeline actually works. No sudo, no Xcode.

$ curl -fsSL https://chopstickshq.com/csr/install.sh | bash
Updates are automatic. CSR checks version.json on launch, verifies the zip SHA-256, replaces the app, and restarts. Being offline stays silent.
2.3 MB

Installed bundle, shaders included.

0

Dependencies. Apple frameworks only.

None

Telemetry. Only the update check leaves the Mac.

Copied