Skip to content

Modalities

Each capability is an independent, asynchronous modality with its own gRPC service, C# service/bridge pair, and Python client. Modalities do not depend on each other — you can use any subset.

Matrix

Modality Direction RPC style Python client What it does
Connection request/response unary ConnectionClient Liveness check (ping).
Info request/response unary get_server_info Mod/engine version, OS platform, Wine flag, engine/renderer host PIDs.
Camera Resonite → Python server-streaming CameraClient RGBA frames from the headset/view.
Speaker Resonite → Python server-streaming SpeakerClient Audio rendered by Resonite (engine output tap).
Microphone Python → Resonite client-streaming MicrophoneClient Push audio into Resonite as a virtual mic.
Locomotion Python → Resonite client-streaming LocomotionClient Drive movement commands; reset.
Grabber request/response unary GrabberClient Grab at the desktop cursor ray hit point / release, then operate the held / equipped item: use / unuse hold a button down with an analog strength (primary press pressure, e.g. BrushTool/Pen; left-click aligns / activates a tool, Pen-style press-drag-release), equip / dequip handle tools (desktop mode only).
Display request/response unary DisplayClient Read display info.
World request/response unary WorldClient List/open worlds, sessions, and records.
ContextMenu request/response unary ContextMenuClient Open/select the radial context menu.
Dash request/response unary DashClient Drive the ESC dash overlay (Userspace).
Inventory request/response unary InventoryClient Browse, spawn, and fetch thumbnail images of inventory items.
Session request/response unary SessionClient Configure the connected session: settings (get/partial apply), users (kick/ban/silence/respawn/role), and permission roles.
Contact request/response unary ContactClient Manage the dash Contacts tab: list/search/add/accept/remove friends, with presence.
Auth Python → Resonite unary AuthClient Resonite cloud login/logout/status (gh-auth-like).
Cursor request/response unary CursorClient Set/hold/release/get the desktop cursor in normalized coords.
Lifecycle Python → Resonite unary LifecycleClient Ask the engine to quit gracefully (shutdown); resoio.shutdown wraps it with engine-PID reporting (resoio.terminate is the deprecated former name).

Each modality also ships a minimal runnable script under python/examples/, and the matching API Reference page links it.

Direction conventions

Audio is split by direction on purpose: Speaker carries Resonite → Python audio (what Resonite plays out), and Microphone carries Python → Resonite audio (what you push in as a virtual mic). The same split logic gives Camera (out) and the input modalities (Locomotion, Microphone) their streaming directions.

Mirrored structure

The C# and Python sides mirror each other per modality. Adding a new one means a <Modality>Service + I<Modality>Bridge in Core, a FrooxEngine<Modality>Bridge in the mod, and a <Modality>Client in Python — see the C# Mod page and the project's add-new-modality workflow.