Skip to main content
Glama

comfyui-test-integrations

Headless, real-workflow integration testing for ComfyUI — queue an actual workflow file through a real, running ComfyUI instance and get back a structured pass/fail, without a human at a browser.

Built to close a specific gap: ComfyUI's frontend (LiteGraph, subgraph blueprints, widget serialization) has real conversion logic between a saved workflow JSON and the flattened API "prompt" format it actually executes. Reimplementing that conversion by hand is a losing game — see test_workflow_headless.py's own docstring for the specific edge case (control_after_generate companion widgets) that broke a from-scratch attempt. Instead, this drives an actual headless Chromium via Playwright, so the real frontend does the conversion every time.

What's here

  • test_workflow_headless.py — the core harness. CLI + importable library (prepare_workflow(), run()). Loads a workflow JSON into a real ComfyUI frontend (window.app.loadGraphData()), queues it (app.queuePrompt()), and polls /history for the result. Auto-attaches a SaveVideo/SaveImage node onto a bare blueprint's dangling output (the upstream Comfy-Org blueprint convention ships without one).

  • comfyui_mcp_server.py — the same logic exposed as a single MCP tool (queue_workflow), via the official Python mcp SDK's FastMCP, so any MCP-capable agent (Claude Code, Hermes agent, etc.) can use it without knowing Playwright or ComfyUI internals exist.

  • examples/ — worked examples, including wiring in Comfy-Org/ComfyUI-test-framework's assertion nodes (AssertExecuted, AssertTensorShape, ...) for richer in-graph checks than "did it execute without error."

Related MCP server: ComfyUI-Agent-Bridge

Install

pip install -r requirements.txt
python3 -m playwright install chromium   # skip --with-deps if your host
                                          # already has the usual browser libs

CLI usage

python3 test_workflow_headless.py <workflow.json> [--url http://host:port] \
    [--prompt "override text"] [--timeout SECONDS]

Exit code 0 on success, 1 on any failure (load error, queueing rejected, execution error, or timeout).

MCP usage

python3 comfyui_mcp_server.py    # stdio server

Register with an MCP client, e.g. a project's .mcp.json for Claude Code:

{
  "mcpServers": {
    "comfyui-workflow-runner": {
      "command": "python3",
      "args": ["/absolute/path/to/comfyui-test-integrations/comfyui_mcp_server.py"]
    }
  }
}

or Hermes agent's ~/.hermes/config.yaml:

mcp_servers:
  comfyui:
    command: python3
    args: ["/absolute/path/to/comfyui-test-integrations/comfyui_mcp_server.py"]

Set COMFYUI_URL in the environment (or pass url per call) to point at a non-default instance.

Richer assertions (optional)

For more than "did it execute without an error," install Comfy-Org/ComfyUI-test-framework as a ComfyUI custom node (adds AssertExecuted, AssertTensorShape, AssertInRange, etc. as regular graph nodes) and wire its assertion nodes into a copy of the workflow you're testing before queueing it through this harness. See examples/build_assertion_test_example.py for a worked example — including a real gotcha: subgraph-internal links use a different JSON schema than outer-graph links (a {id, origin_id, origin_slot, target_id, target_slot, type} dict, not the outer level's flat [id, from_node, from_slot, to_node, to_slot, type] array).

Note ComfyUI-test-framework's own CLI (comfyci) is a different, complementary tool: it expects workflows already in flattened API-prompt format (baked in via ComfyUI's own save/export, so it can go stale if the graph is edited without re-exporting) and submits via plain HTTP/WebSocket — no browser involved. Its AssertImageMatch node is explicitly documented as unsuitable for non-deterministic (e.g. diffusion) output. This repo's harness is the complement: always-fresh conversion via a real browser, for verifying "does this generative workflow still run," not pixel-exact regression.

Wiring into a deploy pipeline

See the deploy/integration_test.sh pattern in zbrad/ComfyUI's deploy/ directory for an example of gating a deploy on a real queued workflow, using this repo as the harness.

License

MIT — see LICENSE.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zbrad/comfyui-test-integrations'

If you have feedback or need assistance with the MCP directory API, please join our Discord server