# Mod feasibility test, 2026-09-28 **Verified observations**, with limits below. Device: `aarch64`, SteamOS `VERSION_ID=0.4.1`, `BUILD_ID=20260925.6191901`; Proton version file: `1788505046 proton-11.0-2c-arm64`; `vrcmd --stats`: SteamVR `2.18.1`. Times below are the Frame's AEST clock. ## Inventory and allowed content `ssh frame 'python3 - owned' < ui/frame_steam.py` returned 868 games before the test. Beat Saber (620980) and Skyrim VR (611670) were absent. Half-Life 2: VR Mod – Episode One (2177750) was installed. Hogwarts Legacy (990080), Horizon Zero Dawn (1151640) and Horizon Forbidden West (2420110) were listed but not installed. The full personal library is not committed. **Documented, owner report after these tests:** Alex has Beat Saber on a Quest 2, which is charging. That copy was not accessed or inspected during this test. Its version, transfer path and Frame compatibility remain unknown; Steam ownership is still not established. Gravitas's public Steam metadata reported `is_free: true`, developer Galaxy Shark Studios, Windows only. Frame Control's existing Steam helper requested its install. Steam first returned free-license state 3, then config state 7, then queued the download. The helper did not accept state 3; a later read found state 7. The source of that transition was not observed. A later `install 1067310` returned `state: installed`. No purchase occurred. UEVR was downloaded from the author's [1.05 release](https://github.com/praydog/UEVR/releases/tag/1.05), not a mirror. `UEVR.zip` was 7,399,455 bytes. Its SHA-256 matched the author's `UEVR.zip.sha256` (a UTF-16 text file): ```text af4f2f91306802d7ee4e8497d483a547ac8e9a3067dbafb81324100524215d3c ``` Microsoft's Windows x64 .NET runtime and Windows Desktop runtime 6.0.36 ZIPs were downloaded using URLs in the official release metadata. Both SHA-512 hashes matched that metadata. They were extracted into a test-only user directory, not installed globally. No other mod manager was used. ## Half-Life 2 VR: visible setup, not gameplay Launched the already-installed Episode One using `steam steam://rungameid/2177750`. The existing manifest recorded build 25413453 and a shared base depot from app 658920, build 25413418. Selected fresh Steam / SteamVR log lines: ```text 22:07:50 proton waitforexitandrun .../Half-Life 2 VR/ep1vr.exe 22:08:03 SetApplicationPid: Setting app steam.app.2177750 PID to 27990 22:08:03 Successfully loaded binding file '.../hlvr/cfg/steamvr/bindings_frame.json' for app 'steam.app.2177750'. ``` The game's `episodicvr/console.log` reached `Creating VR hand HUD...`, `Creating VR weapon HUD...` and `Calibrating VR base position`. It also contained missing material/weapon warnings. SteamVR logged a missing `frame_hmd` binding as well as the successful controller binding load; controller input was not exercised. `ui/frame_vrshot.py` produced a stereo capture showing the mod's “First time setup” and “Dominant hand” dialog. This establishes visible startup, not a played level or comfortable performance. The capture includes room passthrough and is deliberately not published. The test's `hl2.exe` process was terminated; the pre-existing game installation was preserved. ## Gravitas and UEVR: injection unverified The game was launched through Steam. The injector was then started in the same `steamapps/compatdata/1067310` prefix using the shipped `SteamLinuxRuntime_4-arm64/_v2-entry-point` and Proton 11 ARM64. The first attempt reported: ```text Application: UEVRInjector.exe Message: You must install .NET to run this application. Architecture: x64 App host version: 6.0.35 .NET location: Not found ``` With `DOTNET_ROOT` and `DOTNET_ROOT_X64` pointing at the test-only Windows runtime directory, Proton loaded `Microsoft.NETCore.App/6.0.36` and `Microsoft.WindowsDesktop.App/6.0.36`. A 25-second launcher timeout was too short to establish whether the UI worked. A longer attempt produced a 625×372 `UEVR` X11 window on display `:1`. This is window creation evidence, not a successful injection. That launcher returned exit 0; this was not treated as proof that a mod worked. A combined launch set `PROTON_REMOTE_DEBUG_CMD` to `UEVRInjector.exe` and ran Gravitas's `Drop.exe` in the same runtime/prefix. The process `SkyArk/Binaries/Win64/Drop-Win64-Shipping.exe` and a 1600×900 window titled `SkyArk (64-bit, PCD3D_SM5)` appeared. The launcher exited **1** before an injection or stereo game scene could be verified. Output included: ```text Proton: Error while copying to ".../windows/system32/amdxcffx64.dll": No such file or directory Error [GENERAL | xrCreateInstance | OpenXR-Loader] : xrCreateInstance failed X Error of failed request: BadWindow (invalid Window parameter) Major opcode of failed request: 10 (X_UnmapWindow) X Error of failed request: XI_BadDevice (invalid Device parameter) Minor opcode of failed request: 28 (X_GetDeviceButtonMapping) ``` These errors do **not** establish an ARM64/FEX incompatibility. Other work was launching apps on the shared Frame. SteamVR's PIDs changed during the experiment; `ps` recorded the replacement `vrserver` and `vrcompositor` starting at **22:13:03**, corroborated by `steamvr.service` journal startup lines. This test did not request a Steam/SteamVR restart. The combined attempt ran at 22:14:17–22:14:27, after that restart. A stable, coordinated session is needed to distinguish launcher/environment problems from game or mod incompatibility. ## Cleanup and remaining checks - No game executable or OpenVR DLL was replaced. No global runtime or power setting was changed by this test. No R.E.A.L., OpenComposite or Beat Saber payload was installed. - Removed the test-only UEVR/.NET directory and downloaded ZIPs from the Frame. Final process checks found no `UEVRInjector.exe`, `Drop-Win64-Shipping.exe`, `ep1vr.exe` or `hl2.exe`. SteamVR was running. - Gravitas and its Steam-created prefix remain installed for a repeat test; the pre-existing HL2 VR install remains. Steam may retain normal shader caches, logs and prefix temporary files. - Still unverified: UEVR injection and removal, R.E.A.L. releases and permissions, OpenComposite, Beat Saber playback on either build, and our own manager's end-to-end install/uninstall. No installer UI is justified by these results. See the [support table and next checks](../mods.md).