Skip to main content

Installation testing infrastructure for ComfyUI custom nodes

Project description

comfy-test

Testing infrastructure for ComfyUI custom nodes.

Test your nodes install and work correctly across Linux, macOS, Windows, and Windows Portable. No pytest code needed.

Quick Start

Add these files to your custom node repository:

1. comfy-test.toml

[test]
# Name is auto-detected from directory

[test.workflows]
cpu = "all"  # Run all workflows in workflows/ folder

2. .github/workflows/test-install.yml

name: Test Installation
on: [push, pull_request]

jobs:
  test:
    uses: PozzettiAndrea/comfy-test/.github/workflows/test-matrix.yml@main

3. workflows/test.json

A minimal ComfyUI workflow that uses your nodes. Export from ComfyUI.

Done! Push to GitHub and your tests will run automatically on all platforms.

Test Levels

comfy-test runs 7 test levels in sequence:

Level Name What It Does
1 SYNTAX Check project structure (pyproject.toml/requirements.txt), CP1252 compatibility
2 INSTALL Clone ComfyUI, create environment, install node + dependencies
3 REGISTRATION Start server, verify nodes appear in /object_info
4 INSTANTIATION Test each node's constructor
5 STATIC_CAPTURE Screenshot workflows (no execution)
6 VALIDATION 4-level workflow validation (schema, graph, introspection, partial execution)
7 EXECUTION Run workflows end-to-end, capture outputs

Each level depends on previous levels. You can run up to a specific level with --level:

comfy-test run --level registration  # Runs: SYNTAX -> INSTALL -> REGISTRATION

Workflow Validation (4 Levels)

The VALIDATION level runs comprehensive checks before execution:

Level Name What It Checks
1 Schema Widget values match allowed enums, types, and ranges
2 Graph Connections are valid, all referenced nodes exist
3 Introspection Node definitions are well-formed (INPUT_TYPES, RETURN_TYPES, FUNCTION)
4 Partial Execution Runs non-CUDA nodes to verify they work

Detecting CUDA Nodes

To mark nodes as requiring CUDA (excluded from partial execution), use comfy-env.toml:

[cuda]
packages = ["nvdiffrast", "flash-attn"]

Configuration Reference

Minimal Config

[test]
# Everything has sensible defaults - this is all you need

[test.workflows]
cpu = "all"

Full Config Example

[test]
# Name is auto-detected from directory name (e.g., "ComfyUI-MyNode")

# ComfyUI version to test against
comfyui_version = "latest"  # or a tag like "v0.2.0" or commit hash

# Python version (default: random from 3.11, 3.12, 3.13)
python_version = "3.11"

# Test levels to run (default: all)
# Options: syntax, install, registration, instantiation, static_capture, validation, execution
levels = ["syntax", "install", "registration", "instantiation", "static_capture", "validation", "execution"]
# Or use: levels = "all"

# Enable/disable platforms (all enabled by default)
[test.platforms]
linux = true
macos = true
windows = true
windows_portable = true

# Workflow configuration
[test.workflows]
# Workflows to run on CPU runners (GitHub-hosted)
cpu = "all"  # or list specific files: ["test_basic.json", "test_advanced.json"]

# Workflows to run on GPU runners (self-hosted)
gpu = ["test_gpu.json"]

# Timeout for workflow execution in seconds (default: 3600)
timeout = 120

# Platform-specific settings
[test.linux]
enabled = true
skip_workflow = false  # Skip workflow execution, only verify registration

[test.macos]
enabled = true
skip_workflow = false

[test.windows]
enabled = true
skip_workflow = false

[test.windows_portable]
enabled = true
skip_workflow = false
comfyui_portable_version = "latest"  # Portable-specific version

Workflow Discovery

Workflows are auto-discovered from the workflows/ folder:

  • All .json files in workflows/ are found automatically
  • Use cpu = "all" to run all discovered workflows on CPU
  • Use gpu = "all" to run all discovered workflows on GPU
  • Or specify individual files: cpu = ["basic.json", "advanced.json"]

CLI

# Install
pip install comfy-test

# Initialize config and GitHub workflow
comfy-test init

# Run tests locally
comfy-test run --platform linux

# Run specific level only
comfy-test run --level registration

# Dry run (show what would happen)
comfy-test run --dry-run

# Publish results to GitHub Pages
comfy-test publish ./results --repo owner/repo

CUDA Packages on CPU-only CI

comfy-test runs on CPU-only GitHub Actions runners. For nodes that use CUDA packages:

  1. Installation works - comfy-test sets COMFY_ENV_CUDA_VERSION=12.8 so comfy-env can resolve wheel URLs
  2. Import may fail - CUDA packages typically fail to import without a GPU

For full CUDA testing, use a self-hosted runner with a GPU.

License

MIT

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

comfy_test-0.1.106.tar.gz (98.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

comfy_test-0.1.106-py3-none-any.whl (131.6 kB view details)

Uploaded Python 3

File details

Details for the file comfy_test-0.1.106.tar.gz.

File metadata

  • Download URL: comfy_test-0.1.106.tar.gz
  • Upload date:
  • Size: 98.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for comfy_test-0.1.106.tar.gz
Algorithm Hash digest
SHA256 2f509e2ba739b3b6190668e70acd9db7a189327aa46dd123ccc4af0df4fd7ce3
MD5 0d1e25c2056e214f1ccc14eab4bb24e3
BLAKE2b-256 64e88cedb80183bf89afec0564a6948667508af0a153fc90f50f10aaa9b3b42f

See more details on using hashes here.

Provenance

The following attestation bundles were made for comfy_test-0.1.106.tar.gz:

Publisher: publish.yml on PozzettiAndrea/comfy-test

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file comfy_test-0.1.106-py3-none-any.whl.

File metadata

  • Download URL: comfy_test-0.1.106-py3-none-any.whl
  • Upload date:
  • Size: 131.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for comfy_test-0.1.106-py3-none-any.whl
Algorithm Hash digest
SHA256 fd09194428ebf7ccda82d0c11fa99ee0dfb0b159f8f87c921e9ef5507b282036
MD5 d258f13359daea3226d6f8581ed87ea7
BLAKE2b-256 f6e62a662efa9e2a18bc1941cc224bd5f4b67b3a171c6caa4689be34e5d012e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for comfy_test-0.1.106-py3-none-any.whl:

Publisher: publish.yml on PozzettiAndrea/comfy-test

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page