Files
hermes-houdini-bridge/shelves/hermes_bridge.shelf
T

77 lines
2.4 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<shelfDocument>
<tool name="hermes_bridge_toggle" label="Hermes Bridge" icon="MISC_python">
<help>Toggle the Hermes-Houdini Bridge on/off. \nRight-click: Set port.</help>
<script scriptType="python"><![CDATA[
import hou
import socket
import json
import os
# ── Config ──────────────────────────────────────────
CONFIG_FILE = os.path.join(hou.homeHoudiniDirectory(), "hermes_bridge.json")
DEFAULT_PORT = 12345
def load_port():
try:
with open(CONFIG_FILE) as f:
return json.load(f).get("port", DEFAULT_PORT)
except Exception:
return DEFAULT_PORT
def save_port(p):
with open(CONFIG_FILE, "w") as f:
json.dump({"port": p}, f, indent=2)
def is_open(port):
result = hou.hscript("openport")[0]
return f"Port {port} is open" in result
def toggle(port):
if is_open(port):
hou.hscript(f"closeport {port}")
hou.ui.displayMessage(
f"Bridge CLOSED on port {port}",
severity=hou.severityType.ImportantMessage,
title="Hermes Bridge"
)
else:
hou.hscript(f"closeport {port}")
hou.hscript(f"openport {port} 0.0.0.0")
host = socket.gethostname()
hou.ui.displayMessage(
f"Bridge OPEN — {host}:{port}\n\n"
f"Copy to Hermes:\n"
f'"Hey Hermes, I have Houdini open on {host} (port {port})"',
severity=hou.severityType.ImportantMessage,
title="Hermes Bridge"
)
# ── Right-click: set port ───────────────────────────
kwargs = kwargs if "kwargs" in dir() else {}
if kwargs.get("altclick") or kwargs.get("ctrlclick"):
port = load_port()
new = hou.ui.readInput(
"Bridge port number",
buttons=("OK", "Cancel"),
default_choice=0,
title="Hermes Bridge — Port",
initial_contents=str(port)
)
if new and new[0]:
try:
new_port = int(new[1].strip())
save_port(new_port)
hou.ui.displayMessage(
f"Port set to {new_port}",
severity=hou.severityType.Message,
title="Hermes Bridge"
)
except ValueError:
pass
else:
toggle(load_port())
]]></script>
</tool>
</shelfDocument>