Houdini¶
The Houdini adapter (fxqintegrations.houdini) publishes ROP output to fxquinox
and loads versions back. hou is imported lazily, so the module loads anywhere -
the host-touching functions only run inside Houdini.
Publishing a ROP¶
from fxqclient import Session
from fxqintegrations import houdini
fxq = Session("http://localhost:8000", api_key="fxq_...")
houdini.publish_rop(
fxq,
task_id="...",
rop_path="/out/mantra1",
product="beautyMain",
comment="lighting v2",
)
The adapter reads the ROP's output from the Houdini scene, then delegates to the
shared publish contract to create the
Product → Version → Representation chain. Pass inputs to record the upstream
versions this render consumed.
Loading a version¶
Use the core resolve_for_load(version_id) to get a version's files and bring
them into the scene (for example as a file SOP or a reference).
The adapter also registers a universal loader entry so the host-agnostic loader can place files without knowing it's Houdini:
@loader.register_loader("houdini_file", product_types=["geometry", "render", "pointcache"])
def load_file_node(session, version_id, files, *, into="/obj"):
... # build a file SOP for the given files
Keep host code thin
The adapter only gathers Houdini-specific data; everything else is the host-agnostic core, so the same publish behaves identically in Nuke and any host you add.