No description
Find a file
spearzificial 6c9b8a8d82 feat(ipc): implement ShowOverlay and drop settings that never worked
ShowOverlay was declared in the Command enum but the daemon dispatcher had
no arm for it, so it fell through to `_ => {}`. Nothing could open the HUD
once it was closed except the --menu toggle path.

- daemon: spawn_overlay_once() checks the overlay pid file for a live
  process and launches `scythe --menu` only when none is running, so
  repeated requests cannot stack overlays
- cli: `scythe --show-overlay` sends the command, falling back to a direct
  launch when the daemon is unreachable

Fourteen config keys were persisted and shown in the settings UI while no
capture, encoder, muxer or daemon path ever read them. Removed from
ScytheConfig, from the overlay state, and from their UI panels:
capture_source, replay_storage, change_resolution, resolution_w/h,
container_format, show_scroll_lock_led, autostart_on_game,
save_folder_by_game, name_by_game, language, ui_color_theme, record_enabled.
Unknown JSON keys are ignored by serde, so existing configs still load.

The e2e script also unlinked a live daemon's socket: it ran rm -f on the
socket path unconditionally and only stopped the systemd unit, so a daemon
started by execs.lua or by hand kept its flock while losing its path entry,
leaving the session broken until the process died. It now sends StopDaemon,
waits for the socket to disappear, and aborts without unlinking if the
daemon will not stop.
2026-10-20 16:33:41 +05:30
.github/workflows fix(ci): package the unified scythe binary instead of removed targets 2026-10-20 16:31:46 +05:30
assets feat(ui): dropdown rolldown animation, sound in replay, square buttons, full QoL keybinds, and monospace font support 2026-10-08 23:09:52 +05:30
docs/superpowers docs: add implementation plan for settings UI and notification overhaul 2026-10-04 11:30:17 +05:30
packaging fix(ci): package the unified scythe binary instead of removed targets 2026-10-20 16:31:46 +05:30
src feat(ipc): implement ShowOverlay and drop settings that never worked 2026-10-20 16:33:41 +05:30
tests feat(ipc): implement ShowOverlay and drop settings that never worked 2026-10-20 16:33:41 +05:30
.gitignore fix(ci, windows): track bundle_deps.py and improve mingw dynamic library resolution 2026-09-04 23:45:07 +05:30
.gitlab-ci.yml fix(ci): package the unified scythe binary instead of removed targets 2026-10-20 16:31:46 +05:30
Cargo.lock chore(release): v0.2.18 - Windows cross-compile support, Forgejo updater, hardware capture startup resilience, and GTK3 retirement 2026-10-11 12:41:18 +05:30
Cargo.toml feat(arch): consolidate daemon and UI into singular multicall binary scythe 2026-10-11 14:28:14 +05:30
install.sh feat(arch): consolidate daemon and UI into singular multicall binary scythe 2026-10-11 14:28:14 +05:30
LICENSE-APACHE Add LICENSE 2026-09-27 20:52:52 +05:30
LICENSE-MIT Add LICENSE 2026-09-27 20:52:52 +05:30
PROJECT_GUIDE.md docs: overhaul PROJECT_GUIDE.md with v0.2.18 unified binary architecture and features 2026-10-20 14:59:47 +05:30
README.md Update README.md 2026-10-11 04:47:35 +00:00
TODO_CHECKLIST.md feat(arch): consolidate daemon and UI into singular multicall binary scythe 2026-10-11 14:28:14 +05:30

Scythe (WIP)

High-performance, zero-copy GPU hardware screen recorder and instant replay overlay for Linux (Wayland & X11) and Windows.

Release License

Scythe is a native, ultra-lightweight alternative to NVIDIA ShadowPlay and GPU Screen Recorder. It records gameplay and desktop screens with near-zero CPU and GPU overhead by leveraging hardware video acceleration and zero-copy direct memory pipelines.


