Frame Control icon

Frame Control

Manage your Valve Steam Frame from your computer.
See what the headset sees, install games and Android apps, move files and text across, and check battery and status, all over SSH.

Latest release Platforms Checks License: MIT

Download · Features · Set up the headset · Feedback · Docs


Frame Control showing the headset view, battery and status, and the Steam library

Unofficial hobby project, not affiliated with Valve. Free and open source.


Features

👓 Headset view
Live video of what the lenses show (about 30 fps), or a still of both eyes. Zoom, pan, full screen, save as PNG.

🔋 Battery and status
Charge, charging watts and time left, storage, memory, temperature, Wi-Fi, and what's running.

🎮 Steam games
Everything you own with its Steam Frame rating. Install onto the headset with live progress, and search the store.

🤖 Android apps
About 4,500 F-Droid apps rated for the Frame. One click installs each as its own app in your Steam library.

📁 Files and clipboard
Drag files onto the window to send them. Send text or your clipboard straight to the headset's desktop.

📸 Screenshots
Browse the shots you take in the headset and save them to your Pictures folder.

🧩 Flatpaks and display
Install desktop apps like Moonlight or VLC, and set each Android app's resolution and text size.

⚡ One-click tools
SSH, SFTP, Steam Link, remote desktop, volume, sleep, restart and shut down.

Nothing is installed on the Frame for any of this: the app uses what SteamOS already ships. How each feature works.

Install

Download Needs
macOS (Apple Silicon) Frame-Control-mac-arm64.dmg Nothing extra
Windows 10 / 11 (x64) Frame-Control-Setup-x64.exe · portable .zip Nothing extra
Linux (x64) AppImage · .deb ssh (most desktops have it)
Linux (arm64) AppImage · .deb ssh, and adb for Android apps (sudo apt install adb)

The app brings its own Python and adb; SSH is built into macOS and Windows. Google doesn't publish adb for arm64 Linux, so that build uses your distribution's. If you already have adb, the app uses yours.

macOS: the app isn't notarized

There's no paid Apple developer account behind it, so macOS says the app is damaged or can't be checked. Drag it to Applications, then clear the download quarantine once:

xattr -dr com.apple.quarantine "/Applications/Frame Control.app"

The first time, macOS also asks to allow local network access (for SSH) and control of Terminal (for the password prompts).

Windows: SmartScreen warning

The installer isn't code-signed, so Windows SmartScreen may say it protected your PC. Choose More info → Run anyway. The portable .zip avoids the installer: unzip it anywhere and run Frame Control.exe.

Linux: running the AppImage
chmod +x Frame-Control-linux-*.AppImage && ./Frame-Control-linux-*.AppImage

If it complains about FUSE, install libfuse2 (Ubuntu 24.04+: libfuse2t64), or run it with --appimage-extract-and-run.

Set up the headset

You type one password on the headset, once. Everything else happens on your computer.

  1. On the Frame: Steam Settings → System → Enable Developer Mode, then in the Developer section, Set User Password. Pick something short: you'll type it once more on your computer and then never again.

  2. On your computer: open Frame Control. It offers to Set Up Connection, which finds the headset, creates an SSH key, and asks for that password once in a terminal window. If it can't find the Frame, type the IP address from the Frame's Quick Settings.

    Before asking for the password it tries Valve's SteamOS devkit pairing: if the headset shows a pairing request, approve it and no password is needed. (Inferred from Valve's source (steamos-devkit-service), not yet verified on a Frame; see SSH.)

  3. That's it. The app now reaches the headset whenever it's awake and on the same network. For anywhere else, see Tailscale.

What it changes: only what you click. Installs go to your user account on the Frame (--user Flatpaks, Lepton instances, Steam downloads), and nothing needs sudo except the power buttons. On your computer it adds a Host frame entry to ~/.ssh/config and keys at ~/.ssh/id_ed25519_frame and ~/.ssh/id_rsa_frame_devkit (the pairing service only takes RSA keys).

Feedback

This is a first public test, so reports are really useful, especially from Windows and Linux. Please open an issue with:

  • what you tried and what happened
  • your computer's OS and your SteamOS build (Steam Settings → System)
  • the server log: Frame → Show Server Log in the app

Going further

This repo also holds the scripts behind the app and field notes on how the Frame's software fits together, all checked against a real headset and labelled verified or inferred.

Frame Control in detail Every feature, how it works, per-platform notes, building
Scripts and headset setup The command-line helpers, minimum typing, streaming options, floating panels
How the Frame works SteamVR → gamescope → Plasma, verified facts, debugging
Android apps (Lepton) Sideloading, the rated F-Droid catalogue, per-app instances
Steam games · VR video · WebXR in Chromium Installing and buying, watching VR180/360, the Chromium build
SSH · Streaming · Files · Panels · Tailscale Topic notes
Open questions What's still unchecked
Security notes
  • With Developer Mode on, sshd, ADB and xrdp are all reachable on your LAN. Each running Lepton (Android) instance opens its own ADB port in 5555–5599, listening on 0.0.0.0 rather than only loopback. This was seen on the device on 2026-09-25, so anyone on the network can reach it. Use trusted networks only, and turn Developer Mode off when you don't need it.
  • Frame Control reaches ADB and the Steam client's DevTools port (Frame loopback 127.0.0.1:8080) only through SSH tunnels. The compatibility database key (maintainer-only) is never written to the repo.
  • steamos has sudo, protected by the same Developer Mode password. Once you've switched to key auth, a short password still protects sudo and RDP, so pick one that isn't trivially guessable.
  • Don't port-forward 22, 3389, or 5555–5599 from your router. For remote access, use Tailscale: scripts/tailscale-on-frame.sh (no sudo). In its userspace mode every Frame port is reachable from your tailnet, including Steam's DevTools on loopback 8080; see docs/tailscale.md.

Development

python3 -m unittest discover -s tests   # server tests; no headset needed
cd app && npm install && npm start      # run the app from the checkout

The server is Python stdlib only; the app is Electron. GitHub Actions runs the tests on macOS, Windows and Linux, and a v* tag builds all three installers into the release. See building.

License

MIT. Steam, Steam Frame and SteamVR are trademarks of Valve Corporation. This project isn't affiliated with or endorsed by Valve.

S
Description
GitHub pull mirror of saphid/frame-control. GitHub repository ID: 1388213277. Gitea import mode: github-full.
https://github.com/saphid/frame-control Readme MIT
39 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 53.7%
Python 32%
HTML 7.7%
Swift 3.9%
Shell 1.4%
Other 1%