SkillAgentSearch skills...

Zureshot

Pixel-perfect screen recorder for macOS. HEVC + GIF. Zero-copy GPU pipeline. 3.9 MB.

Install / Use

npx skills add anxiong2025/zureshot

Installs into whichever agent you are using.

About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<p align="center"> <img src="src-tauri/icons/128x128@2x.png" width="128" height="128" alt="Zureshot"> </p> <h1 align="center">Zureshot</h1> <p align="center"> <strong>Pixel-perfect screen recording for Mac & Linux.</strong><br> Built with Rust. Powered by native APIs. </p> <p align="center"> <img src="https://img.shields.io/badge/macOS-13%2B-black?logo=apple" alt="macOS 13+"> <img src="https://img.shields.io/badge/Linux-Ubuntu%2024.04%2B-orange?logo=ubuntu" alt="Ubuntu 24.04+"> <img src="https://img.shields.io/badge/Apple%20Silicon-M1%20|%20M2%20|%20M3%20|%20M4-blue?logo=apple" alt="Apple Silicon"> <img src="https://img.shields.io/badge/Codec-HEVC%20H.265-green" alt="HEVC"> <img src="https://img.shields.io/badge/License-MIT-yellow" alt="MIT"> </p> <p align="center"> <a href="README.md">English</a> · <a href="README.zh-CN.md">简体中文</a> · <a href="#wechat">💬 WeChat</a> </p>

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⌘⇧R to record, ⌘⇧A for 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

View on GitHub
GitHub Stars27
CategoryDevelopment
Updated2mo ago
Forks4

Languages

Rust

Security Score

95/100

Audited on Jun 1, 2026

No findings