import folder_paths import impact.wildcards from impact.utils import any_typ class ToDetailerPipe: @classmethod def INPUT_TYPES(s): return {"required": { "model": ("MODEL",), "clip": ("CLIP",), "vae": ("VAE",), "positive": ("CONDITIONING",), "negative": ("CONDITIONING",), "bbox_detector": ("BBOX_DETECTOR", ), "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), "Select to add Wildcard": (["Select the Wildcard to add to the text"], ), }, "optional": { "sam_model_opt": ("SAM_MODEL",), "segm_detector_opt": ("SEGM_DETECTOR",), "detailer_hook": ("DETAILER_HOOK",), }} RETURN_TYPES = ("DETAILER_PIPE", ) RETURN_NAMES = ("detailer_pipe", ) FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, *args, **kwargs): pipe = (kwargs['model'], kwargs['clip'], kwargs['vae'], kwargs['positive'], kwargs['negative'], kwargs['wildcard'], kwargs['bbox_detector'], kwargs.get('segm_detector_opt', None), kwargs.get('sam_model_opt', None), kwargs.get('detailer_hook', None), kwargs.get('refiner_model', None), kwargs.get('refiner_clip', None), kwargs.get('refiner_positive', None), kwargs.get('refiner_negative', None)) return (pipe, ) class ToDetailerPipeSDXL(ToDetailerPipe): @classmethod def INPUT_TYPES(s): return {"required": { "model": ("MODEL",), "clip": ("CLIP",), "vae": ("VAE",), "positive": ("CONDITIONING",), "negative": ("CONDITIONING",), "refiner_model": ("MODEL",), "refiner_clip": ("CLIP",), "refiner_positive": ("CONDITIONING",), "refiner_negative": ("CONDITIONING",), "bbox_detector": ("BBOX_DETECTOR", ), "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), "Select to add Wildcard": (["Select the Wildcard to add to the text"],), }, "optional": { "sam_model_opt": ("SAM_MODEL",), "segm_detector_opt": ("SEGM_DETECTOR",), "detailer_hook": ("DETAILER_HOOK",), }} class FromDetailerPipe: @classmethod def INPUT_TYPES(s): return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }, } RETURN_TYPES = ("MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK") RETURN_NAMES = ("model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook") FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, detailer_pipe): model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, _, _, _, _ = detailer_pipe return model, clip, vae, positive, negative, bbox_detector, sam_model_opt, segm_detector_opt, detailer_hook class FromDetailerPipe_v2: @classmethod def INPUT_TYPES(s): return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }, } RETURN_TYPES = ("DETAILER_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK") RETURN_NAMES = ("detailer_pipe", "model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook") FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, detailer_pipe): model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, _, _, _, _ = detailer_pipe return detailer_pipe, model, clip, vae, positive, negative, bbox_detector, sam_model_opt, segm_detector_opt, detailer_hook class FromDetailerPipe_SDXL: @classmethod def INPUT_TYPES(s): return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }, } RETURN_TYPES = ("DETAILER_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK", "MODEL", "CLIP", "CONDITIONING", "CONDITIONING") RETURN_NAMES = ("detailer_pipe", "model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook", "refiner_model", "refiner_clip", "refiner_positive", "refiner_negative") FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, detailer_pipe): model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, refiner_model, refiner_clip, refiner_positive, refiner_negative = detailer_pipe return detailer_pipe, model, clip, vae, positive, negative, bbox_detector, sam_model_opt, segm_detector_opt, detailer_hook, refiner_model, refiner_clip, refiner_positive, refiner_negative class AnyPipeToBasic: @classmethod def INPUT_TYPES(s): return { "required": {"any_pipe": (any_typ,)}, } RETURN_TYPES = ("BASIC_PIPE", ) RETURN_NAMES = ("basic_pipe", ) FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, any_pipe): return (any_pipe[:5], ) class ToBasicPipe: @classmethod def INPUT_TYPES(s): return {"required": { "model": ("MODEL",), "clip": ("CLIP",), "vae": ("VAE",), "positive": ("CONDITIONING",), "negative": ("CONDITIONING",), }, } RETURN_TYPES = ("BASIC_PIPE", ) RETURN_NAMES = ("basic_pipe", ) FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, model, clip, vae, positive, negative): pipe = (model, clip, vae, positive, negative) return (pipe, ) class FromBasicPipe: @classmethod def INPUT_TYPES(s): return {"required": {"basic_pipe": ("BASIC_PIPE",), }, } RETURN_TYPES = ("MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING") RETURN_NAMES = ("model", "clip", "vae", "positive", "negative") FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, basic_pipe): model, clip, vae, positive, negative = basic_pipe return model, clip, vae, positive, negative class FromBasicPipe_v2: @classmethod def INPUT_TYPES(s): return {"required": {"basic_pipe": ("BASIC_PIPE",), }, } RETURN_TYPES = ("BASIC_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING") RETURN_NAMES = ("basic_pipe", "model", "clip", "vae", "positive", "negative") FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, basic_pipe): model, clip, vae, positive, negative = basic_pipe return basic_pipe, model, clip, vae, positive, negative class BasicPipeToDetailerPipe: @classmethod def INPUT_TYPES(s): return {"required": {"basic_pipe": ("BASIC_PIPE",), "bbox_detector": ("BBOX_DETECTOR", ), "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), "Select to add Wildcard": (["Select the Wildcard to add to the text"],), }, "optional": { "sam_model_opt": ("SAM_MODEL", ), "segm_detector_opt": ("SEGM_DETECTOR",), "detailer_hook": ("DETAILER_HOOK",), }, } RETURN_TYPES = ("DETAILER_PIPE", ) RETURN_NAMES = ("detailer_pipe", ) FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, *args, **kwargs): basic_pipe = kwargs['basic_pipe'] bbox_detector = kwargs['bbox_detector'] wildcard = kwargs['wildcard'] sam_model_opt = kwargs.get('sam_model_opt', None) segm_detector_opt = kwargs.get('segm_detector_opt', None) detailer_hook = kwargs.get('detailer_hook', None) model, clip, vae, positive, negative = basic_pipe pipe = model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, None, None, None, None return (pipe, ) class BasicPipeToDetailerPipeSDXL: @classmethod def INPUT_TYPES(s): return {"required": {"base_basic_pipe": ("BASIC_PIPE",), "refiner_basic_pipe": ("BASIC_PIPE",), "bbox_detector": ("BBOX_DETECTOR", ), "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), "Select to add Wildcard": (["Select the Wildcard to add to the text"],), }, "optional": { "sam_model_opt": ("SAM_MODEL", ), "segm_detector_opt": ("SEGM_DETECTOR",), "detailer_hook": ("DETAILER_HOOK",), }, } RETURN_TYPES = ("DETAILER_PIPE", ) RETURN_NAMES = ("detailer_pipe", ) FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, *args, **kwargs): base_basic_pipe = kwargs['base_basic_pipe'] refiner_basic_pipe = kwargs['refiner_basic_pipe'] bbox_detector = kwargs['bbox_detector'] wildcard = kwargs['wildcard'] sam_model_opt = kwargs.get('sam_model_opt', None) segm_detector_opt = kwargs.get('segm_detector_opt', None) detailer_hook = kwargs.get('detailer_hook', None) model, clip, vae, positive, negative = base_basic_pipe refiner_model, refiner_clip, refiner_vae, refiner_positive, refiner_negative = refiner_basic_pipe pipe = model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, refiner_model, refiner_clip, refiner_positive, refiner_negative return (pipe, ) class DetailerPipeToBasicPipe: @classmethod def INPUT_TYPES(s): return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }} RETURN_TYPES = ("BASIC_PIPE", "BASIC_PIPE") RETURN_NAMES = ("base_basic_pipe", "refiner_basic_pipe") FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, detailer_pipe): model, clip, vae, positive, negative, _, _, _, _, _, refiner_model, refiner_clip, refiner_positive, refiner_negative = detailer_pipe pipe = model, clip, vae, positive, negative refiner_pipe = refiner_model, refiner_clip, vae, refiner_positive, refiner_negative return (pipe, refiner_pipe) class EditBasicPipe: @classmethod def INPUT_TYPES(s): return { "required": {"basic_pipe": ("BASIC_PIPE",), }, "optional": { "model": ("MODEL",), "clip": ("CLIP",), "vae": ("VAE",), "positive": ("CONDITIONING",), "negative": ("CONDITIONING",), }, } RETURN_TYPES = ("BASIC_PIPE", ) RETURN_NAMES = ("basic_pipe", ) FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, basic_pipe, model=None, clip=None, vae=None, positive=None, negative=None): res_model, res_clip, res_vae, res_positive, res_negative = basic_pipe if model is not None: res_model = model if clip is not None: res_clip = clip if vae is not None: res_vae = vae if positive is not None: res_positive = positive if negative is not None: res_negative = negative pipe = res_model, res_clip, res_vae, res_positive, res_negative return (pipe, ) class EditDetailerPipe: @classmethod def INPUT_TYPES(s): return { "required": { "detailer_pipe": ("DETAILER_PIPE",), "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), "Select to add Wildcard": (["Select the Wildcard to add to the text"],), }, "optional": { "model": ("MODEL",), "clip": ("CLIP",), "vae": ("VAE",), "positive": ("CONDITIONING",), "negative": ("CONDITIONING",), "bbox_detector": ("BBOX_DETECTOR",), "sam_model": ("SAM_MODEL",), "segm_detector": ("SEGM_DETECTOR",), "detailer_hook": ("DETAILER_HOOK",), }, } RETURN_TYPES = ("DETAILER_PIPE",) RETURN_NAMES = ("detailer_pipe",) FUNCTION = "doit" CATEGORY = "ImpactPack/Pipe" def doit(self, *args, **kwargs): detailer_pipe = kwargs['detailer_pipe'] wildcard = kwargs['wildcard'] model = kwargs.get('model', None) clip = kwargs.get('clip', None) vae = kwargs.get('vae', None) positive = kwargs.get('positive', None) negative = kwargs.get('negative', None) bbox_detector = kwargs.get('bbox_detector', None) sam_model = kwargs.get('sam_model', None) segm_detector = kwargs.get('segm_detector', None) detailer_hook = kwargs.get('detailer_hook', None) refiner_model = kwargs.get('refiner_model', None) refiner_clip = kwargs.get('refiner_clip', None) refiner_positive = kwargs.get('refiner_positive', None) refiner_negative = kwargs.get('refiner_negative', None) res_model, res_clip, res_vae, res_positive, res_negative, res_wildcard, res_bbox_detector, res_segm_detector, res_sam_model, res_detailer_hook, res_refiner_model, res_refiner_clip, res_refiner_positive, res_refiner_negative = detailer_pipe if model is not None: res_model = model if clip is not None: res_clip = clip if vae is not None: res_vae = vae if positive is not None: res_positive = positive if negative is not None: res_negative = negative if bbox_detector is not None: res_bbox_detector = bbox_detector if segm_detector is not None: res_segm_detector = segm_detector if wildcard != "": res_wildcard = wildcard if sam_model is not None: res_sam_model = sam_model if detailer_hook is not None: res_detailer_hook = detailer_hook if refiner_model is not None: res_refiner_model = refiner_model if refiner_clip is not None: res_refiner_clip = refiner_clip if refiner_positive is not None: res_refiner_positive = refiner_positive if refiner_negative is not None: res_refiner_negative = refiner_negative pipe = (res_model, res_clip, res_vae, res_positive, res_negative, res_wildcard, res_bbox_detector, res_segm_detector, res_sam_model, res_detailer_hook, res_refiner_model, res_refiner_clip, res_refiner_positive, res_refiner_negative) return (pipe, ) class EditDetailerPipeSDXL(EditDetailerPipe): @classmethod def INPUT_TYPES(s): return { "required": { "detailer_pipe": ("DETAILER_PIPE",), "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), "Select to add Wildcard": (["Select the Wildcard to add to the text"],), }, "optional": { "model": ("MODEL",), "clip": ("CLIP",), "vae": ("VAE",), "positive": ("CONDITIONING",), "negative": ("CONDITIONING",), "refiner_model": ("MODEL",), "refiner_clip": ("CLIP",), "refiner_positive": ("CONDITIONING",), "refiner_negative": ("CONDITIONING",), "bbox_detector": ("BBOX_DETECTOR",), "sam_model": ("SAM_MODEL",), "segm_detector": ("SEGM_DETECTOR",), "detailer_hook": ("DETAILER_HOOK",), }, }