Defining NODE_CLASS_MAPPINGS made ComfyUI skip comfy_entrypoint, so /imageops/viewmedia and node replacements were never registered. Load as a V3 extension only, move server.py to routes.py so it stops shadowing ComfyUI's server module, and transcode animated previews with PyAV instead of an external ffmpeg. - Require ComfyUI 0.19.0 (has_intermediate_output); CI floor updated. - Process 11 nodes on ComfyUI's torch device when the frames fit in free memory (IMAGEOPS_COMPUTE_DEVICE=cpu disables it). - Add core CURVE input to Color Correct, BOUNDING_BOX output/input to Crop and Crop Stitch, LAYERS output to Comp (ComfyUI 0.31+), essentials_category, and Merge blend modes with golden parity. - Report progress through the public set_progress API and drop the hidden unique_id input. - Add ImageOps settings and a refresh-previews command. - Fix ImageOpsComp rotation and preview saving (undefined to_display_range) and masked Transform edge colors. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
45 lines
1013 B
Python
45 lines
1013 B
Python
"""Integration tests executed against a real ComfyUI checkout."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
|
|
def test_integration_load_nodes(
|
|
imageops_extension,
|
|
):
|
|
"""Every registered ImageOps node can be instantiated.
|
|
|
|
This deliberately does NOT import ComfyUI execution.py.
|
|
|
|
execution.py initializes model-management/device selection
|
|
and can require CUDA. Node registry integration does not
|
|
require GPU initialization.
|
|
"""
|
|
|
|
assert imageops_extension.NODES
|
|
|
|
failures = []
|
|
|
|
for cls in imageops_extension.NODES:
|
|
name = cls.define_schema().node_id
|
|
|
|
try:
|
|
instance = cls()
|
|
|
|
except Exception as exc:
|
|
failures.append(
|
|
f"{name} ({cls.__name__}): "
|
|
f"{type(exc).__name__}: {exc}"
|
|
)
|
|
|
|
continue
|
|
|
|
assert instance is not None
|
|
|
|
if failures:
|
|
pytest.fail(
|
|
"Failed to instantiate ImageOps nodes:\n"
|
|
+ "\n".join(failures)
|
|
)
|