Zureshot
Pixel-perfect screen recorder for macOS. HEVC + GIF. Zero-copy GPU pipeline. 3.9 MB.
Install / Use
npx skills add anxiong2025/zureshotInstalls into whichever agent you are using.
README
Why Zureshot?
Zero-copy · pure Rust · one shot
The name says it all — Zero + Pure + Shot.
Zero — zero-copy GPU pipeline. The CPU never touches a single pixel. 3% usage while recording. Pure — pure Rust, no Electron bloat. 3.9 MB installer, 11 MB on disk. Nothing wasted. Shot — one shot, instant capture. Click to record, done.
Most screen recorders treat your Mac like a 2015 laptop — copying pixels through CPU, bloating memory, spinning fans.
Zureshot doesn't touch your pixels. Every frame flows through a pure GPU pipeline, from capture to file. The result: recordings that look exactly like your screen, using almost no resources.
✨ Core Technology
🎯 True Retina Recording
Your Mac renders at 2× or 3× physical pixels. Most tools quietly downscale to save bandwidth. Zureshot records every single physical pixel.
A 3200×2132 Retina display records at 3200×2132. Not 1600×1066. No exceptions.
Text stays razor-sharp. UI elements keep their crisp edges. What you see is what you get — pixel for pixel.
🚀 Zero-Copy GPU Pipeline
The entire recording path lives on the GPU. Pixel data never enters your app's memory.
ScreenCaptureKit → IOSurface (GPU) → VideoToolbox HEVC → MP4
↑ ↑
Zero CPU copy Hardware encoder
- ScreenCaptureKit captures frames as GPU-resident IOSurfaces
- VideoToolbox hardware-encodes directly from those surfaces
- AVAssetWriter muxes the encoded NALUs into MP4
No memcpy. No Vec<u8>. No frame buffers in RAM. The CPU barely knows a recording is happening.
🧊 Absurdly Low Resource Usage
| Metric | Zureshot | Typical Screen Recorder | |--------|----------|------------------------| | Extra RAM during recording | ~30-50 MB | 200-500 MB | | CPU usage | < 3% | 15-40% | | GPU overhead | < 5% | 10-25% | | Fan noise | Silent | Often audible |
Your Mac stays cool. Your battery lasts longer. Your other apps don't stutter.
🎨 Color-Accurate Output
Every recording is tagged with the full BT.709 color pipeline:
- Color Primaries: ITU-R BT.709 — matches sRGB displays
- Transfer Function: BT.709 — correct gamma curve
- YCbCr Matrix: BT.709 — precise luma/chroma separation
- Capture Color Space: sRGB — no implicit P3→709 conversion
Play your recording on any device and the colors will match your screen exactly.
⚡ HEVC (H.265) Hardware Encoding
Zureshot uses HEVC Main profile with Apple Silicon's dedicated media engine:
- 40-50% smaller files than H.264 at equal quality
- Adaptive bitrate — up to 36 Mbps for 4K, tuned for screen content
- Quality-targeted VBR — encoder prioritizes text sharpness over file size
- No frame reordering — minimal latency, instant stop
- 2-second keyframes — smooth seeking in any player
A 60-second Retina recording at 60fps: ~135 MB (vs 200+ MB with H.264).
🎬 Features
- 📹 Full Screen Recording — native Retina resolution, one click from tray
- 🔲 Region Recording — drag to select any area, pixel-perfect cropping
- ⏸ Pause / Resume — zero-overhead atomic flag, no encoding gaps
- 🔊 System Audio — capture app sounds via ScreenCaptureKit
- 🎤 Microphone — separate AAC track, hardware-encoded
- 🖱 Cursor Capture — rendered by macOS compositor, zero CPU cost
- 🎯 Window Exclusion — automatically hides Zureshot's own UI from recordings
- ⌨️ Keyboard Shortcuts —
⌘⇧Rto record,⌘⇧Afor region select - 🌗 Quality Presets — Standard (30fps) and High (60fps)
- 🐧 Linux Support — Ubuntu 24.04+, XDG Portal + GStreamer pipeline (beta)
🏗 Architecture
System Overview
┌─────────────────────────────────────────────────────────────────────┐
│ Zureshot │
├─────────────────┬───────────────────────────────────────────────────┤
│ UI Layer │ Engine (Rust) │
│ Svelte 5 │ │
│ (100% shared) │ ┌──────────────────────────────────────────────┐ │
│ │ │ Platform Abstraction │ │
│ Tray Menu │ │ platform/mod.rs │ │
│ Region Select │ │ │ │
│ Recording Bar │ │ ┌─── macOS ────┐ ┌──── Linux ────────┐ │ │
│ Dim Overlay │ │ │ SCK→IOSurf→ │ │ XDG Portal→ │ │ │
│ Screenshot │ │ │ VideoToolbox │ │ PipeWire→GStreamer │ │ │
│ Preview │ │ │ →HEVC→MP4 │ │ →x264→MP4 │ │ │
│ │ │ └──────────────┘ └────────────────────┘ │ │
│ │ └──────────────────────────────────────────────┘ │
│ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │
│ │ │ commands │ │ tray │ │ lib │ │
│ │ │ .rs │ │ .rs │ │ .rs │ │
│ │ │ IPC cmds │ │ menus │ │ bootstrap │ │
│ │ └──────────┘ └──────────┘ └────────────────┘ │
├─────────────────┴───────────────────────────────────────────────────┤
│ Tauri v2 │
├──────────────────────────────┬──────────────────────────────────────┤
│ macOS: ScreenCaptureKit │ Linux: XDG Portal + GStreamer │
│ VideoToolbox + AVFoundation │ PipeWire + x264 + ffmpeg │
│ objc2 FFI │ Subprocess pipeline (zero crates) │
└──────────────────────────────┴──────────────────────────────────────┘
Data Flow — Zero-Copy Path
Apple Silicon SoC
┌───────────────────────────────┐
│ │
Display Output ───┤ Window Server composites │
│ frame into IOSurface │
│ │ │
│ ▼ │
│ ScreenCaptureKit delivers │
│ CMSampleBuffer (IOSurface │
│ handle — NOT pixel data) │
│ │ │
│ ▼ │
│ VideoToolbox reads IOSurface │
│ via Apple Media Engine │
│ (dedicated HEVC hardware) │
│ │ │
│ ▼ │
│ Encoded H.265 NALUs │
│ (tiny compressed packets) │
│ │
└───────────┬───────────────────┘
│
▼
AVAssetWriter → MP4 file on disk
Key insight: The pixel data (e.g., 3200×2132 × 1.5 bytes/pixel = ~10 MB/frame) stays entirely in unified GPU memory. Only the tiny compressed NALUs (~50-100 KB/frame) pass through CPU memory on the way to disk.
Data Flow — Linux (GStreamer Pipeline)
User clicks Record
│
▼
XDG Desktop Portal (D-Bus)
└─ CreateSession → SelectSources → Start
└─ User confirms screen/window in system dialog
└─ Returns PipeWire node_id
│
▼
gst-launch-1.0 subprocess
└─ pipewiresrc (captures PipeWire stream)
└─ videoconvert → videoscale → videocrop
└─ x264enc (H.264 software encoding)
└─ mp4mux → filesink (MP4 output)
└─ (optional) pulsesrc → audioconvert → faac
│
▼
Pause: SIGINT → EOS → save segment
Resume: new gst-launch process → new segment
Stop: ffmpeg concat → final MP4
Note: Linux currently uses software H.264 encoding. Hardware-accelerated encoding (VA-API/NVENC, HEVC) is planned for v0.6.0.
Source Files
| File | Lines | Responsibility |
|------|-------|----------------|
| platform/mod.rs | ~56 | Platform abstraction: shared types, conditional compilation |
| platform/macos/mod.rs | ~340 | macOS RecordingHandle, lifecycle, system integration |
| platform/macos/capture.rs | ~650 | SCK stream, SCStreamOutput delegate, frame routing, PTS |
| platform/macos/writer.rs | ~470 | AVAssetWriter, HEVC encoding, BT.709, finalization |
| platform/linux/mod.rs | ~430 | Linux RecordingHandle, lifecycle, system integration |
| platform/linux/portal.rs | ~315 | XDG Desktop Portal ScreenCast (D-Bus via Python) |
| platform/linux/writer.rs | ~360 | GStreamer pipeline management (gst-launch subprocess) |
| platform/linux/capture.rs | ~90 | Screenshot (gnome-screenshot / grim) |
| commands.rs | ~940 | Tauri IPC commands, recording state machine, window management |
| tray.rs | ~520 | System tray, menus, autostart, update check |
| lib.rs | ~70 | App bootstrap, plugin registration |
Related Skills
clawhub
385.5kSearch ClawHub for skills when a requested capability is not already available; install, verify, update, uninstall, publish, or sync skills.
coding-agent
385.5kDelegate coding work to Codex, Claude Code, or OpenCode as background workers; not simple edits or read-only code lookup.
node-connect
385.5kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
taskflow
385.5kCoordinate multi-step detached tasks as one durable TaskFlow job with owner context, state, waits, and child tasks.
