""" @author: Dr.Lt.Data @title: Impact Pack @nickname: Impact Pack @description: This extension offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler. """ import shutil import folder_paths import os import sys comfy_path = os.path.dirname(folder_paths.__file__) impact_path = os.path.join(os.path.dirname(__file__)) subpack_path = os.path.join(os.path.dirname(__file__), "impact_subpack") modules_path = os.path.join(os.path.dirname(__file__), "modules") wildcards_path = os.path.join(os.path.dirname(__file__), "wildcards") custom_wildcards_path = os.path.join(os.path.dirname(__file__), "custom_wildcards") sys.path.append(modules_path) import impact.config import impact.sample_error_enhancer print(f"### Loading: ComfyUI-Impact-Pack ({impact.config.version})") def do_install(): import importlib spec = importlib.util.spec_from_file_location('impact_install', os.path.join(os.path.dirname(__file__), 'install.py')) impact_install = importlib.util.module_from_spec(spec) spec.loader.exec_module(impact_install) # ensure dependency if impact.config.get_config()['dependency_version'] < impact.config.dependency_version or not os.path.exists(subpack_path): print(f"## ComfyUI-Impact-Pack: Updating dependencies") do_install() sys.path.append(subpack_path) # Core # recheck dependencies for colab try: import folder_paths import torch import cv2 import numpy as np import comfy.samplers import comfy.sd import warnings from PIL import Image, ImageFilter from skimage.measure import label, regionprops from collections import namedtuple import piexif if not impact.config.get_config()['mmdet_skip']: import mmcv from mmdet.apis import (inference_detector, init_detector) from mmdet.evaluation import get_classes except: import importlib print("### ComfyUI-Impact-Pack: Reinstall dependencies (several dependencies are missing.)") do_install() import impact.impact_server # to load server api def setup_js(): import nodes js_dest_path = os.path.join(comfy_path, "web", "extensions", "impact-pack") if hasattr(nodes, "EXTENSION_WEB_DIRS"): if os.path.exists(js_dest_path): shutil.rmtree(js_dest_path) else: print(f"[WARN] ComfyUI-Impact-Pack: Your ComfyUI version is outdated. Please update to the latest version.") # setup js if not os.path.exists(js_dest_path): os.makedirs(js_dest_path) js_src_path = os.path.join(impact_path, "js", "impact-pack.js") shutil.copy(js_src_path, js_dest_path) js_src_path = os.path.join(impact_path, "js", "impact-sam-editor.js") shutil.copy(js_src_path, js_dest_path) js_src_path = os.path.join(impact_path, "js", "comboBoolMigration.js") shutil.copy(js_src_path, js_dest_path) setup_js() from impact.impact_pack import * from impact.detectors import * from impact.pipe import * from impact.logics import * from impact.util_nodes import * from impact.segs_nodes import * from impact.special_samplers import * impact.wildcards.read_wildcard_dict(wildcards_path) impact.wildcards.read_wildcard_dict(custom_wildcards_path) NODE_CLASS_MAPPINGS = { "SAMLoader": SAMLoader, "CLIPSegDetectorProvider": CLIPSegDetectorProvider, "ONNXDetectorProvider": ONNXDetectorProvider, "BitwiseAndMaskForEach": BitwiseAndMaskForEach, "SubtractMaskForEach": SubtractMaskForEach, "DetailerForEach": DetailerForEach, "DetailerForEachDebug": DetailerForEachTest, "DetailerForEachPipe": DetailerForEachPipe, "DetailerForEachDebugPipe": DetailerForEachTestPipe, "SAMDetectorCombined": SAMDetectorCombined, "SAMDetectorSegmented": SAMDetectorSegmented, "FaceDetailer": FaceDetailer, "FaceDetailerPipe": FaceDetailerPipe, "ToDetailerPipe": ToDetailerPipe, "ToDetailerPipeSDXL": ToDetailerPipeSDXL, "FromDetailerPipe": FromDetailerPipe, "FromDetailerPipe_v2": FromDetailerPipe_v2, "FromDetailerPipeSDXL": FromDetailerPipe_SDXL, "ToBasicPipe": ToBasicPipe, "FromBasicPipe": FromBasicPipe, "FromBasicPipe_v2": FromBasicPipe_v2, "BasicPipeToDetailerPipe": BasicPipeToDetailerPipe, "BasicPipeToDetailerPipeSDXL": BasicPipeToDetailerPipeSDXL, "DetailerPipeToBasicPipe": DetailerPipeToBasicPipe, "EditBasicPipe": EditBasicPipe, "EditDetailerPipe": EditDetailerPipe, "EditDetailerPipeSDXL": EditDetailerPipeSDXL, "LatentPixelScale": LatentPixelScale, "PixelKSampleUpscalerProvider": PixelKSampleUpscalerProvider, "PixelKSampleUpscalerProviderPipe": PixelKSampleUpscalerProviderPipe, "IterativeLatentUpscale": IterativeLatentUpscale, "IterativeImageUpscale": IterativeImageUpscale, "PixelTiledKSampleUpscalerProvider": PixelTiledKSampleUpscalerProvider, "PixelTiledKSampleUpscalerProviderPipe": PixelTiledKSampleUpscalerProviderPipe, "TwoSamplersForMaskUpscalerProvider": TwoSamplersForMaskUpscalerProvider, "TwoSamplersForMaskUpscalerProviderPipe": TwoSamplersForMaskUpscalerProviderPipe, "PixelKSampleHookCombine": PixelKSampleHookCombine, "DenoiseScheduleHookProvider": DenoiseScheduleHookProvider, "CfgScheduleHookProvider": CfgScheduleHookProvider, "NoiseInjectionHookProvider": NoiseInjectionHookProvider, "NoiseInjectionDetailerHookProvider": NoiseInjectionDetailerHookProvider, "BitwiseAndMask": BitwiseAndMask, "SubtractMask": SubtractMask, "AddMask": AddMask, "Segs & Mask": SegsBitwiseAndMask, "Segs & Mask ForEach": SegsBitwiseAndMaskForEach, "EmptySegs": EmptySEGS, "MediaPipeFaceMeshToSEGS": MediaPipeFaceMeshToSEGS, "MaskToSEGS": MaskToSEGS, "ToBinaryMask": ToBinaryMask, "MasksToMaskList": MasksToMaskList, "MaskListToMaskBatch": MaskListToMaskBatch, "ImageListToImageBatch": ImageListToMaskBatch, "BboxDetectorSEGS": BboxDetectorForEach, "SegmDetectorSEGS": SegmDetectorForEach, "ONNXDetectorSEGS": BboxDetectorForEach, "ImpactSimpleDetectorSEGS": SimpleDetectorForEach, "ImpactSimpleDetectorSEGSPipe": SimpleDetectorForEachPipe, "ImpactControlNetApplySEGS": ControlNetApplySEGS, "ImpactDecomposeSEGS": DecomposeSEGS, "ImpactAssembleSEGS": AssembleSEGS, "ImpactFrom_SEG_ELT": From_SEG_ELT, "ImpactEdit_SEG_ELT": Edit_SEG_ELT, "ImpactDilate_Mask_SEG_ELT": Dilate_SEG_ELT, "ImpactDilateMask": DilateMask, "ImpactScaleBy_BBOX_SEG_ELT": SEG_ELT_BBOX_ScaleBy, "BboxDetectorCombined_v2": BboxDetectorCombined, "SegmDetectorCombined_v2": SegmDetectorCombined, "SegsToCombinedMask": SegsToCombinedMask, "KSamplerProvider": KSamplerProvider, "TwoSamplersForMask": TwoSamplersForMask, "TiledKSamplerProvider": TiledKSamplerProvider, "KSamplerAdvancedProvider": KSamplerAdvancedProvider, "TwoAdvancedSamplersForMask": TwoAdvancedSamplersForMask, "PreviewBridge": PreviewBridge, "ImageSender": ImageSender, "ImageReceiver": ImageReceiver, "LatentSender": LatentSender, "LatentReceiver": LatentReceiver, "ImageMaskSwitch": ImageMaskSwitch, "LatentSwitch": GeneralSwitch, "SEGSSwitch": GeneralSwitch, "ImpactSwitch": GeneralSwitch, "ImpactInversedSwitch": GeneralInversedSwitch, # "SaveConditioning": SaveConditioning, # "LoadConditioning": LoadConditioning, "ImpactWildcardProcessor": ImpactWildcardProcessor, "ImpactWildcardEncode": ImpactWildcardEncode, "SEGSDetailer": SEGSDetailer, "SEGSPaste": SEGSPaste, "SEGSPreview": SEGSPreview, "SEGSToImageList": SEGSToImageList, "ImpactSEGSToMaskList": SEGSToMaskList, "ImpactSEGSToMaskBatch": SEGSToMaskBatch, "ImpactSEGSConcat": SEGSConcat, "ImpactSEGSPicker": SEGSPicker, "ImpactKSamplerBasicPipe": KSamplerBasicPipe, "ImpactKSamplerAdvancedBasicPipe": KSamplerAdvancedBasicPipe, "ReencodeLatent": ReencodeLatent, "ReencodeLatentPipe": ReencodeLatentPipe, "ImpactImageBatchToImageList": ImageBatchToImageList, "ImpactMakeImageList": MakeImageList, "ImpactMakeImageBatch": MakeImageBatch, "RegionalSampler": RegionalSampler, "RegionalSamplerAdvanced": RegionalSamplerAdvanced, "CombineRegionalPrompts": CombineRegionalPrompts, "RegionalPrompt": RegionalPrompt, "ImpactCombineConditionings": CombineConditionings, "ImpactSEGSLabelFilter": SEGSLabelFilter, "ImpactSEGSRangeFilter": SEGSRangeFilter, "ImpactSEGSOrderedFilter": SEGSOrderedFilter, "ImpactCompare": ImpactCompare, "ImpactConditionalBranch": ImpactConditionalBranch, "ImpactInt": ImpactInt, # "ImpactFloat": ImpactFloat, "ImpactValueSender": ImpactValueSender, "ImpactValueReceiver": ImpactValueReceiver, "ImpactImageInfo": ImpactImageInfo, "ImpactMinMax": ImpactMinMax, "ImpactNeg": ImpactNeg, "ImpactConditionalStopIteration": ImpactConditionalStopIteration, "ImpactStringSelector": StringSelector, "RemoveNoiseMask": RemoveNoiseMask, "ImpactLogger": ImpactLogger, "ImpactDummyInput": ImpactDummyInput, "ImpactQueueTrigger": ImpactQueueTrigger, "ImpactSetWidgetValue": ImpactSetWidgetValue, "ImpactNodeSetMuteState": ImpactNodeSetMuteState, "ImpactControlBridge": ImpactControlBridge, } NODE_DISPLAY_NAME_MAPPINGS = { "BboxDetectorSEGS": "BBOX Detector (SEGS)", "SegmDetectorSEGS": "SEGM Detector (SEGS)", "ONNXDetectorSEGS": "ONNX Detector (SEGS/legacy) - use BBOXDetector", "ImpactSimpleDetectorSEGS": "Simple Detector (SEGS)", "ImpactSimpleDetectorSEGSPipe": "Simple Detector (SEGS/pipe)", "ImpactControlNetApplySEGS": "ControlNetApply (SEGS)", "BboxDetectorCombined_v2": "BBOX Detector (combined)", "SegmDetectorCombined_v2": "SEGM Detector (combined)", "SegsToCombinedMask": "SEGS to MASK (combined)", "MediaPipeFaceMeshToSEGS": "MediaPipe FaceMesh to SEGS", "MaskToSEGS": "MASK to SEGS", "BitwiseAndMaskForEach": "Bitwise(SEGS & SEGS)", "SubtractMaskForEach": "Bitwise(SEGS - SEGS)", "Segs & Mask": "Bitwise(SEGS & MASK)", "Segs & Mask ForEach": "Bitwise(SEGS & MASKS ForEach)", "BitwiseAndMask": "Bitwise(MASK & MASK)", "SubtractMask": "Bitwise(MASK - MASK)", "AddMask": "Bitwise(MASK + MASK)", "DetailerForEach": "Detailer (SEGS)", "DetailerForEachPipe": "Detailer (SEGS/pipe)", "DetailerForEachDebug": "DetailerDebug (SEGS)", "DetailerForEachDebugPipe": "DetailerDebug (SEGS/pipe)", "SAMDetectorCombined": "SAMDetector (combined)", "SAMDetectorSegmented": "SAMDetector (segmented)", "FaceDetailerPipe": "FaceDetailer (pipe)", "FromDetailerPipeSDXL": "FromDetailer (SDXL/pipe)", "BasicPipeToDetailerPipeSDXL": "BasicPipe -> DetailerPipe (SDXL)", "EditDetailerPipeSDXL": "Edit DetailerPipe (SDXL)", "BasicPipeToDetailerPipe": "BasicPipe -> DetailerPipe", "DetailerPipeToBasicPipe": "DetailerPipe -> BasicPipe", "EditBasicPipe": "Edit BasicPipe", "EditDetailerPipe": "Edit DetailerPipe", "LatentPixelScale": "Latent Scale (on Pixel Space)", "IterativeLatentUpscale": "Iterative Upscale (Latent)", "IterativeImageUpscale": "Iterative Upscale (Image)", "TwoSamplersForMaskUpscalerProvider": "TwoSamplersForMask Upscaler Provider", "TwoSamplersForMaskUpscalerProviderPipe": "TwoSamplersForMask Upscaler Provider (pipe)", "ReencodeLatent": "Reencode Latent", "ReencodeLatentPipe": "Reencode Latent (pipe)", "ImpactKSamplerBasicPipe": "KSampler (pipe)", "ImpactKSamplerAdvancedBasicPipe": "KSampler (Advanced/pipe)", "ImpactSEGSLabelFilter": "SEGS Filter (label)", "ImpactSEGSRangeFilter": "SEGS Filter (range)", "ImpactSEGSOrderedFilter": "SEGS Filter (ordered)", "ImpactSEGSConcat": "SEGS Concat", "ImpactSEGSToMaskList": "SEGS to Mask List", "ImpactSEGSToMaskBatch": "SEGS to Mask Batch", "ImpactSEGSPicker": "Picker (SEGS)", "ImpactDecomposeSEGS": "Decompose (SEGS)", "ImpactAssembleSEGS": "Assemble (SEGS)", "ImpactFrom_SEG_ELT": "From SEG_ELT", "ImpactEdit_SEG_ELT": "Edit SEG_ELT", "ImpactDilate_Mask_SEG_ELT": "Dilate Mask (SEG_ELT)", "ImpactScaleBy_BBOX_SEG_ELT": "ScaleBy BBOX (SEG_ELT)", "ImpactDilateMask": "Dilate Mask", "PreviewBridge": "Preview Bridge", "ImageSender": "Image Sender", "ImageReceiver": "Image Receiver", "ImageMaskSwitch": "Switch (images, mask)", "ImpactSwitch": "Switch (Any)", "ImpactInversedSwitch": "Inversed Switch (Any)", "MasksToMaskList": "Masks to Mask List", "MaskListToMaskBatch": "Mask List to Masks", "ImpactImageBatchToImageList": "Image batch to Image List", "ImageListToImageBatch": "Image List to Image Batch", "ImpactMakeImageList": "Make Image List", "ImpactMakeImageBatch": "Make Image Batch", "ImpactStringSelector": "String Selector", "RemoveNoiseMask": "Remove Noise Mask", "ImpactCombineConditionings": "Combine Conditionings", "ImpactQueueTrigger": "Queue Trigger", "ImpactSetWidgetValue": "Set Widget Value", "ImpactNodeSetMuteState": "Set Mute State", "ImpactControlBridge": "Control Bridge", "LatentSwitch": "Switch (latent/legacy)", "SEGSSwitch": "Switch (SEGS/legacy)" } if not impact.config.get_config()['mmdet_skip']: from impact.mmdet_nodes import * import impact.legacy_nodes NODE_CLASS_MAPPINGS.update({ "MMDetDetectorProvider": MMDetDetectorProvider, "MMDetLoader": impact.legacy_nodes.MMDetLoader, "MaskPainter": impact.legacy_nodes.MaskPainter, "SegsMaskCombine": impact.legacy_nodes.SegsMaskCombine, "BboxDetectorForEach": impact.legacy_nodes.BboxDetectorForEach, "SegmDetectorForEach": impact.legacy_nodes.SegmDetectorForEach, "BboxDetectorCombined": impact.legacy_nodes.BboxDetectorCombined, "SegmDetectorCombined": impact.legacy_nodes.SegmDetectorCombined, }) NODE_DISPLAY_NAME_MAPPINGS.update({ "MaskPainter": "MaskPainter (Deprecated)", "MMDetLoader": "MMDetLoader (Legacy)", "SegsMaskCombine": "SegsMaskCombine (Legacy)", "BboxDetectorForEach": "BboxDetectorForEach (Legacy)", "SegmDetectorForEach": "SegmDetectorForEach (Legacy)", "BboxDetectorCombined": "BboxDetectorCombined (Legacy)", "SegmDetectorCombined": "SegmDetectorCombined (Legacy)", }) try: import impact.subpack_nodes NODE_CLASS_MAPPINGS.update(impact.subpack_nodes.NODE_CLASS_MAPPINGS) NODE_DISPLAY_NAME_MAPPINGS.update(impact.subpack_nodes.NODE_DISPLAY_NAME_MAPPINGS) except: pass WEB_DIRECTORY = "js" __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']