Writing an integration¶
Adding support for another host (Maya, Blender, After Effects, a render farm) is deliberately small, because all the real work lives in the host-agnostic core.
The pattern¶
- Gather the host-specific data in the DCC - the output path(s), the node, the frame range, the workfile.
- Delegate to
fxqintegrations.core(or the SDK directly) to publish or load. Don't reimplement the publish chain.
from fxqclient import Session
from fxqintegrations import core
def publish_from_myhost(session: Session, task_id: str, product: str):
# 1. gather in the host
files = my_host_render_outputs() # your DCC code
# 2. delegate to the shared contract
return core.publish_scene(
session,
task_id=task_id,
product=product,
product_type="render",
representations=[{"name": "exr", "files": files}],
)
Guidelines¶
- Import host modules lazily (inside functions), like the Houdini and Nuke adapters, so your module imports anywhere and is unit-testable without the DCC.
- Keep host code thin - only the gather step is host-specific; publish, load and lineage are shared.
- Record lineage with
inputswhen your output consumed other versions. - Authenticate with an API key so the integration acts as a service.
Because an integration is just an API client, it can do exactly what the API allows and nothing more - the same as the web UI and the desktop app.