mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-25 02:53:29 +08:00
Some checks are pending
Python Linting / Run Ruff (push) Waiting to run
Python Linting / Run Pylint (push) Waiting to run
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Waiting to run
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Waiting to run
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Waiting to run
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Waiting to run
Execution Tests / test (macos-latest) (push) Waiting to run
Execution Tests / test (ubuntu-latest) (push) Waiting to run
Execution Tests / test (windows-latest) (push) Waiting to run
Test server launches without errors / test (push) Waiting to run
Unit Tests / test (macos-latest) (push) Waiting to run
Unit Tests / test (ubuntu-latest) (push) Waiting to run
Unit Tests / test (windows-2022) (push) Waiting to run
46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from kornia.filters import canny
|
|
from typing_extensions import override
|
|
|
|
import comfy.model_management
|
|
from comfy_api.latest import ComfyExtension, io
|
|
import torch
|
|
|
|
|
|
class Canny(io.ComfyNode):
|
|
@classmethod
|
|
def define_schema(cls):
|
|
return io.Schema(
|
|
node_id="Canny",
|
|
display_name="Canny",
|
|
search_aliases=["edge detection", "outline", "contour detection", "line art"],
|
|
category="image/preprocessors",
|
|
essentials_category="Image Tools",
|
|
inputs=[
|
|
io.Image.Input("image"),
|
|
io.Float.Input("low_threshold", default=0.4, min=0.01, max=0.99, step=0.01),
|
|
io.Float.Input("high_threshold", default=0.8, min=0.01, max=0.99, step=0.01),
|
|
],
|
|
outputs=[io.Image.Output()],
|
|
)
|
|
|
|
@classmethod
|
|
def detect_edge(cls, image, low_threshold, high_threshold):
|
|
# Deprecated: use the V3 schema's `execute` method instead of this.
|
|
return cls.execute(image, low_threshold, high_threshold)
|
|
|
|
@classmethod
|
|
def execute(cls, image, low_threshold, high_threshold) -> io.NodeOutput:
|
|
output = canny(image.to(device=comfy.model_management.get_torch_device(), dtype=torch.float32).movedim(-1, 1), low_threshold, high_threshold)
|
|
img_out = output[1].to(device=comfy.model_management.intermediate_device(), dtype=comfy.model_management.intermediate_dtype()).repeat(1, 3, 1, 1).movedim(1, -1)
|
|
return io.NodeOutput(img_out)
|
|
|
|
|
|
class CannyExtension(ComfyExtension):
|
|
@override
|
|
async def get_node_list(self) -> list[type[io.ComfyNode]]:
|
|
return [Canny]
|
|
|
|
|
|
async def comfy_entrypoint() -> CannyExtension:
|
|
return CannyExtension()
|