# Frame Control in detail What each part of the app does, how it works, and what has been checked on a real Frame. For installing it, see the [README](../README.md#install). As of 2026-09-25 no other desktop app manages the Frame end to end. [Stream Frame](https://streamframe.app/) (macOS 14+, free) records and screenshots the headset over SSH. [FrameDrop](https://framedropvr.com) sideloads but is Windows-only. Steam Link views the headset. You can also run the same UI in a browser without the app, from a checkout: ```sh ./scripts/frame-ui.sh # macOS: opens http://127.0.0.1:47810 in its own window python3 ui/server.py # anywhere: then open http://127.0.0.1:47810 ``` ## Features The window has six tabs: **Home** (what the headset's doing and what you'd do next, the headset view, screenshots, family and comfort, the keyboard and trackpad, and VR performance, folded away), **Games** (installed games, sideloaded titles, getting games), **Android** (apps, the catalogue, display settings, reports), **Tools** (in the headset: your computer's windows, the media player and the panel switcher; then sending files and text, Flatpaks, remote and power), **Devices** (your headsets and their addresses), and **Control** (the searchable Control Center, metrics, supported settings and headset guidance). Keys 1–6 switch between them, and `T` opens Type on the headset. The gear in the header (key 7) opens **Settings**: privacy and updates, library artwork and the assistant. The battery chip opens the headset's details: storage, memory, temperature, Wi-Fi, uptime and SteamOS build. Files can be dropped anywhere in the window. A connection pill in the header always shows which headset and whether it's connected, and how (Tailscale, or the network's name). Click it to add, edit or reorder the headset's addresses, or to see each step of connecting. When the Frame can't be reached, a banner says why in plain words, what was tried, and counts down to the next try, filling everything in once it answers. Flatpak and Android installs run in the background; the bottom bar counts them while they run. - **Headset view**: what the lenses show, as SteamVR composites it (the room, floating panels, dashboard and controllers). Shows the left eye, like pointing a camera into one lens, or both eyes, as a single shot; saves as PNG. **Live** is 720p video at about 30 fps: `ffmpeg` on the Frame encodes SteamVR's headset-view device (`/dev/video99`) to H.264 over SSH, and the page decodes it with WebCodecs. Live video is one eye; Capture still gets both. The viewer fits the whole frame; zoom with − / + (or scroll, or double-click), drag to pan, `0` to fit, `F` for full screen. Capture uses OpenVR's `IVRScreenshots` API through Python `ctypes` (`ui/frame_vrshot.py`). Nothing extra is installed on the Frame (SteamOS ships `ffmpeg`). **Desktop panel** captures gamescope's flat layer instead. - **Screenshots** you take in the headset with Steam's shortcut: browse them and save them to `~/Pictures/SteamFrame`. - **Record** what the headset shows, with its sound, to an `.mp4` in `~/Videos/SteamFrame`, and **Steam clips**: export clips and background recordings from Steam's game recording at any length, without re-encoding. See [recording.md](recording.md). Not tested on a headset yet. - **Backup & recovery** (Tools): copy game saves, settings and Android app data to `~/Documents/Frame Control Backups/