Commit Graph
22 Commits
Author SHA1 Message Date
harry 36c13449dd feat: map session times to segment files
Rust checks / windows-cross-check (push) Successful in 1m0s
Rust checks / linux (push) Failing after 11m37s
Metadata::locate finds the segment and in-file offset for a session time
(none inside gaps or empty tails), Metadata::covering lists the segment
pieces in a range for export, and Store::metadata loads one session with
resolved paths. Shared groundwork for playback and clip export.
2026-10-08 17:54:07 +02:00
harry 2faddbd684 docs: record real Steam and Proton detection on CachyOS
Rust checks / windows-cross-check (push) Successful in 1m9s
Rust checks / linux (push) Failing after 10m21s
2026-10-08 17:52:34 +02:00
harry ec4a6ad74d fix: pluralise session and clip counts
Rust checks / windows-cross-check (push) Successful in 1m0s
Rust checks / linux (push) Failing after 5m34s
2026-10-08 17:40:26 +02:00
harry c1cac1ba46 fix: fail session validation promptly without missing tools 2026-10-08 17:38:56 +02:00
harry b51c64eee3 docs: record automatic session validation and platform gaps 2026-10-08 17:32:00 +02:00
harry 435ddf2b17 feat: automatically record Steam game sessions
Detect games with native process exit watchers, own OBS on a background worker, and persist settings and recoverable session timelines. Place segments by split frame counts, recover capture with honest gaps, and finalise on game exit or explicit Quit.

Keep the current recording alive after GPUI closes its last window, then exit when the game ends. Add an end-to-end rig covering recording, recovery, exact packet-count offsets, disk library reload and clean Quit.
2026-10-08 17:30:40 +02:00
harry 98fe898efb feat: typed settings fields, timeline zoom, faster dev builds
Rust checks / windows-cross-check (push) Successful in 1m2s
Rust checks / linux (push) Failing after 5m49s
Footage budget, clip hotkey length and bookmark before/after are now typed
fields (m:ss or seconds), validated on Enter or blur and reverted when out of
range. Scrolling over the session timeline zooms around the pointer (down to
10 s) and scrolling sideways or with Shift pans, with a Fit button.

