ComfyUI ControlNet预处理节点加载失败的技术分析与系统化解决方案 ComfyUI ControlNet预处理节点加载失败的技术分析与系统化解决方案【免费下载链接】comfyui_controlnet_auxComfyUIs ControlNet Auxiliary Preprocessors项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_auxComfyUI ControlNet Auxiliary Preprocessors作为AI图像生成工作流中的核心预处理组件提供了超过20种专业的图像预处理功能包括深度估计、姿态检测、边缘提取、语义分割等关键技术。在Stable Diffusion和ControlNet生态系统中这些预处理节点构成了从原始图像到可控生成的关键桥梁。然而技术分析表明由于复杂的依赖关系、异构的硬件环境和多层次的软件架构预处理节点加载失败已成为影响工作流稳定性的主要技术瓶颈。预处理节点架构与依赖冲突分析ControlNet Aux预处理模块采用模块化设计架构每个预处理节点都封装为独立的Python模块。技术实现层面节点加载机制通过动态导入node_wrappers目录下的所有Python文件实现这种设计虽然提供了良好的扩展性但也引入了复杂的依赖管理挑战。依赖版本冲突的根源分析依赖冲突主要源于以下几个方面OpenCV版本兼容性问题不同的预处理算法对OpenCV版本有特定要求。例如深度估计算法通常需要OpenCV 4.5版本以支持DNN模块的完整功能而某些边缘检测算法可能依赖特定版本的OpenCV Contrib模块。PyTorch与CUDA版本匹配预处理节点中的神经网络模型通常依赖特定版本的PyTorch和CUDA工具链。技术分析显示PyTorch 2.0版本引入了torch.compile等新特性可能与某些传统模型存在兼容性问题。系统级库冲突某些预处理节点依赖的系统级库如libGL、libSM、libX11等在不同Linux发行版中存在版本差异导致运行时动态链接失败。环境变量配置的技术原理预处理模块在初始化阶段设置了多个关键环境变量这些设置直接影响运行时行为# 禁用NPU设备初始化防止RuntimeError os.environ[NPU_DEVICE_COUNT] 0 # 禁用MMCV操作避免扩展冲突 os.environ[MMCV_WITH_OPS] 0 # 启用MPS回退机制解决Mac上的upsample_bicubic2d错误 os.environ[PYTORCH_ENABLE_MPS_FALLBACK] os.getenv(PYTORCH_ENABLE_MPS_FALLBACK, 1)这些环境变量设置需要在ComfyUI启动前生效否则可能导致预处理节点初始化失败。技术实践表明环境变量加载顺序问题占节点加载失败的30%以上。模型文件管理与下载机制Hugging Face模型缓存架构ControlNet Aux采用Hugging Face Hub作为模型分发平台所有预训练模型均从lllyasviel/Annotators仓库下载。技术实现上模型下载机制包含以下关键组件智能缓存系统模型文件下载后存储在~/.cache/huggingface/hub/目录下通过哈希校验确保文件完整性。模型文件映射表每个预处理节点对应特定的模型文件例如Canny边缘检测ControlNetHED.pthMiDaS深度估计dpt_hybrid-midas-501f0c75.ptOpenPose姿态检测body_pose_model.pth本地路径配置用户可通过config.yaml文件自定义模型存储路径支持相对路径和绝对路径配置。模型下载失败的技术诊断当模型下载失败时需要从多个技术层面进行诊断# 检查网络连接和代理设置 curl -I https://huggingface.co/lllyasviel/Annotators # 验证Hugging Face访问令牌 python -c from huggingface_hub import whoami; print(whoami()) # 检查磁盘空间和权限 df -h ~/.cache/huggingface/ ls -la ~/.cache/huggingface/hub/技术分析表明模型下载失败的主要原因是网络连接问题、磁盘空间不足或文件权限限制。深度估计预处理技术效果展示Zoe Depth Map、Zoe Depth Anything和Depth Anything三种深度估计算法的对比输出展示了不同模型在深度信息提取精度和细节保留方面的技术差异运行时错误的技术分类与解决方案CUDA内存不足的优化策略深度估计和语义分割预处理节点通常需要较大的GPU显存。技术优化方案包括# 内存优化配置示例 import torch def optimize_memory_usage(model, image_tensor): 优化预处理模型的内存使用 # 启用梯度检查点技术 if hasattr(model, gradient_checkpointing_enable): model.gradient_checkpointing_enable() # 使用混合精度推理 from torch.cuda.amp import autocast with autocast(): output model(image_tensor) # 及时清理中间变量 torch.cuda.empty_cache() return output # 分批处理大图像 def batch_process_large_image(image, batch_size512): 将大图像分割为批次处理 height, width image.shape[:2] batches [] for y in range(0, height, batch_size): for x in range(0, width, batch_size): batch image[y:ybatch_size, x:xbatch_size] batches.append(batch) return batchesONNX Runtime加速技术实现DWPose和OpenPose预处理节点支持ONNX Runtime加速技术实现包含以下关键步骤# ONNX Runtime配置示例 import onnxruntime as ort def configure_onnx_runtime(): 配置ONNX Runtime执行提供者 # 根据硬件环境选择最佳执行提供者 providers [] # CUDA执行提供者NVIDIA GPU if CUDAExecutionProvider in ort.get_available_providers(): providers.append(CUDAExecutionProvider) # DirectML执行提供者AMD GPU elif DmlExecutionProvider in ort.get_available_providers(): providers.append(DmlExecutionProvider) # CPU回退 providers.append(CPUExecutionProvider) # 创建会话选项 sess_options ort.SessionOptions() sess_options.graph_optimization_level ort.GraphOptimizationLevel.ORT_ENABLE_ALL return providers, sess_options # 模型加载与推理 def load_onnx_model(model_path): 加载ONNX模型并进行推理优化 providers, sess_options configure_onnx_runtime() session ort.InferenceSession( model_path, providersproviders, sess_optionssess_options ) # 启用IO绑定优化 io_binding session.io_binding() return session, io_bindingTEED边缘检测预处理技术效果展示基于深度学习的边缘提取算法在处理复杂纹理和细节结构方面的技术优势相比传统Canny算法具有更好的抗噪性和边缘连续性系统化故障诊断技术框架多层级诊断检查清单建立系统化的故障诊断框架需要从四个技术层面进行分析1. 基础环境验证层#!/bin/bash # 环境验证脚本 echo 基础环境验证 python --version python -c import sys; print(fPython路径: {sys.executable}) echo 关键库版本验证 python -c import torch import cv2 import numpy as np print(fPyTorch版本: {torch.__version__}) print(fCUDA可用性: {torch.cuda.is_available()}) print(fCUDA版本: {torch.version.cuda if torch.cuda.is_available() else N/A}) print(fOpenCV版本: {cv2.__version__}) print(fNumPy版本: {np.__version__}) echo 路径环境验证 python -c import sys print(Python路径列表:) for path in sys.path: print(f {path}) 2. 模块导入测试层# 模块导入测试脚本 import sys import traceback def test_module_imports(): 测试所有预处理模块的导入状态 modules_to_test [ custom_controlnet_aux.CannyDetector, custom_controlnet_aux.MiDaSDetector, custom_controlnet_aux.OpenposeDetector, custom_controlnet_aux.DWPreprocessor, custom_controlnet_aux.UniFormerSegmentor ] results {} for module_path in modules_to_test: try: module_name, class_name module_path.split(.) exec(ffrom {module_name} import {class_name}) results[module_path] {status: success, error: None} print(f✓ {module_path} 导入成功) except Exception as e: error_msg traceback.format_exc() results[module_path] {status: failed, error: str(e)} print(f✗ {module_path} 导入失败: {str(e)}) return results3. 功能完整性测试层# 功能测试框架 import numpy as np from PIL import Image def create_test_image(size(512, 512)): 创建测试图像 test_array np.random.randint(0, 255, (*size, 3), dtypenp.uint8) return Image.fromarray(test_array) def test_preprocessor_functionality(preprocessor_class, test_image): 测试预处理器的完整功能链 try: # 实例化预处理器 detector preprocessor_class() # 执行预处理 result detector(test_image) # 验证输出格式 assert isinstance(result, (np.ndarray, Image.Image)), 输出格式错误 assert result.shape[0] 0 and result.shape[1] 0, 输出尺寸无效 return { status: success, output_shape: result.shape, output_type: type(result).__name__ } except Exception as e: return { status: failed, error: str(e), traceback: traceback.format_exc() }4. 性能基准测试层# 性能基准测试 import time import psutil import GPUtil def benchmark_preprocessor(preprocessor_class, iterations10): 运行性能基准测试 results { execution_times: [], memory_usage: [], gpu_utilization: [] } test_image create_test_image() for i in range(iterations): # 记录开始时间 start_time time.time() # 记录内存使用 process psutil.Process() start_memory process.memory_info().rss / 1024 / 1024 # MB # 执行预处理 detector preprocessor_class() result detector(test_image) # 记录结束时间 end_time time.time() end_memory process.memory_info().rss / 1024 / 1024 # MB # 记录GPU使用如果可用 gpu_info [] try: gpus GPUtil.getGPUs() for gpu in gpus: gpu_info.append({ id: gpu.id, load: gpu.load, memory_used: gpu.memoryUsed, memory_total: gpu.memoryTotal }) except: gpu_info [] # 收集结果 results[execution_times].append(end_time - start_time) results[memory_usage].append(end_memory - start_memory) results[gpu_utilization].append(gpu_info) # 清理内存 del detector del result import gc gc.collect() if torch.cuda.is_available(): torch.cuda.empty_cache() # 计算统计信息 stats { avg_execution_time: np.mean(results[execution_times]), std_execution_time: np.std(results[execution_times]), max_memory_increase: np.max(results[memory_usage]), avg_memory_increase: np.mean(results[memory_usage]) } return stats动物姿态检测预处理技术效果基于YOLOX检测器和RTMPose姿态估计器的多动物姿态识别系统展示了在复杂场景下的动物骨架提取能力依赖管理的最佳技术实践虚拟环境隔离策略为ComfyUI ControlNet Aux创建独立的虚拟环境是避免依赖冲突的最有效技术方案#!/bin/bash # 创建专用虚拟环境脚本 VENV_NAMEcomfyui_controlnet_aux_env PYTHON_VERSION3.10 # 创建虚拟环境 python${PYTHON_VERSION} -m venv ~/venv/${VENV_NAME} # 激活虚拟环境 source ~/venv/${VENV_NAME}/bin/activate # 安装基础依赖 pip install --upgrade pip setuptools wheel # 安装PyTorch根据CUDA版本选择 CUDA_VERSION$(nvcc --version | grep -oP release \K[0-9]\.[0-9] || echo cpu) if [ $CUDA_VERSION 11.8 ]; then pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 elif [ $CUDA_VERSION 12.1 ]; then pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 else pip install torch torchvision torchaudio fi # 安装ControlNet Aux依赖 cd /path/to/ComfyUI/custom_nodes/comfyui_controlnet_aux pip install -r requirements.txt # 验证安装 python -c import torch import cv2 import numpy as np print(✓ PyTorch版本:, torch.__version__) print(✓ CUDA可用:, torch.cuda.is_available()) print(✓ OpenCV版本:, cv2.__version__) 依赖版本锁定技术使用pip-tools或poetry进行依赖版本锁定确保环境一致性# 生成精确的依赖版本锁定文件 pip freeze requirements.lock # 使用pip-tools进行依赖管理 pip install pip-tools pip-compile requirements.in -o requirements.txt # 使用poetry进行依赖管理推荐 poetry init poetry add torch2.1.0 poetry add opencv-python4.8.1.78 poetry add -D comfyui_controlnet_aux容器化部署方案使用Docker容器化部署可以彻底解决环境一致性问题# Dockerfile for ComfyUI ControlNet Aux FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04 # 设置环境变量 ENV DEBIAN_FRONTENDnoninteractive ENV PYTHONUNBUFFERED1 ENV PYTORCH_ENABLE_MPS_FALLBACK1 ENV NPU_DEVICE_COUNT0 ENV MMCV_WITH_OPS0 # 安装系统依赖 RUN apt-get update apt-get install -y \ python3.10 \ python3.10-venv \ python3-pip \ git \ wget \ curl \ libgl1-mesa-glx \ libglib2.0-0 \ rm -rf /var/lib/apt/lists/* # 创建虚拟环境 RUN python3.10 -m venv /opt/venv ENV PATH/opt/venv/bin:$PATH # 安装Python依赖 COPY requirements.txt /tmp/requirements.txt RUN pip install --upgrade pip \ pip install -r /tmp/requirements.txt # 安装ComfyUI WORKDIR /app RUN git clone https://github.com/comfyanonymous/ComfyUI.git # 安装ControlNet Aux WORKDIR /app/ComfyUI/custom_nodes RUN git clone https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux # 配置模型缓存目录 RUN mkdir -p /root/.cache/huggingface/hub VOLUME /root/.cache/huggingface/hub # 启动脚本 COPY start.sh /app/start.sh RUN chmod x /app/start.sh CMD [/app/start.sh]高级调试与监控技术日志系统集成实现全面的日志记录和监控系统# 高级日志配置 import logging import sys from logging.handlers import RotatingFileHandler def setup_advanced_logging(): 配置高级日志系统 # 创建日志记录器 logger logging.getLogger(comfyui_controlnet_aux) logger.setLevel(logging.DEBUG) # 文件处理器轮转日志 file_handler RotatingFileHandler( comfyui_controlnet_aux.log, maxBytes10*1024*1024, # 10MB backupCount5 ) file_handler.setLevel(logging.DEBUG) # 控制台处理器 console_handler logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) # 格式化器 formatter logging.Formatter( %(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s ) file_handler.setFormatter(formatter) console_handler.setFormatter(formatter) # 添加处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) return logger # 使用结构化日志记录 import json from datetime import datetime def log_preprocessor_event(logger, event_type, **kwargs): 记录结构化预处理事件 event_data { timestamp: datetime.utcnow().isoformat(), event_type: event_type, data: kwargs } logger.info(json.dumps(event_data)) # 同时记录到专门的事件日志 with open(preprocessor_events.jsonl, a) as f: f.write(json.dumps(event_data) \n)性能监控仪表板创建实时性能监控系统# 性能监控组件 import psutil import GPUtil from collections import deque import threading import time class PreprocessorMonitor: 预处理节点性能监控器 def __init__(self, update_interval1.0): self.update_interval update_interval self.metrics { cpu_percent: deque(maxlen100), memory_percent: deque(maxlen100), gpu_utilization: deque(maxlen100), gpu_memory: deque(maxlen100), preprocessor_calls: 0, average_processing_time: 0.0 } self.running False self.thread None def start(self): 启动监控线程 self.running True self.thread threading.Thread(targetself._monitor_loop) self.thread.daemon True self.thread.start() def stop(self): 停止监控 self.running False if self.thread: self.thread.join() def _monitor_loop(self): 监控循环 while self.running: # 收集CPU和内存指标 cpu_percent psutil.cpu_percent(interval0.1) memory_info psutil.virtual_memory() self.metrics[cpu_percent].append(cpu_percent) self.metrics[memory_percent].append(memory_info.percent) # 收集GPU指标如果可用 try: gpus GPUtil.getGPUs() if gpus: gpu gpus[0] self.metrics[gpu_utilization].append(gpu.load * 100) self.metrics[gpu_memory].append(gpu.memoryUtil * 100) except: pass time.sleep(self.update_interval) def record_preprocessor_call(self, processing_time): 记录预处理调用 self.metrics[preprocessor_calls] 1 # 更新平均处理时间指数移动平均 alpha 0.1 self.metrics[average_processing_time] ( alpha * processing_time (1 - alpha) * self.metrics[average_processing_time] ) def get_metrics_summary(self): 获取指标摘要 return { current_cpu_percent: self.metrics[cpu_percent][-1] if self.metrics[cpu_percent] else 0, current_memory_percent: self.metrics[memory_percent][-1] if self.metrics[memory_percent] else 0, avg_cpu_percent: sum(self.metrics[cpu_percent]) / len(self.metrics[cpu_percent]) if self.metrics[cpu_percent] else 0, preprocessor_calls: self.metrics[preprocessor_calls], avg_processing_time: self.metrics[average_processing_time] }多种预处理功能集成技术展示展示了包括语义分割、深度估计、边缘检测和风格化输出在内的多种预处理算法在同一输入图像上的对比效果故障排除决策树与自动化修复自动化诊断脚本创建自动化诊断和修复脚本#!/bin/bash # 自动化诊断修复脚本 set -e DIAGNOSTIC_LOGdiagnostic_$(date %Y%m%d_%H%M%S).log log() { echo [$(date %Y-%m-%d %H:%M:%S)] $1 | tee -a $DIAGNOSTIC_LOG } check_python_environment() { log 检查Python环境... python --version python -c import sys; print(fPython路径: {sys.executable}) python -c import sys; print(Python路径列表:); [print(f {p}) for p in sys.path[:10]] } check_dependencies() { log 检查关键依赖... python -c import pkg_resources required [torch, opencv-python, numpy, Pillow, huggingface-hub] for pkg in required: try: version pkg_resources.get_distribution(pkg).version print(f✓ {pkg}: {version}) except pkg_resources.DistributionNotFound: print(f✗ {pkg}: 未安装) except Exception as e: print(f? {pkg}: 检查失败 ({e})) } check_imports() { log 测试模块导入... python -c import traceback modules [ custom_controlnet_aux, custom_controlnet_aux.processor, custom_controlnet_aux.util ] for module in modules: try: __import__(module) print(f✓ {module} 导入成功) except Exception as e: print(f✗ {module} 导入失败: {e}) traceback.print_exc() } check_model_cache() { log 检查模型缓存... CACHE_DIR~/.cache/huggingface/hub if [ -d $CACHE_DIR ]; then echo 模型缓存目录: $CACHE_DIR du -sh $CACHE_DIR find $CACHE_DIR -name *.pth -o -name *.pt -o -name *.onnx | head -10 else echo 模型缓存目录不存在 fi } fix_common_issues() { log 修复常见问题... # 修复OpenCV冲突 pip uninstall -y opencv-python opencv-contrib-python opencv-python-headless 2/dev/null || true pip install opencv-python4.8.1.78 # 修复环境变量 export PYTORCH_ENABLE_MPS_FALLBACK1 export NPU_DEVICE_COUNT0 export MMCV_WITH_OPS0 # 清理Python缓存 find . -name __pycache__ -type d -exec rm -rf {} 2/dev/null || true find . -name *.pyc -delete 2/dev/null || true } main() { log 开始ControlNet Aux诊断... check_python_environment check_dependencies check_imports check_model_cache read -p 是否尝试自动修复常见问题 (y/n): -n 1 -r echo if [[ $REPLY ~ ^[Yy]$ ]]; then fix_common_issues log 修复完成重新运行诊断... check_dependencies check_imports fi log 诊断完成日志已保存到: $DIAGNOSTIC_LOG } main $故障排除决策树基于技术分析建立系统化的故障排除决策流程开始故障排除 ├── 节点完全消失 │ ├── 检查ComfyUI日志 → 查看导入错误 │ ├── 验证Python路径 → 检查sys.path配置 │ ├── 检查模块文件 → 确认node_wrappers目录存在 │ └── 验证依赖安装 → 运行requirements检查 │ ├── 运行时错误 │ ├── ModuleNotFoundError │ │ ├── 检查特定模块 → 验证缺失的Python包 │ │ ├── 重新安装依赖 → pip install -r requirements.txt │ │ └── 检查虚拟环境 → 确认激活正确环境 │ │ │ ├── ImportError │ │ ├── 检查C扩展 → 验证编译依赖 │ │ ├── 检查版本冲突 → 使用pip check │ │ └── 清理__pycache__ → 删除编译缓存 │ │ │ └── CUDA相关错误 │ ├── 验证CUDA安装 → nvcc --version │ ├── 检查PyTorch版本 → torch.cuda.is_available() │ └── 调整批次大小 → 减少内存使用 │ └── 功能无响应 ├── 检查模型文件 → 验证Hugging Face缓存 ├── 测试简单图像 → 使用小尺寸测试图像 ├── 启用调试日志 → 设置详细日志级别 └── 检查硬件加速 → 验证GPU/CPU使用情况技术发展趋势与最佳实践建议预处理技术演进方向ControlNet Aux预处理技术正在向以下几个方向发展模型轻量化通过知识蒸馏、模型剪枝和量化技术减少预处理模型的计算开销和内存占用。多模态融合结合视觉、文本和几何信息的多模态预处理提供更丰富的控制信号。实时处理优化针对视频流处理的实时预处理算法优化支持高帧率处理。自适应预处理根据输入图像特征自动选择最优预处理算法和参数。部署架构最佳实践基于生产环境部署的技术最佳实践分层缓存架构# 多级缓存实现 class MultiLevelCache: def __init__(self): self.memory_cache {} # 内存缓存 self.disk_cache_path ./cache/models self.remote_cache_url https://huggingface.co def get_model(self, model_name): # 1. 检查内存缓存 if model_name in self.memory_cache: return self.memory_cache[model_name] # 2. 检查磁盘缓存 disk_path f{self.disk_cache_path}/{model_name} if os.path.exists(disk_path): model self._load_from_disk(disk_path) self.memory_cache[model_name] model return model # 3. 从远程下载 model self._download_from_remote(model_name) self._save_to_disk(model, disk_path) self.memory_cache[model_name] model return model弹性伸缩设计# 弹性资源管理 class ElasticResourceManager: def __init__(self, max_gpu_memory0.8): self.max_gpu_memory max_gpu_memory self.active_processes [] def allocate_resources(self, preprocessor_type, image_size): 根据预处理类型和图像大小分配资源 # 基于历史数据的资源预测 resource_profile self._get_resource_profile(preprocessor_type) # 动态调整批次大小 batch_size self._calculate_optimal_batch_size( image_size, resource_profile[memory_per_image] ) # 检查GPU内存 if torch.cuda.is_available(): free_memory torch.cuda.memory_reserved(0) - torch.cuda.memory_allocated(0) total_memory torch.cuda.get_device_properties(0).total_memory if free_memory / total_memory 0.2: # 内存不足 batch_size max(1, batch_size // 2) return { batch_size: batch_size, use_half_precision: resource_profile[supports_half], enable_checkpointing: image_size[0] * image_size[1] 1024*1024 }监控与告警系统# 健康检查与告警 class HealthMonitor: def __init__(self): self.metrics_history deque(maxlen1000) self.alert_thresholds { error_rate: 0.05, # 5%错误率 avg_latency_ms: 5000, # 5秒平均延迟 memory_growth_mb: 100 # 100MB内存增长 } def check_health(self): 执行健康检查 health_status { status: healthy, issues: [], metrics: self._collect_metrics() } # 检查错误率 if health_status[metrics][error_rate] self.alert_thresholds[error_rate]: health_status[status] degraded health_status[issues].append(高错误率) # 检查延迟 if health_status[metrics][avg_latency_ms] self.alert_thresholds[avg_latency_ms]: health_status[status] degraded health_status[issues].append(高处理延迟) # 检查内存泄漏 if health_status[metrics][memory_growth_mb] self.alert_thresholds[memory_growth_mb]: health_status[status] critical health_status[issues].append(疑似内存泄漏) return health_status预处理功能综合技术展示包括MIDAS深度图、M-LSD线段检测、OpenPose姿态估计、Scribble草图提取和TEED边缘检测等多种预处理算法的集成应用展示了在复杂图像处理工作流中的技术协同效应结论与未来展望ComfyUI ControlNet Aux预处理节点的稳定运行依赖于多层次的技术栈协调工作。技术分析表明通过系统化的环境管理、依赖版本控制、模型缓存优化和运行时监控可以显著提高预处理节点的可靠性和性能。未来技术发展方向包括容器化部署标准化提供官方Docker镜像和Kubernetes部署模板简化生产环境部署。模型格式统一化推动ONNX和TorchScript格式的标准化提高模型互操作性。边缘计算优化针对移动设备和边缘计算场景的预处理模型优化。自动化调参系统基于机器学习的预处理参数自动优化系统。通过采用本文提供的技术解决方案和最佳实践开发者和研究人员可以构建稳定、高效的ControlNet预处理工作流为AI图像生成提供可靠的技术基础。持续的技术创新和社区协作将进一步推动预处理技术的发展为更复杂的图像生成任务提供技术支持。【免费下载链接】comfyui_controlnet_auxComfyUIs ControlNet Auxiliary Preprocessors项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考