OpenStreamMS is a Windows service that runs several independent Sunshine game-streaming sessions at once — each one inside its own isolated RDP session, with its own user, desktop, audio and Moonlight clients. Plug in extra monitors, keyboards, mice and gamepads and the same sessions become local seats: several people playing on one PC, in the same room. All managed from one dashboard, in its own window, in the browser or on your phone. OpenStreamMS es un servicio de Windows que ejecuta varias sesiones de streaming de juegos con Sunshine a la vez, cada una dentro de su propia sesión RDP aislada, con su usuario, escritorio, audio y clientes Moonlight. Conecta más monitores, teclados, ratones y mandos y esas mismas sesiones se convierten en puestos locales: varias personas jugando en un solo PC, en la misma habitación. Todo se gestiona desde un panel, en su propia ventana, en el navegador o en el móvil.
A redesigned dashboard, a display driver of its own for RDP sessions, a microphone per seat and Steam logins that survive deleting a session.Un panel rediseñado, un driver de pantalla propio para las sesiones RDP, un micrófono por puesto y logins de Steam que ya no se pierden al borrar una sesión.
A getting-started guide, start progress step by step, errors with View log and Retry, and a Connect button that shows the PC’s address and ports. One window creates and edits sessions; the rarely used options move to Advanced.Guía de primeros pasos, progreso del arranque paso a paso, errores con Ver log y Reintentar, y un botón Conectar que muestra la dirección y los puertos del PC. Una sola ventana crea y edita sesiones; lo que casi no se toca pasa a Avanzado.
The Start menu and desktop shortcuts open the dashboard in a window of its own, without tabs or address bar. Without WebView2 it opens in the browser, as before.Los accesos del menú Inicio y del escritorio abren el panel en una ventana propia, sin pestañas ni barra de direcciones. Sin WebView2 se abre en el navegador, como antes.
System, Dark, Light, Synthwave, Retro and Matrix, all readable (WCAG AA). Effects are reduced automatically while someone is streaming or a seat is on, so the GPU stays with the encoder. On a phone, dialogs open as bottom sheets.Sistema, Oscuro, Claro, Synthwave, Retro y Matrix, todos legibles (WCAG AA). Los efectos se reducen solos mientras alguien juega por streaming o hay un puesto encendido, para dejar la GPU al encoder. En el móvil, las ventanas salen desde abajo.
When Moonlight or a WebRTC TV asks for a PIN, Windows shows a notification; click it and the dashboard opens on that session’s pairing dialog. The tray menu now lists sessions and seats with their state and turns them on and off.Cuando Moonlight o una TV WebRTC piden un PIN, Windows muestra una notificación; al pulsarla se abre el panel en el emparejamiento de esa sesión. El menú de la bandeja muestra ahora sesiones y puestos con su estado y los enciende y apaga.
Each seat can have its own microphone, which shows up in its session as “Remote Audio”. Test shows its level before you save. No drivers of our own.Cada puesto puede tener su micrófono, que aparece en su sesión como «Audio remoto». Probar muestra su nivel antes de guardar. Sin drivers propios.
Session cards show how many Moonlight clients and WebRTC TVs are watching right now.Las tarjetas de las sesiones muestran cuántos clientes de Moonlight y TV WebRTC están viéndola en ese momento.
A display driver of our own for RDP sessions: Sunshine takes each frame straight from a shared GPU texture, with no screen capture in between. Optional in the installer; it uses a test certificate.Un driver de pantalla propio para las sesiones RDP: Sunshine recoge cada fotograma directamente de una textura compartida en la GPU, sin capturar la pantalla. Opcional en el instalador; usa un certificado de prueba.
Windows only composes RDP sessions at whole-millisecond intervals, so 60 fps became 58.8 and the TV repeated a frame almost every second. Sessions now compose faster and Sunshine paces the stream.Windows solo compone las sesiones RDP a intervalos de milisegundos enteros, así que 60 fps se quedaban en 58,8 y la TV repetía un fotograma casi cada segundo. Ahora la sesión se compone más rápido y Sunshine marca el ritmo del stream.
Deleting an isolated session can now keep its Windows user, so Steam’s saved login, saves and game settings survive and a new session can reuse it. Cards warn when Steam has no saved login, and leftover users and profiles can be cleaned up from the dashboard.Al borrar una sesión aislada se puede conservar su usuario de Windows, así que el login guardado de Steam, las partidas y los ajustes siguen ahí y una sesión nueva puede reutilizarlo. Las tarjetas avisan si Steam no tiene la sesión guardada, y los usuarios y perfiles que sobran se limpian desde el panel.
The service (running as SYSTEM) opens a loopback RDP session for each stream, launches a private Sunshine instance inside it on its own ports, and keeps everything alive. Your local desktop is never touched. El servicio (que corre como SYSTEM) abre una sesión RDP local por cada stream, lanza dentro una instancia privada de Sunshine con sus propios puertos y lo mantiene todo en marcha. Tu escritorio local no se toca.
Living-room clientCliente del salón
Second playerSegundo jugador
Dashboard & REST APIPanel y API REST
Web dashboard · REST API · session monitor · Sunshine proxyPanel web · API REST · monitor de sesiones · proxy a Sunshine
A seat is a set of physical devices — a monitor, a keyboard, a mouse, a gamepad and an audio output — linked to a session. The session shows on that monitor and only those devices control it, as if it were a separate computer. No extra hardware and no third-party drivers for keyboard and mouse: just Windows. Un puesto es un conjunto de dispositivos físicos (un monitor, un teclado, un ratón, un mando y una salida de audio) unido a una sesión. La sesión se ve en ese monitor y solo esos dispositivos la controlan, como si fuera otro ordenador. Sin hardware extra ni drivers de terceros para teclado y ratón: solo Windows.
2nd monitor · USB keyboard & mouse · headphones2.º monitor · teclado y ratón USB · auriculares
TV over HDMI · gamepad · TV speakersTV por HDMI · mando · altavoces de la TV
Main monitor · the PC’s own desktopMonitor principal · el escritorio del propio PC
Turns the monitor on · fits the session to its resolution · routes input, image and soundEnciende el monitor · ajusta la sesión a su resolución · lleva entrada, imagen y sonido
The seat’s monitor joins the desktop only while the seat is on. The session is captured inside its own RDP session and shown full-screen in about 2 ms, uncompressed, at up to 125 Hz. Resolution and refresh rate can be set per seat, or follow the monitor: if its mode changes, the session reconnects to match.El monitor del puesto se añade al escritorio solo mientras el puesto está encendido. La sesión se captura dentro de su propia sesión RDP y se muestra a pantalla completa en unos 2 ms, sin compresión y hasta a 125 Hz. Resolución y frecuencia se fijan por puesto o siguen al monitor: si cambia de modo, la sesión se reconecta para ajustarse.
Up to four seats can share one monitor: each takes the whole screen, a half or a quarter, with its own keyboard, mouse, gamepads and sound. The main monitor can be split too, leaving the console the other half.Hasta cuatro puestos pueden compartir un monitor: cada uno ocupa la pantalla entera, una mitad o un cuarto, con su teclado, ratón, mandos y sonido. El monitor principal también se puede partir y la consola se queda con la otra mitad.
While a seat is on, its USB keyboard and mouse switch to Microsoft’s own WinUSB driver and are read directly: the console never sees them and both mice move at the same time. They return to their normal driver when the seat turns off, even after a crash.Mientras el puesto está encendido, su teclado y su ratón USB pasan al driver WinUSB del propio Microsoft y se leen directamente: la consola no los ve y los dos ratones se mueven a la vez. Vuelven a su driver normal al apagar el puesto, incluso tras un fallo.
Assign the USB port a gamepad is plugged into: while the seat is on, only that seat’s session sees it. Other sessions, the console and Moonlight players can’t grab it.Asigna el puerto USB donde está el mando: mientras el puesto está encendido, solo la sesión de ese puesto lo ve. Ni las demás sesiones, ni la consola, ni los jugadores de Moonlight pueden quedárselo.
The session’s audio plays on the seat’s output (headphones, speakers, the TV over HDMI) with about 70 ms of delay and a jitter buffer that prevents pops.El audio de la sesión sale por la salida del puesto (auriculares, altavoces, la TV por HDMI) con unos 70 ms de retraso y un búfer que evita los chasquidos.
Pick a microphone for the seat and its session gets it as “Remote Audio”, through RDP microphone redirection. Each microphone belongs to one seat only.Elige un micrófono para el puesto y su sesión lo recibe como «Audio remoto», por la redirección de micrófono de RDP. Cada micrófono es de un solo puesto.
While editing a seat, Test shows the OpenStreamMS logo on a monitor or plays a chime on an audio output, shows a microphone’s level, and the name of the keyboard, mouse or gamepad you press lights up in the list. No more guessing which “USB Input Device” is which.Al editar un puesto, Probar muestra el logo de OpenStreamMS en el monitor o hace sonar un aviso por la salida de audio, enseña el nivel de un micrófono, y el nombre del teclado, ratón o mando que pulsas se ilumina en la lista. Se acabó adivinar cuál es cada «Dispositivo de entrada USB».
Turn seats on and off from their card or the tray menu, or let them start with the PC. Pressing Disconnect on a seat turns it off until it is started again, and the session is right back on Moonlight.Enciende y apaga los puestos desde su tarjeta o el menú de la bandeja, o deja que arranquen con el PC. Pulsar Desconectar en un puesto lo apaga hasta que se vuelva a encender, y la sesión vuelve enseguida a Moonlight.
An exclusive seat whose session uses a regular Windows account starts on the lock screen, so whoever sits there must type that account’s password. Isolated and ephemeral users go straight in.Un puesto exclusivo cuya sesión usa una cuenta normal de Windows arranca en la pantalla de bloqueo, así que quien se siente ahí tiene que escribir la contraseña de esa cuenta. Los usuarios aislados y efímeros entran directamente.
Exclusive seats can’t shut down or restart the computer, neither from the Start menu nor with shutdown. Remote sessions and shared seats keep that right.Los puestos exclusivos no pueden apagar ni reiniciar el equipo, ni desde el menú Inicio ni con shutdown. Las sesiones remotas y los puestos compartidos lo conservan.
Seat monitors belong to the console’s desktop, so locking it (Win+L) would hide them all. While a seat is on, the console can’t be locked.Los monitores de los puestos son del escritorio de la consola, así que bloquearla (Win+L) los taparía todos. Mientras haya un puesto encendido, la consola no se puede bloquear.
An exclusive seat pauses Moonlight and WebRTC for its session while it is on, so nobody can stream into it. A shared seat keeps streaming on: the same desktop at the desk and on the TV.Un puesto exclusivo pausa Moonlight y WebRTC para su sesión mientras está encendido, así que nadie puede entrar por streaming. Uno compartido mantiene el streaming: el mismo escritorio en la mesa y en la TV.
Each seat or session runs its own Steam alongside yours, even with the same Windows user. With an isolated user it signs in to its own Steam account, and keeping that user when the session is deleted keeps the login.Cada puesto o sesión abre su propio Steam a la vez que el tuyo, incluso con el mismo usuario de Windows. Con un usuario aislado inicia su propia cuenta de Steam, y conservar ese usuario al borrar la sesión conserva el login.
A seat can use the console’s own Windows account without a password, but then it never starts by itself at boot: it only turns on when you start it.Un puesto puede usar la propia cuenta de Windows de la consola sin contraseña, pero entonces nunca arranca solo al encender el PC: solo se enciende cuando lo enciendes tú.
From session isolation to hardware encoding checks, OpenStreamMS automates the fiddly parts of running Sunshine headless.Desde el aislamiento de sesiones hasta la comprobación del encoder por hardware, OpenStreamMS automatiza lo más engorroso de usar Sunshine sin pantalla.
Each stream gets its own RDP session and its own Sunshine instance, with separate ports, config, logs and paired devices.Cada stream tiene su propia sesión RDP y su propia instancia de Sunshine, con puertos, configuración, logs y dispositivos emparejados independientes.
Optionally runs a session under an auto-managed local user (osms-…): its own profile, HKCU, desktop and audio, shown on the session card. Steam or Chrome can run twice without lock conflicts. No drivers, no third-party tools.Opcionalmente ejecuta la sesión con un usuario local gestionado automáticamente (osms-…): perfil, HKCU, escritorio y audio propios, y su nombre se ve en la tarjeta. Steam o Chrome pueden abrirse dos veces sin conflictos de bloqueo. Sin drivers ni herramientas externas.
Isolated users can be ephemeral: the profile and its registry hive are wiped when the session stops, so every start is a clean slate.Los usuarios aislados pueden ser efímeros: el perfil y su registro se borran al parar la sesión, así que cada arranque empieza de cero.
Same Windows user, separate profile root: USERPROFILE, APPDATA, LOCALAPPDATA, temp and XDG paths are redirected for Explorer, Sunshine and every app launched from Moonlight.Mismo usuario de Windows con una raíz de perfil aparte: USERPROFILE, APPDATA, LOCALAPPDATA, temporales y rutas XDG se redirigen para Explorer, Sunshine y cada app lanzada desde Moonlight.
Deleting an isolated session asks whether to keep its user. A kept user can be reused by a new session with its Steam login, saves and settings; System → Dedicated users without a session lists kept users and leftover profiles with their size, to delete them one by one.Al borrar una sesión aislada se pregunta si conservar su usuario. Una sesión nueva puede reutilizarlo con su login de Steam, partidas y ajustes; Sistema → Usuarios dedicados sin sesión lista los usuarios conservados y los perfiles sueltos con su tamaño, para borrarlos uno a uno.
The RDP client’s audio is muted on the host through WASAPI, while Sunshine still captures it for Moonlight. No game sound leaking into the room.El audio del cliente RDP se silencia en el host mediante WASAPI, mientras Sunshine lo sigue capturando para Moonlight. El sonido del juego no se oye en la habitación.
Applies frame-rate, GPU-capture and display-refresh policies before each session so the remote desktop composes at the full target rate. When the frame interval isn’t a whole number of milliseconds (60 fps), the session composes faster and Sunshine paces the stream, so 60 really means 60. Resolution, fps and colour depth are set per session.Aplica políticas de fps, captura por GPU y frecuencia de pantalla antes de cada sesión para que el escritorio remoto se componga a la tasa completa. Si el intervalo entre fotogramas no es un número entero de milisegundos (60 fps), la sesión se compone más rápido y Sunshine marca el ritmo, así que 60 son 60. Resolución, fps y profundidad de color se configuran por sesión.
After launch it reads Sunshine’s encoder probe (NVENC, AMF, Quick Sync). If Sunshine fell back to software encoding, it relaunches once to recover the GPU encoder.Tras el arranque lee la detección de encoders de Sunshine (NVENC, AMF, Quick Sync). Si Sunshine ha caído a codificación por software, lo relanza una vez para recuperar el encoder de la GPU.
Uses the Windows RDP client with H.264 hardware decoding when available, or the bundled FreeRDP client in headless mode — selectable in the config.Usa el cliente RDP de Windows con decodificación H.264 por hardware si está disponible, o el cliente FreeRDP incluido en modo oculto; se elige en la configuración.
Installs and manages the ViGEmBus driver from the dashboard so Moonlight controllers appear as native Xbox/DualShock pads inside each session.Instala y gestiona el driver ViGEmBus desde el panel para que los mandos de Moonlight aparezcan como mandos Xbox/DualShock nativos en cada sesión.
Optional VDD mode keeps a virtual display alive for Sunshine even when the RDP client disconnects. Capture method, encoder and output display are configurable per session.El modo VDD opcional mantiene una pantalla virtual activa para Sunshine aunque se desconecte el cliente RDP. Método de captura, encoder y pantalla de salida se configuran por sesión.
A 5-second monitor restarts Sunshine if it crashes (reading the cause from the Windows event log) and relaunches every enabled session when the service or PC starts.Un monitor cada 5 segundos reinicia Sunshine si falla (leyendo la causa en el registro de eventos de Windows) y relanza todas las sesiones habilitadas cuando arranca el servicio o el PC.
With the bundled sunshine-webrtc build, each session serves Moonlight apps, Samsung TVs running Moonlight WebRTC, or both. Change it in the session’s settings; only the ports of the active protocols are opened. TVs get zero playout delay.Con la versión sunshine-webrtc incluida, cada sesión sirve a las apps de Moonlight, a las TV Samsung con Moonlight WebRTC o a ambas. Se cambia en los ajustes de la sesión y solo se abren los puertos de los protocolos activos. Las TV reciben la imagen sin retardo de reproducción.
An IddCx display driver of our own for RDP sessions, built only on documented Windows APIs. Each frame reaches Sunshine through a shared GPU texture; in the hand-off test, from present to pixel takes under 1 ms (p99) even at 4K 240 Hz. Used automatically when installed.Un driver de pantalla IddCx propio para las sesiones RDP, hecho solo con API documentadas de Windows. Cada fotograma llega a Sunshine por una textura compartida en la GPU; en la prueba de entrega, del present al píxel tarda menos de 1 ms (p99) incluso a 4K y 240 Hz. Se usa automáticamente si está instalado.
The tray icon notices when a Moonlight client or a WebRTC TV is waiting for a PIN in any session and shows a Windows notification that opens the right pairing dialog.El icono de la bandeja detecta cuando un cliente Moonlight o una TV WebRTC espera un PIN en cualquier sesión y muestra una notificación de Windows que abre el emparejamiento correcto.
Create, start, stop, restart and delete sessions, edit their settings and follow live logs — in its own window on the PC, or from any browser or phone. Six themes, English, Spanish, French and Portuguese.Crea, inicia, detiene, reinicia y borra sesiones, edita su configuración y sigue los logs en directo, en su propia ventana en el PC o desde cualquier navegador o móvil. Seis temas, en inglés, español, francés y portugués.
Enter the Moonlight PIN in the dashboard, list paired clients and unpair them. Pairings survive restarts and Sunshine updates.Introduce el PIN de Moonlight en el panel, consulta los clientes emparejados y desemparéjalos. Los emparejamientos se conservan tras reinicios y actualizaciones de Sunshine.
Each Sunshine admin panel is reached only through an authenticated reverse proxy with per-session internal credentials (optionally rotated on start). It is never exposed to the network.Al panel de administración de cada Sunshine solo se llega a través de un proxy inverso autenticado con credenciales internas por sesión (opcionalmente rotadas en cada arranque). Nunca se expone a la red.
Shut down, restart or cancel a pending shutdown of the host PC straight from the dashboard — handy from the couch.Apaga, reinicia o cancela un apagado pendiente del PC directamente desde el panel, muy práctico desde el sofá.
Native Remote Desktop is enabled automatically. For several simultaneous sessions on client editions of Windows, Home included, OpenStreamMS installs TermWrap and puts it back at every start if Windows or another tool changes it.Escritorio Remoto nativo se habilita automáticamente. Para varias sesiones simultáneas en ediciones cliente de Windows, Home incluido, OpenStreamMS instala TermWrap y lo vuelve a poner en cada arranque si Windows u otra herramienta lo cambia.
Only the keys OpenStreamMS needs (ports, paths, certificates) are managed. Anything you change in Sunshine’s own panel is preserved across restarts and upgrades.Solo se gestionan las claves que necesita OpenStreamMS (puertos, rutas, certificados). Lo que cambies en el panel de Sunshine se conserva entre reinicios y actualizaciones.
Everything the dashboard does is available over a documented REST API, with interactive OpenAPI docs at /scalar/v1.Todo lo que hace el panel está disponible en una API REST documentada, con documentación OpenAPI interactiva en /scalar/v1.
| MethodMétodo | PathRuta | ActionAcción |
|---|---|---|
| GET | /api/sessions | List sessionsListar sesiones |
| POST | /api/sessions | Create sessionCrear sesión |
| POST | /{id}/start · stop · restart | LifecycleCiclo de vida |
| PATCH | /{id}/config · enabled | Settings, auto-startAjustes, autoarranque |
| POST | /{id}/pair | Pair Moonlight PINEmparejar PIN de Moonlight |
| GET | /{id}/clients | Paired clientsClientes emparejados |
| GET | /{id}/logs | Session logsLogs de la sesión |
| PUT | /{id}/protocol | Moonlight, WebRTC or bothMoonlight, WebRTC o ambos |
| GET | /api/sessions/pairings | PINs waiting in any sessionPIN pendientes en cualquier sesión |
| DELETE | /{id}?keepUser=true | Delete session (optionally keep its user)Borrar sesión (opcionalmente conservando su usuario) |
| GET | /api/sessions/isolated-users | Kept users and leftover profilesUsuarios conservados y perfiles sueltos |
| PUT | /api/settings/logging | Global log levelNivel de log global |
| GET | /api/system/network | PC name and LAN addressesNombre del PC y direcciones de la red local |
| POST | /api/power/shutdown · restart | Host powerEnergía del host |
| GET | /api/seats · /inventory | Seats, free monitors and devicesPuestos, monitores y dispositivos libres |
| POST | /api/seats/{id}/start · stop | Turn a seat on or offEncender o apagar un puesto |
| POST | /api/seats/identify/monitor · audio | Test a monitor or outputProbar un monitor o una salida |
| GET | /api/seats/identify/mic | Microphone levelNivel de un micrófono |
# Service & tools OpenStreamMS.exe --install # register the Windows service OpenStreamMS.exe --uninstall # stop and remove it OpenStreamMS.exe --open # dashboard in its own window OpenStreamMS.exe --tray # notification-area icon OpenStreamMS.exe --run # run (called by the SCM) # Create and start a session curl -u admin:*** -X POST http://localhost:5000/api/sessions \ -H "Content-Type: application/json" \ -d '{"name":"Living room","username":"player1", "password":"***","rdpWidth":3840, "rdpHeight":2160,"rdpFrameRate":60}'
Download OpenStreamMS-Setup.exe from Releases and run it as administrator. Sunshine and FreeRDP are bundled. The RemoteIdd display driver is an optional checkbox (experimental; it takes effect after restarting the PC).Descarga OpenStreamMS-Setup.exe desde Releases y ejecútalo como administrador. Incluye Sunshine y FreeRDP. El driver de pantalla RemoteIdd es una casilla opcional (experimental; se activa al reiniciar el PC).
Open OpenStreamMS from the Start menu (or http://localhost:5000 in a browser). The first visit asks for dashboard credentials, then a guide walks you through the rest.Abre OpenStreamMS desde el menú Inicio (o http://localhost:5000 en el navegador). La primera visita pide las credenciales del panel y después una guía te lleva por el resto.
Choose the Windows user (or an isolated one), resolution and frame rate, then press Start.Elige el usuario de Windows (o uno aislado), la resolución y los fps, y pulsa Iniciar.
Connect on the session card shows the address to add in Moonlight; when it asks for a PIN, a notification opens the pairing dialog. Type it and start streaming.Conectar en la tarjeta de la sesión muestra la dirección que hay que añadir en Moonlight; cuando pida un PIN, una notificación abre el emparejamiento. Escríbelo y empieza a jugar.
In the Seats tab, pick a monitor (or part of one), an audio output, a microphone and the USB devices (Test tells them apart), assign the session and turn it on.En la pestaña Puestos, elige un monitor (o una parte), una salida de audio, un micrófono y los dispositivos USB (Probar te dice cuál es cuál), asigna la sesión y enciéndelo.
git clone https://github.com/mlopezsegura/OpenStreamMS cd OpenStreamMS dotnet publish -c Release -r win-x64 --self-contained -o publish publish\OpenStreamMS.exe --install