Settings felt slow because GPUI ran unoptimised: dev builds now optimise
dependencies, taking first frames from 200-300 ms to about 15 ms. Adds
rig-pointer, a virtual pointer for driving the interface in the headless
rig, which verified the fields, zoom and timeline dragging.
2026-10-08 16:19:14 +02:00
harry e20b2680cc feat: rebuild the desktop interface in clipbin's style
Rust checks / windows-cross-check (push) Successful in 38s
Rust checks / linux (push) Failing after 5m18s
Replaces the placeholder shell with a sidebar app in the web Clipbin's look:
a session library, a session timeline (footage, missing and cleaned-up spans,
bookmarks, a draggable clip selection exported on keyframes), clips and
settings. Geist Mono and Lucide icons are embedded. The core gains the
library model and formatting; sample data is opt-in for interface work, and
scripts/rig/screenshot-ui.sh captures each screen headlessly.
2026-10-08 15:45:10 +02:00
harry 795118c200 feat: record at the source's size, only once capture works
Rust checks / windows-cross-check (push) Successful in 41s
Rust checks / linux (push) Failing after 5m37s
Encoders and the segment output are created when the capture source first
has a picture, at its own size (portrait monitors record portrait) unless a
resolution is configured, so nothing is written while waiting for a source.
SPEC.md records both decisions; validation docs cover how sessions should end
when the game closes.
2026-10-08 15:34:42 +02:00
harry 96590e9c4a docs: record the Linux hardware sign-off
Rust checks / windows-cross-check (push) Successful in 39s
Rust checks / linux (push) Failing after 5m36s
2026-10-08 15:27:13 +02:00
harry dc9cbd6d84 revert: drop the portal response timeout
Rust checks / windows-cross-check (push) Successful in 45s
Rust checks / linux (push) Failing after 5m42s
Hyprland's portal shows its picker during SelectSources, so a timeout before
the picker step cut users off while choosing. A wedged portal backend looks
the same; recording stays in Waiting for capture and the app must prompt.
2026-10-08 15:22:10 +02:00
harry afc54b363e fix: time out a stalled portal and sample motion across segments
Rust checks / windows-cross-check (push) Successful in 41s
Rust checks / linux (push) Failing after 5m39s
Hyprland's portal sometimes creates the session and never answers source
selection, before any picker appears. Recording now fails if the portal has
not reached its picker within 10 s; time in the picker is not limited. The
motion check uses the segment with the most motion, since capture can start
late.
2026-10-08 15:16:52 +02:00
harry 06377de707 fix: fail on refused portal requests and catch black recordings
Rust checks / windows-cross-check (push) Failing after 40s
Rust checks / linux (push) Failing after 5m38s
The portal reports refusals only in OBS's log; a denied, cancelled or failed
source selection now fails with an actionable reason instead of waiting
forever. check --expect-motion rejects black or frozen footage, and the
hardware script checks only runs that recorded, tests restore tokens in their
own step, and treats closing a window as informational: on Hyprland the
stream keeps its last frame, so sessions must end on game exit.
2026-10-08 15:01:25 +02:00
harry 91f119e6b6 refactor: drop unused current segment from Health
Rust checks / windows-cross-check (push) Successful in 42s
Rust checks / linux (push) Failing after 5m47s
2026-10-08 14:32:43 +02:00
harry 3588d5b212 docs: add validation guide, hardware and Windows scripts, CI
Documents what the rig proved and what it found, adds the hardware sign-off
script for the Hyprland machine and an (untested) Windows validation script,
and updates CI to build the cached OBS runtime, run tests and lint the Windows
code paths.
2026-10-08 14:31:54 +02:00
harry 9178a303ca test: add Linux rig validation suite
Runs encoder verification, Wayland and X11 capture with segment and remux
checks, and five failure scenarios that must end in an honest failed status:
source lost, window closed, unwritable segments, low disk space and a portal
that grants no source.
2026-10-08 14:29:28 +02:00
harry 444758f9ec feat: measure footage across segments and test X11 capture
Matroska output can stay buffered until a segment closes, so progress counts
bytes across all segments and the stall limit scales with segment length.
Unknown capture source types now fail instead of recording an empty
placeholder. The rig gains an Xwayland mode for Xcomposite window capture.
2026-10-08 14:25:23 +02:00
harry 263e7a964e feat: detect lost sources, stalled writes and low disk space
PipeWire capture keeps its size and last frame after its stream stops, so the
recorder follows the stream state OBS logs. Recording fails when the segment
on disk stops growing (OBS kept counting bytes into a dead muxer and missed a
full disk) and stops while enough space remains to finalise the last segment.
Failures stay visible after the output stops.

Adds a check command that verifies keyframe-aligned segments and a remux
across segment boundaries, and gives the rig desktop audio.
2026-10-08 14:19:57 +02:00
harry f2eb7139da feat: add OBS recording engine and validation probe
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.
2026-10-08 14:12:06 +02:00
harry 80b6abdb32 build: assemble pinned OBS 32.0.4 runtimes for Linux and Windows
Linux builds libobs and an allowlist of official plugins from source in OBS's
relocatable layout. Windows copies the official release byte-for-byte so the
Game Capture hook keeps its signature. Adds a headless Wayland rig for
PipeWire/portal capture tests on machines without a display.
2026-10-08 13:51:22 +02:00
harry eb364d25e2 chore: scaffold Rust workspace and native GPUI shell
Rust checks / checks (push) Successful in 3m35s
2026-10-08 12:19:45 +02:00
harry 9602f82ca9 docs: add agreed recorder v1 specification 2026-10-08 12:04:39 +02:00