Commit graph

177 commits

Author SHA1 Message Date
spearzificial
2e9716d85d docs: record CI workflows, remote topology and the Windows autostart gap
The Repository Topology table still listed the old oiupoyt GitHub remote
as origin and named a separate spearzificial remote. origin now points at
spearzificial, so the table and both Dual-Push Rule blocks are updated to
the origin/forgejo pair.

Documents the two GitHub Actions workflows: ci.yml compiles and tests
both targets on every push, release.yml packages and publishes on a v*
tag. Records that the fmt check is advisory and that hardware-dependent
tests are opt-in via SCYTHE_HW_TESTS=1.

apply_autostart_system only has a Linux body, so its two parameters were
unused on Windows and the Windows build warned. Marked the parameters as
intentionally unused off Linux and documented the real gap behind it:
Windows has no registry Run key write in either the overlay toggle or
the NSIS installer, so the autostart switch currently does nothing on
Windows.
2026-10-20 18:18:03 +05:30
spearzificial
ee7ecd34bd fix(windows): add the Win32_System_Power feature the crate needs
config.rs reads AC line status through GetSystemPowerStatus, but the
windows crate feature list never enabled Win32_System_Power, so the
Windows target failed to compile with E0432 on that import.

The Windows build has been broken this whole time and nothing caught it:
GitHub Actions only ran on tag pushes, and the local machine is Linux.
The new CI workflow builds both targets on every push, which surfaced it
on the first run.

Verified by checking the crate's windows:: import paths against the
x86_64-pc-windows-gnu target directly.
2026-10-20 18:06:03 +05:30
spearzificial
6fcdf357f7 ci: add build workflow; reject unknown args; make audio probe opt-in
GitHub Actions built only on tag pushes, so nothing verified that main
compiles. Adds ci.yml running check, unit tests, clippy and a release
build on Linux, plus a Windows MSYS2 build, with both binaries uploaded
as artifacts.

Two issues would have made that workflow hang or fail:

- Unknown CLI arguments fell through the dispatch match into the global
  hotkey loop, so `scythe --version` (a typo, or any unrecognised flag)
  silently became a background hotkey daemon that never exited. Unknown
  arguments now report the flag and exit 2.
- test_audio_probe asserts that a system audio device opens and emits
  samples. Headless runners have no audio server, so the suite could
  never pass in CI. The test is now opt-in via SCYTHE_HW_TESTS=1 and
  still runs on a real desktop session.
2026-10-20 17:10:45 +05:30
spearzificial
5988785d57 fix(cli): dispatch from argv[0] so daemon symlinks work; harden e2e run
Multicall dispatch used std::env::current_exe(), which reads /proc/self/exe
and resolves symlinks. Every installed alias therefore reported the stem
"scythe", so scythe-daemon and vrec-daemon fell through to client mode and
opened the HUD instead of starting the engine. The aliases shipped by
install.sh, the deb/rpm/flatpak packages and the Hyprland exec_cmd line were
all affected; a stale pre-consolidation target/release/scythe-daemon masked
it during local testing.

invoked_stem() now reads argv[0] and only falls back to current_exe() when
argv[0] has no usable stem. Verified against a packaged tarball: both daemon
aliases hit the running-instance guard while scythe, scythe-ui, vrec and
vrec-ui open the client.

The e2e guard also probed liveness with `scythe --status`, which calls
ensure_daemon_running() and so spawned a daemon while probing, then chased
its own tail. It now connects to the socket directly, records the running
daemon's command line and working directory, stops it gracefully, and
restores it on exit so a developer's recorder survives a test run.

Help text now reports the unified binary and marks --gtk as a deprecated
alias, since the GTK backend was retired.
2026-10-20 16:55:33 +05:30
spearzificial
e02bfefd72 docs: record repo topology, retired settings and this maintenance cycle
- PROJECT_GUIDE: repository table with forgejo as source of truth and
  spearzificial as the active GitHub account; explains that the oiupoyt
  GitHub token is expired and why the username is pinned in the remote URL
  so Git picks the right credential from the multi-account store
- PROJECT_GUIDE: document ShowOverlay and the retired-config table with the
  reason each key existed without effect
- README: point releases, clone URL and CLI examples at the unified binary
  and the spearzificial repository
- TODO_CHECKLIST: add the release pipeline, dead config, ShowOverlay and
  e2e socket entries; note that pre-v0.2.18 src/bin paths are historical
