Issue Summary
The Virtuix Omni One Pico 4 utilizes a highly customized Pico OS designed strictly for Virtuix Omni One. At the firmware level, the headset enforces a hardcoded 1.5m x 1.5m safety boundary to perfectly match the physical footprint of the treadmill base.When playing PCVR games via Pico Business Streaming, the Omni OS actively injects this static boundary into the SteamVR Chaperone API. This breaks the spatial AI in room-scale games like The Thrill of the Fight (TOTF), as the game requires a larger registered play area to calculate opponent distance and movement. Standard fixes—such as redrawing boundaries, editing chaperone_info.vrchap config files, or using standard OpenVR advanced settings—fail because the Omni firmware continuously polls and overwrites the API at runtime to prevent the user from virtually stepping off the treadmill.
Hardware & Software
- VR Hardware: Virtuix Omni One Pico 4 (Custom OS Ecosystem)
- Software Stack: Python, SteamVR, Business Streaming, OpenVR library
API Override Protocol
- Initialize the Environment: Ensure your host PC has the required dependencies installed (
pip install openvr). - Stage the Hardware: Boot the headset, establish the Business Streaming connection to SteamVR, and launch the application (in this case TOTF). Navigate to the in-game weigh-in screen, but do not weigh in yet.
- Execute the Injection: Run the Python script on the host PC. (It is highly recommended to include a 60-second
time.sleep()delay at the start of your script so you can equip the headset and boot-up TOTF).
Example
This is how I fixed the issue. There may be tweaks needed for different environments and/or games:
import openvr
import time
def override_bounds():
print("Waiting 60 seconds. Put on headset and load TOTF...")
time.sleep(60) # Delay before execution
openvr.init(openvr.VRApplication_Utility)
chaperone = openvr.VRChaperoneSetup()
chaperone.setWorkingPlayAreaSize(2.44, 2.74) #in meters. This is the same as 8' x 9'
chaperone.commitWorkingCopy(openvr.EChaperoneConfigFile_Live)
print("Bounds injected.")
time.sleep(2)
openvr.shutdown()
if __name__ == '__main__':
override_bounds()