processors multiple fixes

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2026-06-18 11:45:32 +02:00
parent 7c81bc2d50
commit 8d4ebcd5ef
15 changed files with 80 additions and 58 deletions
+1
View File
@@ -6,6 +6,7 @@
- `sdnq` warn instead of error for triton
- `insightface` missing dependencies
- `pulid` import paths
- `processors` init code and multiple fixes
## Update for 2026-06-16
+1 -1
View File
@@ -10,7 +10,7 @@ class AnylineDetector:
def from_pretrained(cls, pretrained_model_or_path="TheMistoAI/MistoLine", cache_dir=None, local_files_only=False):
from installer import install
install('controlnet-aux', quiet=True)
from controlnet_aux import AnylineDetector as _AnylineDetector
from controlnet_aux.anyline import AnylineDetector as _AnylineDetector
model = _AnylineDetector.from_pretrained(pretrained_model_or_path, filename="MTEED.pth", subfolder="Anyline", cache_dir=cache_dir)
return cls(model)
@@ -1,10 +1,8 @@
import argparse
import os
from ..util import util
# import torch
from .. import models
# import pix2pix.data
import numpy as np
from modules.control.proc.leres.pix2pix.util import util
from modules.control.proc.leres.pix2pix import models
class BaseOptions():
"""This class defines options used during both training and test time.
+4
View File
@@ -64,9 +64,13 @@ class LotusDetector:
# Concatenate along channel dim: [rgb_latents, noise_latents]
latent_input = torch.cat([rgb_latents, noise_latents], dim=1)
# UNet forward pass with task embedding as class_labels
latent_input = latent_input.to(self.unet.dtype)
prompt_embeds = prompt_embeds.to(self.unet.dtype)
task_emb = task_emb.to(self.unet.dtype)
prediction = self.unet(latent_input, timestep, encoder_hidden_states=prompt_embeds, class_labels=task_emb).sample
# Decode prediction
prediction = prediction / self.vae.config.scaling_factor
prediction = prediction.to(self.vae.dtype)
decoded = self.vae.decode(prediction).sample
if opts.control_move_processor:
self._to("cpu")
+3 -5
View File
@@ -9,12 +9,10 @@ checked_ok = False
def check_dependencies():
global checked_ok # pylint: disable=global-statement
from installer import installed, install
from installer import install
from modules.logger import log
packages = [('mediapipe', 'mediapipe')]
for pkg in packages:
if not installed(pkg[1], quiet=True):
install(pkg[0], pkg[1], ignore=False)
install('mediapipe')
# install('protobuf==4.25.6', 'protobuf', no_deps=True, reinstall=True, force=True)
try:
import mediapipe as mp # pylint: disable=unused-import
checked_ok = True
+4 -5
View File
@@ -2,14 +2,13 @@
import cv2
import os
import torch
import torch.nn as nn
from torchvision.transforms import Compose
from .midas.dpt_depth import DPTDepthModel
from .midas.midas_net import MidasNet
from .midas.midas_net_custom import MidasNet_small
from .midas.transforms import Resize, NormalizeImage, PrepareForNet
from modules.control.proc.midas.midas.dpt_depth import DPTDepthModel
from modules.control.proc.midas.midas.midas_net import MidasNet
from modules.control.proc.midas.midas.midas_net_custom import MidasNet_small
from modules.control.proc.midas.midas.transforms import Resize, NormalizeImage, PrepareForNet
from modules.control.util import annotator_ckpts_path
@@ -0,0 +1,21 @@
import numpy as np
from PIL import Image
class NormalBaeDetector:
def __init__(self, model):
self.model = model
@classmethod
def from_pretrained(cls, pretrained_model_or_path="fal/teed", cache_dir=None, local_files_only=False): # pylint: disable=unused-argument
from installer import install
install('controlnet-aux', quiet=True)
from controlnet_aux.normalbae import NormalBaeDetector as _NormalBaeDetector
model = _NormalBaeDetector.from_pretrained(pretrained_model_or_path, filename="5_model.pth")
return cls(model)
def __call__(self, image, output_type="pil", **kwargs):
if isinstance(image, np.ndarray):
image = Image.fromarray(image)
result = self.model(image, output_type=output_type)
return result
@@ -4,14 +4,13 @@
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
from typing import Tuple
import torch
import torch.nn as nn
from torch.nn import functional as F
from typing import Tuple
from ..modeling import Sam
from .amg import calculate_stability_score
from modules.control.proc.segment_anything.modeling import Sam
from modules.control.proc.segment_anything.utils.amg import calculate_stability_score
class SamOnnxModel(nn.Module):
@@ -2,9 +2,9 @@ dependencies = ["torch"]
import torch
from .midas.dpt_depth import DPTDepthModel
from .midas.midas_net import MidasNet
from .midas.midas_net_custom import MidasNet_small
from modules.control.proc.zoe.zoedepth.models.base_models.midas_repo.midas.dpt_depth import DPTDepthModel
from modules.control.proc.zoe.zoedepth.models.base_models.midas_repo.midas.midas_net import MidasNet
from modules.control.proc.zoe.zoedepth.models.base_models.midas_repo.midas.midas_net_custom import MidasNet_small
def DPT_BEiT_L_512(pretrained=True, **kwargs):
""" # This docstring shows up in hub.help()
@@ -1,7 +1,6 @@
import timm
import torch.nn as nn
from .utils import activations, forward_default, get_activation
from ..external.next_vit.classification.nextvit import *
def forward_next_vit(pretrained, x):
@@ -26,12 +26,12 @@ import itertools
import torch
import torch.nn as nn
from ..depth_model import DepthModel
from ...base_models.midas import MidasCore
from ...layers.attractor import AttractorLayer, AttractorLayerUnnormed
from ...layers.dist_layers import ConditionalLogBinomial
from ...layers.localbins_layers import Projector, SeedBinRegressor, SeedBinRegressorUnnormed
from ...model_io import load_state_from_resource
from modules.control.proc.zoe.zoedepth.models.depth_model import DepthModel
from modules.control.proc.zoe.zoedepth.models.base_models.midas import MidasCore
from modules.control.proc.zoe.zoedepth.models.layers.attractor import AttractorLayer, AttractorLayerUnnormed
from modules.control.proc.zoe.zoedepth.models.layers.dist_layers import ConditionalLogBinomial
from modules.control.proc.zoe.zoedepth.models.layers.localbins_layers import Projector, SeedBinRegressor, SeedBinRegressorUnnormed
from modules.control.proc.zoe.zoedepth.models.model_io import load_state_from_resource
class ZoeDepth(DepthModel):
@@ -27,13 +27,13 @@ import itertools
import torch
import torch.nn as nn
from ..depth_model import DepthModel
from ...base_models.midas import MidasCore
from ...layers.attractor import AttractorLayer, AttractorLayerUnnormed
from ...layers.dist_layers import ConditionalLogBinomial
from ...layers.localbins_layers import Projector, SeedBinRegressor, SeedBinRegressorUnnormed
from ...layers.patch_transformer import PatchTransformerEncoder
from ...model_io import load_state_from_resource
from modules.control.proc.zoe.zoedepth.models.depth_model import DepthModel
from modules.control.proc.zoe.zoedepth.models.base_models.midas import MidasCore
from modules.control.proc.zoe.zoedepth.models.layers.attractor import AttractorLayer, AttractorLayerUnnormed
from modules.control.proc.zoe.zoedepth.models.layers.dist_layers import ConditionalLogBinomial
from modules.control.proc.zoe.zoedepth.models.layers.localbins_layers import Projector, SeedBinRegressor, SeedBinRegressorUnnormed
from modules.control.proc.zoe.zoedepth.models.layers.patch_transformer import PatchTransformerEncoder
from modules.control.proc.zoe.zoedepth.models.model_io import load_state_from_resource
class ZoeDepthNK(DepthModel):
def __init__(self, core, bin_conf, bin_centers_type="softplus", bin_embedding_dim=128,
+8 -7
View File
@@ -18,8 +18,6 @@ processors = [
# pose
'OpenPose',
'DWPose',
'MediaPipe Face',
'DWPose (ONNX)',
'RTMW',
'RTMO',
'ViTPose',
@@ -31,8 +29,7 @@ processors = [
'HED',
'PidiNet',
'MLSD',
'TEED',
'Anyline',
'Anyline (Legacy)',
# depth
'Midas Depth Hybrid',
'Leres Depth',
@@ -47,16 +44,20 @@ processors = [
'Marigold Depth LCM',
'Lotus Depth',
# normal
'Normal Bae',
'Normal Bae (Legacy)',
'DSINE',
'StableNormal',
'Marigold Normals',
# segmentation
'SegmentAnything',
'SAM 2.1',
'SegmentAnything 1.0',
'SegmentAnything 2.1',
'OneFormer',
# other
'Shuffle',
# legacy
'MediaPipe Face (Legacy)',
'DWPose (Legacy)',
'TEED (Legacy)',
]
+16 -14
View File
@@ -16,8 +16,6 @@ config = {
'None': {},
# pose models
'OpenPose': {'class': None, 'group': 'Pose', 'checkpoint': True, 'params': {'include_body': True, 'include_hand': False, 'include_face': False}},
'MediaPipe Face': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'max_faces': 1, 'min_confidence': 0.5}},
'DWPose (ONNX)': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}},
'RTMW': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3, 'draw_body_pose': True, 'draw_hand_pose': True, 'draw_face_pose': True}},
'RTMO': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}},
'ViTPose': {'class': None, 'group': 'Pose', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'usyd-community/vitpose-plus-base'}, 'params': {'min_confidence': 0.3}},
@@ -29,8 +27,6 @@ config = {
'HED': {'class': None, 'group': 'Edge', 'checkpoint': True, 'params': {'scribble': False, 'safe': False}},
'PidiNet': {'class': None, 'group': 'Edge', 'checkpoint': True, 'params': {'scribble': False, 'safe': False, 'apply_filter': False}},
'MLSD': {'class': None, 'group': 'Edge', 'checkpoint': True, 'params': {'thr_v': 0.1, 'thr_d': 0.1}},
'TEED': {'class': None, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'fal/teed'}, 'params': {}},
'Anyline': {'class': None, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'TheMistoAI/MistoLine'}, 'params': {}},
# depth models
'Midas Depth Hybrid': {'class': None, 'group': 'Depth', 'checkpoint': True, 'params': {'bg_th': 0.1, 'depth_and_normal': False}},
'Leres Depth': {'class': None, 'group': 'Depth', 'checkpoint': True, 'params': {'boost': False, 'thr_a': 0, 'thr_b': 0}},
@@ -45,16 +41,21 @@ config = {
'Marigold Depth LCM': {'class': None, 'group': 'Depth', 'checkpoint': True, 'params': {'denoising_steps': 1, 'ensemble_size': 1, 'processing_res': 768, 'match_input_res': True, 'color_map': 'None'}, 'load_config': {'pretrained_model_or_path': 'prs-eth/marigold-depth-lcm-v1-0'}},
'Lotus Depth': {'class': None, 'group': 'Depth', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'jingheya/lotus-depth-g-v2-1-disparity'}, 'params': {'color_map': 'inferno'}},
# normal models
'Normal Bae': {'class': None, 'group': 'Normal', 'checkpoint': True, 'params': {}},
'DSINE': {'class': None, 'group': 'Normal', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'hugoycj/DSINE-hub'}, 'params': {}},
'StableNormal': {'class': None, 'group': 'Normal', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'Stable-X/StableNormal'}, 'params': {}},
'Marigold Normals': {'class': None, 'group': 'Normal', 'checkpoint': True, 'params': {'denoising_steps': 4, 'ensemble_size': 4, 'processing_res': 768, 'match_input_res': True}, 'load_config': {'pretrained_model_or_path': 'prs-eth/marigold-normals-v1-1'}},
# segmentation models
'SegmentAnything': {'class': None, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Base', 'params': {}},
'SAM 2.1': {'class': None, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Large', 'load_config': {'pretrained_model_or_path': 'facebook/sam2.1-hiera-large'}, 'params': {}},
'SegmentAnything 1.0': {'class': None, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Base', 'params': {}},
'SegmentAnything 2.1': {'class': None, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Large', 'load_config': {'pretrained_model_or_path': 'facebook/sam2.1-hiera-large'}, 'params': {}},
'OneFormer': {'class': None, 'group': 'Segmentation', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'shi-labs/oneformer_ade20k_swin_large'}, 'params': {}},
# other models
'Shuffle': {'class': None, 'group': 'Other', 'checkpoint': False, 'params': {}},
# legacy models
'MediaPipe Face (Legacy)': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'max_faces': 1, 'min_confidence': 0.5}},
'DWPose (Legacy)': {'class': None, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}},
'TEED (Legacy)': {'class': None, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'fal/teed'}, 'params': {}},
'Anyline (Legacy)': {'class': None, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'TheMistoAI/MistoLine'}, 'params': {}},
'Normal Bae (Legacy)': {'class': None, 'group': 'Normal', 'checkpoint': True, 'params': {}},
}
@@ -81,6 +82,7 @@ def delay_load_config():
from modules.control.proc.depth_pro import DepthProDetector
from modules.control.proc.depth_anything_v2 import DepthAnythingV2Detector
from modules.control.proc.teed import TEEDDetector
from modules.control.proc.normalbae import NormalBaeDetector
from modules.control.proc.anyline import AnylineDetector
from modules.control.proc.rtmlib_pose import RtmlibPoseDetector
from modules.control.proc.vitpose import ViTPoseDetector
@@ -95,8 +97,8 @@ def delay_load_config():
'None': {},
# pose models
'OpenPose': {'class': OpenposeDetector, 'group': 'Pose', 'checkpoint': True, 'params': {'include_body': True, 'include_hand': False, 'include_face': False}},
'MediaPipe Face': {'class': MediapipeFaceDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'max_faces': 1, 'min_confidence': 0.5}},
'DWPose (ONNX)': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}},
'MediaPipe Face (Legacy)': {'class': MediapipeFaceDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'max_faces': 1, 'min_confidence': 0.5}},
'DWPose (Legacy)': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}},
'RTMW': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3, 'draw_body_pose': True, 'draw_hand_pose': True, 'draw_face_pose': True}},
'RTMO': {'class': RtmlibPoseDetector, 'group': 'Pose', 'checkpoint': False, 'params': {'min_confidence': 0.3}},
'ViTPose': {'class': ViTPoseDetector, 'group': 'Pose', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'usyd-community/vitpose-plus-base'}, 'params': {'min_confidence': 0.3}},
@@ -108,8 +110,8 @@ def delay_load_config():
'HED': {'class': HEDdetector, 'group': 'Edge', 'checkpoint': True, 'params': {'scribble': False, 'safe': False}},
'PidiNet': {'class': PidiNetDetector, 'group': 'Edge', 'checkpoint': True, 'params': {'scribble': False, 'safe': False, 'apply_filter': False}},
'MLSD': {'class': MLSDdetector, 'group': 'Edge', 'checkpoint': True, 'params': {'thr_v': 0.1, 'thr_d': 0.1}},
'TEED': {'class': TEEDDetector, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'fal/teed'}, 'params': {}},
'Anyline': {'class': AnylineDetector, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'TheMistoAI/MistoLine'}, 'params': {}},
'TEED (Legacy)': {'class': TEEDDetector, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'fal/teed'}, 'params': {}},
'Anyline (Legacy)': {'class': AnylineDetector, 'group': 'Edge', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'TheMistoAI/MistoLine'}, 'params': {}},
# depth models
'Midas Depth Hybrid': {'class': MidasDetector, 'group': 'Depth', 'checkpoint': True, 'params': {'bg_th': 0.1, 'depth_and_normal': False}},
'Leres Depth': {'class': LeresDetector, 'group': 'Depth', 'checkpoint': True, 'params': {'boost': False, 'thr_a': 0, 'thr_b': 0}},
@@ -124,13 +126,13 @@ def delay_load_config():
'Marigold Depth LCM': {'class': MarigoldDetector, 'group': 'Depth', 'checkpoint': True, 'params': {'denoising_steps': 1, 'ensemble_size': 1, 'processing_res': 768, 'match_input_res': True, 'color_map': 'None'}, 'load_config': {'pretrained_model_or_path': 'prs-eth/marigold-depth-lcm-v1-0'}},
'Lotus Depth': {'class': LotusDetector, 'group': 'Depth', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'jingheya/lotus-depth-g-v2-1-disparity'}, 'params': {'color_map': 'inferno'}},
# normal models
'Normal Bae': {'class': None, 'group': 'Normal', 'checkpoint': True, 'params': {}},
'Normal Bae (Legacy)': {'class': NormalBaeDetector, 'group': 'Normal', 'checkpoint': True, 'params': {}},
'DSINE': {'class': DSINEDetector, 'group': 'Normal', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'hugoycj/DSINE-hub'}, 'params': {}},
'StableNormal': {'class': StableNormalDetector, 'group': 'Normal', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'Stable-X/StableNormal'}, 'params': {}},
'Marigold Normals': {'class': MarigoldNormalsDetector, 'group': 'Normal', 'checkpoint': True, 'params': {'denoising_steps': 4, 'ensemble_size': 4, 'processing_res': 768, 'match_input_res': True}, 'load_config': {'pretrained_model_or_path': 'prs-eth/marigold-normals-v1-1'}},
# segmentation models
'SegmentAnything': {'class': SamDetector, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Base', 'params': {}},
'SAM 2.1': {'class': Sam2Detector, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Large', 'load_config': {'pretrained_model_or_path': 'facebook/sam2.1-hiera-large'}, 'params': {}},
'SegmentAnything 1.0': {'class': SamDetector, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Base', 'params': {}},
'SegmentAnything 2.1': {'class': Sam2Detector, 'group': 'Segmentation', 'checkpoint': True, 'model': 'Large', 'load_config': {'pretrained_model_or_path': 'facebook/sam2.1-hiera-large'}, 'params': {}},
'OneFormer': {'class': OneFormerDetector, 'group': 'Segmentation', 'checkpoint': True, 'load_config': {'pretrained_model_or_path': 'shi-labs/oneformer_ade20k_swin_large'}, 'params': {}},
# other models
'Shuffle': {'class': ContentShuffleDetector, 'group': 'Other', 'checkpoint': False, 'params': {}},
+1 -1
View File
@@ -113,7 +113,7 @@ class FluxToolsScript(scripts_manager.Script):
shared.opts.data["sd_model_checkpoint"] = "black-forest-labs/FLUX.1-Canny-dev"
sd_models.reload_model_weights(op='model', revision="refs/pr/1")
if processor_canny is None:
from controlnet_aux import CannyDetector
from modules.control.proc.canny import CannyDetector
processor_canny = CannyDetector()
if process:
control_image = processor_canny(image, low_threshold=50, high_threshold=200, detect_resolution=1024, image_resolution=1024)