2026-10-20 16:33:48 +05:30
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
spearzificial
d01cdcb449 fix(ci): package the unified scythe binary instead of removed targets
The multicall consolidation removed the scythe-daemon and scythe-ui crate
targets, but every packaging path still copied them, so a tag push failed
at the first packaging step and no release could be produced.

- release.yml: tarball, .deb and AppImage ship scythe plus daemon/ui/vrec
  symlinks; AppRun execs scythe; Windows bundle copies scythe.exe only
- gitlab-ci.yml: artifacts publish target/release/scythe; Windows job
  builds --bin scythe
- rpm spec and flatpak manifest install one binary and link the aliases
- NSIS installers target scythe.exe for shortcuts, finish page,
  DisplayIcon and forwarded args, keeping legacy taskkill lines so old
  installs shut down cleanly

Also make the gitlab fmt job advisory: it reported drift across 20 files
and build-linux hard-depended on it, blocking every build. A whole-tree
reformat belongs in its own commit.
2026-10-20 16:31:46 +05:30
spearzificial
16edf3c693 docs: overhaul PROJECT_GUIDE.md with v0.2.18 unified binary architecture and features 2026-10-20 14:59:47 +05:30
db7cbf93bb fix(ui): truly borderless toast, 1s power poller with resume and alerts 2026-10-11 18:45:32 +05:30
e7a83ba472 fix(ui): borderless toast, effective power-gated replay with drain 2026-10-11 18:33:55 +05:30
c3459bee4d fix(ui): mp4-only output, cursor truth, working autostart/power, flat notifications, live audio tests 2026-10-11 18:17:34 +05:30
3cc718fa69 feat(arch): consolidate daemon and UI into singular multicall binary scythe 2026-10-11 14:28:14 +05:30
425a9b1003 docs: document gray screen fix, compile time optimization, and Forgejo release in checklist 2026-10-11 12:44:51 +05:30
836bf0bf76 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
71e95e656c Update README.md 2026-10-11 04:47:35 +00:00
b201561442 docs: add pipeline architecture flow diagram 2026-10-11 10:15:28 +05:30
343032cef6 docs: document screenshot resolution presets and low-end hardware optimizations 2026-10-09 07:48:09 +05:30
f41b827b41 feat(ui): screenshot resolution presets, low-end hardware optimizations, and all 8 keybind tests 2026-10-09 07:47:38 +05:30
cc6512edb7 docs: record dropdown animation, replay audio, QoL keybinds, and monospace font in checklist 2026-10-08 23:10:23 +05:30
20f9773080 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
6e114cb3ff docs: document square button refinement and all functional option tests 2026-10-05 21:26:22 +05:30
e2c5350770 fix(ui): square buttons, sharp drop-shadow dropdowns, and persistent functional settings across all options 2026-10-05 21:25:51 +05:30
78261af1be docs: update checklist with performance optimizations 2026-10-05 07:24:14 +05:30
82b16caa2e perf: optimize PipeWire DRM format negotiation and sharpen Gallery modal with drop shadows 2026-10-05 07:23:49 +05:30
3753d0c6e5 docs: document Opus audio and encoder quality/color/power mode hookups in checklist 2026-10-05 06:55:38 +05:30
7230e50135 feat(engine): wire Opus audio encoding, quality mode (CBR/VBR), color range, and low power mode 2026-10-05 06:55:15 +05:30
634703827e docs: record sharp slate redesign and screenshot panel in checklist 2026-10-04 17:06:47 +05:30
f9c7ab772e feat(ui): complete overhaul matching GPU Screen Recorder UI screenshots with screenshot feature 2026-10-04 17:06:12 +05:30
8831c501a1 docs: update checklist with smoothed modal, 4 menus, card dropdowns, and fluid notification haste exit 2026-10-04 15:46:44 +05:30
adc27e3190 feat(ui): smooth rounded settings modal, pinned footer, 4 menus, floating card dropdowns, and fluid toast haste exit 2026-10-04 15:46:05 +05:30
4d28bb7ed5 feat(ui): complete overhaul of settings modal and notification engine 2026-10-04 12:15:58 +05:30
0925b65d63 chore: update maintainer checklist with settings modal and notification overhaul 2026-10-04 12:15:22 +05:30
a14902dcb0 feat(ui): implement in-overlay toast animation engine and overhaul standalone toasts 2026-10-04 12:12:29 +05:30
605c1792c8 feat(ui): implement centered ShadowPlay settings modal and tab panels with numeric inputs 2026-10-04 12:08:40 +05:30
8caf54fbcf feat(ui): add SettingsTab enum, InOverlayToast struct, and numeric input component 2026-10-04 11:56:17 +05:30
9058cc3f5d docs: add implementation plan for settings UI and notification overhaul 2026-10-04 11:30:17 +05:30
31ee97503e docs: add design specification for settings UI and notification redesign 2026-10-04 11:18:11 +05:30
db77fb986b Add LICENSE
MIT OR Apache-2.0 — the license already claimed in the README, just missing from disk.
2026-09-27 20:52:52 +05:30
9e1d6250cb Fix Windows video encoding, DWM overlay transparency, and settings layout alignment
Some checks are pending
Release & Packaging / Build Linux Packages (.tar.gz, .deb, .rpm, .AppImage) (push) Waiting to run
Release & Packaging / Build Windows Binaries (.exe) (push) Waiting to run
Release & Packaging / Publish GitHub Release (push) Blocked by required conditions
2026-09-22 22:12:46 +05:30
79d64321f2 Fix instant replay frame pacing, SIMD color scaling, and active bitrate
Some checks are pending
Release & Packaging / Build Linux Packages (.tar.gz, .deb, .rpm, .AppImage) (push) Waiting to run
Release & Packaging / Build Windows Binaries (.exe) (push) Waiting to run
Release & Packaging / Publish GitHub Release (push) Blocked by required conditions
2026-09-20 16:01:42 +05:30
91f603918d feat(updater): implement cross-platform in-app automatic software update 2026-09-18 20:44:12 +05:30
b2d18297da fix(windows): resolve capture freeze, duplicate hotkey saves, overlay transparency, and settings UI alignment
Some checks are pending
Release & Packaging / Build Linux Packages (.tar.gz, .deb, .rpm, .AppImage) (push) Waiting to run
Release & Packaging / Build Windows Binaries (.exe) (push) Waiting to run
Release & Packaging / Publish GitHub Release (push) Blocked by required conditions
2026-09-18 19:48:43 +05:30
aa1c6643b8 chore(release): bump version to v0.2.14 for RTMP livestream network broadcaster
Some checks are pending
Release & Packaging / Build Linux Packages (.tar.gz, .deb, .rpm, .AppImage) (push) Waiting to run
Release & Packaging / Build Windows Binaries (.exe) (push) Waiting to run
Release & Packaging / Publish GitHub Release (push) Blocked by required conditions
2026-09-18 17:50:35 +05:30
67178a636f feat(stream): implement RTMP livestream network broadcaster and worker pipeline 2026-09-18 17:40:18 +05:30
f34116ec02 fix(encoder): replace SwsFlags with universal bitflags and bump version to v0.2.13
Some checks are pending
Release & Packaging / Build Linux Packages (.tar.gz, .deb, .rpm, .AppImage) (push) Waiting to run
Release & Packaging / Build Windows Binaries (.exe) (push) Waiting to run
Release & Packaging / Publish GitHub Release (push) Blocked by required conditions
2026-09-18 17:29:26 +05:30
21c7405993 Release v0.2.12: GPU Screen Recorder update modal, top bar alignment, livestream integration, and codebase polish
Some checks are pending
Release & Packaging / Build Linux Packages (.tar.gz, .deb, .rpm, .AppImage) (push) Waiting to run
Release & Packaging / Build Windows Binaries (.exe) (push) Waiting to run
Release & Packaging / Publish GitHub Release (push) Blocked by required conditions
2026-09-18 08:03:45 +05:30
837e7cae73 test: add unit tests for gsr 3-column layout geometry and settings 2026-09-17 11:51:12 +05:30
f469cf550e ui: replicate 1:1 gpu screen recorder 3-column freestanding settings layout 2026-09-17 06:42:14 +05:30
9d12c1ae58 ui: apply scythe styling to notifications, replace top bar logo with scythe vector icon, and fix top bar positioning 2026-09-16 23:42:58 +05:30
7dd1769524 ui: recreate 1:1 replica of gpu-screen-recorder-ui 2026-09-16 05:12:13 +05:30