spoopyghosty0
da7655ee25
Live view hardware encoder: fixes from the first device run
...
- fp_venc: accept the source's buffer count (the Frame's v4l2loopback has max_buffers=2; asking for 3 failed the
probe); OUTPUT buffers remember which picture they hold, so repeats (standby, still scenes) skip the conversion
(720p: 35% -> 2.5% of a core with the headset asleep).
- Pipeline: raw H.264 stamped on arrival (-use_wallclock_as_timestamps, same clock as pulse) with a 32-byte probe:
-framerate was ignored, -fflags nobuffer lost the first seconds, frames numbered from 0 held all output ~7 s next
to the sound. frag_keyframe so a requested keyframe starts a fragment (a joining viewer starts there).
Verified on the Frame (headset asleep): selftest ok (104 cases), probe at 360p-1080p, end to end through
livestream.start: 720p36 + AAC in 0.1 s fragments, audio and video spans match, a second viewer starts on its
requested keyframe at once, nothing left running after stop; FP_VENC_DISABLE=1 falls back to x264.
2026-10-07 17:50:57 -04:00
spoopyghosty0
0ae754fa5d
Live view: hardware H.264 encoder (fp_venc), x264 stays as fallback
...
native/venc/fp_venc: own clean-room driver of the Frame's iris encoder (V4L2 stateful encoder interface, written from
native/venc/SPEC.md = kernel docs + values measured on the Frame). Reads SteamVR's headset-view webcam, box-scales and
converts RGB24 to NV12 (NEON, bit-identical scalar reference), CBR H.264 with SPS/PPS on every IDR, one frame per slot
of an even fraction of the panel rate read through DRM (96 Hz -> 32 fps). stdin "k" = keyframe, EOF = stop;
--probe/--selftest. Static freestanding aarch64 binary in artifacts/linux-arm64-bin (reproducible).
livestream: the script probes fp_venc and pipes it into ffmpeg (-c:v copy + AAC), else the old x264 30 fps path; the
helper is synced to ~/.local/share/frameport/bin by sha256 at stream start (no agent change); a new viewer asks for a
keyframe and waits for it; the status line shows the encoder and fps. Tests: hardware/fallback script branches,
keyframe-on-join, helper sync; tests/test_venc.py compares convert.c with a Python reference (native marker).
Not yet run on the device.
2026-10-07 17:50:55 -04:00
spoopyghosty0
ecfd2408cf
Monitor: the detail boxes' first update goes through the event loop like the ticks (sent from the connect thread it could arrive after a tick's patch: 'dropped a patch for unknown control'); README screenshot with the new layout
2026-10-07 17:33:21 -04:00
spoopyghosty0
29876ec046
README: Monitor section + screenshot (docs/images/monitor.png, ui_smoke --fake-frame --game: the fake monitor follows --game and sends two minutes at once so the charts are full). Monitor game card: the game's artwork is an art_fill control inside the box (copying its image onto the box showed nothing)
2026-10-07 17:05:15 -04:00
spoopyghosty0
375b976dcd
Monitor tab: a live view of the Frame while the tab is shown (running game with fps, CPU/GPU/memory/temperature/power/battery tiles with 2-minute sparklines, details: per-core load, sensors, power split, network) and its processes (filter Game / Steam & SteamVR / All, search, sort; right-click: end, force kill, end game; critical programs ask again). frame/monitor.py = session + pure helpers, C.Sparkline/MeterBar on Flet's canvas (no charts extension), ui_smoke FakeMonitorSession + --only, docs
2026-10-07 16:55:09 -04:00
spoopyghosty0
d49b3ae884
Install links: FramePort-only manifest fields (frameport.description / frameport.icon) shown in the install question and used as the game's icon and description; readable titles for bare file links; handler scripts wait for the open window to take a link (a just-closed window's heartbeat swallowed clicks on Windows), the heartbeat is removed on close, and the Windows handler runs under conhost --headless (no console flash)
2026-10-07 16:35:21 -04:00
spoopyghosty0
ec701e6e56
Install links (FrameDrop's "Install with FrameDrop" button protocol), drop files on the Library, add a lone Windows .exe, VR / flat window choice, x86_64 Linux apps through FEX
...
- deeplink.py: framedrop:// and frameport:// links and the pasted https://framedropvr.com/install?manifest= |url= link; manifest framedrop.install/v1; https only (http on loopback), no credentials, no LAN addresses (also after DNS and redirects), sha256 checked, cancel/mismatch leave no .part
- urlhandler.py: per-scheme registration (Settings → Install links, links.framedrop / links.frameport, default on; another program's scheme only taken on request) through a handler script that queues the link and starts FramePort (a flet build bundle can't take a URL argument); the GUI's heartbeat + link inbox
- GUI: Add games → Install from a link… and Add a Windows program (.exe)…; confirmation before any download; files dropped on the Library (packaged app); CLI frameport open-link
- patch device.display_mode (Automatic / VR / Flat window), verified on the Frame with 4XVR
- x86_64 Linux apps run through FEX (agent v61: FEX installed unattended, STEAM_COMPAT_DATA_PATH set, RootFS from SteamOS's /usr/share/guestos/fex-mesa); verified on the Frame with an x86_64 test program; triage linux-x86-no-fex
2026-10-07 16:06:40 -04:00
spoopyghosty0
360dc105e1
Type on Frame is a sidebar tab (was a dialog): the virtual keyboard is connected while the tab is shown and removed when another tab opens or the Frame disconnects; the Frame page button and the game menu open the tab, the keyboard icon on the Frame card is gone. README screenshot redone
2026-10-07 09:24:17 -04:00
Molier
3b6128a1b0
FrameBridge input_diag (off by default, hooked only when on): logs each controller profile a game suggests with the runtime's answer (every path of a rejected one), the profile the runtime reports for each hand, OpenXR functions the runtime lacks and failing input, haptics and perf calls, each line once. Triage signature input-call-failed, PLAYBOOK row, host test tests/test_input_diag.py; artifacts not rebuilt
2026-10-06 23:13:51 -04:00
spoopyghosty0
6d2dc95cc8
Catalog: Jurassic World Aftermath Collection (works; frame.vrapi_stub)
2026-10-06 18:22:40 -04:00
spoopyghosty0
109c7e449c
FrameBridge: a vibration with amplitude 0 becomes xrStopHapticFeedback (OVRPlugin stops vibrations that way; the last buzz otherwise ran its full 2 s in Jurassic World, The Boys VR, Creed)
2026-10-06 16:28:45 -04:00
spoopyghosty0
05ad7e4d25
GL shim: with GL_EXT_multisampled_render_to_texture hidden, its two functions become single-sampled stand-ins (TBXR calls them regardless: GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE, black eyes in Lambda1VR); frame.tbxr_vendor links the shim into TBXR's library
2026-10-06 15:37:08 -04:00
spoopyghosty0
69da709ea2
Vibration: haptic_fix converts envelopes with their RMS instead of their peak (vibrations felt far stronger than on a Quest); new per-game setting haptic_scale ('Vibration strength') scales every vibration in FrameBridge and logs the first requests. VrApi bridge: input/vibration diagnostics every 5 s (BlazeRush controllers)
2026-10-06 15:22:57 -04:00
spoopyghosty0
d5f9c248e0
frame.avatar_stub: replace Meta's avatar loader with a do-nothing library when it can't find its driver and aborts the game (BlazeRush: OVRAvatar-Loader DisplayErrorAndExit); suggested by triage avatar-driver-missing
2026-10-06 14:53:53 -04:00
spoopyghosty0
cc39547e33
FrameBridge: add XR_KHR_opengl_es_enable when an app enables no graphics API extension (Lambda1VR's TBXR creates a GLES session without it; Meta's runtime tolerates that); log the final instance extension list once per launch. Lambda1VR now runs headless at 72 fps
2026-10-06 14:50:34 -04:00
spoopyghosty0
096d24e42b
FrameBridge: when xrCreateSession fails with XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, ask for the graphics requirements on the app's behalf and retry once (Lambda1VR: Failed to create XR session: -50); triage graphics-requirements-missing
2026-10-06 14:33:02 -04:00
spoopyghosty0
4b34dbd218
Platform stubs: also stub ovr<Enum>_ToString helpers OVRPort's loader lacks (BlazeRush: ovrPeerConnectionState_ToString); ToString stubs return an empty string, not NULL; triage missing-ovr-symbol matches them
2026-10-06 14:08:20 -04:00
spoopyghosty0
51e553039a
Catalog: Beat Saber (com.beatgames.beatsaber.lj369vr) (works)
...
Closes #68
2026-10-06 13:53:36 -04:00
spoopyghosty0
27ff49a137
Catalog: Creed (works)
...
Closes #60
2026-10-06 13:53:33 -04:00
spoopyghosty0
e70acf9269
Catalog: BodyCombat (works)
...
Closes #56
2026-10-06 13:53:29 -04:00
spoopyghosty0
1f6fce0fcc
Catalog: Pinball FX VR (works with issues, MR not yet)
...
Closes #50
2026-10-06 13:53:25 -04:00
spoopyghosty0
188cb8fe68
Metro Awakening: libfp_vk.so rebuilt with the shim's new fixes; catalog entry with the contributor's recipe (use_alt, vk_spec_fixes, vk_hide_fdm); docs/GAMES.md regenerated; lint
2026-10-06 13:46:53 -04:00
UnicronNL
0744a126cb
Vulkan shim: drop depth resolves of subpasses without depth, leave out null-image barriers and refuse null-image views (vk_spec_fixes), vk_hide_fdm hides fragment density maps (Metro Awakening crashed in the Frame's Vulkan driver, GitHub #65 )
2026-10-06 13:46:52 -04:00
spoopyghosty0
1c8a0d63e7
BONELAB: libfp_ovrp.so rebuilt with the user-presence wrapper; catalog status 'issues' (1.2068 plays, the newer 1.2974 still crashes at start); docs/GAMES.md regenerated
2026-10-06 13:46:51 -04:00
UnicronNL
124ec594a6
frame.unity_user_presence: report the headset as worn to Unity's Oculus XR Plugin (BONELAB 1.2068's rig froze: OVRPlugin's ovrp_GetUserPresent2 turns 0 while worn, GitHub #66 )
2026-10-06 13:46:31 -04:00
UnicronNL
2da6082166
frame.ovr_microphone: guard OVRPort's ovr_Microphone_GetOutputBufferMaxSize against a not-yet-opened stream (The Walking Dead: Saints & Sinners Ch. 2 crashed after the logo, GitHub #67 )
2026-10-06 13:46:30 -04:00
spoopyghosty0
3e61b07254
frame.asset_files: list the game data's *.pak content files as installed default asset files and answer DownloadById at once with the path (Star Wars: Tales from the Galaxy's Edge went black after loading, GitHub #61 ); shares the language-pack library
2026-10-06 13:46:08 -04:00
spoopyghosty0
48c3716ef5
frame.tbxr_vendor: Team Beef ports load openxr_loader_<maker> and pick Meta's path only for "meta": add an empty libopenxr_loader_valve.so and let "valve" match those checks (Lambda1VR stopped at start, GitHub #59 )
2026-10-06 13:28:10 -04:00
spoopyghosty0
dca2d8b762
VrApi bridge: vrapi_PollEvent, RecenterPose, SetDisplayRefreshRate, GetSystemPropertyFloatArray (BlazeRush couldn't load: cannot locate symbol vrapi_PollEvent, GitHub #57 ); static check 'VrApi functions resolvable', triage vrapi-symbol-missing; upstream-patches regenerated (graphics.cpp.patch was stale: the Vulkan format twin was missing from it)
2026-10-06 13:23:52 -04:00
spoopyghosty0
2c4bbdbfec
frame.vrapi_stub: replace Meta's leftover VrApi loader with a same-exports library that answers 0 (OVRPlugin on OpenXR called vrapi_SetPropertyInt before init and the loader aborted, GitHub #62 ); triage vrapi-before-init, direct-vrapi no longer matches it
2026-10-06 13:12:59 -04:00
spoopyghosty0
8a08733be8
Agent v58: Play re-adds a devkit entry Steam forgot (no NOT_IN_LIBRARY, no Steam restart); installs and art updates of devkit games only copy art; the app treats Steam's AppError_16 as already starting and ignores repeated Play clicks for 20 s (GitHub #41/#42)
2026-10-06 13:09:39 -04:00
spoopyghosty0
d7193bea19
device.foveation: per-game choice for Valve's eye-tracked foveation layer (default / fixed = FDM_DEBUG=disable_offsets / off = VK_INSTANCE_LAYERS=""), catalog field foveation (GitHub #69 )
2026-10-06 13:06:36 -04:00
spoopyghosty0
518c94d79f
Vader Immortal: Episode I catalog entry (works with issues, GitHub #49 ): plays the intro, then stays on its loading card; plain recipe without diagnostics
2026-10-06 11:42:04 -04:00
spoopyghosty0
7439f082db
BattleSisters works (owner-verified 2026-10-06: buttons via the Oculus device-model fix; its first controller vibration ran OVRPort's haptic-envelope bug into an 11 GB OOM kill). haptic_fix is now suggested for every game that ships Meta's OVRPlugin; existing FramePort recipes pick it up after the next update
2026-10-06 09:01:40 -04:00
spoopyghosty0
7a40e47e67
FramePort 0.11.0
2026-10-06 00:21:37 -04:00
spoopyghosty0
9401b7fc87
Accounting+ works (owner-verified 2026-10-06: the motion warning continues with the click emulation); catalog entry needs FramePort 0.10.1
2026-10-06 00:18:20 -04:00
spoopyghosty0
919c0e291e
focus_hold on by default with 5 s (the Frame's wear sensor flickers "HMD off" for 0.5-2 s while worn and Quest games pause each time; Lucky's Tale); Unity 2019 games on the built-in VR loop (no Oculus XR Plugin) get the ovrpshim frame wait (BattleSisters flooded 'outside of frame bounds' and hung the GPU); frame.ovr_trace: opt-in Meta Platform SDK request tracer (native/ovrtrace) for games stuck waiting (Vader Immortal, GitHub #49 ); catalog: I Am Cat pose_consistency, Lucky's Tale haptic_fix, The Room VR (all owner-verified)
2026-10-05 22:02:06 -04:00
spoopyghosty0
0e47ce8f1a
Live view: sound, 360p-1080p + full-size qualities, smoother catch-up
...
- Sound: the default output's pulse monitor (what the headset plays) as AAC in the same fMP4; the
player starts muted (browser autoplay rules) with a Sound on button. Video timestamps go to the
wall clock (-ts mono2abs) instead of forcing it on the pulse input, which gave bursts of AAC packets
one shared timestamp; aresample=async=1 keeps the sound continuous.
- Late viewers start at a keyframe of the video track (audio samples are all sync).
- Qualities 360p/480p/720p/1080p scale down only; 'full' sends SteamVR's headset view at its own
size (1920x1080 today; v4l2cam has no size option, so 2K/4K would only upscale).
- Player keeps a 0.3 s cushion and catches up at 1.1x; it seeks only when >2 s behind (seeking to the
very edge starved playback).
2026-10-05 20:05:06 -04:00
spoopyghosty0
ad924669d3
Live view tab: stream the Frame's headset view to a browser window on the PC
...
Source: SteamVR's built-in v4l2cam headset view (steamvr-v4l2cam.service -> v4l2loopback 'SteamVR'),
encoded with x264 on the Frame (fps=30 before scaling, nice 10, 3 threads) as fragmented MP4 over an
SSH exec channel; ffmpeg stops when the channel closes. A relay on 127.0.0.1 keeps the init segment and
the fragments since the last keyframe for late viewers and serves an MSE player page, opened in the
default browser (Flet can't show video outside flet build bundles). Verified on the dev Frame: 30 fps
in Edge, ~0.1 s behind the newest frame, 0.34 core at 720p with a quiet picture.
2026-10-05 20:05:06 -04:00
spoopyghosty0
311277ae40
FrameBridge rect_clamp (default on): keep submitted image rects inside their swapchain; SteamVR rejected every frame of a Unity game whose eye rect ran 4 px past it (GitHub #39 , PowerWash Simulator stuck at 'Waiting'); triage swapchain-rect-invalid, PLAYBOOK row
2026-10-05 19:17:36 -04:00
spoopyghosty0
9b57c4753f
Game list: Waltz of the Wizard (merged working config)
2026-10-05 18:51:06 -04:00
spoopyghosty0
f2d93af973
Game list: Tetris Effect, Iron Man VR, palazzo_santacruz (merged working configs)
2026-10-05 18:44:29 -04:00
spoopyghosty0
59fb47a827
Into The Radius 2 works: catalog vk_spec_fixes (the invalid depth resolve made models flicker and windows show behind them; found with the validation layer), status works, min_app 0.9.2; notes on Vulkan validation on the Frame
2026-10-05 18:43:39 -04:00
spoopyghosty0
bda9045be6
Into The Radius 2: load only Valve's foveation layer (VALVE_rpo removed the game's fog; owner-verified), notes on the remaining pop-in
2026-10-05 17:32:58 -04:00
spoopyghosty0
a7890d46de
QuestCraft works: catalog status works (owner-verified 2026-10-05; LIBGL_NOERROR + frame.ltw_depth)
2026-10-05 17:31:35 -04:00
spoopyghosty0
4313b52792
QuestCraft: LIBGL_NOERROR for LTW (Lepton env) gets Minecraft past its GL error 1282 at start (the picture is black next, under investigation); notes on ITR2's popping tests (vk_query_slots and Valve's FDM layer ruled out)
2026-10-05 17:09:33 -04:00
spoopyghosty0
44a056095d
Dashboard worker (agent v53) leaves a dashboard the player opened with the controller alone (v52 closed it 60 ms after each press, the game stayed paused); Into The Radius 2: focus_hold up to 2.5 s (the Frame dropped focus for 0.4 s and 1.0 s and Unreal paused each time), notes from the headset test
2026-10-05 15:58:50 -04:00
spoopyghosty0
c3a34ace99
Files, Screenshots and Library: right-click menus (Files and Screenshots; on one of several selected items they act on the whole selection) and click-and-drag multi-select in all three; selection bars moved below the lists so they don't shift items mid-drag; the Files row Download button works again (Flet never awaited it); ui_smoke --gestures drives real mouse drags and right-clicks
2026-10-05 15:43:06 -04:00
spoopyghosty0
5198f704e9
Game configs update without a release: installed apps fetch catalog/games from GitHub main every 6 h (one API call + changed files only; background, cache-only loading; Settings → Data: last check, Check now, off switch; frameport catalog-update). Configs that need a newer FramePort (unknown patch, adapter setting or field, or min_app above this version) are skipped
2026-10-05 14:31:21 -04:00
spoopyghosty0
772c26d91a
Connect with a USB cable: wizard "Set up with a USB cable" (live cable detection; setup command over the cable via the Frame's fixed PC address 10.86.200.234; connects right away when already set up), discovered Frames de-duplicated by SSH host key preferring USB > Frame hotspot > network, USB check fixes. Verified on the device: NCM driver-free on Windows 11, DHCP from the Frame, Frame->PC over the cable, the real setup end to end over USB, 36.9 vs 11.3 MB/s, re-finding a lost address
2026-10-05 14:24:48 -04:00