Skip to content

Commit 793aa52

Browse files
authored
Add [controlnet] extra for annotator dependencies (#1671)
Co-authored-by: Sun Longfei <zhiwuyazhe-z@users.noreply.github.com>
1 parent 50e3ae9 commit 793aa52

4 files changed

Lines changed: 36 additions & 23 deletions

File tree

‎diffsynth/utils/controlnet/annotator.py‎

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,39 @@
99
class Annotator:
1010
def __init__(self, processor_id: Processor_id, model_path="models/Annotators", detect_resolution=None, device=get_device_type(), skip_processor=False):
1111
if not skip_processor:
12-
if processor_id == "canny":
13-
from controlnet_aux.processor import CannyDetector
14-
self.processor = CannyDetector()
15-
elif processor_id == "depth":
16-
from controlnet_aux.processor import MidasDetector
17-
self.processor = MidasDetector.from_pretrained(model_path).to(device)
18-
elif processor_id == "softedge":
19-
from controlnet_aux.processor import HEDdetector
20-
self.processor = HEDdetector.from_pretrained(model_path).to(device)
21-
elif processor_id == "lineart":
22-
from controlnet_aux.processor import LineartDetector
23-
self.processor = LineartDetector.from_pretrained(model_path).to(device)
24-
elif processor_id == "lineart_anime":
25-
from controlnet_aux.processor import LineartAnimeDetector
26-
self.processor = LineartAnimeDetector.from_pretrained(model_path).to(device)
27-
elif processor_id == "openpose":
28-
from controlnet_aux.processor import OpenposeDetector
29-
self.processor = OpenposeDetector.from_pretrained(model_path).to(device)
30-
elif processor_id == "normal":
31-
from controlnet_aux.processor import NormalBaeDetector
32-
self.processor = NormalBaeDetector.from_pretrained(model_path).to(device)
33-
elif processor_id == "tile" or processor_id == "none" or processor_id == "inpaint":
12+
if processor_id == "tile" or processor_id == "none" or processor_id == "inpaint":
3413
self.processor = None
3514
else:
36-
raise ValueError(f"Unsupported processor_id: {processor_id}")
15+
if processor_id not in ("canny", "depth", "softedge", "lineart", "lineart_anime", "openpose", "normal"):
16+
raise ValueError(f"Unsupported processor_id: {processor_id}")
17+
try:
18+
import controlnet_aux # noqa: F401
19+
except ImportError:
20+
raise ImportError(
21+
"The ControlNet annotator detectors require the 'controlnet_aux' package. "
22+
"Install it with `pip install -e .[controlnet]`."
23+
) from None
24+
if processor_id == "canny":
25+
from controlnet_aux.processor import CannyDetector
26+
self.processor = CannyDetector()
27+
elif processor_id == "depth":
28+
from controlnet_aux.processor import MidasDetector
29+
self.processor = MidasDetector.from_pretrained(model_path).to(device)
30+
elif processor_id == "softedge":
31+
from controlnet_aux.processor import HEDdetector
32+
self.processor = HEDdetector.from_pretrained(model_path).to(device)
33+
elif processor_id == "lineart":
34+
from controlnet_aux.processor import LineartDetector
35+
self.processor = LineartDetector.from_pretrained(model_path).to(device)
36+
elif processor_id == "lineart_anime":
37+
from controlnet_aux.processor import LineartAnimeDetector
38+
self.processor = LineartAnimeDetector.from_pretrained(model_path).to(device)
39+
elif processor_id == "openpose":
40+
from controlnet_aux.processor import OpenposeDetector
41+
self.processor = OpenposeDetector.from_pretrained(model_path).to(device)
42+
elif processor_id == "normal":
43+
from controlnet_aux.processor import NormalBaeDetector
44+
self.processor = NormalBaeDetector.from_pretrained(model_path).to(device)
3745
else:
3846
self.processor = None
3947

‎docs/en/Pipeline_Usage/Setup.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ To keep the framework lightweight, the base installation only installs the neces
2323
* `[npu]`: For Ascend NPU devices with x86 architecture.
2424
* `[npu_aarch64]`: For Ascend NPU devices with aarch64/ARM architecture.
2525
* Dependencies of specific models
26+
* `[controlnet]`: For the ControlNet annotator detectors (Canny, depth, OpenPose, etc.) used by the ControlNet examples under `examples/flux` and `examples/qwen_image`.
2627
* `[infiniteyou]`: https://arxiv.org/abs/2503.16418
2728
* `[ses]`: https://arxiv.org/abs/2602.03208
2829
* `[nexusgen]`: https://arxiv.org/pdf/2504.21356

‎docs/zh/Pipeline_Usage/Setup.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pip install diffsynth
2323
* `[npu]`: 用于 x86 架构的 Ascend NPU 设备
2424
* `[npu_aarch64]`: 用于 aarch64/ARM 架构的 Ascend NPU 设备
2525
* 特定模型的依赖
26+
* `[controlnet]`: 用于 `examples/flux` 和 `examples/qwen_image` 下 ControlNet 示例所需的 ControlNet 注解器(Canny、深度图、OpenPose 等)
2627
* `[infiniteyou]`: https://arxiv.org/abs/2503.16418
2728
* `[ses]`: https://arxiv.org/abs/2602.03208
2829
* `[nexusgen]`: https://arxiv.org/pdf/2504.21356

‎pyproject.toml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ npu_aarch64 = [
6666
"torch-npu==2.7.1",
6767
"torchvision==0.22.1"
6868
]
69+
controlnet = [
70+
"controlnet_aux"
71+
]
6972
infiniteyou = [
7073
"insightface",
7174
"facexlib"

0 commit comments

Comments
 (0)