# FrameYap POC observations — 2026-09-24 Dated observations on one user-authorized Steam Frame, not proof of future device availability, full dictation acceptance or runtime redistribution rights. No audio, weights, private transcript/log files, credentials or runtime binaries are included. The final native package below was built from source commit **`d60d8d2`**. ## CPU compatibility trial (before runtime-license review) Isolated user-local environment: ARM64, glibc 2.39, Python 3.12.3, moondream 2.4.0 / kestrel 0.8.0 / kernels 0.7.0 / native 0.1.8, Torch **2.8.0+cpu** (`torch.version.cuda is None`). Model weights/config/tokenizer verified against pinned Redux revision `fad622f25f303105c20d70e201bcc477c88b620c`. No dense model substitution or desktop/cloud inference was used. A one-second synthetic silence trial loaded in 5.645 s; three decodes took 0.187 / 0.149 / 0.167 s and returned no text. Peak process RSS in that trial was 989,844 KiB (~967 MiB). This is not peak RSS for arbitrary 20-second speech clips. Public 11.0-second JFK speech fixture: . Source FLAC SHA-256 `63a4b1e4c1dc655ac70961ffbf518acd249df237e5a0152faae9a4a836949715`. Converted to PCM16/mono/16 kHz WAV with ffmpeg; WAV SHA-256 `0c397b12d7dbdd89e4fd0d9a0840c14a2c5c3707758562755cda96a931b25a91`. The persistent worker used bounded file/pipe IPC; no microphone was opened. | CPU threads | Worker load | Five request times (seconds) | Median | RTF | Audio/compute ratio | | --- | --- | --- | --- | --- | --- | | 2 | 5.190 s | 1.550, 1.619, 1.587, 1.619, 1.659 | 1.619 s | 0.147 | 6.8× realtime | | 4 | 4.655 s | 1.196, 1.158, 1.143, 1.249, 1.502 | 1.196 s | 0.109 | 9.2× realtime | The first result reproduced the fixture's known sentence; all five replies in each run were correlated and 108 UTF-8 bytes. These are medians/maxima from one public clip, not representative accuracy/WER, p95, streaming realtime performance, or compositor/thermal acceptance. Load time is excluded from RTF. Two threads remain the default pending scene-contention measurements. An unconstrained dependency install initially selected CUDA Torch/NVIDIA wheels; these were replaced/removed from the owned venv before measurement. No system packages were changed. Later inspection found the proprietary kernel license's separate-agreement requirement. Permission was declared unresolved; further inference and proprietary-runtime packaging were paused pending vendor clarification. See [license boundary](../third-party.md). The acquired development environment remains user-local and is not included in the native-only installation. ## Native runtime / controller / overlay checks - Native CMake build succeeded on Frame using standalone OpenVR SDK v2.15.6, explicitly built SDL 3.2.16, system Wayland and FreeType. No unrelated app tree or environment was linked/copied. No sudo or system/session restart. - Installed executable connected to `gamescope-0`, bound the IME and received ready/done state; each discovery check disconnected **without text or Enter**. - OpenVR accepted the raw panel. The user reported seeing the five-second window. This confirms visibility, not readability/comfort or successful pointer clicks. - Device controller properties identified `frame_controller` and its input profile. The profile exposes grip `click`; authored default bindings were added. A controls-only run reported both grip actions tracked/active. **No physical gesture delivery was observed in that run.** Double-tap/hold/loss behavior is currently verified by deterministic unit tests, not a human controller trial. - The ARM loader initially tried `/data/work/openvrpaths.vrpath`. Selecting the existing standard user registry fixed initialization; code now does so only when no explicit override is supplied. - Registration initially returned API success but did not install the app. Frame's manifest parser requires **`binary_path_linux_arm`**. Adding it fixed registration. Code now verifies `IsApplicationInstalled`, not return status alone. - Repeated Add, Remove and re-Add of **only** `local.frameyap.overlay` succeeded; autolaunch queried **off**. The final installed panel check also succeeded after explicit identification with that registered key. Menu-driven launch and cold SteamVR startup were not exercised. ## Installer and final state Native-only artifacts `v0.1.0-poc1`/`poc2` exercised installation, same-version rerun, upgrade, rollback and forward selection. A producer-prefix SDL RUNPATH leak was found and removed; final ELF RUNPATH is only `$ORIGIN/../lib` and bundled SDL/OpenVR resolve inside the installed tree. Explicit OpenVR unregister followed by `--uninstall --unregistered` succeeded. The final `v0.1.0-poc3` artifact was then installed twice and registered with autolaunch off. It includes native code, SDL/OpenVR, Hack font/notices and the worker adapter, **no ASR runtime or weights**. Installed size: ~8.1 MiB. Local archive SHA-256: `90aab107feea2cb501bf815806bdc1d04d84bb6f87f7c795b60ad43c7fdc0634`. The artifact is retained only in the device's project-owned development directory; no GitHub release/upload was performed. Installed launcher is `~/.local/bin/frameyap`. Actual native CLI and installer both refused an independently held install lock. At the final check, no owned `frameyap` process or transient `frameyap-*` runtime directory remained. Installation/registration remain; nothing was autostarted. Final verification on source `d60d8d2`: default local build **8/8 CTests**; optional native local build **9/9**; native ARM64 build **9/9**. Suites include 13 installer cases, worker framing/hash/cancellation/deadlines, gestures, state, instance locking, and an isolated fake Wayland server. Those tests do not connect to the live compositor or record audio. `git diff --check` passed locally. ## Still open Runtime permission and any public distribution; live microphone quality/device selection; physical tap/hold/buttons; actual text/Enter delivery into disposable and real target apps; focus/held-modifier behavior; quick typing's focus observer; scene/dashboard collisions; compositor cost, battery/thermal and headset comfort. No live microphone recording or input injection occurred in this POC pass.