Features

  • Instant Replay Buffer: Constantly records gameplay into a high-speed in-memory circular ring buffer. Save the last 15s to 5 minutes of action instantly with one hotkey (Ctrl+Shift+R) without writing temporary files to disk.
  • Zero-Copy Capture Engine:
    • Wayland: PipeWire DMA-BUF frame-passing directly to hardware encoder surfaces.
    • X11: XCB Shared Memory (MIT-SHM) capture with per-frame pool reuse.
    • Windows: Desktop Duplication API via Direct3D 11 (DXGI) texture binding.
  • Hardware-Accelerated Encoding:
    • NVIDIA NVENC (h264_nvenc, hevc_nvenc, av1_nvenc) with direct hardware BGR0 input
    • AMD AMF (h264_amf, hevc_amf, av1_amf) with native hardware format support
    • Intel QuickSync (h264_qsv, hevc_qsv, av1_qsv)
    • AMD & Intel VAAPI (h264_vaapi, hevc_vaapi, av1_vaapi) with DMA-BUF zero-copy
    • Universal SIMD-accelerated CPU fallback (libx264, libx265, libsvtav1)
  • ShadowPlay-Style Stealth Overlay:
    • Native GTK 3 Layer-Shell overlay with real background blur for Wayland compositors (Hyprland, Sway, etc.).
    • Cross-platform hardware-rendered egui overlay for Windows, GNOME, KDE, and X11.
    • Translucent frosted glass HUD dock, centered controls, and contextual dropdowns.
  • Dynamic Hyprland Integration: Automatically registers overlay blur rules and binds hotkeys at runtime without modifying hyprland.conf.
  • Multi-Channel Audio Routing: Record system audio, microphone, or both simultaneously with individual volume controls via native PulseAudio/PipeWire and WASAPI/CPAL.

Default Shortcuts

Action Shortcut CLI Command
Open / Close HUD Overlay Alt + Z scythe-ui --menu
Save Instant Replay Ctrl + Shift + R scythe-ui --save
Toggle Normal Recording Ctrl + Shift + F9 scythe-ui --record
Toggle Mouse Cursor Ctrl + Shift + F10 scythe-ui --cursor

Installation

Arch Linux (AUR)

git clone https://aur.archlinux.org/scythe-git.git
cd scythe-git
makepkg -si

Pre-Built Packages (Releases)

Download the latest packages directly from GitHub Releases:

  • Windows Setup: scythe-setup.exe (Official installer with Start Menu & Desktop shortcuts)
  • Windows Portable: scythe.exe (Standalone self-contained executable) & scythe-windows-x86_64.zip
  • Debian / Ubuntu / Linux Mint: scythe_*_amd64.deb
  • Fedora / RHEL / openSUSE: *.rpm
  • Universal Linux: scythe-x86_64.AppImage
  • Generic Linux: scythe-linux-x86_64.tar.gz

Build from Source

Prerequisites

  • Rust (1.80+)
  • FFmpeg 6+ / 7+ development libraries (libavcodec, libavformat, libavutil, libswresample, libswscale)
  • PipeWire (libpipewire-0.3-dev)
  • GTK 3 and GTK Layer Shell (libgtk-3-dev, libgtk-layer-shell-dev)

Compile & Install

git clone https://github.com/oiupoyt/scythe.git
cd scythe
bash install.sh

CLI Usage

scythe-ui --menu        # Open the interactive overlay UI menu
scythe-ui --status      # Query background daemon state and metrics
scythe-ui --save        # Save instant replay clip to disk
scythe-ui --record      # Toggle normal recording on/off
scythe-ui --cursor      # Toggle mouse cursor capture
scythe-ui --reload      # Reload daemon settings
scythe-ui --quit        # Stop background recording daemon

Configuration

Settings are saved in JSON format at ~/.config/scythe/config.json:

{
  "fps": 60,
  "record_bitrate_kbps": 18000,
  "replay_duration_sec": 60,
  "video_codec": "h264",
  "output_directory": "~/Videos/Scythe",
  "show_cursor": true,
  "audio_mode": "system",
  "mic_volume": 0.6,
  "system_volume": 1.0,
  "menu_hotkey": "Alt+Z",
  "save_hotkey": "Ctrl+Shift+R",
  "record_hotkey": "Ctrl+Shift+F9",
  "cursor_hotkey": "Ctrl+Shift+F10"
}

License

Licensed under either of Apache License, Version 2.0 or MIT License at your option.