Skip to content

Add SpoutRemotePlay to Plugin Store - #1146

Open
justjoseorg wants to merge 2 commits into
SteamDeckHomebrew:mainfrom
justjoseorg:add/SpoutRemotePlay
Open

justjoseorg wants to merge 2 commits into
SteamDeckHomebrew:mainfrom
justjoseorg:add/SpoutRemotePlay

Conversation

@justjoseorg

@justjoseorg justjoseorg commented Oct 9, 2026 •

Copy link
Copy Markdown

Add SpoutRemotePlay to Plugin Store

SpoutRemotePlay is a companion for native Steam Remote Play. It wakes your PC from the handheld, and while you stream, the game stays on a virtual display matching the handheld with the PC's other displays off. It doesn't stream anything itself: Steam keeps doing the streaming.

  • Wake the PC: Wake-on-LAN with an online check. With a full-tunnel VPN such as WireGuard turned on, it also sends the packet to the local network's own broadcast address, and from outside the home another paired Spout host on the LAN can send it for you.
  • Sign in with a PIN (Windows only): when the PC is at the sign-in screen, a numpad in the plugin types the PIN on the PC. This is opt-in in the host installer, which warns that the PC will then boot straight to the PIN box.
  • Shut down the PC from the plugin, with a confirmation.
  • Find and pair once: scan the LAN or enter the PC's IP, then type the 4-digit PIN shown on the PC.
  • Press play in Steam: the plugin reports Remote Play start/stop to the paired PC, and the companion host app (SpoutRemotePlayHost, Windows and Linux) handles the displays:
    • Windows: Steam's client beta now creates its own (SudoVDA) virtual display for Remote Play, but leaves the physical monitors on. The host finds Steam's display, turns the other displays off (with an allowlist of ones to keep, and re-applies it if Windows turns one back on mid-session), and restores the layout when the stream ends.
    • Linux: Steam doesn't create a virtual display there, so the host creates one sized to the device and removes it afterwards.
    • Per-device virtual display resolution and refresh rate, set from the plugin.
  • Client stream settings (Advanced tab), written to Steam's own Remote Play client config:
    • hardware decoding, HEVC and AV1 toggles;
    • PyroWave on or off, even when Steam greys out its own toggle;
    • frame rate limit (Automatic or 30–144 FPS);
    • resolution limit, with options based on the device's own screen.
  • Apps tab: lists programs the host added to its Steam library.
  • Tabbed UI, switch tabs with L1/R1.

How it differs from existing tools

I looked for prior art before submitting:

Project What it does Difference
MoonDeck + Buddy Wake, pair and launch games from the Deck Built around Moonlight/Sunshine and replaces Remote Play; Spout keeps Steam's own Remote Play
decky-wol Wake-on-LAN Wake only
MonitorSwapAutomation Swaps to a dummy/virtual display while streaming, swaps back after Closest idea, but a PC-side script for Sunshine/Moonlight, not Steam Remote Play
Apollo / ArtLight, Virtual Display Driver Virtual displays for streaming For their own streaming stack, or a generic driver with no Remote Play integration
Steam client beta (Windows) Creates a virtual display for Remote Play Tested on my PC: the physical monitors stay on during the stream; Spout adds turning them off and restoring them

So the individual pieces exist, but I didn't find anything that brings them to Steam's native Remote Play from the handheld.

Replaces #1145 (closed while the purpose changed; GitHub can't reopen it after the branch update).
The backend is plain Python (standard library plus aiohttp, which Decky provides) with no binaries. It uses the _root flag today; I can drop it if reviewers prefer, after testing it without.

Task Checklist

Developer

  • I am the original author or an authorized maintainer of this plugin.
  • I have abided by the licenses of the libraries I am utilizing, including attaching license notices where appropriate.
  • Generative AI was NOT used to write a majority of the code I am submitting.

All of this code was written with AI assistance (GitHub Copilot with Opus 5.5), which I directed, reviewed and tested live on my odin 2 portal. If using AI is a blocker feel free to close this, I'm buidling this for myself anyway.

Plugin

  • I have verified that my plugin works properly on the Stable and Beta update channels of SteamOS.
  • I have verified my plugin is unique or provides more/alternative functionality to a plugin already on the store.

Verified on SteamOS Beta: an AYN Odin 2 Portal running SteamOS on ARM, which only exists as a beta, so there is no Stable channel to test on that device. Not yet run on a Steam Deck on the Stable channel; I will report back when I have.

Backend

  • No: I am using a custom backend other than Python.
  • No: I am using a tool or software from a 3rd party FOSS project that does not have it's dependencies statically linked.
  • No: I am using a custom binary that has all of it's dependencies statically linked.

Community

  • I have tested and left feedback on two other pull requests for new or updating plugins.
  • I have commented links to my testing report in this PR.

Testing

  • Tested by a third party on SteamOS Stable or Beta update channel.

@github-actions github-actions Bot added the plugin-addition Adding a plugin to the Plugin Store label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

Issues Found

No issues with your PR description were found.

Next Steps

  1. If we found any issues above, please edit your pull request description to resolve them and leave a comment saying you've done so.
  2. For the quickest review, please see the Community section of the pull request template for how you can help other developers.
  3. Once your description is correct, a maintainer will review your pull request as soon as possible.

Thank you for your contribution! If you need any help, please reach out on our Discord server. ❤️

@justjoseorg

justjoseorg commented Oct 10, 2026 •

Copy link
Copy Markdown
Author

Testing notes: I've been testing on an AYN Odin 2 Portal running the SteamOS ARM port (beta only, on the Steam client beta), streaming from both Windows and Linux PCs. The Remote Play client work for that setup is here: hashtagbasit/SteamOS-ARM-Port#59 (PyroWave decoding under box64, larger network receive buffer).

On that device, with this plugin and the host app:

  • Pairing with the PIN worked, and Remote Play start/stop reached the host on both Windows and Linux.
  • On Windows (host v0.3.0), the host found Steam's virtual display, turned the other displays off during the stream, and restored them afterwards.
  • On Linux, the host created a virtual display for the stream and removed it afterwards.

Not yet run on a Steam Deck.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justjoseorg
justjoseorg marked this pull request as ready for review October 14, 2026 05:36
@justjoseorg
justjoseorg requested a review from a team as a code owner October 14, 2026 05:36
@justjoseorg

Copy link
Copy Markdown
Author

I tested and left feedback on two other plugin PRs:

This branch is waiting to be deployed

1 waiting deployment
testing_env — bf669383 Waiting Oct 10, 2026 by justjoseorg via Build plugin (SpoutRemotePlay, true) #4066
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

plugin-addition Adding a plugin to the Plugin Store

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant