clipbin-obs starts the pinned libobs on a dedicated thread, opens exactly the bundled plugin allowlist, and records official capture sources through one hardware encoder into keyframe-aligned Matroska segments. Status reaches Recording only once the source has a picture and the segment grows on disk. clipbin-probe lists and verifies hardware encoders and records from a real capture source, printing status, health and segment events for validation.
Clipbin Desktop
An open-source game recorder for Windows and Linux, inspired by Plays.tv. Rust and GPUI provide the desktop interface; the recording engine will use libobs and official OBS capture components.
SPEC.md defines the agreed v1 product requirements.
Current state
This is the initial project scaffold. It opens a native GPUI window, displays the agreed recording defaults, and always reports Not recording.
Capture, Steam detection, recording, playback, clipping, bookmarks, persistence, global hotkeys, autostart, and background recording are not implemented yet. Closing the window exits this initial shell. The full application will keep its recorder running independently of window closure, as specified in SPEC.md.
Layout
crates/
clipbin-core/ Settings and recorder state; independent of GPUI and native OBS.
clipbin-desktop/ GPUI application and initial session-library view.
.gitea/workflows/ Rust formatting and compilation checks.
SPEC.md Product requirements and acceptance checks.
The core currently has no external dependencies. Keep capture and session operations out of the UI thread when the recording engine is added.
Development
Use Rust 1.98.0, as pinned in rust-toolchain.toml. GPUI is pinned to 0.2.2, with Wayland and X11 enabled. Cargo.lock pins transitive dependencies.
Keep the lockfile checked in and use --locked. It currently pins libc to 0.2.186 because GPUI’s transitive xattr 0.2.3 dependency fails to compile against 0.2.190 on Linux.
On Arch/CachyOS, install the native build dependencies:
sudo pacman -S --needed base-devel pkgconf fontconfig freetype2 wayland libxcb libxkbcommon libxkbcommon-x11 openssl
On Debian/Ubuntu:
sudo apt-get update
sudo apt-get install build-essential pkg-config libfontconfig1-dev libfreetype6-dev libwayland-dev libxcb1-dev libxkbcommon-dev libxkbcommon-x11-dev libssl-dev
For Windows, use the MSVC Rust toolchain and Visual Studio Build Tools with the Desktop development with C++ workload. Windows support needs validation on a Windows machine.
Run the desktop shell from an active graphical session:
cargo run --locked -p clipbin-desktop
The desktop app needs a working Wayland or X11 session on Linux, or a Windows desktop. It does not start a web server. On this remote development machine, bind any future development server to its tailnet IP.
Use the Quit button or Ctrl+Q to quit.
Checks:
cargo fmt --all -- --check
cargo clippy --locked --workspace --all-targets -- -D warnings
cargo build --locked --workspace
The core can also be checked without native UI dependencies:
cargo check --locked -p clipbin-core
First recording milestone
- Validate official OBS capture and recording-health signals on CachyOS, Hyprland and the RX 9070 XT at 1440p60.
- Select and pin a tested OBS runtime, Rust bindings, and official plugin set together. Preserve the original signed Windows capture-hook binaries.
- Prove one continuous hardware encoder can produce short keyframe-aligned segments and remux clips across their boundaries while recording continues.
- Integrate the recorder without blocking GPUI, then add native playback and seeking.
OBS is not linked or bundled in this scaffold. Adding an unused native dependency would not validate the required runtime/plugin compatibility. The runtime bundle and adapter belong to the first recording milestone.
The capture integration must use official OBS components: Windows Game Capture/Window Capture, X11 Xcomposite, and Wayland PipeWire/desktop-portal capture. Third-party game hooks are excluded.
License
GPL-3.0-only. See LICENSE.