Commit Graph
388 Commits
Author SHA1 Message Date
SAPHID bc885e87d0 Fix OBS lifecycle cleanup and validate real headset capture 2026-10-25 06:33:46 +00:00
Alex SouthwellandSAPHID d79efb4730 Bump Frame Control to 0.4.30 (#207)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 05:39:30 +00:00
Alex SouthwellandSAPHID 95643b7ea0 Support restricted split APKs in Android backup import (#206)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 05:29:21 +00:00
Alex SouthwellandSAPHID 9dab523af9 docs: distinguish current Frame OS checks from September notes (#205)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 05:13:12 +00:00
Alex SouthwellandSAPHID a29fac2594 Bump Frame Control to 0.4.29 (#204)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 04:21:10 +00:00
Alex SouthwellandSAPHID 6d5cb20847 Document ProtonDB Badges test on Steam Frame (#202)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 04:11:01 +00:00
Alex Southwell 987c36c5f6 Merge pull request #201 from saphid/fleet/se9k61wn4f-headset-actions
Add headset quick actions and extension panels
2026-10-25 04:10:29 +00:00
Alex Southwell 649185237f Merge pull request #198 from saphid/fleet/se9k61wn4f-headset-ui
Add removable Frame Control panel for SteamVR
2026-10-25 04:09:48 +00:00
Alex SouthwellandSAPHID 5b43170fda Bump Frame Control to 0.4.28 (#203)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 03:59:02 +00:00
SAPHID b0a65129f1 Add headset quick actions and extension panels 2026-10-25 03:47:30 +00:00
Alex SouthwellandSAPHID 958743c79d Docs: guide SteamOS OBS host setup with test limits (#200)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 03:47:21 +00:00
Alex SouthwellandSAPHID 05308932e8 Docs: distinguish PC SteamVR stream failures from SSH (#199)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 03:46:57 +00:00
Alex SouthwellandSAPHID 4e4853e82b Docs: explain streaming lag and Japanese setup (#197)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 03:41:41 +00:00
SAPHID af6f97ca5a Add removable Frame Control headset panel 2026-10-25 03:33:58 +00:00
Alex SouthwellandSAPHID 3438c248d9 Bump Frame Control to 0.4.27 (#196)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 03:24:52 +00:00
Alex SouthwellandSAPHID 509ddbdc95 Add experimental Decky Loader manager for Steam Frame (#195)
* Add sandboxed local Frame Control extensions

* Add experimental Decky Loader manager for Steam Frame

* ci: verify Decky PR against main

---------

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 03:14:42 +00:00
Alex SouthwellandSAPHID f2d293bd1a Add local Frame Control extensions (#194)
* Add sandboxed local Frame Control extensions

* docs: clarify local extension network boundary

---------

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 02:48:37 +00:00
SAPHID af2dca8365 Document real Frame screenshot copy check 2026-10-25 02:29:56 +00:00
SAPHID 53107fd91b Keep saved Steam screenshots separate by headset and game 2026-10-25 02:17:29 +00:00
Alex SouthwellandSAPHID 548f5d8496 Bump Frame Control to 0.4.26 (#191)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 01:48:22 +00:00
Alex SouthwellandSAPHID a03c94ae12 Attach SHA256SUMS and explain download verification (#186)
* Attach and verify release SHA256SUMS with download guidance

* Write release checksums as exact LF bytes on Windows

* Read release safety text as UTF-8 on Windows

* Clarify checksum rollout and macOS signing status

---------

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 01:38:26 +00:00
Alex SouthwellandSAPHID dd3df85fd6 Stop stalled OBS relays and handle intentional shutdown (#190)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 01:34:13 +00:00
Alex SouthwellandSAPHID b26e34ce09 Document current real-device, VM and untested coverage (#188)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 01:11:55 +00:00
Alex SouthwellandSAPHID ab4b58b1c7 Document OBS game audio capture issue and workaround (#187)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 01:08:10 +00:00
Alex SouthwellandSAPHID 7f828cbcf8 Compare Windows wireless snapshots after dropouts (#184)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 00:35:48 +00:00
Alex SouthwellandSAPHID 42665d14db Guide recovery for Windows Wireless Adapter dropouts (#183)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-25 00:23:39 +00:00
Alex SouthwellandSAPHID ef309c9931 Add window switch control to desktop panels (#181)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 23:57:35 +00:00
Alex SouthwellandSAPHID bdef125f68 Enable OBS source control on Windows (#179)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 23:31:23 +00:00
Alex SouthwellandSAPHID f64cbe5bac Add read-only wired connection doctor (#178)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 23:23:29 +00:00
Alex SouthwellandSAPHID d4714eadf7 Open Android catalogue without waiting for installed apps (#177)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 23:04:06 +00:00
Alex SouthwellandSAPHID f5becdd2c0 Document real OBS Media Source verification (#175)
* Document real OBS Media Source video and audio verification

* Record packaged OBS Start and Stop headset check

---------

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 22:33:11 +00:00
Alex SouthwellandSAPHID e185cb3b29 Bundle OBS source with desktop Start and Stop control (#174)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 22:05:20 +00:00
Alex SouthwellandSAPHID affe3eda65 Record Round 3 headset mirror and charge-limit checks (#172)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 21:30:51 +00:00
Alex SouthwellandSAPHID 9e9b25e9f4 Add local OBS headset view source with output audio (#170)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 21:29:23 +00:00
Alex SouthwellandSAPHID f7153b3ab1 Guide emulator setup and clarify ROM storage limits (#171)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 21:28:49 +00:00
Alex SouthwellandSAPHID 42b0d729cb Document Frame OS 0.5.6 live compatibility findings (#168)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 13:24:32 +00:00
Alex SouthwellandSAPHID ae63fa584c Add read-only Windows Wireless Adapter doctor (#166)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 12:44:24 +00:00
Alex SouthwellandSAPHID 337ac99b3e Add a read-only Linux Wireless Adapter doctor (#165)
* Add read-only Linux PC Wireless Adapter doctor

* Cross-reference coordinated SteamOS compatibility notes

---------

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 12:30:08 +00:00
Alex SouthwellandSAPHID aada257325 Handle Frame OS 0.5.6 discovery and SteamOS name changes (#164)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 12:24:04 +00:00
Alex SouthwellandSAPHID 8bc3d63126 Add local Linux helper for Steam PipeWire desktop sharing (#163)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 12:18:08 +00:00
e3fcd3eef8 Use gamescope input for Frame trackpad and keyboard (#66)
* Live view: a Desktop view that stays still, and Control to tap on the Frame

The live view gets a second source and a way to use the Frame from it:

- Desktop: the app panel in use in the headset, streamed from its own window
  (x11grab of gamescope's redirected window), so it doesn't move as the
  wearer looks around. A picker shows any other panel, view only.
- Control: on the Desktop view a tap or click lands exactly where you put it;
  drag is a mouse drag, press and hold right-clicks, two fingers scroll, and
  on a computer the mouse, wheel and keyboard work directly. On the headset
  view the view is a trackpad. A text field and key row type from a phone.

Input goes through gamescope's own EIS socket (the way Steam feeds Remote
Play input) with the libei already on the image: ui/frame_touch.py, over
the same long-lived ssh machinery as the keyboard agent, nothing to
install. It reaches the panel that has focus on either X display, which
the KDE Connect route can't. Verified on the Frame and from the iPhone app
in the Simulator.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Control: fixes from review

- Keys held on the Frame are released with buttons when Control stops or
  the view loses focus; keys for the Frame no longer trigger Frame Control's
  own shortcuts.
- Taps only act when the picture on screen is the panel in use; positions,
  presses, keys, text and scrolls name their panel (display and window: ids
  repeat across :0 and :1, told apart by pid), and the Frame drops them if
  focus has moved on. Releases always go.
- While connecting, a tap keeps its position; on an error only releases wait
  and retries back off; trimming a long queue never drops a release.
- Lifting one of two scrolling fingers ends the scroll; a cancelled touch
  isn't a tap; clicks and holds on the bars around the picture do nothing.
- A capture loop from before a Live restart can't stop the new video.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Control: close the targeting gaps from the second review

- The focused panel's display comes from GAMESCOPE_FOCUS_DISPLAY (gamescope
  packs ":1" into the first value), so a window id repeated across :0 and :1
  can't be mistaken; the pid is only the fallback.
- Presses, keys, text and scrolls read focus afresh on the Frame; only moves
  use a reading up to a second old.
- A gesture remembers the panel it started on and does nothing more if that
  stops being the one in use; a press with no panel to aim at isn't sent.
- Opening a screenshot clears the panel Control would act on; switching to
  another app releases held keys and buttons.
- Trimming keeps a click with its position; the error backoff holds for new
  input too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Control: fixes from the SWE-2 Max review

- The Frame side tracks keys as well as buttons and lets go of both when the
  session ends.
- A stale tap tells the page, which re-reads the panels at once.
- A paused input device waits instead of ending the session; only a
  disconnect does. An OS error on one event skips it.
- Presses check focus with two property reads and do the full lookup only
  when it changed.
- Writes to an agent's stdin are serialized, so two devices sending at once
  can't tear a line (the keyboard agent too).
- Connecting gives up with a message after 15 s instead of hanging on
  "Connecting…"; text goes in 100-character pieces so releases don't wait
  behind a long paste; a cancelled mouse gesture releases what's held.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Control: stale clears, pauses reconverge, pastes split per request

- The Frame says it has caught up as soon as an aimed event lands after a
  stale one, so the page stops re-reading the panels.
- After a device pause it lets go of everything it holds (releases that
  arrived while paused were dropped), and waits for the device once per
  batch, not once per event.
- The quick focus check no longer freshens the panel geometry's age.
- Each request carries at most about 100 characters of text.
- Turning Control off while it connects doesn't report an error.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* frame_touch: build the socket path on the Frame, so Windows can import it for tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* frame_touch: any event that goes through clears the stale flag

A trackpad move names no panel, so waiting for an aimed event could leave
the page re-reading panels for the rest of the session; a release still
aimed at the old panel doesn't count.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Trackpad and key row go through gamescope's input; KDE Connect only for accents and emoji

The pad reaches whichever panel has focus (Steam's menus too), needs nothing installed, and no longer clamps to 1280x720. Characters that aren't on a US keyboard start KDE Connect the first time they're typed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Touch: a bare release no longer clears the stale-focus notice before the page has seen it

The page leaves the panel off releases, so a release says nothing about focus.
Found in review of the stale-latch fix.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Pad: keep typing in order and acknowledge it once, with accents through one KDE Connect queue

Review found accent-only input repeated forever (sent was false), text split
across two transports out of order, accents stuck until the next keypress,
duplicated on retry, and racy. A batch with an accent now sends its whole
keyboard through KDE Connect; later keys follow while any are queued; the
server owns one ordered, bounded queue drained by a single thread; sent means
the whole batch is taken.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Pad: drain the KDE Connect queue without losing, stranding or reordering input

Second review found the queue could be trimmed under an in-flight send (deleting
unsent events), the worker could retire as a request enqueued, and ASCII could
overtake an accent still being typed (or the reverse). The worker now takes its
batch out while sending and puts it back on failure, retires under the lock, and
each way waits out the other's estimated typing time.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Pad: count gamescope's real typing time, with the settle margin added once

Review found the estimate used 12 ms a character where the agent takes 16 ms
(32 shifted), and added the margin on every request so it piled up.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Document gamescope pad verification and shared-device limits

* Prevent Unicode input startup from deadlocking a headset switch

* Record real focused-panel click and ASCII key delivery

* Retain accepted Unicode input under queue saturation and failure

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 11:54:36 +00:00
1f7615b312 Keep theatre playback running without optional surround (#51)
* Never end playback over the cosmetic surround; always shut down OpenVR

Review (SWE-2 Max): a non-standby error re-sending the theatre surround
could end a healthy still, and a non-RuntimeError during DestroyOverlay
skipped VR_ShutdownInternal. drain() now drops a surround that fails for
other reasons, and close() shuts down in finally. Fake overlay handles no
longer depend on call order.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Play without the theatre surround if SteamVR refuses it

Review (SWE-2 Max): a non-standby error creating the cosmetic surround
at startup still ended playback before the screen appeared. Theatre now
logs it and plays without the surround. close() treats any per-overlay
teardown error as best effort (signals are already ignored there).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Verify media surround fallback and guard server startup ownership

* Record exact-head real Frame theatre playback smoke

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 10:45:48 +00:00
Alex SouthwellandSAPHID 2ded4c5a0d Document saved panel layout feasibility on SteamVR 2.18.2 (#160)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 10:19:35 +00:00
Alex SouthwellandSAPHID 5b47cd3330 Document packaged Desktop Capture result and visibility limit (#159)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 10:03:36 +00:00
Alex SouthwellandSAPHID de931bc56f Document packaged Return to Game Mode button verification (#157)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 09:39:21 +00:00
Alex SouthwellandSAPHID 71288d8980 Document packaged desktop Steam clip Export verification (#156)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 09:19:46 +00:00
Alex SouthwellandSAPHID 64b9babe87 Document Linux PC-host feasibility blocker on lxso2 (#155)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 09:17:14 +00:00
Alex SouthwellandSAPHID 4e456480ae Document real 100-second Steam clip export (#154)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 09:05:12 +00:00
Alex SouthwellandSAPHID 21dacfcbe7 Distinguish unreadable panel discovery from an empty list (#152)
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 08:34:56 +00:00
Alex SouthwellandSAPHID eb181d8996 Add opt-in desktop low-battery comfort alerts (#150)
* Add opt-in desktop low-battery comfort alerts

* Fix desktop battery alert test harness and Windows encoding

---------

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
2026-10-24 08:22:56 +00:00