{"record":{"id":"e5e279ff8273c054","repo":"calesthio/OpenMontage","slug":"comfyui-server-does-not-expose-node-class-updat","errorCode":null,"errorMessage":"ComfyUI server does not expose {node_class}; update ComfyUI and enable Partner Nodes. These are hosted API nodes, not offline models.","messagePattern":"ComfyUI server does not expose (.+?); update ComfyUI and enable Partner Nodes\\. These are hosted API nodes, not offline models\\.","errorType":"exception","errorClass":"ComfyUIError","httpStatus":null,"severity":"error","filePath":"tools/video/comfyui_video.py","lineNumber":503,"sourceCode":"                        f\"ComfyUI server is running but missing models for {operation}: \"\n                        f\"{', '.join(missing)}.\\n\"\n                        f\"See data.missing_models for destination hints and download URLs.\"\n                    ),\n                )\n        start = time.time()\n        seed = inputs.get(\"seed\") or ComfyUIClient.random_seed()\n        output_path = Path(\n            inputs.get(\"output_path\", f\"comfyui_video_{operation}_{seed}.mp4\")\n        )\n\n        try:\n            if custom_workflow:\n                workflow = self._load_custom_workflow(inputs)\n                output_node = str(inputs[\"output_node\"])\n            elif model_family in partner_nodes:\n                node_class = partner_nodes[model_family]\n                if not self._client.has_node(node_class):\n                    raise ComfyUIError(\n                        f\"ComfyUI server does not expose {node_class}; update ComfyUI \"\n                        \"and enable Partner Nodes. These are hosted API nodes, not offline models.\"\n                    )\n                workflow, output_node = self._build_partner_t2v(\n                    inputs, seed, output_path, model_family\n                )\n            elif operation == \"image_to_video\":\n                workflow, output_node = self._build_i2v(inputs, seed, output_path)\n            else:\n                workflow, output_node = self._build_t2v(inputs, seed, output_path)\n\n            provenance = self._workflow_provenance(\n                inputs, custom_workflow, output_node, operation, workflow, model_family\n            )\n            paths = self._client.generate(\n                workflow,\n                output_node=output_node,\n                dest=output_path,","sourceCodeStart":485,"sourceCodeEnd":521,"githubUrl":"https://github.com/calesthio/OpenMontage/blob/95e1c3d0ab93482159818560f6a8c8e866b9139f/tools/video/comfyui_video.py#L485-L521","documentation":"Raised by ComfyUIVideoTool when the selected model_family maps to a hosted Partner Node class but the connected ComfyUI server's node registry (checked via client.has_node) does not expose it. Partner Nodes are cloud-backed API nodes shipped in recent ComfyUI releases; an older server or one without them enabled will not have the class.","triggerScenarios":"Selecting a partner-node family (e.g. seedance/minimax via ComfyUI) against a ComfyUI instance built before Partner Nodes existed or with them disabled; connecting to the wrong server (a fresh minimal install); custom forks that renamed or stripped the node classes.","commonSituations":"Outdated ComfyUI checkout after pulling new tooling code; pointing COMFYUI_URL at a spare local server; ComfyUI updated but launched from a different environment/venv that still has the old version.","solutions":["Update ComfyUI to a release that includes Partner Nodes and restart it, then retry","Verify the node is actually loaded: GET /object_nodes on the ComfyUI server and grep for the node class named in the message","Confirm you are pointing at the intended server (check the client's base URL / COMFYUI_URL env)","If you cannot update, use a local open-weights workflow instead (custom workflow JSON via workflow_path, or the built-in wan i2v/t2v paths)"],"exampleFix":"# before\ncomfyui --listen   # old install, missing partner nodes\n\n# after\ncd ComfyUI && git pull && pip install -r requirements.txt && python main.py --listen\n# verify: curl -s http://127.0.0.1:8188/object_nodes | grep -o '\"Seedance[^\"]*\"'","handlingStrategy":"validation","validationCode":"node_class = partner_nodes.get(model_family)  # or hardcode from docs\nif node_class and not comfyui_client.has_node(node_class):\n    raise SystemExit(\n        f'ComfyUI at {comfyui_client.base_url} lacks {node_class}; '\n        'update ComfyUI and enable Partner Nodes, or pick a local-weights family')","typeGuard":"def partner_node_ready(client, family: str, partner_nodes: dict) -> bool:\n    node = partner_nodes.get(family)\n    return node is None or client.has_node(node)","tryCatchPattern":"try:\n    result = comfyui_video.run(inputs=inputs)\nexcept ComfyUIError as e:\n    if 'does not expose' in str(e):\n        # fall back to a local open-weights workflow\n        inputs['workflow_path'] = 'workflows/wan22-i2v-4step.json'\n        result = comfyui_video.run(inputs=inputs)\n    else:\n        raise","preventionTips":["Pin and update ComfyUI alongside this tool; partner nodes are version-gated","Smoke-test /object_nodes after every ComfyUI upgrade","Keep a local-weights workflow JSON as fallback for air-gapped or old servers"],"tags":["comfyui","partner-nodes","environment","version-mismatch"],"backgroundTag":null,"analyzedSha":"95e1c3d0ab93482159818560f6a8c8e866b9139f","analyzedAt":"2026-08-15T06:31:20.014Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}