this is the latest script i am using to control three running instances of vr chat. i want all three instances to respond to movement input and camera rotation input, with one window focused. the other two windows dont pick up the movement commands! how do i fix this? see attached video
from pynput import keyboard, mouse
from pythonosc.udp_client import SimpleUDPClient
OSC clients for leader and follower instances
osc_ports = [9000, 9002, 9004]
osc_clients = [SimpleUDPClient(“127.0.0.1”, port) for port in osc_ports]
Key mappings to OSC addresses
key_osc_map = {
‘w’: “/avatar/parameters/MoveForward”,
‘s’: “/avatar/parameters/MoveBackward”,
‘a’: “/avatar/parameters/MoveLeft”,
‘d’: “/avatar/parameters/MoveRight”,
‘space’: “/avatar/parameters/Jump”
}
Function to send OSC messages to all clients
def send_osc_to_all(address, value):
for client in osc_clients:
client.send_message(address, value)
Keyboard event handlers
def on_press(key):
try:
k = key.char.lower()
except AttributeError:
k = key.name
if k in key_osc_map:
print(f"Sending {key_osc_map[k]} {1}")
send_osc_to_all(key_osc_map[k], 1)
def on_release(key):
try:
k = key.char.lower()
except AttributeError:
k = key.name
if k in key_osc_map:
print(f"Sending {key_osc_map[k]} {0}")
send_osc_to_all(key_osc_map[k], 0)
Mouse movement handler
def on_move(x, y):
Normalize mouse movement to avoid large values
look_x = x % 1000 / 1000.0
look_y = y % 1000 / 1000.0
send_osc_to_all(“/avatar/parameters/LookX”, look_x)
send_osc_to_all(“/avatar/parameters/LookY”, look_y)
Start listeners
keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
mouse_listener = mouse.Listener(on_move=on_move)
keyboard_listener.start()
mouse_listener.start()
print(“Listening for keyboard and mouse input…”)
keyboard_listener.join()
mouse_listener.join()