Last active
September 8, 2024 14:55
-
-
Save PiMaker/73c3b27f35c8293716fd50fa2749a135 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# made by pi (and copilot), available as CC0, no attribution required, use at your own risk, yadda yadda | |
# requires websocket-client from pip | |
import websocket | |
import json | |
import time | |
import threading | |
import re | |
import sys | |
# Tweak this value to your liking! | |
# 8-10 seems to work well for my Vive Pro 1 on 7900XTX | |
desiredOffset = 8 | |
if len(sys.argv) > 1: | |
desiredOffset = int(sys.argv[1]) | |
msgInc = "mailbox_send vrcompositor_mailbox {\"type\": \"vsync_to_photons_increment\"}" | |
msgDec = "mailbox_send vrcompositor_mailbox {\"type\": \"vsync_to_photons_decrement\"}" | |
currentOffset = 99999 | |
def on_message(ws, message): | |
global currentOffset | |
j = json.loads(message) | |
msg = j["sMessage"] | |
m = re.search('VSyncToPhotonsOffsetMs=([-\d]+)', msg) | |
if m: | |
currentOffset = int(m.group(1)) | |
def on_open(ws): | |
ws.send("console_open") | |
# trigger once so we have it in console for sure | |
ws.send(msgInc) | |
ws.send(msgDec) | |
threading.Thread(target=wait_for_result).start() | |
def wait_for_result(): | |
global ws | |
global currentOffset | |
global desiredOffset | |
print("Waiting for current offset...") | |
time.sleep(1) | |
print("Current offset: " + str(currentOffset)) | |
if currentOffset == 99999: | |
print("Error: offset not found") | |
else: | |
cur = currentOffset | |
print("Offset found: " + str(cur)) | |
print("Adjusting offset by " + str(desiredOffset - cur) + "...") | |
while cur > desiredOffset: | |
ws.send(msgDec) | |
cur -= 1 | |
while cur < desiredOffset: | |
ws.send(msgInc) | |
cur += 1 | |
print("Waiting for confirmation...") | |
time.sleep(1) | |
print("New offset: " + str(currentOffset) + " (target: " + str(desiredOffset) + ")") | |
ws.close() | |
print("Done!") | |
print("Setting vsync_to_photons to " + str(desiredOffset) + "ms") | |
print("Connecting to SteamVR...") | |
ws = websocket.WebSocketApp("ws://localhost:27062", on_open=on_open, on_message=on_message) | |
ws.run_forever() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment