Nodes/OpenAssetIO/OpenAssetIO Publish Image
ComfyUI Node

OpenAssetIO Publish Image

Save Image that talks to a real asset manager

By OpenAssetIO·Created 12 months ago·Updated 11 months ago· 2
OpenAssetIO Publish Image
  • images
    entity_reference

    First, the honest part: if you generate images for fun or freelance, this node is not for you. It's a Save Image replacement with extra steps and zero payoff unless you're plugged into a production asset manager - think ShotGrid/Flow, ftrack, or a studio's homegrown system. But if you're the pipeline person who got told to get ComfyUI handing renders back to the thing that tracks them, this is exactly the node you didn't know you needed.

    OpenAssetIO Publish Image is the publish half of the OpenAssetIO-ComfyUI pack, an Apache-2.0 plugin from The Foundry and the OpenAssetIO project (a Linux Foundation / ASWF-standardized API for asset management interop). It's an output node - same shape as the built-in Save Image - but instead of writing to a hardcoded path, it hands your image to an asset manager and lets that manager decide where it lives, what version it is, and what depends on it.

    How it works

    Give it an entity_reference: an opaque string like shotgrid://prod/shot/240/heroPlate that names a versioned entity. At execution the node calls preflight() to ask the manager for a working reference - essentially a staging path you're allowed to write to - resolves that to a local file path, saves a PNG there, then calls register() to tell the manager the file exists at that location. What happens next is the manager's call: move it into storage, create a new revision, note the dependency. The key property is that publishing makes a new version rather than overwriting the old one, so a review round doesn't clobber what was already approved.

    You get two inputs, and that's the whole panel. entity_reference is the entity to publish to, and images is the IMAGE tensor from your VAE Decode. There are no outputs - like Save Image, it's a terminal node and ComfyUI treats it as the end of the graph. Small touches inherited from the core node: the resolved path can contain a %batch_num% placeholder so each image in a batch lands on its own staging path, and your workflow JSON gets embedded in the PNG metadata unless you launched ComfyUI with --disable-metadata.

    Installing it

    cd ComfyUI/custom_nodes
    git clone https://github.com/OpenAssetIO/OpenAssetIO-ComfyUI
    cd OpenAssetIO-ComfyUI
    pip install -r requirements.txt
    

    Restart ComfyUI afterwards. ComfyUI Manager can install the repo too (search "OpenAssetIO"), but Manager alone won't make it work - requirements.txt pulls in openassetio and openassetio-mediacreation, and you still have to set the OPENASSETIO_DEFAULT_CONFIG environment variable to a valid OpenAssetIO config file before launching ComfyUI. There are no model downloads; the heavy lifting is the manager plugin for your asset system, which OpenAssetIO loads from that config. Tested against Python 3.11 and ComfyUI 0.3.57.

    Where people get burned

    The classic failure is the node lighting up with "Could not create an OpenAssetIO manager instance." That means no manager plugin loaded - either OPENASSETIO_DEFAULT_CONFIG isn't set, it's set in a shell you opened once but not in the process that actually launches ComfyUI (put it in your launch script or .env), or the plugin for your particular manager isn't installed. The node also validates your entity reference against the manager's syntax the moment you type it, so a string the manager doesn't recognize shows red before you ever run the graph.

    And the premise one more time: without a configured asset manager, this node can't save anywhere. If you don't have one, Save Image does the same job with none of the ceremony.

    Categoryimage

    Inputs (2)

    NameTypeDefaultDescription
    entity_referenceSTRINGThe entity to publish to
    imagesIMAGEThe images to save.

    Outputs (0)

    No outputs