Spaces:
Running
on
Zero
Running
on
Zero
""" | |
@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 | |
import traceback | |
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") | |
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 not os.path.exists(os.path.join(subpack_path, ".git")) and os.path.exists(subpack_path): | |
print(f"### CompfyUI-Impact-Pack: corrupted subpack detected.") | |
shutil.rmtree(subpack_path) | |
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 [{impact.config.get_config()['dependency_version']} -> {impact.config.dependency_version}]") | |
do_install() | |
sys.path.append(subpack_path) | |
# Core | |
# recheck dependencies for colab | |
try: | |
import impact.subpack_nodes # This import must be done before cv2. | |
import folder_paths | |
import torch | |
import cv2 | |
from cv2 import setNumThreads | |
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 | |
from .modules.impact.impact_pack import * | |
from .modules.impact.detectors import * | |
from .modules.impact.pipe import * | |
from .modules.impact.logics import * | |
from .modules.impact.util_nodes import * | |
from .modules.impact.segs_nodes import * | |
from .modules.impact.special_samplers import * | |
from .modules.impact.hf_nodes import * | |
from .modules.impact.bridge_nodes import * | |
from .modules.impact.hook_nodes import * | |
from .modules.impact.animatediff_nodes import * | |
from .modules.impact.segs_upscaler import * | |
import threading | |
threading.Thread(target=impact.wildcards.wildcard_load).start() | |
NODE_CLASS_MAPPINGS = { | |
"SAMLoader": SAMLoader, | |
"CLIPSegDetectorProvider": CLIPSegDetectorProvider, | |
"ONNXDetectorProvider": ONNXDetectorProvider, | |
"BitwiseAndMaskForEach": BitwiseAndMaskForEach, | |
"SubtractMaskForEach": SubtractMaskForEach, | |
"DetailerForEach": DetailerForEach, | |
"DetailerForEachDebug": DetailerForEachTest, | |
"DetailerForEachPipe": DetailerForEachPipe, | |
"DetailerForEachDebugPipe": DetailerForEachTestPipe, | |
"DetailerForEachPipeForAnimateDiff": DetailerForEachPipeForAnimateDiff, | |
"SAMDetectorCombined": SAMDetectorCombined, | |
"SAMDetectorSegmented": SAMDetectorSegmented, | |
"FaceDetailer": FaceDetailer, | |
"FaceDetailerPipe": FaceDetailerPipe, | |
"MaskDetailerPipe": MaskDetailerPipe, | |
"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, | |
"StepsScheduleHookProvider": StepsScheduleHookProvider, | |
"CfgScheduleHookProvider": CfgScheduleHookProvider, | |
"NoiseInjectionHookProvider": NoiseInjectionHookProvider, | |
"UnsamplerHookProvider": UnsamplerHookProvider, | |
"CoreMLDetailerHookProvider": CoreMLDetailerHookProvider, | |
"PreviewDetailerHookProvider": PreviewDetailerHookProvider, | |
"DetailerHookCombine": DetailerHookCombine, | |
"NoiseInjectionDetailerHookProvider": NoiseInjectionDetailerHookProvider, | |
"UnsamplerDetailerHookProvider": UnsamplerDetailerHookProvider, | |
"DenoiseSchedulerDetailerHookProvider": DenoiseSchedulerDetailerHookProvider, | |
"SEGSOrderedFilterDetailerHookProvider": SEGSOrderedFilterDetailerHookProvider, | |
"SEGSRangeFilterDetailerHookProvider": SEGSRangeFilterDetailerHookProvider, | |
"SEGSLabelFilterDetailerHookProvider": SEGSLabelFilterDetailerHookProvider, | |
"VariationNoiseDetailerHookProvider": VariationNoiseDetailerHookProvider, | |
# "CustomNoiseDetailerHookProvider": CustomNoiseDetailerHookProvider, | |
"BitwiseAndMask": BitwiseAndMask, | |
"SubtractMask": SubtractMask, | |
"AddMask": AddMask, | |
"ImpactSegsAndMask": SegsBitwiseAndMask, | |
"ImpactSegsAndMaskForEach": SegsBitwiseAndMaskForEach, | |
"EmptySegs": EmptySEGS, | |
"MediaPipeFaceMeshToSEGS": MediaPipeFaceMeshToSEGS, | |
"MaskToSEGS": MaskToSEGS, | |
"MaskToSEGS_for_AnimateDiff": MaskToSEGS_for_AnimateDiff, | |
"ToBinaryMask": ToBinaryMask, | |
"MasksToMaskList": MasksToMaskList, | |
"MaskListToMaskBatch": MaskListToMaskBatch, | |
"ImageListToImageBatch": ImageListToImageBatch, | |
"SetDefaultImageForSEGS": DefaultImageForSEGS, | |
"RemoveImageFromSEGS": RemoveImageFromSEGS, | |
"BboxDetectorSEGS": BboxDetectorForEach, | |
"SegmDetectorSEGS": SegmDetectorForEach, | |
"ONNXDetectorSEGS": BboxDetectorForEach, | |
"ImpactSimpleDetectorSEGS_for_AD": SimpleDetectorForAnimateDiff, | |
"ImpactSimpleDetectorSEGS": SimpleDetectorForEach, | |
"ImpactSimpleDetectorSEGSPipe": SimpleDetectorForEachPipe, | |
"ImpactControlNetApplySEGS": ControlNetApplySEGS, | |
"ImpactControlNetApplyAdvancedSEGS": ControlNetApplyAdvancedSEGS, | |
"ImpactControlNetClearSEGS": ControlNetClearSEGS, | |
"ImpactIPAdapterApplySEGS": IPAdapterApplySEGS, | |
"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, | |
"ImpactGaussianBlurMask": GaussianBlurMask, | |
"ImpactDilateMaskInSEGS": DilateMaskInSEGS, | |
"ImpactGaussianBlurMaskInSEGS": GaussianBlurMaskInSEGS, | |
"ImpactScaleBy_BBOX_SEG_ELT": SEG_ELT_BBOX_ScaleBy, | |
"ImpactFrom_SEG_ELT_bbox": From_SEG_ELT_bbox, | |
"ImpactFrom_SEG_ELT_crop_region": From_SEG_ELT_crop_region, | |
"ImpactCount_Elts_in_SEGS": Count_Elts_in_SEGS, | |
"BboxDetectorCombined_v2": BboxDetectorCombined, | |
"SegmDetectorCombined_v2": SegmDetectorCombined, | |
"SegsToCombinedMask": SegsToCombinedMask, | |
"KSamplerProvider": KSamplerProvider, | |
"TwoSamplersForMask": TwoSamplersForMask, | |
"TiledKSamplerProvider": TiledKSamplerProvider, | |
"KSamplerAdvancedProvider": KSamplerAdvancedProvider, | |
"TwoAdvancedSamplersForMask": TwoAdvancedSamplersForMask, | |
"ImpactNegativeConditioningPlaceholder": NegativeConditioningPlaceholder, | |
"PreviewBridge": PreviewBridge, | |
"PreviewBridgeLatent": PreviewBridgeLatent, | |
"ImageSender": ImageSender, | |
"ImageReceiver": ImageReceiver, | |
"LatentSender": LatentSender, | |
"LatentReceiver": LatentReceiver, | |
"ImageMaskSwitch": ImageMaskSwitch, | |
"LatentSwitch": GeneralSwitch, | |
"SEGSSwitch": GeneralSwitch, | |
"ImpactSwitch": GeneralSwitch, | |
"ImpactInversedSwitch": GeneralInversedSwitch, | |
"ImpactWildcardProcessor": ImpactWildcardProcessor, | |
"ImpactWildcardEncode": ImpactWildcardEncode, | |
"SEGSUpscaler": SEGSUpscaler, | |
"SEGSUpscalerPipe": SEGSUpscalerPipe, | |
"SEGSDetailer": SEGSDetailer, | |
"SEGSPaste": SEGSPaste, | |
"SEGSPreview": SEGSPreview, | |
"SEGSPreviewCNet": SEGSPreviewCNet, | |
"SEGSToImageList": SEGSToImageList, | |
"ImpactSEGSToMaskList": SEGSToMaskList, | |
"ImpactSEGSToMaskBatch": SEGSToMaskBatch, | |
"ImpactSEGSConcat": SEGSConcat, | |
"ImpactSEGSPicker": SEGSPicker, | |
"ImpactMakeTileSEGS": MakeTileSEGS, | |
"SEGSDetailerForAnimateDiff": SEGSDetailerForAnimateDiff, | |
"ImpactKSamplerBasicPipe": KSamplerBasicPipe, | |
"ImpactKSamplerAdvancedBasicPipe": KSamplerAdvancedBasicPipe, | |
"ReencodeLatent": ReencodeLatent, | |
"ReencodeLatentPipe": ReencodeLatentPipe, | |
"ImpactImageBatchToImageList": ImageBatchToImageList, | |
"ImpactMakeImageList": MakeImageList, | |
"ImpactMakeImageBatch": MakeImageBatch, | |
"RegionalSampler": RegionalSampler, | |
"RegionalSamplerAdvanced": RegionalSamplerAdvanced, | |
"CombineRegionalPrompts": CombineRegionalPrompts, | |
"RegionalPrompt": RegionalPrompt, | |
"ImpactCombineConditionings": CombineConditionings, | |
"ImpactConcatConditionings": ConcatConditionings, | |
"ImpactSEGSLabelAssign": SEGSLabelAssign, | |
"ImpactSEGSLabelFilter": SEGSLabelFilter, | |
"ImpactSEGSRangeFilter": SEGSRangeFilter, | |
"ImpactSEGSOrderedFilter": SEGSOrderedFilter, | |
"ImpactCompare": ImpactCompare, | |
"ImpactConditionalBranch": ImpactConditionalBranch, | |
"ImpactConditionalBranchSelMode": ImpactConditionalBranchSelMode, | |
"ImpactIfNone": ImpactIfNone, | |
"ImpactConvertDataType": ImpactConvertDataType, | |
"ImpactLogicalOperators": ImpactLogicalOperators, | |
"ImpactInt": ImpactInt, | |
"ImpactFloat": ImpactFloat, | |
"ImpactValueSender": ImpactValueSender, | |
"ImpactValueReceiver": ImpactValueReceiver, | |
"ImpactImageInfo": ImpactImageInfo, | |
"ImpactLatentInfo": ImpactLatentInfo, | |
"ImpactMinMax": ImpactMinMax, | |
"ImpactNeg": ImpactNeg, | |
"ImpactConditionalStopIteration": ImpactConditionalStopIteration, | |
"ImpactStringSelector": StringSelector, | |
"StringListToString": StringListToString, | |
"WildcardPromptFromString": WildcardPromptFromString, | |
"RemoveNoiseMask": RemoveNoiseMask, | |
"ImpactLogger": ImpactLogger, | |
"ImpactDummyInput": ImpactDummyInput, | |
"ImpactQueueTrigger": ImpactQueueTrigger, | |
"ImpactQueueTriggerCountdown": ImpactQueueTriggerCountdown, | |
"ImpactSetWidgetValue": ImpactSetWidgetValue, | |
"ImpactNodeSetMuteState": ImpactNodeSetMuteState, | |
"ImpactControlBridge": ImpactControlBridge, | |
"ImpactIsNotEmptySEGS": ImpactNotEmptySEGS, | |
"ImpactSleep": ImpactSleep, | |
"ImpactRemoteBoolean": ImpactRemoteBoolean, | |
"ImpactRemoteInt": ImpactRemoteInt, | |
"ImpactHFTransformersClassifierProvider": HF_TransformersClassifierProvider, | |
"ImpactSEGSClassify": SEGS_Classify, | |
"ImpactSchedulerAdapter": ImpactSchedulerAdapter, | |
"GITSSchedulerFuncProvider": GITSSchedulerFuncProvider | |
} | |
NODE_DISPLAY_NAME_MAPPINGS = { | |
"SAMLoader": "SAMLoader (Impact)", | |
"BboxDetectorSEGS": "BBOX Detector (SEGS)", | |
"SegmDetectorSEGS": "SEGM Detector (SEGS)", | |
"ONNXDetectorSEGS": "ONNX Detector (SEGS/legacy) - use BBOXDetector", | |
"ImpactSimpleDetectorSEGS_for_AD": "Simple Detector for AnimateDiff (SEGS)", | |
"ImpactSimpleDetectorSEGS": "Simple Detector (SEGS)", | |
"ImpactSimpleDetectorSEGSPipe": "Simple Detector (SEGS/pipe)", | |
"ImpactControlNetApplySEGS": "ControlNetApply (SEGS)", | |
"ImpactControlNetApplyAdvancedSEGS": "ControlNetApplyAdvanced (SEGS)", | |
"ImpactIPAdapterApplySEGS": "IPAdapterApply (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", | |
"MaskToSEGS_for_AnimateDiff": "MASK to SEGS for AnimateDiff", | |
"BitwiseAndMaskForEach": "Pixelwise(SEGS & SEGS)", | |
"SubtractMaskForEach": "Pixelwise(SEGS - SEGS)", | |
"ImpactSegsAndMask": "Pixelwise(SEGS & MASK)", | |
"ImpactSegsAndMaskForEach": "Pixelwise(SEGS & MASKS ForEach)", | |
"BitwiseAndMask": "Pixelwise(MASK & MASK)", | |
"SubtractMask": "Pixelwise(MASK - MASK)", | |
"AddMask": "Pixelwise(MASK + MASK)", | |
"DetailerForEach": "Detailer (SEGS)", | |
"DetailerForEachPipe": "Detailer (SEGS/pipe)", | |
"DetailerForEachDebug": "DetailerDebug (SEGS)", | |
"DetailerForEachDebugPipe": "DetailerDebug (SEGS/pipe)", | |
"SEGSDetailerForAnimateDiff": "SEGSDetailer For AnimateDiff (SEGS/pipe)", | |
"DetailerForEachPipeForAnimateDiff": "Detailer For AnimateDiff (SEGS/pipe)", | |
"SEGSUpscaler": "Upscaler (SEGS)", | |
"SEGSUpscalerPipe": "Upscaler (SEGS/pipe)", | |
"SAMDetectorCombined": "SAMDetector (combined)", | |
"SAMDetectorSegmented": "SAMDetector (segmented)", | |
"FaceDetailerPipe": "FaceDetailer (pipe)", | |
"MaskDetailerPipe": "MaskDetailer (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/on Pixel Space)", | |
"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)", | |
"ImpactSEGSLabelAssign": "SEGS Assign (label)", | |
"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)", | |
"ImpactMakeTileSEGS": "Make Tile SEGS", | |
"ImpactDecomposeSEGS": "Decompose (SEGS)", | |
"ImpactAssembleSEGS": "Assemble (SEGS)", | |
"ImpactFrom_SEG_ELT": "From SEG_ELT", | |
"ImpactEdit_SEG_ELT": "Edit SEG_ELT", | |
"ImpactFrom_SEG_ELT_bbox": "From SEG_ELT bbox", | |
"ImpactFrom_SEG_ELT_crop_region": "From SEG_ELT crop_region", | |
"ImpactDilate_Mask_SEG_ELT": "Dilate Mask (SEG_ELT)", | |
"ImpactScaleBy_BBOX_SEG_ELT": "ScaleBy BBOX (SEG_ELT)", | |
"ImpactCount_Elts_in_SEGS": "Count Elts in SEGS", | |
"ImpactDilateMask": "Dilate Mask", | |
"ImpactGaussianBlurMask": "Gaussian Blur Mask", | |
"ImpactDilateMaskInSEGS": "Dilate Mask (SEGS)", | |
"ImpactGaussianBlurMaskInSEGS": "Gaussian Blur Mask (SEGS)", | |
"PreviewBridge": "Preview Bridge (Image)", | |
"PreviewBridgeLatent": "Preview Bridge (Latent)", | |
"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", | |
"StringListToString": "String List to String", | |
"WildcardPromptFromString": "Wildcard Prompt from String", | |
"ImpactIsNotEmptySEGS": "SEGS isn't Empty", | |
"SetDefaultImageForSEGS": "Set Default Image for SEGS", | |
"RemoveImageFromSEGS": "Remove Image from SEGS", | |
"RemoveNoiseMask": "Remove Noise Mask", | |
"ImpactCombineConditionings": "Combine Conditionings", | |
"ImpactConcatConditionings": "Concat Conditionings", | |
"ImpactQueueTrigger": "Queue Trigger", | |
"ImpactQueueTriggerCountdown": "Queue Trigger (Countdown)", | |
"ImpactSetWidgetValue": "Set Widget Value", | |
"ImpactNodeSetMuteState": "Set Mute State", | |
"ImpactControlBridge": "Control Bridge", | |
"ImpactSleep": "Sleep", | |
"ImpactRemoteBoolean": "Remote Boolean (on prompt)", | |
"ImpactRemoteInt": "Remote Int (on prompt)", | |
"ImpactHFTransformersClassifierProvider": "HF Transformers Classifier Provider", | |
"ImpactSEGSClassify": "SEGS Classify", | |
"LatentSwitch": "Switch (latent/legacy)", | |
"SEGSSwitch": "Switch (SEGS/legacy)", | |
"SEGSPreviewCNet": "SEGSPreview (CNET Image)", | |
"ImpactSchedulerAdapter": "Impact Scheduler Adapter", | |
"GITSSchedulerFuncProvider": "GITSScheduler Func Provider", | |
"ImpactNegativeConditioningPlaceholder": "Negative Cond Placeholder" | |
} | |
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 Exception as e: | |
print("### ComfyUI-Impact-Pack: (IMPORT FAILED) Subpack\n") | |
print(" The module at the `custom_nodes/ComfyUI-Impact-Pack/impact_subpack` path appears to be incomplete.") | |
print(" Recommended to delete the path and restart ComfyUI.") | |
print(" If the issue persists, please report it to https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues.") | |
print("\n---------------------------------") | |
traceback.print_exc() | |
print("---------------------------------\n") | |
# NOTE: Inject directly into EXTENSION_WEB_DIRS instead of WEB_DIRECTORY | |
# Provide the js path fixed as ComfyUI-Impact-Pack instead of the path name, making it available for external use | |
# WEB_DIRECTORY = "js" -- deprecated method | |
nodes.EXTENSION_WEB_DIRS["ComfyUI-Impact-Pack"] = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'js') | |
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] | |
try: | |
import cm_global | |
cm_global.register_extension('ComfyUI-Impact-Pack', | |
{'version': config.version_code, | |
'name': 'Impact Pack', | |
'nodes': set(NODE_CLASS_MAPPINGS.keys()), | |
'description': 'This extension provides inpainting functionality based on the detector and detailer, along with convenient workflow features like wildcards and logics.', }) | |
except: | |
pass | |