origin now resolves to https://github.com/oiupoyt/scythe.git, using the oiupoyt credential that is authenticated in the store. The spearzificial repository stays as a mirror, and the topology table records both along with the reason the two histories needed a merge: the LICENSE files were authored independently on each side with byte-identical content, so the branches had diverged by one commit. The README pointed at the spearzificial repository for its badge, release links and clone URL, and still listed GTK 3 and GTK Layer Shell as build prerequisites even though the GTK backend was retired and no GTK crate remains in the manifest. It also asked for Rust 1.80 while the crate uses the 2024 edition, which needs 1.85.
128 lines
4.8 KiB
Markdown
128 lines
4.8 KiB
Markdown
# Scythe (WIP)
|
|
|
|
> High-performance, zero-copy GPU hardware screen recorder and instant replay overlay for Linux (Wayland & X11) and Windows.
|
|
|
|
[](https://github.com/oiupoyt/scythe/releases)
|
|
[](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 --menu` |
|
|
| Save Instant Replay | `Ctrl + Shift + R` | `scythe --save` |
|
|
| Toggle Normal Recording | `Ctrl + Shift + F9` | `scythe --record` |
|
|
| Toggle Mouse Cursor | `Ctrl + Shift + F10` | `scythe --cursor` |
|
|
| Take Screenshot | `Ctrl + Shift + S` | `scythe --screenshot` |
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
### Arch Linux (AUR)
|
|
|
|
```bash
|
|
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](https://github.com/oiupoyt/scythe/releases) or [Forgejo Releases](https://git.oiupoyt.space/oiupoyt/scythe/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.85+, the crate uses the 2024 edition)
|
|
- FFmpeg 6+ / 7+ development libraries (`libavcodec`, `libavformat`, `libavutil`, `libswresample`, `libswscale`)
|
|
- PipeWire (`libpipewire-0.3-dev`)
|
|
- XCB (`libxcb1-dev`, `libxcb-shm0-dev`, `libxcb-xfixes0-dev`)
|
|
- ALSA (`libasound2-dev`)
|
|
- `clang` and `pkg-config` for the FFmpeg bindings
|
|
|
|
#### Compile & Install
|
|
|
|
```bash
|
|
git clone https://github.com/oiupoyt/scythe.git
|
|
cd scythe
|
|
bash install.sh
|
|
```
|
|
|
|
---
|
|
|
|
## CLI Usage
|
|
|
|
```bash
|
|
scythe --menu # Open the interactive overlay UI menu
|
|
scythe --status # Query background daemon state and metrics
|
|
scythe --save # Save instant replay clip to disk
|
|
scythe --record # Toggle normal recording on/off
|
|
scythe --cursor # Toggle mouse cursor capture
|
|
scythe --reload # Reload daemon settings
|
|
scythe --quit # Stop background recording daemon
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
Settings are saved in JSON format at `~/.config/scythe/config.json`:
|
|
|
|
```json
|
|
{
|
|
"fps": 60,
|
|
"record_bitrate_kbps": 18000,
|
|
"replay_duration_sec": 60,
|
|
"video_codec": "h264",
|
|
"output_directory": "~/Videos",
|
|
"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](LICENSE-APACHE) or [MIT License](LICENSE-MIT) at your option.
|