A bidirectional IPC bridge between Resonite and Python.
ResoniteIO is a bidirectional IPC bridge that lets your Python code observe and control
Resonite: capture video and audio out of the client, and send audio,
movement, and UI input back in. A C# mod runs inside the Resonite client and a Python package
(resoio) runs wherever your code lives; they talk to each other over gRPC on a Unix Domain
Socket.
Each capability is exposed as an independent, asynchronous modality stream carrying its
own timestamps. There is no global clock or step() barrier — any synchronization you need
is done on the receiving side, and you can use any modality on its own.
| Direction | Modalities |
|---|---|
| Resonite → Python | Camera, Speaker (server-streaming: vision and audio out) |
| Python → Resonite | Microphone, Locomotion (client-streaming: voice in, movement) |
| Request / response | Connection, Info, Grabber, Display, World, ContextMenu, Dash, Inventory, Cursor, Lifecycle (unary) |
Linux only. ResoniteIO targets Resonite running on Linux through Steam Play (Proton) and communicates over a Unix Domain Socket. Windows is not supported, and there are no plans to support it.
ResoniteIO has two halves that install separately and connect over a Unix Domain Socket.
1. The mod (runs inside Resonite) — download the latest mod zip from
GitHub Releases and import it into a mod
manager such as Gale via Import > Local mod..., then
set the Steam launch option WINEDLLOVERRIDES="winhttp=n,b" %command% (required — see the
installation guide
for the supporting plugins you must install first). Grab the newest build in one command:
curl -L -o ResoniteIO.zip https://github.com/MLShukai/ResoniteIO/releases/latest/download/ResoniteIO.zip
# or: wget -O ResoniteIO.zip https://github.com/MLShukai/ResoniteIO/releases/latest/download/ResoniteIO.zip2. The Python client (runs with your code):
pip install resonite-ioSee the Installation guide for the full setup, including the required supporting plugins.
With the mod deployed and Resonite running (on the host via Steam, or — for vanilla
Resonite — inside the dev container with just resonite-up):
import asyncio
from resoio import ConnectionClient
async def main() -> None:
async with ConnectionClient() as client:
response = await client.ping("hello")
print(response.message)
asyncio.run(main())Or from the command line:
resoio ping --message hello
resoio record --video out.mp4 # capture the Camera modality to a fileSee the Quick Start guide for streaming examples.
Full documentation — installation, architecture, every modality, the Python API reference, and the CLI — lives at https://mlshukai.github.io/ResoniteIO/.
Development setup, the dev container, and the build/test workflow are documented in CONTRIBUTING.md.
