import nodes from typing_extensions import override from comfy_api.latest import IO, ComfyExtension class ImageCompare(IO.ComfyNode): """Compares two images with a slider interface.""" @classmethod def define_schema(cls): return IO.Schema( node_id="ImageCompare", display_name="Image Compare", description="Compares two images side by side with a slider.", category="image", is_experimental=True, is_output_node=True, inputs=[ IO.Image.Input("image_a", optional=True), IO.Image.Input("image_b", optional=True), IO.ImageCompare.Input("compare_view"), ], outputs=[], ) @classmethod def execute(cls, image_a=None, image_b=None, compare_view=None) -> IO.NodeOutput: result = {"a_images": [], "b_images": []} preview_node = nodes.PreviewImage() if image_a is not None and len(image_a) > 0: saved = preview_node.save_images(image_a, "comfy.compare.a") result["a_images"] = saved["ui"]["images"] if image_b is not None and len(image_b) > 0: saved = preview_node.save_images(image_b, "comfy.compare.b") result["b_images"] = saved["ui"]["images"] return IO.NodeOutput(ui=result) class ImageCompareExtension(ComfyExtension): @override async def get_node_list(self) -> list[type[IO.ComfyNode]]: return [ ImageCompare, ] async def comfy_entrypoint() -> ImageCompareExtension: return ImageCompareExtension()