dimainator
v2.11.0
Published
Launch the DIMAINATOR Windows keyboard and mouse relay.
Readme
DIMAINATOR
DIMAINATOR is a Windows 11 x64 terminal app that lets a host share keyboard and mouse controls with friends. Players join by username, the host assigns keys or separate mouse movement and click permissions, and input transitions are relayed to the host in real time.
The host remains in control: only the host can assign keys, start or pause the relay, remove players, and switch between the generic PyAutoGUI backend and the DirectX-oriented PyDirectInput backend.
Run
Once releases are configured:
npx dimainatorThe npm package carries the matching Windows x64 executable. The launcher
verifies its SHA-256 checksum and caches it under
%LOCALAPPDATA%\DIMAINATOR\bin.
To run from source:
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
python -m dimainatorHost workflow
- Choose Make Lobby.
- Enter an ngrok authtoken on the first run. It is saved in Windows Credential Manager, not in a file.
- DIMAINATOR asks ngrok for a public endpoint automatically and copies the complete invite. Invite recipients connect through ngrok and do not receive the host's origin IP address.
- Leave the ngrok region on Automatic or pin a region under Settings when testing shows that it gives the host and players lower latency.
- The complete invite is copied automatically; share it with the players.
- Select a joined username to open the organized host control panel. The visible Open host control panel action provides lobby-wide controls.
- Choose Add one or more keys and press regular keys to toggle them. Use
Type special key names to enter names such as
ctrl,shift,enter, orpage updirectly. The preset picker contains four-person role splits for Valorant, League of Legends, Minecraft, Roblox, and Fortnite; toggle any number of groups and combine them into the current selection. Remove keys offers each assigned key plus a one-step Remove all keys choice.F12remains reserved and cannot be assigned. - Mouse movement and keyboard-generated clicks are separate permissions. Give
them to the same player or split them between two players. When click access
is granted, the player confirms two keys (default
Ufor left click andIfor right click). Physical player clicks and scrolling stay local and are never relayed. Remote movement is scaled independently by the host/client horizontal and vertical resolution ratios. Any physical host mouse activity takes control immediately; remote mouse input resumes after five seconds of host inactivity. - Open the host control panel to start, pause, or resume the relay.
- Choose Switch backend at any time without closing the lobby.
- Choose Audio bridge to mix your microphone with an active voice application for in-game voice chat.
Ctrl+Alt+Shift+F12 is the global emergency stop. It releases all injected
keys and pauses the lobby until the host resumes.
Every menu supports mouse selection as well as standard keyboard navigation.
Host audio bridge
The optional audio bridge combines the host's microphone with audio from one active Windows application, such as Discord. It uses Windows 11's process-specific WASAPI loopback capture, so Valorant, music, and unrelated desktop sounds are not included.
Install VB-CABLE separately, then:
- Start Discord and join a call so it appears as an active audio application.
- Open Audio settings from the main Settings menu, or press
Vfrom a host lobby. - Choose the physical microphone, Discord, and CABLE Input (VB-Audio Virtual Cable).
- Start the audio bridge.
- In Valorant, choose CABLE Output (VB-Audio Virtual Cable) as the voice input device.
Discord continues playing through the host's normal headphones. DIMAINATOR does not play the microphone or combined signal back to the host. If Discord restarts, the microphone stays active and the bridge reconnects to Discord automatically. Closing the lobby always stops the bridge.
VB-CABLE is not bundled or installed by DIMAINATOR. The feature requires Windows 11 x64 and a separately installed compatible VB-Audio virtual cable.
Client workflow
- Choose Join Lobby.
- Enter the host's URL, lobby code, and your username, or copy the host's complete invite and choose Paste full invite.
- Wait for the host to assign your keys and start the relay.
- Assigned keys work globally even when DIMAINATOR is not focused. Local input is not suppressed.
- Assigned mouse movement works globally. Click access uses your remembered left/right keyboard bindings and never relays your physical buttons or wheel. The host status tells you when physical host activity has temporarily paused remote mouse control.
- Hold Enter for three seconds to leave; Escape and mouse selection ask for confirmation so an accidental action cannot disconnect you.
After a successful connection, DIMAINATOR remembers the last lobby URL and username for the next join. Lobby codes are intentionally not saved.
Development
Run checks with:
New-Item -ItemType Directory -Force build/audio-helper | Out-Null
cl /nologo /std:c++20 /EHsc /O2 /DUNICODE /D_UNICODE /D_WIN32_WINNT=0x0A00 native/audio_helper.cpp /Fe:build\audio-helper\dimainator-audio-helper.exe /link ole32.lib uuid.lib mmdevapi.lib
.\build\audio-helper\dimainator-audio-helper.exe --self-test
python -m pytest
python -m compileall -q src
npm pack --dry-runThe local WebSocket integration tests do not require ngrok or synthetic OS input. Real keyboard backends, ngrok, VB-CABLE routing, Discord process capture, and Valorant input should be smoke-tested on a Windows 11 machine before releasing.
Latency-sensitive WebSocket connections explicitly enable TCP_NODELAY, which
disables Nagle's algorithm. Python's asyncio normally enables this already; the
explicit setting documents and preserves the intended low-latency behavior.
Mouse motion uses Windows Raw Input on the client and relative injection on the host. Left/right clicks originate from explicitly configured keyboard bindings; physical player clicks and wheel input are ignored. Movement packets are coalesced at up to 120 Hz. The host's physical mouse monitor ignores injected events, preventing relayed movement from triggering its own five-second override. Pausing, panic stop, disconnecting, reassigning, or switching backends always releases remotely held mouse buttons.
Publishing setup
The source repository at yeknam-and-co/dimainator is private. The public npm
package includes the verified Windows executable so npx dimainator does not
need access to private GitHub release assets. Configure the repository’s
NPM_TOKEN secret, then push a tag matching both project versions, such as
v2.11.0.
DIMAINATOR does not attempt to bypass game security or anti-cheat systems. Compatibility with a particular game is not guaranteed; follow the game’s rules and terms of service.
