Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +614 -0
- custom_nodes/ComfyLiterals/.gitignore +2 -0
- custom_nodes/ComfyLiterals/README.md +2 -0
- custom_nodes/ComfyLiterals/__init__.py +21 -0
- custom_nodes/ComfyLiterals/__pycache__/__init__.cpython-312.pyc +0 -0
- custom_nodes/ComfyLiterals/__pycache__/nodes.cpython-312.pyc +0 -0
- custom_nodes/ComfyLiterals/__pycache__/operations.cpython-312.pyc +0 -0
- custom_nodes/ComfyLiterals/__pycache__/startup_utils.cpython-312.pyc +0 -0
- custom_nodes/ComfyLiterals/js/operation-node.js +83 -0
- custom_nodes/ComfyLiterals/nodes.py +136 -0
- custom_nodes/ComfyLiterals/operations.py +54 -0
- custom_nodes/ComfyLiterals/startup_utils.py +29 -0
- custom_nodes/ComfyMath/.gitignore +1 -0
- custom_nodes/ComfyMath/LICENSE +201 -0
- custom_nodes/ComfyMath/README.md +19 -0
- custom_nodes/ComfyMath/__init__.py +29 -0
- custom_nodes/ComfyMath/__pycache__/__init__.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/pyproject.toml +19 -0
- custom_nodes/ComfyMath/requirements.txt +1 -0
- custom_nodes/ComfyMath/src/comfymath/__init__.py +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/__init__.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/bool.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/control.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/convert.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/float.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/graphics.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/int.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/number.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/types.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/__pycache__/vec.cpython-312.pyc +0 -0
- custom_nodes/ComfyMath/src/comfymath/bool.py +59 -0
- custom_nodes/ComfyMath/src/comfymath/control.py +3 -0
- custom_nodes/ComfyMath/src/comfymath/convert.py +273 -0
- custom_nodes/ComfyMath/src/comfymath/float.py +159 -0
- custom_nodes/ComfyMath/src/comfymath/graphics.py +153 -0
- custom_nodes/ComfyMath/src/comfymath/int.py +129 -0
- custom_nodes/ComfyMath/src/comfymath/number.py +94 -0
- custom_nodes/ComfyMath/src/comfymath/py.typed +0 -0
- custom_nodes/ComfyMath/src/comfymath/types.py +16 -0
- custom_nodes/ComfyMath/src/comfymath/vec.py +500 -0
- custom_nodes/ComfyUI-Detail-Daemon/.gitignore +162 -0
- custom_nodes/ComfyUI-Detail-Daemon/DetailDaemonIcon.jpg +3 -0
- custom_nodes/ComfyUI-Detail-Daemon/LICENSE +21 -0
- custom_nodes/ComfyUI-Detail-Daemon/README.md +85 -0
- custom_nodes/ComfyUI-Detail-Daemon/__init__.py +20 -0
- custom_nodes/ComfyUI-Detail-Daemon/__pycache__/__init__.cpython-312.pyc +0 -0
- custom_nodes/ComfyUI-Detail-Daemon/__pycache__/detail_daemon_node.cpython-312.pyc +0 -0
- custom_nodes/ComfyUI-Detail-Daemon/detail_daemon_node.py +520 -0
- custom_nodes/ComfyUI-Detail-Daemon/example_workflows/Comparing Detailers.json +1646 -0
- custom_nodes/ComfyUI-Detail-Daemon/example_workflows/Flux img2img-DetailDaemon.json +848 -0
.gitattributes
CHANGED
|
@@ -35,3 +35,617 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
dev/ltx-2-3-22b-dev-Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text
|
| 37 |
ComfyUI-WanAnimatePreprocess/example.png filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
dev/ltx-2-3-22b-dev-Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text
|
| 37 |
ComfyUI-WanAnimatePreprocess/example.png filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
custom_nodes/ComfyUI-Detail-Daemon/DetailDaemonIcon.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
custom_nodes/ComfyUI-Easy-Use/py/modules/brushnet/__pycache__/unet_2d_blocks.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
custom_nodes/ComfyUI-Easy-Use/py/modules/kolors/chatglm/tokenizer/vocab.txt filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
custom_nodes/ComfyUI-Easy-Use/resources/OpenSans-Medium.ttf filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
custom_nodes/ComfyUI-Easy-Use/resources/wenquan.ttf filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
custom_nodes/ComfyUI-FSampler/article[[:space:]]fsampler.jpg filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
custom_nodes/ComfyUI-FSampler/nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
custom_nodes/ComfyUI-Frame-Interpolation/All_in_one_v1_3.png filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/anime0.png filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/anime1.png filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/bocchi0.jpg filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/bocchi1.jpg filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/real0.png filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/real1.png filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/rick/00003.png filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/rick/00004.png filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/rick/00005.png filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/violet0.png filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
custom_nodes/ComfyUI-Frame-Interpolation/demo_frames/violet1.png filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
custom_nodes/ComfyUI-Frame-Interpolation/example.png filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
custom_nodes/ComfyUI-Frame-Interpolation/interpolation_schedule.png filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
custom_nodes/ComfyUI-Frame-Interpolation/test_vfi_schedule.gif filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
custom_nodes/ComfyUI-Impact-Pack/example_workflows/2-MaskDetailer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
custom_nodes/ComfyUI-Impact-Pack/example_workflows/4-MakeTileSEGS-Upscale.jpg filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
custom_nodes/ComfyUI-Impact-Pack/example_workflows/5-prompt-per-tile.jpg filter=lfs diff=lfs merge=lfs -text
|
| 63 |
+
custom_nodes/ComfyUI-Impact-Pack/example_workflows/6-DetailerWildcard.jpg filter=lfs diff=lfs merge=lfs -text
|
| 64 |
+
custom_nodes/ComfyUI-Impact-Pack/modules/impact/__pycache__/core.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 65 |
+
custom_nodes/ComfyUI-Impact-Pack/modules/impact/__pycache__/impact_pack.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 66 |
+
custom_nodes/ComfyUI-Impact-Pack/troubleshooting/black1.png filter=lfs diff=lfs merge=lfs -text
|
| 67 |
+
custom_nodes/ComfyUI-Impact-Pack/troubleshooting/black2.png filter=lfs diff=lfs merge=lfs -text
|
| 68 |
+
custom_nodes/ComfyUI-KJNodes/docs/images/2024-04-03_20_49_29-ComfyUI.png filter=lfs diff=lfs merge=lfs -text
|
| 69 |
+
custom_nodes/ComfyUI-KJNodes/fonts/FreeMono.ttf filter=lfs diff=lfs merge=lfs -text
|
| 70 |
+
custom_nodes/ComfyUI-KJNodes/fonts/FreeMonoBoldOblique.otf filter=lfs diff=lfs merge=lfs -text
|
| 71 |
+
custom_nodes/ComfyUI-KJNodes/fonts/TTNorms-Black.otf filter=lfs diff=lfs merge=lfs -text
|
| 72 |
+
custom_nodes/ComfyUI-KJNodes/nodes/__pycache__/image_nodes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 73 |
+
custom_nodes/ComfyUI-KJNodes/nodes/__pycache__/ltxv_nodes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 74 |
+
custom_nodes/ComfyUI-KJNodes/nodes/__pycache__/model_optimization_nodes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 75 |
+
custom_nodes/ComfyUI-KJNodes/nodes/__pycache__/nodes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 76 |
+
custom_nodes/ComfyUI-LTXVideo/example_workflows/assets/base[[:space:]]model[[:space:]]image.png filter=lfs diff=lfs merge=lfs -text
|
| 77 |
+
custom_nodes/ComfyUI-LTXVideo/example_workflows/assets/buildings[[:space:]]ff.png filter=lfs diff=lfs merge=lfs -text
|
| 78 |
+
custom_nodes/ComfyUI-LTXVideo/example_workflows/assets/buildings.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 79 |
+
custom_nodes/ComfyUI-LTXVideo/example_workflows/assets/distilled[[:space:]]image.png filter=lfs diff=lfs merge=lfs -text
|
| 80 |
+
custom_nodes/ComfyUI-LTXVideo/example_workflows/assets/hdr_input_video.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 81 |
+
custom_nodes/ComfyUI-LTXVideo/example_workflows/assets/lipdub_input.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 82 |
+
custom_nodes/ComfyUI-LTXVideo/example_workflows/assets/motion_track_input.jpg filter=lfs diff=lfs merge=lfs -text
|
| 83 |
+
custom_nodes/ComfyUI-LTXVideo/gemma_configs/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
| 84 |
+
custom_nodes/ComfyUI-Manager/glob/__pycache__/manager_core.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 85 |
+
custom_nodes/ComfyUI-Manager/glob/__pycache__/manager_server.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 86 |
+
custom_nodes/ComfyUI-RMBG/__pycache__/AILab_ImageMaskTools.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 87 |
+
custom_nodes/ComfyUI-RMBG/example_workflows/V3.0.0_nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 88 |
+
custom_nodes/ComfyUI-RMBG/example_workflows/YOLO_Node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 89 |
+
custom_nodes/ComfyUI-RMBG/example_workflows/florence2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 90 |
+
custom_nodes/ComfyUI-RMBG/models/sam3/perflib/tests/assets/masks.tiff filter=lfs diff=lfs merge=lfs -text
|
| 91 |
+
custom_nodes/ComfyUI-RMBG/py/__pycache__/AILab_ImageMaskTools.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 92 |
+
custom_nodes/ComfyUI-TeaCache/assets/compare_flux.png filter=lfs diff=lfs merge=lfs -text
|
| 93 |
+
custom_nodes/ComfyUI-TeaCache/assets/compare_flux_kontext.png filter=lfs diff=lfs merge=lfs -text
|
| 94 |
+
custom_nodes/ComfyUI-TeaCache/assets/compare_hidream_i1_dev.png filter=lfs diff=lfs merge=lfs -text
|
| 95 |
+
custom_nodes/ComfyUI-TeaCache/assets/compare_hidream_i1_fast.png filter=lfs diff=lfs merge=lfs -text
|
| 96 |
+
custom_nodes/ComfyUI-TeaCache/assets/compare_hidream_i1_full.png filter=lfs diff=lfs merge=lfs -text
|
| 97 |
+
custom_nodes/ComfyUI-TeaCache/assets/compare_lumina_image_2.png filter=lfs diff=lfs merge=lfs -text
|
| 98 |
+
custom_nodes/ComfyUI-TeaCache/assets/compare_pulid_flux.png filter=lfs diff=lfs merge=lfs -text
|
| 99 |
+
custom_nodes/ComfyUI-TeaCache/assets/fennec_girl_sing.png filter=lfs diff=lfs merge=lfs -text
|
| 100 |
+
custom_nodes/ComfyUI-TeaCache/assets/flux_dev_example.png filter=lfs diff=lfs merge=lfs -text
|
| 101 |
+
custom_nodes/ComfyUI-VAE-Utils/assets/cover.png filter=lfs diff=lfs merge=lfs -text
|
| 102 |
+
custom_nodes/ComfyUI-VAE-Utils/workflow/workflow_wan_t2i_upscale2x.png filter=lfs diff=lfs merge=lfs -text
|
| 103 |
+
custom_nodes/ComfyUI-VibeVoice/example_workflows/VibeVoice_example.png filter=lfs diff=lfs merge=lfs -text
|
| 104 |
+
custom_nodes/ComfyUI-WanAnimatePreprocess/example.png filter=lfs diff=lfs merge=lfs -text
|
| 105 |
+
custom_nodes/ComfyUI-WanVideoWrapper/__pycache__/nodes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 106 |
+
custom_nodes/ComfyUI-WanVideoWrapper/__pycache__/nodes_model_loading.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 107 |
+
custom_nodes/ComfyUI-WanVideoWrapper/__pycache__/nodes_sampler.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 108 |
+
custom_nodes/ComfyUI-WanVideoWrapper/configs/T5_tokenizer/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
| 109 |
+
custom_nodes/ComfyUI-WanVideoWrapper/example_workflows/example_inputs/MTV_crafter_example_pose.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 110 |
+
custom_nodes/ComfyUI-WanVideoWrapper/example_workflows/example_inputs/env.png filter=lfs diff=lfs merge=lfs -text
|
| 111 |
+
custom_nodes/ComfyUI-WanVideoWrapper/example_workflows/example_inputs/human.png filter=lfs diff=lfs merge=lfs -text
|
| 112 |
+
custom_nodes/ComfyUI-WanVideoWrapper/example_workflows/example_inputs/jeep.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 113 |
+
custom_nodes/ComfyUI-WanVideoWrapper/example_workflows/example_inputs/wolf_interpolated.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 114 |
+
custom_nodes/ComfyUI-WanVideoWrapper/example_workflows/example_inputs/woman.jpg filter=lfs diff=lfs merge=lfs -text
|
| 115 |
+
custom_nodes/ComfyUI-WanVideoWrapper/example_workflows/example_inputs/woman.wav filter=lfs diff=lfs merge=lfs -text
|
| 116 |
+
custom_nodes/ComfyUI-WanVideoWrapper/wanvideo/modules/__pycache__/model.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 117 |
+
custom_nodes/ComfyUI_Comfyroll_CustomNodes/fonts/AlumniSansCollegiateOne-Regular.ttf filter=lfs diff=lfs merge=lfs -text
|
| 118 |
+
custom_nodes/ComfyUI_Comfyroll_CustomNodes/fonts/Caveat-VariableFont_wght.ttf filter=lfs diff=lfs merge=lfs -text
|
| 119 |
+
custom_nodes/ComfyUI_Comfyroll_CustomNodes/fonts/NotoSansArabic-Regular.ttf filter=lfs diff=lfs merge=lfs -text
|
| 120 |
+
custom_nodes/ComfyUI_Comfyroll_CustomNodes/fonts/Roboto-Regular.ttf filter=lfs diff=lfs merge=lfs -text
|
| 121 |
+
custom_nodes/ComfyUI_Comfyroll_CustomNodes/fonts/YoungSerif-Regular.ttf filter=lfs diff=lfs merge=lfs -text
|
| 122 |
+
custom_nodes/ComfyUI_Comfyroll_CustomNodes/fonts/comic.ttf filter=lfs diff=lfs merge=lfs -text
|
| 123 |
+
custom_nodes/ComfyUI_Comfyroll_CustomNodes/fonts/impact.ttf filter=lfs diff=lfs merge=lfs -text
|
| 124 |
+
custom_nodes/ComfyUI_JPS-Nodes/__pycache__/jps_nodes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 125 |
+
custom_nodes/ComfyUI_LayerStyle/font/Alibaba-PuHuiTi-Heavy.ttf filter=lfs diff=lfs merge=lfs -text
|
| 126 |
+
custom_nodes/ComfyUI_LayerStyle/image/add_grain_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 127 |
+
custom_nodes/ComfyUI_LayerStyle/image/auto_adjust_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 128 |
+
custom_nodes/ComfyUI_LayerStyle/image/auto_adjust_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 129 |
+
custom_nodes/ComfyUI_LayerStyle/image/auto_brightness_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 130 |
+
custom_nodes/ComfyUI_LayerStyle/image/ben_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 131 |
+
custom_nodes/ComfyUI_LayerStyle/image/ben_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 132 |
+
custom_nodes/ComfyUI_LayerStyle/image/blend_mode_result.jpg filter=lfs diff=lfs merge=lfs -text
|
| 133 |
+
custom_nodes/ComfyUI_LayerStyle/image/blend_mode_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 134 |
+
custom_nodes/ComfyUI_LayerStyle/image/blendif_mask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 135 |
+
custom_nodes/ComfyUI_LayerStyle/image/channel_shake_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 136 |
+
custom_nodes/ComfyUI_LayerStyle/image/chioce_text_preset_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 137 |
+
custom_nodes/ComfyUI_LayerStyle/image/choice_text_preset_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 138 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_adapter_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 139 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_balance_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 140 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_image_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 141 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_negative_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 142 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_of_shadow_and_highlight_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 143 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_of_shadow_and_highlight_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 144 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_overlay_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 145 |
+
custom_nodes/ComfyUI_LayerStyle/image/color_temperature_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 146 |
+
custom_nodes/ComfyUI_LayerStyle/image/colormap_result.jpg filter=lfs diff=lfs merge=lfs -text
|
| 147 |
+
custom_nodes/ComfyUI_LayerStyle/image/corp_by_mask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 148 |
+
custom_nodes/ComfyUI_LayerStyle/image/corp_by_mask_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 149 |
+
custom_nodes/ComfyUI_LayerStyle/image/create_gradient_mask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 150 |
+
custom_nodes/ComfyUI_LayerStyle/image/create_gradient_mask_example2.jpg filter=lfs diff=lfs merge=lfs -text
|
| 151 |
+
custom_nodes/ComfyUI_LayerStyle/image/data_nodes_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 152 |
+
custom_nodes/ComfyUI_LayerStyle/image/distort_displace_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 153 |
+
custom_nodes/ComfyUI_LayerStyle/image/distort_displace_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 154 |
+
custom_nodes/ComfyUI_LayerStyle/image/draw_rounded_rectangle_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 155 |
+
custom_nodes/ComfyUI_LayerStyle/image/drop_shadow_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 156 |
+
custom_nodes/ComfyUI_LayerStyle/image/exposure_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 157 |
+
custom_nodes/ComfyUI_LayerStyle/image/extend_canvas_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 158 |
+
custom_nodes/ComfyUI_LayerStyle/image/extend_canvas_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 159 |
+
custom_nodes/ComfyUI_LayerStyle/image/film_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 160 |
+
custom_nodes/ComfyUI_LayerStyle/image/film_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 161 |
+
custom_nodes/ComfyUI_LayerStyle/image/flux_kontext_image_scale_node_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 162 |
+
custom_nodes/ComfyUI_LayerStyle/image/gaussian_blur_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 163 |
+
custom_nodes/ComfyUI_LayerStyle/image/get_main_color_and_color_name_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 164 |
+
custom_nodes/ComfyUI_LayerStyle/image/get_main_color_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 165 |
+
custom_nodes/ComfyUI_LayerStyle/image/get_main_colors_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 166 |
+
custom_nodes/ComfyUI_LayerStyle/image/gradient_image_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 167 |
+
custom_nodes/ComfyUI_LayerStyle/image/gradient_overlay_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 168 |
+
custom_nodes/ComfyUI_LayerStyle/image/halftone_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 169 |
+
custom_nodes/ComfyUI_LayerStyle/image/halftone_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 170 |
+
custom_nodes/ComfyUI_LayerStyle/image/hdr_effects_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 171 |
+
custom_nodes/ComfyUI_LayerStyle/image/hl_frequency_detail_restore_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 172 |
+
custom_nodes/ComfyUI_LayerStyle/image/icmask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 173 |
+
custom_nodes/ComfyUI_LayerStyle/image/if_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 174 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_auto_crop_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 175 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_auto_crop_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 176 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_auto_crop_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 177 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_auto_crop_v3_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 178 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_blend_advance_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 179 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_blend_advance_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 180 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_blend_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 181 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_channel_merge_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 182 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_channel_split_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 183 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_composite_handle_mask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 184 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_composite_handle_mask_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 185 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_hub_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 186 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_hub_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 187 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_mask_scale_as_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 188 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_mask_scale_as_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 189 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_mask_scale_as_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 190 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_reel_composit_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 191 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_reel_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 192 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_remove_alpha_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 193 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_scale_by_aspect_ratio_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 194 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_scale_restore_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 195 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_shift_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 196 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_shift_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 197 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_tagger_save_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 198 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_tagger_save_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 199 |
+
custom_nodes/ComfyUI_LayerStyle/image/image_to_mask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 200 |
+
custom_nodes/ComfyUI_LayerStyle/image/inner_glow_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 201 |
+
custom_nodes/ComfyUI_LayerStyle/image/inner_shadow_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 202 |
+
custom_nodes/ComfyUI_LayerStyle/image/layer_image_transform_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 203 |
+
custom_nodes/ComfyUI_LayerStyle/image/layer_image_transform_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 204 |
+
custom_nodes/ComfyUI_LayerStyle/image/layer_mask_transform_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 205 |
+
custom_nodes/ComfyUI_LayerStyle/image/layercolor_nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 206 |
+
custom_nodes/ComfyUI_LayerStyle/image/layercolor_title.jpg filter=lfs diff=lfs merge=lfs -text
|
| 207 |
+
custom_nodes/ComfyUI_LayerStyle/image/layerfilter_nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 208 |
+
custom_nodes/ComfyUI_LayerStyle/image/layermask_nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 209 |
+
custom_nodes/ComfyUI_LayerStyle/image/layerstyle_nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 210 |
+
custom_nodes/ComfyUI_LayerStyle/image/layerstyle_title.jpg filter=lfs diff=lfs merge=lfs -text
|
| 211 |
+
custom_nodes/ComfyUI_LayerStyle/image/layerutility_nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 212 |
+
custom_nodes/ComfyUI_LayerStyle/image/levels_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 213 |
+
custom_nodes/ComfyUI_LayerStyle/image/light_leak_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 214 |
+
custom_nodes/ComfyUI_LayerStyle/image/lut_apply_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 215 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_box_detect_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 216 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_box_extend_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 217 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_box_extend_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 218 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_by_color_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 219 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_compare.jpg filter=lfs diff=lfs merge=lfs -text
|
| 220 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_shrink_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 221 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_shrink_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 222 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_ultra_detail_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 223 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_ultra_detail_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 224 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_ultra_detail_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 225 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_ultra_detail_v3_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 226 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_edge_ultra_detail_v3_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 227 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_gradient_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 228 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_grow_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 229 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_invert.jpg filter=lfs diff=lfs merge=lfs -text
|
| 230 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_motion_blur_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 231 |
+
custom_nodes/ComfyUI_LayerStyle/image/mask_stroke_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 232 |
+
custom_nodes/ComfyUI_LayerStyle/image/menu_layer_utility.jpg filter=lfs diff=lfs merge=lfs -text
|
| 233 |
+
custom_nodes/ComfyUI_LayerStyle/image/name_to_color_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 234 |
+
custom_nodes/ComfyUI_LayerStyle/image/name_to_color_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 235 |
+
custom_nodes/ComfyUI_LayerStyle/image/outer_glow_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 236 |
+
custom_nodes/ComfyUI_LayerStyle/image/pixel_spread_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 237 |
+
custom_nodes/ComfyUI_LayerStyle/image/purge_vram_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 238 |
+
custom_nodes/ComfyUI_LayerStyle/image/queue_stop_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 239 |
+
custom_nodes/ComfyUI_LayerStyle/image/random_generator_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 240 |
+
custom_nodes/ComfyUI_LayerStyle/image/random_generator_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 241 |
+
custom_nodes/ComfyUI_LayerStyle/image/random_generator_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 242 |
+
custom_nodes/ComfyUI_LayerStyle/image/rembg_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 243 |
+
custom_nodes/ComfyUI_LayerStyle/image/rounded_rectangle_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 244 |
+
custom_nodes/ComfyUI_LayerStyle/image/rounded_rectangle_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 245 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_clothes_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 246 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_clothes_pipeline_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 247 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_clothes_setting_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 248 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_fashion_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 249 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_fashion_pipeline_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 250 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_fashion_setting_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 251 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 252 |
+
custom_nodes/ComfyUI_LayerStyle/image/segformer_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 253 |
+
custom_nodes/ComfyUI_LayerStyle/image/segfromer_ultra_v3_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 254 |
+
custom_nodes/ComfyUI_LayerStyle/image/segment_anything_ultra_compare.jpg filter=lfs diff=lfs merge=lfs -text
|
| 255 |
+
custom_nodes/ComfyUI_LayerStyle/image/segment_anything_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 256 |
+
custom_nodes/ComfyUI_LayerStyle/image/segment_anything_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 257 |
+
custom_nodes/ComfyUI_LayerStyle/image/segment_anything_ultra_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 258 |
+
custom_nodes/ComfyUI_LayerStyle/image/shadow_and_highlight_mask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 259 |
+
custom_nodes/ComfyUI_LayerStyle/image/sharp_and_soft_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 260 |
+
custom_nodes/ComfyUI_LayerStyle/image/simple_text_image_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 261 |
+
custom_nodes/ComfyUI_LayerStyle/image/simple_text_image_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 262 |
+
custom_nodes/ComfyUI_LayerStyle/image/skin_beauty_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 263 |
+
custom_nodes/ComfyUI_LayerStyle/image/soft_light_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 264 |
+
custom_nodes/ComfyUI_LayerStyle/image/string_condition_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 265 |
+
custom_nodes/ComfyUI_LayerStyle/image/stroke_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 266 |
+
custom_nodes/ComfyUI_LayerStyle/image/switch_case_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 267 |
+
custom_nodes/ComfyUI_LayerStyle/image/text_image_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 268 |
+
custom_nodes/ComfyUI_LayerStyle/image/text_image_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 269 |
+
custom_nodes/ComfyUI_LayerStyle/image/text_image_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 270 |
+
custom_nodes/ComfyUI_LayerStyle/image/text_join_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 271 |
+
custom_nodes/ComfyUI_LayerStyle/image/text_preseter_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 272 |
+
custom_nodes/ComfyUI_LayerStyle/image/title.jpg filter=lfs diff=lfs merge=lfs -text
|
| 273 |
+
custom_nodes/ComfyUI_LayerStyle/image/ultra_nodes.jpg filter=lfs diff=lfs merge=lfs -text
|
| 274 |
+
custom_nodes/ComfyUI_LayerStyle/image/ultra_v2_nodes_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 275 |
+
custom_nodes/ComfyUI_LayerStyle/image/vqa_prompt_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 276 |
+
custom_nodes/ComfyUI_LayerStyle/image/vqa_prompt_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 277 |
+
custom_nodes/ComfyUI_LayerStyle/image/water_color_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 278 |
+
custom_nodes/ComfyUI_LayerStyle/image/xy2percent_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 279 |
+
custom_nodes/ComfyUI_LayerStyle/py/__pycache__/color_name.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 280 |
+
custom_nodes/ComfyUI_LayerStyle/py/__pycache__/imagefunc.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 281 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1280x720_seven_person.jpg filter=lfs diff=lfs merge=lfs -text
|
| 282 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1280x720car.jpg filter=lfs diff=lfs merge=lfs -text
|
| 283 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1280x768_city.png filter=lfs diff=lfs merge=lfs -text
|
| 284 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1344x768_beach.png filter=lfs diff=lfs merge=lfs -text
|
| 285 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1344x768_girl2.png filter=lfs diff=lfs merge=lfs -text
|
| 286 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1344x768_hair.png filter=lfs diff=lfs merge=lfs -text
|
| 287 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1344x768_redcar.png filter=lfs diff=lfs merge=lfs -text
|
| 288 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/1920x1080table.png filter=lfs diff=lfs merge=lfs -text
|
| 289 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/3840x2160car.jpg filter=lfs diff=lfs merge=lfs -text
|
| 290 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/512x512.png filter=lfs diff=lfs merge=lfs -text
|
| 291 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/768x1344_beach.png filter=lfs diff=lfs merge=lfs -text
|
| 292 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/768x1344_dress.png filter=lfs diff=lfs merge=lfs -text
|
| 293 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/fox_512x512.png filter=lfs diff=lfs merge=lfs -text
|
| 294 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/girl_dino_1024.png filter=lfs diff=lfs merge=lfs -text
|
| 295 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/plaid.jpg filter=lfs diff=lfs merge=lfs -text
|
| 296 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/red_dress-trimap.jpg filter=lfs diff=lfs merge=lfs -text
|
| 297 |
+
custom_nodes/ComfyUI_LayerStyle/workflow/red_dress.jpg filter=lfs diff=lfs merge=lfs -text
|
| 298 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/face_landmarker/face_landmarker.task filter=lfs diff=lfs merge=lfs -text
|
| 299 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/font/Alibaba-PuHuiTi-Heavy.ttf filter=lfs diff=lfs merge=lfs -text
|
| 300 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/birefnet_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 301 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/birefnet_ultra_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 302 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/birefnet_ultra_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 303 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/blend_mode_result.jpg filter=lfs diff=lfs merge=lfs -text
|
| 304 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/blend_mode_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 305 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/collage_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 306 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/collage_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 307 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/data_nodes_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 308 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/deepseek_api_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 309 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/deepseek_api_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 310 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/deepseek_api_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 311 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/draw_bbox_mask_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 312 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/draw_bbox_mask_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 313 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/draw_bbox_mask_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 314 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/evf_sam_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 315 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/evf_sam_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 316 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/florence2_image2prompt_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 317 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/florence2_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 318 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/gemini_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 319 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/gemini_image_edit_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 320 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/gemini_image_edit_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 321 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/gemini_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 322 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/gemini_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 323 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/gemini_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 324 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/get_color_tone_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 325 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/get_color_tone_v2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 326 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/human_parts_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 327 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/human_parts_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 328 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/image_auto_crop_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 329 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/image_auto_crop_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 330 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/image_auto_crop_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 331 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/image_auto_crop_v3_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 332 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/image_reward_filter_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 333 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/jimeng_image_to_image_api_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 334 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/jimeng_image_to_image_api_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 335 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/joycaption2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 336 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/joycaption2_extra_options_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 337 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/joycaption2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 338 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/joycaption_beta1_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 339 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/joycaption_beta1_extra_options_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 340 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/joycaption_beta_1_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 341 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/lama_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 342 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/light_leak_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 343 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/llama_vision_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 344 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/llama_vision_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 345 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/load_image_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 346 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/load_image_example_psd_file.jpg filter=lfs diff=lfs merge=lfs -text
|
| 347 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/load_joycaption_beta1_model_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 348 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/load_segmentanything_model_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 349 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/mask_by_different_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 350 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/mask_by_different_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 351 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/object_detector_gemini_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 352 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/object_detector_yolo_world_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 353 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/outer_glow_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 354 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/person_mask_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 355 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/person_mask_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 356 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/phi_prompt_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 357 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/phi_prompt_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 358 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/prompt_embellish_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 359 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/prompt_tagger_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 360 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/prompt_tagger_example1.jpg filter=lfs diff=lfs merge=lfs -text
|
| 361 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/qwen_image2prompt_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 362 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/sam2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 363 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/sam2_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 364 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/sam2_ultra_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 365 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/sam2_video_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 366 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/saveimage_plus_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 367 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/saveimage_plus_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 368 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/sd3_negative_conditioning_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 369 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/sd3_negative_conditioning_node_note.jpg filter=lfs diff=lfs merge=lfs -text
|
| 370 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/segment_anything_ultra_compare.jpg filter=lfs diff=lfs merge=lfs -text
|
| 371 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/segment_anything_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 372 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/segment_anything_ultra_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 373 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/segment_anything_ultra_v2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 374 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/segment_anything_ultra_v3_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 375 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/segment_anything_ultra_v3_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 376 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/smollm2_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 377 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/smollm2_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 378 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/smolvlm_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 379 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/transparent_background_ultra_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 380 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/ultra_v2_nodes_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 381 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/userprompt_generator_txt2img_with_reference_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 382 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/water_color_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 383 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/watermark_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 384 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/yolov8_detect_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 385 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/zhipuglm4_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 386 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/zhipuglm4_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 387 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/image/zhipuglm4v_node.jpg filter=lfs diff=lfs merge=lfs -text
|
| 388 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/__pycache__/imagefunc.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 389 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-Black-jiII8dog.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 390 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-BlackItalic-1413vuen.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 391 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-Bold-srYz_-1B.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 392 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-BoldItalic-dE_gZyur.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 393 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-ExtraBold-TduDdwUu.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 394 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-ExtraBoldItalic-BJafRE5I.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 395 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-ExtraLight-w5HAp5iF.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 396 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-ExtraLightItalic-ZptecSuc.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 397 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-Italic-f6M78thn.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 398 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-Light-DFhX0qo-.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 399 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-LightItalic-fu56_DRc.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 400 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-Medium-dDRaJ8tM.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 401 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-MediumItalic-zr3roggP.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 402 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-Regular-dEFHw1tF.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 403 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-SemiBold-PyS8DO2L.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 404 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-SemiBoldItalic-uIDb7hsH.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 405 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-Thin-eKObIkJC.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 406 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/Inter-ThinItalic-L6uBn3RP.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 407 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/py/iopaint/web_app/assets/kofi_button_black-XI_Dr2zg.png filter=lfs diff=lfs merge=lfs -text
|
| 408 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/whl/hydra_core-1.3.2-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
|
| 409 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1280x720_seven_person.jpg filter=lfs diff=lfs merge=lfs -text
|
| 410 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1280x720car.jpg filter=lfs diff=lfs merge=lfs -text
|
| 411 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1280x768_city.png filter=lfs diff=lfs merge=lfs -text
|
| 412 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1344x768_beach.png filter=lfs diff=lfs merge=lfs -text
|
| 413 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1344x768_girl2.png filter=lfs diff=lfs merge=lfs -text
|
| 414 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1344x768_hair.png filter=lfs diff=lfs merge=lfs -text
|
| 415 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1344x768_redcar.png filter=lfs diff=lfs merge=lfs -text
|
| 416 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/1920x1080table.png filter=lfs diff=lfs merge=lfs -text
|
| 417 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/3840x2160car.jpg filter=lfs diff=lfs merge=lfs -text
|
| 418 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/512x512.png filter=lfs diff=lfs merge=lfs -text
|
| 419 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/768x1344_beach.png filter=lfs diff=lfs merge=lfs -text
|
| 420 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/768x1344_dress.png filter=lfs diff=lfs merge=lfs -text
|
| 421 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/fox_512x512.png filter=lfs diff=lfs merge=lfs -text
|
| 422 |
+
custom_nodes/ComfyUI_LayerStyle_Advance/workflow/girl_dino_1024.png filter=lfs diff=lfs merge=lfs -text
|
| 423 |
+
custom_nodes/ComfyUI_UltimateSDUpscale/example_workflows/basic-usdu.jpg filter=lfs diff=lfs merge=lfs -text
|
| 424 |
+
custom_nodes/RES4LYF/__pycache__/sigmas.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 425 |
+
custom_nodes/RES4LYF/__pycache__/style_transfer.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 426 |
+
custom_nodes/RES4LYF/beta/__pycache__/rk_guide_func_beta.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 427 |
+
custom_nodes/RES4LYF/beta/__pycache__/rk_sampler_beta.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 428 |
+
custom_nodes/RES4LYF/beta/__pycache__/samplers.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 429 |
+
custom_nodes/RES4LYF/beta/__pycache__/samplers_extensions.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 430 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/1.png filter=lfs diff=lfs merge=lfs -text
|
| 431 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/10.jpg filter=lfs diff=lfs merge=lfs -text
|
| 432 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/11.jpg filter=lfs diff=lfs merge=lfs -text
|
| 433 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/2.webp filter=lfs diff=lfs merge=lfs -text
|
| 434 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/3.jpg filter=lfs diff=lfs merge=lfs -text
|
| 435 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/4.jpg filter=lfs diff=lfs merge=lfs -text
|
| 436 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/5.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 437 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/6.webp filter=lfs diff=lfs merge=lfs -text
|
| 438 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/7.jpg filter=lfs diff=lfs merge=lfs -text
|
| 439 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/8.jpg filter=lfs diff=lfs merge=lfs -text
|
| 440 |
+
custom_nodes/RES4LYF/example_workflows/blur_killing_style_guides/9.jpg filter=lfs diff=lfs merge=lfs -text
|
| 441 |
+
custom_nodes/RES4LYF/example_workflows/chroma[[:space:]]regional[[:space:]]antiblur[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 442 |
+
custom_nodes/RES4LYF/example_workflows/chroma[[:space:]]regional[[:space:]]antiblur.jpg filter=lfs diff=lfs merge=lfs -text
|
| 443 |
+
custom_nodes/RES4LYF/example_workflows/chroma[[:space:]]txt2img[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 444 |
+
custom_nodes/RES4LYF/example_workflows/comparison[[:space:]]ksampler[[:space:]]vs[[:space:]]csksampler[[:space:]]chain[[:space:]]workflows.jpg filter=lfs diff=lfs merge=lfs -text
|
| 445 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]faceswap[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 446 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]faceswap[[:space:]]sync[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 447 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]faceswap[[:space:]]sync[[:space:]]pulid[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 448 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]faceswap.jpg filter=lfs diff=lfs merge=lfs -text
|
| 449 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]inpaint[[:space:]]area[[:space:]](source[[:space:]]image).jpg filter=lfs diff=lfs merge=lfs -text
|
| 450 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]inpaint[[:space:]]area[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 451 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]inpaint[[:space:]]area.jpg filter=lfs diff=lfs merge=lfs -text
|
| 452 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]inpaint[[:space:]]bongmath.jpg filter=lfs diff=lfs merge=lfs -text
|
| 453 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]inpainting[[:space:]]input.jpg filter=lfs diff=lfs merge=lfs -text
|
| 454 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]inpainting.png filter=lfs diff=lfs merge=lfs -text
|
| 455 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]antiblur[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 456 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]antiblur.jpg filter=lfs diff=lfs merge=lfs -text
|
| 457 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](2[[:space:]]zone)[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 458 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](2[[:space:]]zone).jpg filter=lfs diff=lfs merge=lfs -text
|
| 459 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](3[[:space:]]zone)[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 460 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](3[[:space:]]zone).jpg filter=lfs diff=lfs merge=lfs -text
|
| 461 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](3[[:space:]]zone,[[:space:]]nested)[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 462 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](3[[:space:]]zone,[[:space:]]nested).jpg filter=lfs diff=lfs merge=lfs -text
|
| 463 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](3[[:space:]]zone,[[:space:]]overlapping)[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 464 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]regional[[:space:]]redux[[:space:]](3[[:space:]]zone,[[:space:]]overlapping).jpg filter=lfs diff=lfs merge=lfs -text
|
| 465 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]style[[:space:]]antiblur[[:space:]](input).jpg filter=lfs diff=lfs merge=lfs -text
|
| 466 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]style[[:space:]]antiblur[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 467 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]style[[:space:]]antiblur.jpg filter=lfs diff=lfs merge=lfs -text
|
| 468 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]style[[:space:]]transfer[[:space:]]gguf[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 469 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]style[[:space:]]transfer[[:space:]]gguf.jpg filter=lfs diff=lfs merge=lfs -text
|
| 470 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]upscale[[:space:]]thumbnail[[:space:]]large[[:space:]](input).png filter=lfs diff=lfs merge=lfs -text
|
| 471 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]upscale[[:space:]]thumbnail[[:space:]]large[[:space:]]multistage.jpg filter=lfs diff=lfs merge=lfs -text
|
| 472 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]upscale[[:space:]]thumbnail[[:space:]]large.jpg filter=lfs diff=lfs merge=lfs -text
|
| 473 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]upscale[[:space:]]thumbnail[[:space:]]widescreen[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 474 |
+
custom_nodes/RES4LYF/example_workflows/flux[[:space:]]upscale[[:space:]]thumbnail[[:space:]]widescreen.jpg filter=lfs diff=lfs merge=lfs -text
|
| 475 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]data[[:space:]]projection[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 476 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]data[[:space:]]projection.jpg filter=lfs diff=lfs merge=lfs -text
|
| 477 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]epsilon[[:space:]]projection[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 478 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]epsilon[[:space:]]projection.jpg filter=lfs diff=lfs merge=lfs -text
|
| 479 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]flow[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 480 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]flow.jpg filter=lfs diff=lfs merge=lfs -text
|
| 481 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]fully_pseudoimplicit[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 482 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]fully_pseudoimplicit.jpg filter=lfs diff=lfs merge=lfs -text
|
| 483 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]lure[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 484 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]lure.jpg filter=lfs diff=lfs merge=lfs -text
|
| 485 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]pseudoimplicit[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 486 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]guide[[:space:]]pseudoimplicit.jpg filter=lfs diff=lfs merge=lfs -text
|
| 487 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]hires[[:space:]]fix[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 488 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]hires[[:space:]]fix.jpg filter=lfs diff=lfs merge=lfs -text
|
| 489 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]regional[[:space:]]3[[:space:]]zones.jpg filter=lfs diff=lfs merge=lfs -text
|
| 490 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]regional[[:space:]]3[[:space:]]zones.png filter=lfs diff=lfs merge=lfs -text
|
| 491 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]regional[[:space:]]antiblur[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 492 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]regional[[:space:]]antiblur.jpg filter=lfs diff=lfs merge=lfs -text
|
| 493 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]antiblur[[:space:]](input).jpg filter=lfs diff=lfs merge=lfs -text
|
| 494 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]antiblur[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 495 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]antiblur.jpg filter=lfs diff=lfs merge=lfs -text
|
| 496 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]](input).png filter=lfs diff=lfs merge=lfs -text
|
| 497 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]](style[[:space:]]reference).png filter=lfs diff=lfs merge=lfs -text
|
| 498 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]]txt2img[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 499 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]]txt2img.jpg filter=lfs diff=lfs merge=lfs -text
|
| 500 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]]v2[[:space:]](bypassed[[:space:]]style[[:space:]]node).jpg filter=lfs diff=lfs merge=lfs -text
|
| 501 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]]v2[[:space:]](style).jpg filter=lfs diff=lfs merge=lfs -text
|
| 502 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]]v2[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 503 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer[[:space:]]v2.jpg filter=lfs diff=lfs merge=lfs -text
|
| 504 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 505 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]style[[:space:]]transfer.png filter=lfs diff=lfs merge=lfs -text
|
| 506 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]txt2img[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 507 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]txt2img.jpg filter=lfs diff=lfs merge=lfs -text
|
| 508 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling[[:space:]]30[[:space:]]steps[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 509 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling[[:space:]]30[[:space:]]steps.jpg filter=lfs diff=lfs merge=lfs -text
|
| 510 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 511 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling[[:space:]]data[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 512 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling[[:space:]]data.jpg filter=lfs diff=lfs merge=lfs -text
|
| 513 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling[[:space:]]pseudoimplicit[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 514 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling[[:space:]]pseudoimplicit.jpg filter=lfs diff=lfs merge=lfs -text
|
| 515 |
+
custom_nodes/RES4LYF/example_workflows/hidream[[:space:]]unsampling.jpg filter=lfs diff=lfs merge=lfs -text
|
| 516 |
+
custom_nodes/RES4LYF/example_workflows/intro[[:space:]]to[[:space:]]clownsampling.jpg filter=lfs diff=lfs merge=lfs -text
|
| 517 |
+
custom_nodes/RES4LYF/example_workflows/sd35[[:space:]]medium[[:space:]]unsampling[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 518 |
+
custom_nodes/RES4LYF/example_workflows/sd35[[:space:]]medium[[:space:]]unsampling[[:space:]]data[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 519 |
+
custom_nodes/RES4LYF/example_workflows/sd35[[:space:]]medium[[:space:]]unsampling[[:space:]]data.jpg filter=lfs diff=lfs merge=lfs -text
|
| 520 |
+
custom_nodes/RES4LYF/example_workflows/sd35[[:space:]]medium[[:space:]]unsampling[[:space:]]input.jpg filter=lfs diff=lfs merge=lfs -text
|
| 521 |
+
custom_nodes/RES4LYF/example_workflows/sd35[[:space:]]medium[[:space:]]unsampling.jpg filter=lfs diff=lfs merge=lfs -text
|
| 522 |
+
custom_nodes/RES4LYF/example_workflows/sdxl[[:space:]]inpainting[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 523 |
+
custom_nodes/RES4LYF/example_workflows/sdxl[[:space:]]inpainting[[:space:]]input.png filter=lfs diff=lfs merge=lfs -text
|
| 524 |
+
custom_nodes/RES4LYF/example_workflows/sdxl[[:space:]]inpainting.jpg filter=lfs diff=lfs merge=lfs -text
|
| 525 |
+
custom_nodes/RES4LYF/example_workflows/sdxl[[:space:]]regional[[:space:]]antiblur[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 526 |
+
custom_nodes/RES4LYF/example_workflows/sdxl[[:space:]]regional[[:space:]]antiblur.jpg filter=lfs diff=lfs merge=lfs -text
|
| 527 |
+
custom_nodes/RES4LYF/example_workflows/sdxl[[:space:]]style[[:space:]]transfer[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 528 |
+
custom_nodes/RES4LYF/example_workflows/sdxl[[:space:]]style[[:space:]]transfer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 529 |
+
custom_nodes/RES4LYF/example_workflows/style[[:space:]]transfer[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 530 |
+
custom_nodes/RES4LYF/example_workflows/ultracascade[[:space:]]txt2img[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 531 |
+
custom_nodes/RES4LYF/example_workflows/ultracascade[[:space:]]txt2img[[:space:]]style[[:space:]]transfer[[:space:]](guide).jpg filter=lfs diff=lfs merge=lfs -text
|
| 532 |
+
custom_nodes/RES4LYF/example_workflows/ultracascade[[:space:]]txt2img[[:space:]]style[[:space:]]transfer[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 533 |
+
custom_nodes/RES4LYF/example_workflows/ultracascade[[:space:]]txt2img[[:space:]]style[[:space:]]transfer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 534 |
+
custom_nodes/RES4LYF/example_workflows/ultracascade[[:space:]]txt2img.jpg filter=lfs diff=lfs merge=lfs -text
|
| 535 |
+
custom_nodes/RES4LYF/example_workflows/wan[[:space:]]img2vid[[:space:]]720p[[:space:]](fp8[[:space:]]fast)[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 536 |
+
custom_nodes/RES4LYF/example_workflows/wan[[:space:]]img2vid[[:space:]]720p[[:space:]](fp8[[:space:]]fast).jpg filter=lfs diff=lfs merge=lfs -text
|
| 537 |
+
custom_nodes/RES4LYF/example_workflows/wan[[:space:]]txt2img[[:space:]](fp8[[:space:]]fast)[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 538 |
+
custom_nodes/RES4LYF/example_workflows/wan[[:space:]]txt2img[[:space:]](fp8[[:space:]]fast).jpg filter=lfs diff=lfs merge=lfs -text
|
| 539 |
+
custom_nodes/RES4LYF/example_workflows/wan[[:space:]]vid2vid[[:space:]]WF.jpg filter=lfs diff=lfs merge=lfs -text
|
| 540 |
+
custom_nodes/RES4LYF/example_workflows/wan[[:space:]]vid2vid.jpg filter=lfs diff=lfs merge=lfs -text
|
| 541 |
+
custom_nodes/RES4LYF/example_workflows/wan[[:space:]]vid2vid.webp filter=lfs diff=lfs merge=lfs -text
|
| 542 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]dual[[:space:]]guided[[:space:]]masked[[:space:]]unsampling[[:space:]]SD35M[[:space:]]input1.png filter=lfs diff=lfs merge=lfs -text
|
| 543 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]dual[[:space:]]guided[[:space:]]masked[[:space:]]unsampling[[:space:]]SD35M[[:space:]]input2.png filter=lfs diff=lfs merge=lfs -text
|
| 544 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]dual[[:space:]]guided[[:space:]]masked[[:space:]]unsampling[[:space:]]SD35M[[:space:]]mask.png filter=lfs diff=lfs merge=lfs -text
|
| 545 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]dual[[:space:]]guided[[:space:]]masked[[:space:]]unsampling[[:space:]]SD35M[[:space:]]output.png filter=lfs diff=lfs merge=lfs -text
|
| 546 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]dual[[:space:]]guided[[:space:]]masked[[:space:]]unsampling[[:space:]]SD35M.png filter=lfs diff=lfs merge=lfs -text
|
| 547 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]guided[[:space:]]unsampling[[:space:]]SD35M[[:space:]]input.png filter=lfs diff=lfs merge=lfs -text
|
| 548 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]guided[[:space:]]unsampling[[:space:]]SD35M[[:space:]]output.png filter=lfs diff=lfs merge=lfs -text
|
| 549 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]guided[[:space:]]unsampling[[:space:]]SD35M.png filter=lfs diff=lfs merge=lfs -text
|
| 550 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]unsampling[[:space:]]SD35L[[:space:]]input.png filter=lfs diff=lfs merge=lfs -text
|
| 551 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]unsampling[[:space:]]SD35L[[:space:]]output.png filter=lfs diff=lfs merge=lfs -text
|
| 552 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]unsampling[[:space:]]SD35L.png filter=lfs diff=lfs merge=lfs -text
|
| 553 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]unsampling[[:space:]]SDXL[[:space:]]input.png filter=lfs diff=lfs merge=lfs -text
|
| 554 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]unsampling[[:space:]]SDXL[[:space:]]output.png filter=lfs diff=lfs merge=lfs -text
|
| 555 |
+
custom_nodes/RES4LYF/workflows/img2img[[:space:]]unsampling[[:space:]]SDXL.png filter=lfs diff=lfs merge=lfs -text
|
| 556 |
+
custom_nodes/RES4LYF/workflows/inpainting[[:space:]]WF[[:space:]]flux.png filter=lfs diff=lfs merge=lfs -text
|
| 557 |
+
custom_nodes/RES4LYF/workflows/inpainting[[:space:]]flux.png filter=lfs diff=lfs merge=lfs -text
|
| 558 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]SD35M[[:space:]]output.png filter=lfs diff=lfs merge=lfs -text
|
| 559 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]SD35M.png filter=lfs diff=lfs merge=lfs -text
|
| 560 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]WF[[:space:]]flux.png filter=lfs diff=lfs merge=lfs -text
|
| 561 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]dual[[:space:]]guides[[:space:]]masked[[:space:]]WF[[:space:]]flux.png filter=lfs diff=lfs merge=lfs -text
|
| 562 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]dual[[:space:]]guides[[:space:]]masked[[:space:]]flux.png filter=lfs diff=lfs merge=lfs -text
|
| 563 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]dual[[:space:]]guides[[:space:]]with[[:space:]]mask[[:space:]]SD35M[[:space:]]input1.png filter=lfs diff=lfs merge=lfs -text
|
| 564 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]dual[[:space:]]guides[[:space:]]with[[:space:]]mask[[:space:]]SD35M[[:space:]]input2.png filter=lfs diff=lfs merge=lfs -text
|
| 565 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]dual[[:space:]]guides[[:space:]]with[[:space:]]mask[[:space:]]SD35M[[:space:]]mask.png filter=lfs diff=lfs merge=lfs -text
|
| 566 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]dual[[:space:]]guides[[:space:]]with[[:space:]]mask[[:space:]]SD35M[[:space:]]output.png filter=lfs diff=lfs merge=lfs -text
|
| 567 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]dual[[:space:]]guides[[:space:]]with[[:space:]]mask[[:space:]]SD35M.png filter=lfs diff=lfs merge=lfs -text
|
| 568 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]flux.png filter=lfs diff=lfs merge=lfs -text
|
| 569 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]guided[[:space:]]SD35M[[:space:]]input.png filter=lfs diff=lfs merge=lfs -text
|
| 570 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]guided[[:space:]]SD35M[[:space:]]output.png filter=lfs diff=lfs merge=lfs -text
|
| 571 |
+
custom_nodes/RES4LYF/workflows/txt2img[[:space:]]guided[[:space:]]SD35M.png filter=lfs diff=lfs merge=lfs -text
|
| 572 |
+
custom_nodes/cg-image-picker/docs/Screenshot[[:space:]]both.png filter=lfs diff=lfs merge=lfs -text
|
| 573 |
+
custom_nodes/cg-image-picker/docs/Screenshot.png filter=lfs diff=lfs merge=lfs -text
|
| 574 |
+
custom_nodes/cg-image-picker/docs/both.png filter=lfs diff=lfs merge=lfs -text
|
| 575 |
+
custom_nodes/cg-image-picker/docs/dog.png filter=lfs diff=lfs merge=lfs -text
|
| 576 |
+
custom_nodes/cg-image-picker/docs/fabric-screen.png filter=lfs diff=lfs merge=lfs -text
|
| 577 |
+
custom_nodes/cg-image-picker/docs/fabric.png filter=lfs diff=lfs merge=lfs -text
|
| 578 |
+
custom_nodes/cg-use-everywhere/docs/simple-example-image.png filter=lfs diff=lfs merge=lfs -text
|
| 579 |
+
custom_nodes/cg-use-everywhere/docs/simple-example.png filter=lfs diff=lfs merge=lfs -text
|
| 580 |
+
custom_nodes/cg-use-everywhere/tests/compare.png filter=lfs diff=lfs merge=lfs -text
|
| 581 |
+
custom_nodes/cg-use-everywhere/tests/test.png filter=lfs diff=lfs merge=lfs -text
|
| 582 |
+
custom_nodes/cg-use-everywhere/tests/test2.png filter=lfs diff=lfs merge=lfs -text
|
| 583 |
+
custom_nodes/comfy-plasma/images/brown_node.png filter=lfs diff=lfs merge=lfs -text
|
| 584 |
+
custom_nodes/comfy-plasma/images/example.png filter=lfs diff=lfs merge=lfs -text
|
| 585 |
+
custom_nodes/comfy-plasma/images/example_latent_setup.png filter=lfs diff=lfs merge=lfs -text
|
| 586 |
+
custom_nodes/comfy-plasma/images/example_plasma_setup.png filter=lfs diff=lfs merge=lfs -text
|
| 587 |
+
custom_nodes/comfy-plasma/images/greyscale_node.png filter=lfs diff=lfs merge=lfs -text
|
| 588 |
+
custom_nodes/comfy-plasma/images/pink_node.png filter=lfs diff=lfs merge=lfs -text
|
| 589 |
+
custom_nodes/comfy-plasma/images/random_node.png filter=lfs diff=lfs merge=lfs -text
|
| 590 |
+
custom_nodes/comfyui_controlnet_aux/NotoSans-Regular.ttf filter=lfs diff=lfs merge=lfs -text
|
| 591 |
+
custom_nodes/comfyui_controlnet_aux/examples/CNAuxBanner.jpg filter=lfs diff=lfs merge=lfs -text
|
| 592 |
+
custom_nodes/comfyui_controlnet_aux/examples/ExecuteAll.png filter=lfs diff=lfs merge=lfs -text
|
| 593 |
+
custom_nodes/comfyui_controlnet_aux/examples/ExecuteAll1.jpg filter=lfs diff=lfs merge=lfs -text
|
| 594 |
+
custom_nodes/comfyui_controlnet_aux/examples/ExecuteAll2.jpg filter=lfs diff=lfs merge=lfs -text
|
| 595 |
+
custom_nodes/comfyui_controlnet_aux/examples/comfyui-controlnet-aux-logo.png filter=lfs diff=lfs merge=lfs -text
|
| 596 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_animal_pose.png filter=lfs diff=lfs merge=lfs -text
|
| 597 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_anime_face_segmentor.png filter=lfs diff=lfs merge=lfs -text
|
| 598 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_anyline.png filter=lfs diff=lfs merge=lfs -text
|
| 599 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_densepose.png filter=lfs diff=lfs merge=lfs -text
|
| 600 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_depth_anything.png filter=lfs diff=lfs merge=lfs -text
|
| 601 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_depth_anything_v2.png filter=lfs diff=lfs merge=lfs -text
|
| 602 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_dsine.png filter=lfs diff=lfs merge=lfs -text
|
| 603 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_marigold.png filter=lfs diff=lfs merge=lfs -text
|
| 604 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_marigold_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 605 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_mesh_graphormer.png filter=lfs diff=lfs merge=lfs -text
|
| 606 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_metric3d.png filter=lfs diff=lfs merge=lfs -text
|
| 607 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_recolor.png filter=lfs diff=lfs merge=lfs -text
|
| 608 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_save_kps.png filter=lfs diff=lfs merge=lfs -text
|
| 609 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_teed.png filter=lfs diff=lfs merge=lfs -text
|
| 610 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_torchscript.png filter=lfs diff=lfs merge=lfs -text
|
| 611 |
+
custom_nodes/comfyui_controlnet_aux/examples/example_unimatch.png filter=lfs diff=lfs merge=lfs -text
|
| 612 |
+
custom_nodes/comfyui_controlnet_aux/src/custom_controlnet_aux/mesh_graphormer/hand_landmarker.task filter=lfs diff=lfs merge=lfs -text
|
| 613 |
+
custom_nodes/comfyui_controlnet_aux/tests/pose.png filter=lfs diff=lfs merge=lfs -text
|
| 614 |
+
custom_nodes/mikey_nodes/HaldCLUT/Agfa[[:space:]]Vista[[:space:]]200.png filter=lfs diff=lfs merge=lfs -text
|
| 615 |
+
custom_nodes/mikey_nodes/HaldCLUT/Anime.png filter=lfs diff=lfs merge=lfs -text
|
| 616 |
+
custom_nodes/mikey_nodes/HaldCLUT/CandleLight.png filter=lfs diff=lfs merge=lfs -text
|
| 617 |
+
custom_nodes/mikey_nodes/HaldCLUT/ColorNegative.png filter=lfs diff=lfs merge=lfs -text
|
| 618 |
+
custom_nodes/mikey_nodes/HaldCLUT/Fuji[[:space:]]Velvia[[:space:]]50.png filter=lfs diff=lfs merge=lfs -text
|
| 619 |
+
custom_nodes/mikey_nodes/HaldCLUT/Ilford[[:space:]]HP5.png filter=lfs diff=lfs merge=lfs -text
|
| 620 |
+
custom_nodes/mikey_nodes/HaldCLUT/Kodak[[:space:]]ColorPlus[[:space:]]200.png filter=lfs diff=lfs merge=lfs -text
|
| 621 |
+
custom_nodes/mikey_nodes/HaldCLUT/Kodak[[:space:]]Ektachrome[[:space:]]100.png filter=lfs diff=lfs merge=lfs -text
|
| 622 |
+
custom_nodes/mikey_nodes/HaldCLUT/Kodak[[:space:]]Gold[[:space:]]200.png filter=lfs diff=lfs merge=lfs -text
|
| 623 |
+
custom_nodes/mikey_nodes/HaldCLUT/Kodak[[:space:]]Kodachrome[[:space:]]64.png filter=lfs diff=lfs merge=lfs -text
|
| 624 |
+
custom_nodes/mikey_nodes/HaldCLUT/Kodak[[:space:]]TRI-X[[:space:]]400.png filter=lfs diff=lfs merge=lfs -text
|
| 625 |
+
custom_nodes/mikey_nodes/HaldCLUT/TealMagentaGold.png filter=lfs diff=lfs merge=lfs -text
|
| 626 |
+
custom_nodes/mikey_nodes/HaldCLUT/broadcast.png filter=lfs diff=lfs merge=lfs -text
|
| 627 |
+
custom_nodes/mikey_nodes/HaldCLUT/bw.png filter=lfs diff=lfs merge=lfs -text
|
| 628 |
+
custom_nodes/mikey_nodes/HaldCLUT/clipped.png filter=lfs diff=lfs merge=lfs -text
|
| 629 |
+
custom_nodes/mikey_nodes/HaldCLUT/dd.png filter=lfs diff=lfs merge=lfs -text
|
| 630 |
+
custom_nodes/mikey_nodes/HaldCLUT/h8.png filter=lfs diff=lfs merge=lfs -text
|
| 631 |
+
custom_nodes/mikey_nodes/HaldCLUT/lit.png filter=lfs diff=lfs merge=lfs -text
|
| 632 |
+
custom_nodes/mikey_nodes/HaldCLUT/modern.png filter=lfs diff=lfs merge=lfs -text
|
| 633 |
+
custom_nodes/mikey_nodes/HaldCLUT/preset.png filter=lfs diff=lfs merge=lfs -text
|
| 634 |
+
custom_nodes/mikey_nodes/HaldCLUT/retro.png filter=lfs diff=lfs merge=lfs -text
|
| 635 |
+
custom_nodes/mikey_nodes/__pycache__/mikey_nodes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 636 |
+
custom_nodes/mikey_nodes/noise.png filter=lfs diff=lfs merge=lfs -text
|
| 637 |
+
custom_nodes/mikey_nodes/noise_bw.png filter=lfs diff=lfs merge=lfs -text
|
| 638 |
+
custom_nodes/rgthree-comfy/docs/rgthree_advanced.png filter=lfs diff=lfs merge=lfs -text
|
| 639 |
+
custom_nodes/rgthree-comfy/docs/rgthree_advanced_metadata.png filter=lfs diff=lfs merge=lfs -text
|
| 640 |
+
custom_nodes/rgthree-comfy/docs/rgthree_context.png filter=lfs diff=lfs merge=lfs -text
|
| 641 |
+
custom_nodes/rgthree-comfy/docs/rgthree_context_metadata.png filter=lfs diff=lfs merge=lfs -text
|
| 642 |
+
custom_nodes/was-node-suite-comfyui/__pycache__/WAS_Node_Suite.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 643 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/assets/masks1.png filter=lfs diff=lfs merge=lfs -text
|
| 644 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/assets/masks2.jpg filter=lfs diff=lfs merge=lfs -text
|
| 645 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/assets/minidemo.gif filter=lfs diff=lfs merge=lfs -text
|
| 646 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/assets/model_diagram.png filter=lfs diff=lfs merge=lfs -text
|
| 647 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/assets/notebook1.png filter=lfs diff=lfs merge=lfs -text
|
| 648 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/assets/notebook2.png filter=lfs diff=lfs merge=lfs -text
|
| 649 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/demo/src/assets/data/dogs.jpg filter=lfs diff=lfs merge=lfs -text
|
| 650 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/notebooks/images/groceries.jpg filter=lfs diff=lfs merge=lfs -text
|
| 651 |
+
custom_nodes/was-node-suite-comfyui/repos/SAM/notebooks/images/truck.jpg filter=lfs diff=lfs merge=lfs -text
|
custom_nodes/ComfyLiterals/.gitignore
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
__pycache__/
|
custom_nodes/ComfyLiterals/README.md
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ComfyLiterals
|
| 2 |
+

|
custom_nodes/ComfyLiterals/__init__.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .nodes import IntLiteral, FloatLiteral, StringLiteral, CheckpointListLiteral, LoraListLiteral
|
| 2 |
+
from .operations import Operation
|
| 3 |
+
from .startup_utils import symlink_web_dir
|
| 4 |
+
|
| 5 |
+
NODE_CLASS_MAPPINGS = {
|
| 6 |
+
"Int": IntLiteral,
|
| 7 |
+
"Float": FloatLiteral,
|
| 8 |
+
"String": StringLiteral,
|
| 9 |
+
"KepStringLiteral": StringLiteral,
|
| 10 |
+
"Operation": Operation,
|
| 11 |
+
"Checkpoint": CheckpointListLiteral,
|
| 12 |
+
"Lora": LoraListLiteral,
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 16 |
+
"KepStringLiteral": "String",
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
EXTENSION_NAME = "ComfyLiterals"
|
| 20 |
+
|
| 21 |
+
symlink_web_dir("js", EXTENSION_NAME)
|
custom_nodes/ComfyLiterals/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (664 Bytes). View file
|
|
|
custom_nodes/ComfyLiterals/__pycache__/nodes.cpython-312.pyc
ADDED
|
Binary file (4.92 kB). View file
|
|
|
custom_nodes/ComfyLiterals/__pycache__/operations.cpython-312.pyc
ADDED
|
Binary file (2.67 kB). View file
|
|
|
custom_nodes/ComfyLiterals/__pycache__/startup_utils.cpython-312.pyc
ADDED
|
Binary file (1.94 kB). View file
|
|
|
custom_nodes/ComfyLiterals/js/operation-node.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import {app} from "/scripts/app.js";
|
| 2 |
+
|
| 3 |
+
app.registerExtension({
|
| 4 |
+
name: "ComfyLiterals.OperationNode",
|
| 5 |
+
nodeCreated(node, app) {
|
| 6 |
+
if (node['comfyClass'] === 'Operation') {
|
| 7 |
+
const onAdded = node.onAdded
|
| 8 |
+
node.onAdded = function (graph) {
|
| 9 |
+
console.log("OperationNode onAdded")
|
| 10 |
+
const firstCallbackResp = onAdded ? onAdded.apply(this, arguments) : undefined;
|
| 11 |
+
|
| 12 |
+
/**
|
| 13 |
+
* @type {Record<string, INodeInputSlot>}
|
| 14 |
+
*/
|
| 15 |
+
const inputCache = {
|
| 16 |
+
"A": node.inputs[1],
|
| 17 |
+
"B": node.inputs[3]
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
if (this.widgets_values) {
|
| 21 |
+
const aType = this.widgets_values[0]
|
| 22 |
+
const bType = this.widgets_values[1]
|
| 23 |
+
|
| 24 |
+
// [IntA, FloatA, IntB, FloatB]
|
| 25 |
+
const aIdxToDelete = aType === "INT" ? 1 : 0
|
| 26 |
+
// [*A, IntB, FloatB]
|
| 27 |
+
const bIdxToDelete = bType === "INT" ? 3 : 1
|
| 28 |
+
|
| 29 |
+
inputCache["A"] = node.inputs[aIdxToDelete]
|
| 30 |
+
this.removeInput(aIdxToDelete)
|
| 31 |
+
inputCache["B"] = node.inputs[bIdxToDelete]
|
| 32 |
+
this.removeInput(bIdxToDelete)
|
| 33 |
+
} else {
|
| 34 |
+
// Nodes being restored/pasted don't have widget_values
|
| 35 |
+
// Node has 4 inputs(IntA, FloatA, IntB, FloatB)
|
| 36 |
+
// Remove both float inputs, Float B moves to index 2 after Float A is removed
|
| 37 |
+
this.removeInput(1)
|
| 38 |
+
this.removeInput(2)
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
// Add a toggle widget to the node
|
| 42 |
+
this.widgets[0].callback = function (v, canvas, node) {
|
| 43 |
+
addInputAtIndex(node, inputCache["A"], 0)
|
| 44 |
+
inputCache["A"] = node.inputs[1]
|
| 45 |
+
node.removeInput(1)
|
| 46 |
+
}
|
| 47 |
+
this.widgets[1].callback = function (v, canvas, node) {
|
| 48 |
+
addInputAtIndex(node, inputCache["B"], 2)
|
| 49 |
+
inputCache["B"] = node.inputs[1]
|
| 50 |
+
node.removeInput(1)
|
| 51 |
+
}
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
}
|
| 55 |
+
})
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* Adds an input to a node at the given index.
|
| 59 |
+
* @param node {LGraphNode}
|
| 60 |
+
* @param input {INodeInputSlot}
|
| 61 |
+
* @param index {number}
|
| 62 |
+
* @returns {INodeInputSlot}
|
| 63 |
+
*/
|
| 64 |
+
function addInputAtIndex(node, input, index) {
|
| 65 |
+
if (!node.inputs) {
|
| 66 |
+
node.inputs = [];
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
if (index > node.inputs.length) {
|
| 70 |
+
console.warn("LiteGraph: Warning adding port index: " + index + " of node " + node.id + ", it doesnt have so many inputs");
|
| 71 |
+
node.inputs.push(input);
|
| 72 |
+
} else {
|
| 73 |
+
node.inputs.splice(index, 0, input);
|
| 74 |
+
}
|
| 75 |
+
if (node.onInputAdded) {
|
| 76 |
+
node.onInputAdded(input);
|
| 77 |
+
}
|
| 78 |
+
node.setSize(node.computeSize());
|
| 79 |
+
LiteGraph.registerNodeAndSlotType(node, input.type || 0);
|
| 80 |
+
|
| 81 |
+
node.setDirtyCanvas(true, true);
|
| 82 |
+
return input;
|
| 83 |
+
}
|
custom_nodes/ComfyLiterals/nodes.py
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import folder_paths
|
| 2 |
+
|
| 3 |
+
# Hack: string type that is always equal in not equal comparisons
|
| 4 |
+
class AnyType(str):
|
| 5 |
+
def __ne__(self, __value: object) -> bool:
|
| 6 |
+
return False
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
# Our any instance wants to be a wildcard string
|
| 10 |
+
ANY = AnyType("*")
|
| 11 |
+
class IntLiteral:
|
| 12 |
+
def __init__(self, ):
|
| 13 |
+
pass
|
| 14 |
+
|
| 15 |
+
@classmethod
|
| 16 |
+
def INPUT_TYPES(s):
|
| 17 |
+
return {
|
| 18 |
+
"required": {
|
| 19 |
+
"Number": ("STRING", {}),
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
RETURN_TYPES = ("INT",)
|
| 24 |
+
FUNCTION = "to_int"
|
| 25 |
+
|
| 26 |
+
CATEGORY = "Literals"
|
| 27 |
+
|
| 28 |
+
def to_int(self, Number):
|
| 29 |
+
try:
|
| 30 |
+
ret_val = int(Number)
|
| 31 |
+
except Exception:
|
| 32 |
+
raise Exception("Invalid value provided for INT")
|
| 33 |
+
return (ret_val,)
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
class FloatLiteral:
|
| 37 |
+
def __init__(self, ):
|
| 38 |
+
pass
|
| 39 |
+
|
| 40 |
+
@classmethod
|
| 41 |
+
def INPUT_TYPES(s):
|
| 42 |
+
return {
|
| 43 |
+
"required": {
|
| 44 |
+
"Number": ("STRING", {}),
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
RETURN_TYPES = ("FLOAT",)
|
| 49 |
+
FUNCTION = "to_float"
|
| 50 |
+
|
| 51 |
+
CATEGORY = "Literals"
|
| 52 |
+
|
| 53 |
+
def to_float(self, Number):
|
| 54 |
+
try:
|
| 55 |
+
ret_val = float(Number)
|
| 56 |
+
except Exception:
|
| 57 |
+
raise Exception("Invalid value provided for FLOAT")
|
| 58 |
+
return (ret_val,)
|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
class StringLiteral:
|
| 62 |
+
def __init__(self, ):
|
| 63 |
+
pass
|
| 64 |
+
|
| 65 |
+
@classmethod
|
| 66 |
+
def INPUT_TYPES(s):
|
| 67 |
+
return {
|
| 68 |
+
"required": {
|
| 69 |
+
"String": ("STRING", {"multiline": True}),
|
| 70 |
+
}
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
RETURN_TYPES = ("STRING",)
|
| 74 |
+
FUNCTION = "to_string"
|
| 75 |
+
|
| 76 |
+
CATEGORY = "Literals"
|
| 77 |
+
|
| 78 |
+
def to_string(self, String):
|
| 79 |
+
return (String,)
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
class CheckpointListLiteral:
|
| 83 |
+
def __init__(self):
|
| 84 |
+
pass
|
| 85 |
+
|
| 86 |
+
@classmethod
|
| 87 |
+
def INPUT_TYPES(s):
|
| 88 |
+
return {
|
| 89 |
+
"required": {
|
| 90 |
+
"literal": ("STRING", {
|
| 91 |
+
"multiline": True,
|
| 92 |
+
"default": "\n".join(folder_paths.get_filename_list("checkpoints"))
|
| 93 |
+
}),
|
| 94 |
+
},
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
RETURN_TYPES = (ANY,)
|
| 98 |
+
RETURN_NAMES = ("Selected Checkpoints",)
|
| 99 |
+
OUTPUT_IS_LIST = (True,)
|
| 100 |
+
FUNCTION = "parse_literal"
|
| 101 |
+
|
| 102 |
+
# OUTPUT_NODE = False
|
| 103 |
+
|
| 104 |
+
CATEGORY = "List Stuff"
|
| 105 |
+
|
| 106 |
+
def parse_literal(self, literal):
|
| 107 |
+
split = list(filter(None, literal.split("\n")))
|
| 108 |
+
return (split,)
|
| 109 |
+
|
| 110 |
+
class LoraListLiteral:
|
| 111 |
+
def __init__(self):
|
| 112 |
+
pass
|
| 113 |
+
|
| 114 |
+
@classmethod
|
| 115 |
+
def INPUT_TYPES(s):
|
| 116 |
+
return {
|
| 117 |
+
"required": {
|
| 118 |
+
"literal": ("STRING", {
|
| 119 |
+
"multiline": True,
|
| 120 |
+
"default": "\n".join(folder_paths.get_filename_list("loras"))
|
| 121 |
+
}),
|
| 122 |
+
},
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
RETURN_TYPES = (ANY,)
|
| 126 |
+
RETURN_NAMES = ("Selected Loras",)
|
| 127 |
+
OUTPUT_IS_LIST = (True,)
|
| 128 |
+
FUNCTION = "parse_literal"
|
| 129 |
+
|
| 130 |
+
# OUTPUT_NODE = False
|
| 131 |
+
|
| 132 |
+
CATEGORY = "List Stuff"
|
| 133 |
+
|
| 134 |
+
def parse_literal(self, literal):
|
| 135 |
+
split = list(filter(None, literal.split("\n")))
|
| 136 |
+
return (split,)
|
custom_nodes/ComfyLiterals/operations.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class Operation:
|
| 2 |
+
def __init__(self, ):
|
| 3 |
+
pass
|
| 4 |
+
|
| 5 |
+
@classmethod
|
| 6 |
+
def INPUT_TYPES(s):
|
| 7 |
+
return {
|
| 8 |
+
"required": {
|
| 9 |
+
"A Type": (["Int", "Float"],),
|
| 10 |
+
"B Type": (["Int", "Float"],),
|
| 11 |
+
"Operation": (["A+B", "A-B", "A*B", "A/B"],)
|
| 12 |
+
},
|
| 13 |
+
"optional": {
|
| 14 |
+
"A - Int": ("INT", {"forceInput": True}),
|
| 15 |
+
"A - Float": ("FLOAT", {"forceInput": True}),
|
| 16 |
+
"B - Int": ("INT", {"forceInput": True}),
|
| 17 |
+
"B - Float": ("FLOAT", {"forceInput": True})
|
| 18 |
+
}
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
RETURN_TYPES = ("INT", "FLOAT")
|
| 22 |
+
FUNCTION = "do_operation"
|
| 23 |
+
|
| 24 |
+
CATEGORY = "Literals"
|
| 25 |
+
|
| 26 |
+
def _do_addition(self, a_val, b_val):
|
| 27 |
+
return (int(a_val + b_val), float(a_val + b_val))
|
| 28 |
+
|
| 29 |
+
def _do_subtraction(self, a_val, b_val):
|
| 30 |
+
return (int(a_val - b_val), float(a_val - b_val))
|
| 31 |
+
|
| 32 |
+
def _do_multiplication(self, a_val, b_val):
|
| 33 |
+
return (int(a_val * b_val), float(a_val * b_val))
|
| 34 |
+
|
| 35 |
+
def _do_division(self, a_val, b_val):
|
| 36 |
+
return (int(a_val / b_val), float(a_val / b_val))
|
| 37 |
+
|
| 38 |
+
def do_operation(self, **kwargs):
|
| 39 |
+
print(f"PrintNode: {kwargs}")
|
| 40 |
+
is_a_int = kwargs["A Type"] == "Int"
|
| 41 |
+
is_b_int = kwargs["B Type"] == "Int"
|
| 42 |
+
a_val = kwargs["A - Int"] if is_a_int else kwargs["A - Float"]
|
| 43 |
+
b_val = kwargs["B - Int"] if is_b_int else kwargs["B - Float"]
|
| 44 |
+
|
| 45 |
+
if kwargs["Operation"] == "A+B":
|
| 46 |
+
return self._do_addition(a_val, b_val)
|
| 47 |
+
elif kwargs["Operation"] == "A-B":
|
| 48 |
+
return self._do_subtraction(a_val, b_val)
|
| 49 |
+
elif kwargs["Operation"] == "A*B":
|
| 50 |
+
return self._do_multiplication(a_val, b_val)
|
| 51 |
+
elif kwargs["Operation"] == "A/B":
|
| 52 |
+
return self._do_division(a_val, b_val)
|
| 53 |
+
else:
|
| 54 |
+
raise Exception("Invalid operation provided")
|
custom_nodes/ComfyLiterals/startup_utils.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
|
| 4 |
+
import folder_paths
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
def symlink_web_dir(local_path, extension_name):
|
| 8 |
+
comfy_web_ext_root = Path(os.path.join(folder_paths.base_path, "web", "extensions"))
|
| 9 |
+
target_dir = Path(os.path.join(comfy_web_ext_root, extension_name))
|
| 10 |
+
extension_path = Path(__file__).parent.resolve()
|
| 11 |
+
|
| 12 |
+
if target_dir.exists():
|
| 13 |
+
print(f"Web extensions folder found at {target_dir}")
|
| 14 |
+
elif comfy_web_ext_root.exists():
|
| 15 |
+
try:
|
| 16 |
+
os.symlink((os.path.join(extension_path, local_path)), target_dir)
|
| 17 |
+
except OSError as e: # OSError
|
| 18 |
+
print(
|
| 19 |
+
f"Error:\n{e}\n"
|
| 20 |
+
f"Failed to create symlink to {target_dir}. Please copy the folder manually.\n"
|
| 21 |
+
f"Source: {os.path.join(extension_path, local_path)}\n"
|
| 22 |
+
f"Target: {target_dir}"
|
| 23 |
+
)
|
| 24 |
+
except Exception as e:
|
| 25 |
+
print(f"Unexpected error:\n{e}")
|
| 26 |
+
else:
|
| 27 |
+
print(
|
| 28 |
+
f"Failed to find comfy root automatically, please copy the folder {os.path.join(extension_path, 'web')} manually in the web/extensions folder of ComfyUI"
|
| 29 |
+
)
|
custom_nodes/ComfyMath/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
**/__pycache__
|
custom_nodes/ComfyMath/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Apache License
|
| 2 |
+
Version 2.0, January 2004
|
| 3 |
+
http://www.apache.org/licenses/
|
| 4 |
+
|
| 5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 6 |
+
|
| 7 |
+
1. Definitions.
|
| 8 |
+
|
| 9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 11 |
+
|
| 12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 13 |
+
the copyright owner that is granting the License.
|
| 14 |
+
|
| 15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 16 |
+
other entities that control, are controlled by, or are under common
|
| 17 |
+
control with that entity. For the purposes of this definition,
|
| 18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 19 |
+
direction or management of such entity, whether by contract or
|
| 20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 22 |
+
|
| 23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 24 |
+
exercising permissions granted by this License.
|
| 25 |
+
|
| 26 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 27 |
+
including but not limited to software source code, documentation
|
| 28 |
+
source, and configuration files.
|
| 29 |
+
|
| 30 |
+
"Object" form shall mean any form resulting from mechanical
|
| 31 |
+
transformation or translation of a Source form, including but
|
| 32 |
+
not limited to compiled object code, generated documentation,
|
| 33 |
+
and conversions to other media types.
|
| 34 |
+
|
| 35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 36 |
+
Object form, made available under the License, as indicated by a
|
| 37 |
+
copyright notice that is included in or attached to the work
|
| 38 |
+
(an example is provided in the Appendix below).
|
| 39 |
+
|
| 40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 41 |
+
form, that is based on (or derived from) the Work and for which the
|
| 42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 44 |
+
of this License, Derivative Works shall not include works that remain
|
| 45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 46 |
+
the Work and Derivative Works thereof.
|
| 47 |
+
|
| 48 |
+
"Contribution" shall mean any work of authorship, including
|
| 49 |
+
the original version of the Work and any modifications or additions
|
| 50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 54 |
+
means any form of electronic, verbal, or written communication sent
|
| 55 |
+
to the Licensor or its representatives, including but not limited to
|
| 56 |
+
communication on electronic mailing lists, source code control systems,
|
| 57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 59 |
+
excluding communication that is conspicuously marked or otherwise
|
| 60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 61 |
+
|
| 62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 64 |
+
subsequently incorporated within the Work.
|
| 65 |
+
|
| 66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 71 |
+
Work and such Derivative Works in Source or Object form.
|
| 72 |
+
|
| 73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 76 |
+
(except as stated in this section) patent license to make, have made,
|
| 77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 78 |
+
where such license applies only to those patent claims licensable
|
| 79 |
+
by such Contributor that are necessarily infringed by their
|
| 80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 82 |
+
institute patent litigation against any entity (including a
|
| 83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 84 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 85 |
+
or contributory patent infringement, then any patent licenses
|
| 86 |
+
granted to You under this License for that Work shall terminate
|
| 87 |
+
as of the date such litigation is filed.
|
| 88 |
+
|
| 89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 90 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 91 |
+
modifications, and in Source or Object form, provided that You
|
| 92 |
+
meet the following conditions:
|
| 93 |
+
|
| 94 |
+
(a) You must give any other recipients of the Work or
|
| 95 |
+
Derivative Works a copy of this License; and
|
| 96 |
+
|
| 97 |
+
(b) You must cause any modified files to carry prominent notices
|
| 98 |
+
stating that You changed the files; and
|
| 99 |
+
|
| 100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 101 |
+
that You distribute, all copyright, patent, trademark, and
|
| 102 |
+
attribution notices from the Source form of the Work,
|
| 103 |
+
excluding those notices that do not pertain to any part of
|
| 104 |
+
the Derivative Works; and
|
| 105 |
+
|
| 106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 107 |
+
distribution, then any Derivative Works that You distribute must
|
| 108 |
+
include a readable copy of the attribution notices contained
|
| 109 |
+
within such NOTICE file, excluding those notices that do not
|
| 110 |
+
pertain to any part of the Derivative Works, in at least one
|
| 111 |
+
of the following places: within a NOTICE text file distributed
|
| 112 |
+
as part of the Derivative Works; within the Source form or
|
| 113 |
+
documentation, if provided along with the Derivative Works; or,
|
| 114 |
+
within a display generated by the Derivative Works, if and
|
| 115 |
+
wherever such third-party notices normally appear. The contents
|
| 116 |
+
of the NOTICE file are for informational purposes only and
|
| 117 |
+
do not modify the License. You may add Your own attribution
|
| 118 |
+
notices within Derivative Works that You distribute, alongside
|
| 119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 120 |
+
that such additional attribution notices cannot be construed
|
| 121 |
+
as modifying the License.
|
| 122 |
+
|
| 123 |
+
You may add Your own copyright statement to Your modifications and
|
| 124 |
+
may provide additional or different license terms and conditions
|
| 125 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 126 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 127 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 128 |
+
the conditions stated in this License.
|
| 129 |
+
|
| 130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 132 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 133 |
+
this License, without any additional terms or conditions.
|
| 134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 135 |
+
the terms of any separate license agreement you may have executed
|
| 136 |
+
with Licensor regarding such Contributions.
|
| 137 |
+
|
| 138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 140 |
+
except as required for reasonable and customary use in describing the
|
| 141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 142 |
+
|
| 143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 144 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 147 |
+
implied, including, without limitation, any warranties or conditions
|
| 148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 150 |
+
appropriateness of using or redistributing the Work and assume any
|
| 151 |
+
risks associated with Your exercise of permissions under this License.
|
| 152 |
+
|
| 153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 154 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 155 |
+
unless required by applicable law (such as deliberate and grossly
|
| 156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 157 |
+
liable to You for damages, including any direct, indirect, special,
|
| 158 |
+
incidental, or consequential damages of any character arising as a
|
| 159 |
+
result of this License or out of the use or inability to use the
|
| 160 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 161 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 162 |
+
other commercial damages or losses), even if such Contributor
|
| 163 |
+
has been advised of the possibility of such damages.
|
| 164 |
+
|
| 165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 168 |
+
or other liability obligations and/or rights consistent with this
|
| 169 |
+
License. However, in accepting such obligations, You may act only
|
| 170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 171 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 172 |
+
defend, and hold each Contributor harmless for any liability
|
| 173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 174 |
+
of your accepting any such warranty or additional liability.
|
| 175 |
+
|
| 176 |
+
END OF TERMS AND CONDITIONS
|
| 177 |
+
|
| 178 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 179 |
+
|
| 180 |
+
To apply the Apache License to your work, attach the following
|
| 181 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 182 |
+
replaced with your own identifying information. (Don't include
|
| 183 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 184 |
+
comment syntax for the file format. We also recommend that a
|
| 185 |
+
file or class name and description of purpose be included on the
|
| 186 |
+
same "printed page" as the copyright notice for easier
|
| 187 |
+
identification within third-party archives.
|
| 188 |
+
|
| 189 |
+
Copyright [yyyy] [name of copyright owner]
|
| 190 |
+
|
| 191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 192 |
+
you may not use this file except in compliance with the License.
|
| 193 |
+
You may obtain a copy of the License at
|
| 194 |
+
|
| 195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 196 |
+
|
| 197 |
+
Unless required by applicable law or agreed to in writing, software
|
| 198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 200 |
+
See the License for the specific language governing permissions and
|
| 201 |
+
limitations under the License.
|
custom_nodes/ComfyMath/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ComfyMath
|
| 2 |
+
|
| 3 |
+
Provides Math Nodes for [ComfyUI](https://github.com/comfyanonymous/ComfyUI)
|
| 4 |
+
|
| 5 |
+
## Features
|
| 6 |
+
|
| 7 |
+
Provides nodes for:
|
| 8 |
+
* Boolean Logic
|
| 9 |
+
* Integer Arithmetic
|
| 10 |
+
* Floating Point Arithmetic and Functions
|
| 11 |
+
* Vec2, Vec3, and Vec4 Arithmetic and Functions
|
| 12 |
+
|
| 13 |
+
## Installation
|
| 14 |
+
|
| 15 |
+
From the `custom_nodes` directory in your ComfyUI installation, run:
|
| 16 |
+
|
| 17 |
+
```sh
|
| 18 |
+
git clone https://github.com/evanspearman/ComfyMath.git
|
| 19 |
+
```
|
custom_nodes/ComfyMath/__init__.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .src.comfymath.convert import NODE_CLASS_MAPPINGS as convert_NCM
|
| 2 |
+
from .src.comfymath.bool import NODE_CLASS_MAPPINGS as bool_NCM
|
| 3 |
+
from .src.comfymath.int import NODE_CLASS_MAPPINGS as int_NCM
|
| 4 |
+
from .src.comfymath.float import NODE_CLASS_MAPPINGS as float_NCM
|
| 5 |
+
from .src.comfymath.number import NODE_CLASS_MAPPINGS as number_NCM
|
| 6 |
+
from .src.comfymath.vec import NODE_CLASS_MAPPINGS as vec_NCM
|
| 7 |
+
from .src.comfymath.control import NODE_CLASS_MAPPINGS as control_NCM
|
| 8 |
+
from .src.comfymath.graphics import NODE_CLASS_MAPPINGS as graphics_NCM
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
NODE_CLASS_MAPPINGS = {
|
| 12 |
+
**convert_NCM,
|
| 13 |
+
**bool_NCM,
|
| 14 |
+
**int_NCM,
|
| 15 |
+
**float_NCM,
|
| 16 |
+
**number_NCM,
|
| 17 |
+
**vec_NCM,
|
| 18 |
+
**control_NCM,
|
| 19 |
+
**graphics_NCM,
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def remove_cm_prefix(node_mapping: str) -> str:
|
| 24 |
+
if node_mapping.startswith("CM_"):
|
| 25 |
+
return node_mapping[3:]
|
| 26 |
+
return node_mapping
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
NODE_DISPLAY_NAME_MAPPINGS = {key: remove_cm_prefix(key) for key in NODE_CLASS_MAPPINGS}
|
custom_nodes/ComfyMath/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (1.06 kB). View file
|
|
|
custom_nodes/ComfyMath/pyproject.toml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[tool.poetry]
|
| 2 |
+
name = "comfymath"
|
| 3 |
+
version = "0.1.0"
|
| 4 |
+
description = "Math nodes for ComfyUI"
|
| 5 |
+
authors = ["Evan Spearman <evan@spearman.mb.ca>"]
|
| 6 |
+
license = { text = "Apache License 2.0" }
|
| 7 |
+
readme = "README.md"
|
| 8 |
+
|
| 9 |
+
[tool.poetry.dependencies]
|
| 10 |
+
python = "^3.10"
|
| 11 |
+
numpy = "^1.25.1"
|
| 12 |
+
|
| 13 |
+
[tool.poetry.group.dev.dependencies]
|
| 14 |
+
mypy = "^1.4.1"
|
| 15 |
+
black = "^23.7.0"
|
| 16 |
+
|
| 17 |
+
[build-system]
|
| 18 |
+
requires = ["poetry-core"]
|
| 19 |
+
build-backend = "poetry.core.masonry.api"
|
custom_nodes/ComfyMath/requirements.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
numpy
|
custom_nodes/ComfyMath/src/comfymath/__init__.py
ADDED
|
File without changes
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (154 Bytes). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/bool.cpython-312.pyc
ADDED
|
Binary file (3.33 kB). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/control.cpython-312.pyc
ADDED
|
Binary file (305 Bytes). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/convert.cpython-312.pyc
ADDED
|
Binary file (12.1 kB). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/float.cpython-312.pyc
ADDED
|
Binary file (12.2 kB). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/graphics.cpython-312.pyc
ADDED
|
Binary file (5.69 kB). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/int.cpython-312.pyc
ADDED
|
Binary file (8.21 kB). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/number.cpython-312.pyc
ADDED
|
Binary file (4 kB). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/types.cpython-312.pyc
ADDED
|
Binary file (723 Bytes). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/__pycache__/vec.cpython-312.pyc
ADDED
|
Binary file (22.4 kB). View file
|
|
|
custom_nodes/ComfyMath/src/comfymath/bool.py
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Any, Callable, Mapping
|
| 2 |
+
|
| 3 |
+
DEFAULT_BOOL = ("BOOLEAN", {"default": False})
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
BOOL_UNARY_OPERATIONS: Mapping[str, Callable[[bool], bool]] = {
|
| 7 |
+
"Not": lambda a: not a,
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
BOOL_BINARY_OPERATIONS: Mapping[str, Callable[[bool, bool], bool]] = {
|
| 11 |
+
"Nor": lambda a, b: not (a or b),
|
| 12 |
+
"Xor": lambda a, b: a ^ b,
|
| 13 |
+
"Nand": lambda a, b: not (a and b),
|
| 14 |
+
"And": lambda a, b: a and b,
|
| 15 |
+
"Xnor": lambda a, b: not (a ^ b),
|
| 16 |
+
"Or": lambda a, b: a or b,
|
| 17 |
+
"Eq": lambda a, b: a == b,
|
| 18 |
+
"Neq": lambda a, b: a != b,
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
class BoolUnaryOperation:
|
| 23 |
+
@classmethod
|
| 24 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 25 |
+
return {
|
| 26 |
+
"required": {"op": (list(BOOL_UNARY_OPERATIONS.keys()),), "a": DEFAULT_BOOL}
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
RETURN_TYPES = ("BOOLEAN",)
|
| 30 |
+
FUNCTION = "op"
|
| 31 |
+
CATEGORY = "math/bool"
|
| 32 |
+
|
| 33 |
+
def op(self, op: str, a: bool) -> tuple[bool]:
|
| 34 |
+
return (BOOL_UNARY_OPERATIONS[op](a),)
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
class BoolBinaryOperation:
|
| 38 |
+
@classmethod
|
| 39 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 40 |
+
return {
|
| 41 |
+
"required": {
|
| 42 |
+
"op": (list(BOOL_BINARY_OPERATIONS.keys()),),
|
| 43 |
+
"a": DEFAULT_BOOL,
|
| 44 |
+
"b": DEFAULT_BOOL,
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
RETURN_TYPES = ("BOOLEAN",)
|
| 49 |
+
FUNCTION = "op"
|
| 50 |
+
CATEGORY = "math/bool"
|
| 51 |
+
|
| 52 |
+
def op(self, op: str, a: bool, b: bool) -> tuple[bool]:
|
| 53 |
+
return (BOOL_BINARY_OPERATIONS[op](a, b),)
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
NODE_CLASS_MAPPINGS = {
|
| 57 |
+
"CM_BoolUnaryOperation": BoolUnaryOperation,
|
| 58 |
+
"CM_BoolBinaryOperation": BoolBinaryOperation,
|
| 59 |
+
}
|
custom_nodes/ComfyMath/src/comfymath/control.py
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Any, Mapping
|
| 2 |
+
|
| 3 |
+
NODE_CLASS_MAPPINGS: Mapping[str, Any] = {}
|
custom_nodes/ComfyMath/src/comfymath/convert.py
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Any, Mapping
|
| 2 |
+
|
| 3 |
+
from .vec import VEC2_ZERO, VEC3_ZERO, VEC4_ZERO
|
| 4 |
+
from .types import Number, Vec2, Vec3, Vec4
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
class BoolToInt:
|
| 8 |
+
@classmethod
|
| 9 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 10 |
+
return {"required": {"a": ("BOOLEAN", {"default": False})}}
|
| 11 |
+
|
| 12 |
+
RETURN_TYPES = ("INT",)
|
| 13 |
+
FUNCTION = "op"
|
| 14 |
+
CATEGORY = "math/conversion"
|
| 15 |
+
|
| 16 |
+
def op(self, a: bool) -> tuple[int]:
|
| 17 |
+
return (int(a),)
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
class IntToBool:
|
| 21 |
+
@classmethod
|
| 22 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 23 |
+
return {"required": {"a": ("INT", {"default": 0})}}
|
| 24 |
+
|
| 25 |
+
RETURN_TYPES = ("BOOLEAN",)
|
| 26 |
+
FUNCTION = "op"
|
| 27 |
+
CATEGORY = "math/conversion"
|
| 28 |
+
|
| 29 |
+
def op(self, a: int) -> tuple[bool]:
|
| 30 |
+
return (a != 0,)
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
class FloatToInt:
|
| 34 |
+
@classmethod
|
| 35 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 36 |
+
return {"required": {"a": ("FLOAT", {"default": 0.0, "round": False})}}
|
| 37 |
+
|
| 38 |
+
RETURN_TYPES = ("INT",)
|
| 39 |
+
FUNCTION = "op"
|
| 40 |
+
CATEGORY = "math/conversion"
|
| 41 |
+
|
| 42 |
+
def op(self, a: float) -> tuple[int]:
|
| 43 |
+
return (int(a),)
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
class IntToFloat:
|
| 47 |
+
@classmethod
|
| 48 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 49 |
+
return {"required": {"a": ("INT", {"default": 0})}}
|
| 50 |
+
|
| 51 |
+
RETURN_TYPES = ("FLOAT",)
|
| 52 |
+
FUNCTION = "op"
|
| 53 |
+
CATEGORY = "math/conversion"
|
| 54 |
+
|
| 55 |
+
def op(self, a: int) -> tuple[float]:
|
| 56 |
+
return (float(a),)
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
class IntToNumber:
|
| 60 |
+
@classmethod
|
| 61 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 62 |
+
return {"required": {"a": ("INT", {"default": 0})}}
|
| 63 |
+
|
| 64 |
+
RETURN_TYPES = ("NUMBER",)
|
| 65 |
+
FUNCTION = "op"
|
| 66 |
+
CATEGORY = "math/conversion"
|
| 67 |
+
|
| 68 |
+
def op(self, a: int) -> tuple[Number]:
|
| 69 |
+
return (a,)
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
class NumberToInt:
|
| 73 |
+
@classmethod
|
| 74 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 75 |
+
return {"required": {"a": ("NUMBER", {"default": 0.0})}}
|
| 76 |
+
|
| 77 |
+
RETURN_TYPES = ("INT",)
|
| 78 |
+
FUNCTION = "op"
|
| 79 |
+
CATEGORY = "math/conversion"
|
| 80 |
+
|
| 81 |
+
def op(self, a: Number) -> tuple[int]:
|
| 82 |
+
return (int(a),)
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
class FloatToNumber:
|
| 86 |
+
@classmethod
|
| 87 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 88 |
+
return {"required": {"a": ("FLOAT", {"default": 0.0, "round": False})}}
|
| 89 |
+
|
| 90 |
+
RETURN_TYPES = ("NUMBER",)
|
| 91 |
+
FUNCTION = "op"
|
| 92 |
+
CATEGORY = "math/conversion"
|
| 93 |
+
|
| 94 |
+
def op(self, a: float) -> tuple[Number]:
|
| 95 |
+
return (a,)
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
class NumberToFloat:
|
| 99 |
+
@classmethod
|
| 100 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 101 |
+
return {"required": {"a": ("NUMBER", {"default": 0.0})}}
|
| 102 |
+
|
| 103 |
+
RETURN_TYPES = ("FLOAT",)
|
| 104 |
+
FUNCTION = "op"
|
| 105 |
+
CATEGORY = "math/conversion"
|
| 106 |
+
|
| 107 |
+
def op(self, a: Number) -> tuple[float]:
|
| 108 |
+
return (float(a),)
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
class ComposeVec2:
|
| 112 |
+
@classmethod
|
| 113 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 114 |
+
return {
|
| 115 |
+
"required": {
|
| 116 |
+
"x": ("FLOAT", {"default": 0.0, "round": False}),
|
| 117 |
+
"y": ("FLOAT", {"default": 0.0, "round": False}),
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
RETURN_TYPES = ("VEC2",)
|
| 122 |
+
FUNCTION = "op"
|
| 123 |
+
CATEGORY = "math/conversion"
|
| 124 |
+
|
| 125 |
+
def op(self, x: float, y: float) -> tuple[Vec2]:
|
| 126 |
+
return ((x, y),)
|
| 127 |
+
|
| 128 |
+
|
| 129 |
+
class FillVec2:
|
| 130 |
+
@classmethod
|
| 131 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 132 |
+
return {
|
| 133 |
+
"required": {
|
| 134 |
+
"a": ("FLOAT", {"default": 0.0, "round": False}),
|
| 135 |
+
}
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
RETURN_TYPES = ("VEC2",)
|
| 139 |
+
FUNCTION = "op"
|
| 140 |
+
CATEGORY = "math/conversion"
|
| 141 |
+
|
| 142 |
+
def op(self, a: float) -> tuple[Vec2]:
|
| 143 |
+
return ((a, a),)
|
| 144 |
+
|
| 145 |
+
|
| 146 |
+
class BreakoutVec2:
|
| 147 |
+
@classmethod
|
| 148 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 149 |
+
return {"required": {"a": ("VEC2", {"default": VEC2_ZERO})}}
|
| 150 |
+
|
| 151 |
+
RETURN_TYPES = ("FLOAT", "FLOAT")
|
| 152 |
+
FUNCTION = "op"
|
| 153 |
+
CATEGORY = "math/conversion"
|
| 154 |
+
|
| 155 |
+
def op(self, a: Vec2) -> tuple[float, float]:
|
| 156 |
+
return (a[0], a[1])
|
| 157 |
+
|
| 158 |
+
|
| 159 |
+
class ComposeVec3:
|
| 160 |
+
@classmethod
|
| 161 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 162 |
+
return {
|
| 163 |
+
"required": {
|
| 164 |
+
"x": ("FLOAT", {"default": 0.0}),
|
| 165 |
+
"y": ("FLOAT", {"default": 0.0}),
|
| 166 |
+
"z": ("FLOAT", {"default": 0.0}),
|
| 167 |
+
}
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
RETURN_TYPES = ("VEC3",)
|
| 171 |
+
FUNCTION = "op"
|
| 172 |
+
CATEGORY = "math/conversion"
|
| 173 |
+
|
| 174 |
+
def op(self, x: float, y: float, z: float) -> tuple[Vec3]:
|
| 175 |
+
return ((x, y, z),)
|
| 176 |
+
|
| 177 |
+
|
| 178 |
+
class FillVec3:
|
| 179 |
+
@classmethod
|
| 180 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 181 |
+
return {
|
| 182 |
+
"required": {
|
| 183 |
+
"a": ("FLOAT", {"default": 0.0}),
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
RETURN_TYPES = ("VEC3",)
|
| 188 |
+
FUNCTION = "op"
|
| 189 |
+
CATEGORY = "math/conversion"
|
| 190 |
+
|
| 191 |
+
def op(self, a: float) -> tuple[Vec3]:
|
| 192 |
+
return ((a, a, a),)
|
| 193 |
+
|
| 194 |
+
|
| 195 |
+
class BreakoutVec3:
|
| 196 |
+
@classmethod
|
| 197 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 198 |
+
return {"required": {"a": ("VEC3", {"default": VEC3_ZERO})}}
|
| 199 |
+
|
| 200 |
+
RETURN_TYPES = ("FLOAT", "FLOAT", "FLOAT")
|
| 201 |
+
FUNCTION = "op"
|
| 202 |
+
CATEGORY = "math/conversion"
|
| 203 |
+
|
| 204 |
+
def op(self, a: Vec3) -> tuple[float, float, float]:
|
| 205 |
+
return (a[0], a[1], a[2])
|
| 206 |
+
|
| 207 |
+
|
| 208 |
+
class ComposeVec4:
|
| 209 |
+
@classmethod
|
| 210 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 211 |
+
return {
|
| 212 |
+
"required": {
|
| 213 |
+
"x": ("FLOAT", {"default": 0.0}),
|
| 214 |
+
"y": ("FLOAT", {"default": 0.0}),
|
| 215 |
+
"z": ("FLOAT", {"default": 0.0}),
|
| 216 |
+
"w": ("FLOAT", {"default": 0.0}),
|
| 217 |
+
}
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
RETURN_TYPES = ("VEC4",)
|
| 221 |
+
FUNCTION = "op"
|
| 222 |
+
CATEGORY = "math/conversion"
|
| 223 |
+
|
| 224 |
+
def op(self, x: float, y: float, z: float, w: float) -> tuple[Vec4]:
|
| 225 |
+
return ((x, y, z, w),)
|
| 226 |
+
|
| 227 |
+
|
| 228 |
+
class FillVec4:
|
| 229 |
+
@classmethod
|
| 230 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 231 |
+
return {
|
| 232 |
+
"required": {
|
| 233 |
+
"a": ("FLOAT", {"default": 0.0}),
|
| 234 |
+
}
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
+
RETURN_TYPES = ("VEC4",)
|
| 238 |
+
FUNCTION = "op"
|
| 239 |
+
CATEGORY = "math/conversion"
|
| 240 |
+
|
| 241 |
+
def op(self, a: float) -> tuple[Vec4]:
|
| 242 |
+
return ((a, a, a, a),)
|
| 243 |
+
|
| 244 |
+
|
| 245 |
+
class BreakoutVec4:
|
| 246 |
+
@classmethod
|
| 247 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 248 |
+
return {"required": {"a": ("VEC4", {"default": VEC4_ZERO})}}
|
| 249 |
+
|
| 250 |
+
RETURN_TYPES = ("FLOAT", "FLOAT", "FLOAT", "FLOAT")
|
| 251 |
+
FUNCTION = "op"
|
| 252 |
+
CATEGORY = "math/conversion"
|
| 253 |
+
|
| 254 |
+
def op(self, a: Vec4) -> tuple[float, float, float, float]:
|
| 255 |
+
return (a[0], a[1], a[2], a[3])
|
| 256 |
+
|
| 257 |
+
|
| 258 |
+
NODE_CLASS_MAPPINGS = {
|
| 259 |
+
"CM_BoolToInt": BoolToInt,
|
| 260 |
+
"CM_IntToBool": IntToBool,
|
| 261 |
+
"CM_FloatToInt": FloatToInt,
|
| 262 |
+
"CM_IntToFloat": IntToFloat,
|
| 263 |
+
"CM_IntToNumber": IntToNumber,
|
| 264 |
+
"CM_NumberToInt": NumberToInt,
|
| 265 |
+
"CM_FloatToNumber": FloatToNumber,
|
| 266 |
+
"CM_NumberToFloat": NumberToFloat,
|
| 267 |
+
"CM_ComposeVec2": ComposeVec2,
|
| 268 |
+
"CM_ComposeVec3": ComposeVec3,
|
| 269 |
+
"CM_ComposeVec4": ComposeVec4,
|
| 270 |
+
"CM_BreakoutVec2": BreakoutVec2,
|
| 271 |
+
"CM_BreakoutVec3": BreakoutVec3,
|
| 272 |
+
"CM_BreakoutVec4": BreakoutVec4,
|
| 273 |
+
}
|
custom_nodes/ComfyMath/src/comfymath/float.py
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import math
|
| 2 |
+
|
| 3 |
+
from typing import Any, Callable, Mapping
|
| 4 |
+
|
| 5 |
+
DEFAULT_FLOAT = ("FLOAT", {"default": 0.0, "step": 0.001, "round": False})
|
| 6 |
+
|
| 7 |
+
FLOAT_UNARY_OPERATIONS: Mapping[str, Callable[[float], float]] = {
|
| 8 |
+
"Neg": lambda a: -a,
|
| 9 |
+
"Inc": lambda a: a + 1,
|
| 10 |
+
"Dec": lambda a: a - 1,
|
| 11 |
+
"Abs": lambda a: abs(a),
|
| 12 |
+
"Sqr": lambda a: a * a,
|
| 13 |
+
"Cube": lambda a: a * a * a,
|
| 14 |
+
"Sqrt": lambda a: math.sqrt(a),
|
| 15 |
+
"Exp": lambda a: math.exp(a),
|
| 16 |
+
"Ln": lambda a: math.log(a),
|
| 17 |
+
"Log10": lambda a: math.log10(a),
|
| 18 |
+
"Log2": lambda a: math.log2(a),
|
| 19 |
+
"Sin": lambda a: math.sin(a),
|
| 20 |
+
"Cos": lambda a: math.cos(a),
|
| 21 |
+
"Tan": lambda a: math.tan(a),
|
| 22 |
+
"Asin": lambda a: math.asin(a),
|
| 23 |
+
"Acos": lambda a: math.acos(a),
|
| 24 |
+
"Atan": lambda a: math.atan(a),
|
| 25 |
+
"Sinh": lambda a: math.sinh(a),
|
| 26 |
+
"Cosh": lambda a: math.cosh(a),
|
| 27 |
+
"Tanh": lambda a: math.tanh(a),
|
| 28 |
+
"Asinh": lambda a: math.asinh(a),
|
| 29 |
+
"Acosh": lambda a: math.acosh(a),
|
| 30 |
+
"Atanh": lambda a: math.atanh(a),
|
| 31 |
+
"Round": lambda a: round(a),
|
| 32 |
+
"Floor": lambda a: math.floor(a),
|
| 33 |
+
"Ceil": lambda a: math.ceil(a),
|
| 34 |
+
"Trunc": lambda a: math.trunc(a),
|
| 35 |
+
"Erf": lambda a: math.erf(a),
|
| 36 |
+
"Erfc": lambda a: math.erfc(a),
|
| 37 |
+
"Gamma": lambda a: math.gamma(a),
|
| 38 |
+
"Radians": lambda a: math.radians(a),
|
| 39 |
+
"Degrees": lambda a: math.degrees(a),
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
FLOAT_UNARY_CONDITIONS: Mapping[str, Callable[[float], bool]] = {
|
| 43 |
+
"IsZero": lambda a: a == 0.0,
|
| 44 |
+
"IsPositive": lambda a: a > 0.0,
|
| 45 |
+
"IsNegative": lambda a: a < 0.0,
|
| 46 |
+
"IsNonZero": lambda a: a != 0.0,
|
| 47 |
+
"IsPositiveInfinity": lambda a: math.isinf(a) and a > 0.0,
|
| 48 |
+
"IsNegativeInfinity": lambda a: math.isinf(a) and a < 0.0,
|
| 49 |
+
"IsNaN": lambda a: math.isnan(a),
|
| 50 |
+
"IsFinite": lambda a: math.isfinite(a),
|
| 51 |
+
"IsInfinite": lambda a: math.isinf(a),
|
| 52 |
+
"IsEven": lambda a: a % 2 == 0.0,
|
| 53 |
+
"IsOdd": lambda a: a % 2 != 0.0,
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
FLOAT_BINARY_OPERATIONS: Mapping[str, Callable[[float, float], float]] = {
|
| 57 |
+
"Add": lambda a, b: a + b,
|
| 58 |
+
"Sub": lambda a, b: a - b,
|
| 59 |
+
"Mul": lambda a, b: a * b,
|
| 60 |
+
"Div": lambda a, b: a / b,
|
| 61 |
+
"Mod": lambda a, b: a % b,
|
| 62 |
+
"Pow": lambda a, b: a**b,
|
| 63 |
+
"FloorDiv": lambda a, b: a // b,
|
| 64 |
+
"Max": lambda a, b: max(a, b),
|
| 65 |
+
"Min": lambda a, b: min(a, b),
|
| 66 |
+
"Log": lambda a, b: math.log(a, b),
|
| 67 |
+
"Atan2": lambda a, b: math.atan2(a, b),
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
FLOAT_BINARY_CONDITIONS: Mapping[str, Callable[[float, float], bool]] = {
|
| 71 |
+
"Eq": lambda a, b: a == b,
|
| 72 |
+
"Neq": lambda a, b: a != b,
|
| 73 |
+
"Gt": lambda a, b: a > b,
|
| 74 |
+
"Gte": lambda a, b: a >= b,
|
| 75 |
+
"Lt": lambda a, b: a < b,
|
| 76 |
+
"Lte": lambda a, b: a <= b,
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
class FloatUnaryOperation:
|
| 81 |
+
@classmethod
|
| 82 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 83 |
+
return {
|
| 84 |
+
"required": {
|
| 85 |
+
"op": (list(FLOAT_UNARY_OPERATIONS.keys()),),
|
| 86 |
+
"a": DEFAULT_FLOAT,
|
| 87 |
+
}
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
RETURN_TYPES = ("FLOAT",)
|
| 91 |
+
FUNCTION = "op"
|
| 92 |
+
CATEGORY = "math/float"
|
| 93 |
+
|
| 94 |
+
def op(self, op: str, a: float) -> tuple[float]:
|
| 95 |
+
return (FLOAT_UNARY_OPERATIONS[op](a),)
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
class FloatUnaryCondition:
|
| 99 |
+
@classmethod
|
| 100 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 101 |
+
return {
|
| 102 |
+
"required": {
|
| 103 |
+
"op": (list(FLOAT_UNARY_CONDITIONS.keys()),),
|
| 104 |
+
"a": DEFAULT_FLOAT,
|
| 105 |
+
}
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
RETURN_TYPES = ("BOOLEAN",)
|
| 109 |
+
FUNCTION = "op"
|
| 110 |
+
CATEGORY = "math/float"
|
| 111 |
+
|
| 112 |
+
def op(self, op: str, a: float) -> tuple[bool]:
|
| 113 |
+
return (FLOAT_UNARY_CONDITIONS[op](a),)
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
class FloatBinaryOperation:
|
| 117 |
+
@classmethod
|
| 118 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 119 |
+
return {
|
| 120 |
+
"required": {
|
| 121 |
+
"op": (list(FLOAT_BINARY_OPERATIONS.keys()),),
|
| 122 |
+
"a": DEFAULT_FLOAT,
|
| 123 |
+
"b": DEFAULT_FLOAT,
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
RETURN_TYPES = ("FLOAT",)
|
| 128 |
+
FUNCTION = "op"
|
| 129 |
+
CATEGORY = "math/float"
|
| 130 |
+
|
| 131 |
+
def op(self, op: str, a: float, b: float) -> tuple[float]:
|
| 132 |
+
return (FLOAT_BINARY_OPERATIONS[op](a, b),)
|
| 133 |
+
|
| 134 |
+
|
| 135 |
+
class FloatBinaryCondition:
|
| 136 |
+
@classmethod
|
| 137 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 138 |
+
return {
|
| 139 |
+
"required": {
|
| 140 |
+
"op": (list(FLOAT_BINARY_CONDITIONS.keys()),),
|
| 141 |
+
"a": DEFAULT_FLOAT,
|
| 142 |
+
"b": DEFAULT_FLOAT,
|
| 143 |
+
}
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
RETURN_TYPES = ("BOOLEAN",)
|
| 147 |
+
FUNCTION = "op"
|
| 148 |
+
CATEGORY = "math/float"
|
| 149 |
+
|
| 150 |
+
def op(self, op: str, a: float, b: float) -> tuple[bool]:
|
| 151 |
+
return (FLOAT_BINARY_CONDITIONS[op](a, b),)
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
NODE_CLASS_MAPPINGS = {
|
| 155 |
+
"CM_FloatUnaryOperation": FloatUnaryOperation,
|
| 156 |
+
"CM_FloatUnaryCondition": FloatUnaryCondition,
|
| 157 |
+
"CM_FloatBinaryOperation": FloatBinaryOperation,
|
| 158 |
+
"CM_FloatBinaryCondition": FloatBinaryCondition,
|
| 159 |
+
}
|
custom_nodes/ComfyMath/src/comfymath/graphics.py
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from abc import ABC, abstractmethod
|
| 2 |
+
from typing import Any, Mapping, Sequence, Tuple
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
SDXL_SUPPORTED_RESOLUTIONS = [
|
| 6 |
+
(1024, 1024, 1.0),
|
| 7 |
+
(1152, 896, 1.2857142857142858),
|
| 8 |
+
(896, 1152, 0.7777777777777778),
|
| 9 |
+
(1216, 832, 1.4615384615384615),
|
| 10 |
+
(832, 1216, 0.6842105263157895),
|
| 11 |
+
(1344, 768, 1.75),
|
| 12 |
+
(768, 1344, 0.5714285714285714),
|
| 13 |
+
(1536, 640, 2.4),
|
| 14 |
+
(640, 1536, 0.4166666666666667),
|
| 15 |
+
]
|
| 16 |
+
|
| 17 |
+
SDXL_EXTENDED_RESOLUTIONS = [
|
| 18 |
+
(512, 2048, 0.25),
|
| 19 |
+
(512, 1984, 0.26),
|
| 20 |
+
(512, 1920, 0.27),
|
| 21 |
+
(512, 1856, 0.28),
|
| 22 |
+
(576, 1792, 0.32),
|
| 23 |
+
(576, 1728, 0.33),
|
| 24 |
+
(576, 1664, 0.35),
|
| 25 |
+
(640, 1600, 0.4),
|
| 26 |
+
(640, 1536, 0.42),
|
| 27 |
+
(704, 1472, 0.48),
|
| 28 |
+
(704, 1408, 0.5),
|
| 29 |
+
(704, 1344, 0.52),
|
| 30 |
+
(768, 1344, 0.57),
|
| 31 |
+
(768, 1280, 0.6),
|
| 32 |
+
(832, 1216, 0.68),
|
| 33 |
+
(832, 1152, 0.72),
|
| 34 |
+
(896, 1152, 0.78),
|
| 35 |
+
(896, 1088, 0.82),
|
| 36 |
+
(960, 1088, 0.88),
|
| 37 |
+
(960, 1024, 0.94),
|
| 38 |
+
(1024, 1024, 1.0),
|
| 39 |
+
(1024, 960, 1.8),
|
| 40 |
+
(1088, 960, 1.14),
|
| 41 |
+
(1088, 896, 1.22),
|
| 42 |
+
(1152, 896, 1.30),
|
| 43 |
+
(1152, 832, 1.39),
|
| 44 |
+
(1216, 832, 1.47),
|
| 45 |
+
(1280, 768, 1.68),
|
| 46 |
+
(1344, 768, 1.76),
|
| 47 |
+
(1408, 704, 2.0),
|
| 48 |
+
(1472, 704, 2.10),
|
| 49 |
+
(1536, 640, 2.4),
|
| 50 |
+
(1600, 640, 2.5),
|
| 51 |
+
(1664, 576, 2.90),
|
| 52 |
+
(1728, 576, 3.0),
|
| 53 |
+
(1792, 576, 3.12),
|
| 54 |
+
(1856, 512, 3.63),
|
| 55 |
+
(1920, 512, 3.76),
|
| 56 |
+
(1984, 512, 3.89),
|
| 57 |
+
(2048, 512, 4.0),
|
| 58 |
+
]
|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
class Resolution(ABC):
|
| 62 |
+
@classmethod
|
| 63 |
+
@abstractmethod
|
| 64 |
+
def resolutions(cls) -> Sequence[Tuple[int, int, float]]: ...
|
| 65 |
+
|
| 66 |
+
@classmethod
|
| 67 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 68 |
+
return {
|
| 69 |
+
"required": {
|
| 70 |
+
"resolution": ([f"{res[0]}x{res[1]}" for res in cls.resolutions()],)
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
RETURN_TYPES = ("INT", "INT")
|
| 75 |
+
RETURN_NAMES = ("width", "height")
|
| 76 |
+
FUNCTION = "op"
|
| 77 |
+
CATEGORY = "math/graphics"
|
| 78 |
+
|
| 79 |
+
def op(self, resolution: str) -> tuple[int, int]:
|
| 80 |
+
width, height = resolution.split("x")
|
| 81 |
+
return (int(width), int(height))
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
class NearestResolution(ABC):
|
| 85 |
+
@classmethod
|
| 86 |
+
@abstractmethod
|
| 87 |
+
def resolutions(cls) -> Sequence[Tuple[int, int, float]]: ...
|
| 88 |
+
|
| 89 |
+
@classmethod
|
| 90 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 91 |
+
return {"required": {"image": ("IMAGE",)}}
|
| 92 |
+
|
| 93 |
+
RETURN_TYPES = ("INT", "INT")
|
| 94 |
+
RETURN_NAMES = ("width", "height")
|
| 95 |
+
FUNCTION = "op"
|
| 96 |
+
CATEGORY = "math/graphics"
|
| 97 |
+
|
| 98 |
+
def op(self, image) -> tuple[int, int]:
|
| 99 |
+
image_width = image.size()[2]
|
| 100 |
+
image_height = image.size()[1]
|
| 101 |
+
print(f"Input image resolution: {image_width}x{image_height}")
|
| 102 |
+
image_ratio = image_width / image_height
|
| 103 |
+
differences = [
|
| 104 |
+
(abs(image_ratio - resolution[2]), resolution)
|
| 105 |
+
for resolution in self.resolutions()
|
| 106 |
+
]
|
| 107 |
+
smallest = None
|
| 108 |
+
for difference in differences:
|
| 109 |
+
if smallest is None:
|
| 110 |
+
smallest = difference
|
| 111 |
+
else:
|
| 112 |
+
if difference[0] < smallest[0]:
|
| 113 |
+
smallest = difference
|
| 114 |
+
if smallest is not None:
|
| 115 |
+
width = smallest[1][0]
|
| 116 |
+
height = smallest[1][1]
|
| 117 |
+
else:
|
| 118 |
+
width = 1024
|
| 119 |
+
height = 1024
|
| 120 |
+
print(f"Selected resolution: {width}x{height}")
|
| 121 |
+
return (width, height)
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
class SDXLResolution(Resolution):
|
| 125 |
+
@classmethod
|
| 126 |
+
def resolutions(cls):
|
| 127 |
+
return SDXL_SUPPORTED_RESOLUTIONS
|
| 128 |
+
|
| 129 |
+
|
| 130 |
+
class SDXLExtendedResolution(Resolution):
|
| 131 |
+
@classmethod
|
| 132 |
+
def resolutions(cls):
|
| 133 |
+
return SDXL_EXTENDED_RESOLUTIONS
|
| 134 |
+
|
| 135 |
+
|
| 136 |
+
class NearestSDXLResolution(NearestResolution):
|
| 137 |
+
@classmethod
|
| 138 |
+
def resolutions(cls):
|
| 139 |
+
return SDXL_SUPPORTED_RESOLUTIONS
|
| 140 |
+
|
| 141 |
+
|
| 142 |
+
class NearestSDXLExtendedResolution(NearestResolution):
|
| 143 |
+
@classmethod
|
| 144 |
+
def resolutions(cls):
|
| 145 |
+
return SDXL_EXTENDED_RESOLUTIONS
|
| 146 |
+
|
| 147 |
+
|
| 148 |
+
NODE_CLASS_MAPPINGS = {
|
| 149 |
+
"CM_SDXLResolution": SDXLResolution,
|
| 150 |
+
"CM_NearestSDXLResolution": NearestSDXLResolution,
|
| 151 |
+
"CM_SDXLExtendedResolution": SDXLExtendedResolution,
|
| 152 |
+
"CM_NearestSDXLExtendedResolution": NearestSDXLExtendedResolution,
|
| 153 |
+
}
|
custom_nodes/ComfyMath/src/comfymath/int.py
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import math
|
| 2 |
+
|
| 3 |
+
from typing import Any, Callable, Mapping
|
| 4 |
+
|
| 5 |
+
DEFAULT_INT = ("INT", {"default": 0})
|
| 6 |
+
|
| 7 |
+
INT_UNARY_OPERATIONS: Mapping[str, Callable[[int], int]] = {
|
| 8 |
+
"Abs": lambda a: abs(a),
|
| 9 |
+
"Neg": lambda a: -a,
|
| 10 |
+
"Inc": lambda a: a + 1,
|
| 11 |
+
"Dec": lambda a: a - 1,
|
| 12 |
+
"Sqr": lambda a: a * a,
|
| 13 |
+
"Cube": lambda a: a * a * a,
|
| 14 |
+
"Not": lambda a: ~a,
|
| 15 |
+
"Factorial": lambda a: math.factorial(a),
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
INT_UNARY_CONDITIONS: Mapping[str, Callable[[int], bool]] = {
|
| 19 |
+
"IsZero": lambda a: a == 0,
|
| 20 |
+
"IsNonZero": lambda a: a != 0,
|
| 21 |
+
"IsPositive": lambda a: a > 0,
|
| 22 |
+
"IsNegative": lambda a: a < 0,
|
| 23 |
+
"IsEven": lambda a: a % 2 == 0,
|
| 24 |
+
"IsOdd": lambda a: a % 2 == 1,
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
INT_BINARY_OPERATIONS: Mapping[str, Callable[[int, int], int]] = {
|
| 28 |
+
"Add": lambda a, b: a + b,
|
| 29 |
+
"Sub": lambda a, b: a - b,
|
| 30 |
+
"Mul": lambda a, b: a * b,
|
| 31 |
+
"Div": lambda a, b: a // b,
|
| 32 |
+
"Mod": lambda a, b: a % b,
|
| 33 |
+
"Pow": lambda a, b: a**b,
|
| 34 |
+
"And": lambda a, b: a & b,
|
| 35 |
+
"Nand": lambda a, b: ~a & b,
|
| 36 |
+
"Or": lambda a, b: a | b,
|
| 37 |
+
"Nor": lambda a, b: ~a & b,
|
| 38 |
+
"Xor": lambda a, b: a ^ b,
|
| 39 |
+
"Xnor": lambda a, b: ~a ^ b,
|
| 40 |
+
"Shl": lambda a, b: a << b,
|
| 41 |
+
"Shr": lambda a, b: a >> b,
|
| 42 |
+
"Max": lambda a, b: max(a, b),
|
| 43 |
+
"Min": lambda a, b: min(a, b),
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
INT_BINARY_CONDITIONS: Mapping[str, Callable[[int, int], bool]] = {
|
| 47 |
+
"Eq": lambda a, b: a == b,
|
| 48 |
+
"Neq": lambda a, b: a != b,
|
| 49 |
+
"Gt": lambda a, b: a > b,
|
| 50 |
+
"Lt": lambda a, b: a < b,
|
| 51 |
+
"Geq": lambda a, b: a >= b,
|
| 52 |
+
"Leq": lambda a, b: a <= b,
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
class IntUnaryOperation:
|
| 57 |
+
@classmethod
|
| 58 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 59 |
+
return {
|
| 60 |
+
"required": {"op": (list(INT_UNARY_OPERATIONS.keys()),), "a": DEFAULT_INT}
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
RETURN_TYPES = ("INT",)
|
| 64 |
+
FUNCTION = "op"
|
| 65 |
+
CATEGORY = "math/int"
|
| 66 |
+
|
| 67 |
+
def op(self, op: str, a: int) -> tuple[int]:
|
| 68 |
+
return (INT_UNARY_OPERATIONS[op](a),)
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
class IntUnaryCondition:
|
| 72 |
+
@classmethod
|
| 73 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 74 |
+
return {
|
| 75 |
+
"required": {"op": (list(INT_UNARY_CONDITIONS.keys()),), "a": DEFAULT_INT}
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
RETURN_TYPES = ("BOOL",)
|
| 79 |
+
FUNCTION = "op"
|
| 80 |
+
CATEGORY = "math/int"
|
| 81 |
+
|
| 82 |
+
def op(self, op: str, a: int) -> tuple[bool]:
|
| 83 |
+
return (INT_UNARY_CONDITIONS[op](a),)
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
class IntBinaryOperation:
|
| 87 |
+
@classmethod
|
| 88 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 89 |
+
return {
|
| 90 |
+
"required": {
|
| 91 |
+
"op": (list(INT_BINARY_OPERATIONS.keys()),),
|
| 92 |
+
"a": DEFAULT_INT,
|
| 93 |
+
"b": DEFAULT_INT,
|
| 94 |
+
}
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
RETURN_TYPES = ("INT",)
|
| 98 |
+
FUNCTION = "op"
|
| 99 |
+
CATEGORY = "math/int"
|
| 100 |
+
|
| 101 |
+
def op(self, op: str, a: int, b: int) -> tuple[int]:
|
| 102 |
+
return (INT_BINARY_OPERATIONS[op](a, b),)
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
class IntBinaryCondition:
|
| 106 |
+
@classmethod
|
| 107 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 108 |
+
return {
|
| 109 |
+
"required": {
|
| 110 |
+
"op": (list(INT_BINARY_CONDITIONS.keys()),),
|
| 111 |
+
"a": DEFAULT_INT,
|
| 112 |
+
"b": DEFAULT_INT,
|
| 113 |
+
}
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
RETURN_TYPES = ("BOOL",)
|
| 117 |
+
FUNCTION = "op"
|
| 118 |
+
CATEGORY = "math/int"
|
| 119 |
+
|
| 120 |
+
def op(self, op: str, a: int, b: int) -> tuple[bool]:
|
| 121 |
+
return (INT_BINARY_CONDITIONS[op](a, b),)
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
NODE_CLASS_MAPPINGS = {
|
| 125 |
+
"CM_IntUnaryOperation": IntUnaryOperation,
|
| 126 |
+
"CM_IntUnaryCondition": IntUnaryCondition,
|
| 127 |
+
"CM_IntBinaryOperation": IntBinaryOperation,
|
| 128 |
+
"CM_IntBinaryCondition": IntBinaryCondition,
|
| 129 |
+
}
|
custom_nodes/ComfyMath/src/comfymath/number.py
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from dataclasses import dataclass
|
| 2 |
+
from typing import Any, Callable, Mapping
|
| 3 |
+
|
| 4 |
+
from .float import (
|
| 5 |
+
FLOAT_UNARY_OPERATIONS,
|
| 6 |
+
FLOAT_UNARY_CONDITIONS,
|
| 7 |
+
FLOAT_BINARY_OPERATIONS,
|
| 8 |
+
FLOAT_BINARY_CONDITIONS,
|
| 9 |
+
)
|
| 10 |
+
from .types import Number
|
| 11 |
+
|
| 12 |
+
DEFAULT_NUMBER = ("NUMBER", {"default": 0.0})
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
class NumberUnaryOperation:
|
| 16 |
+
@classmethod
|
| 17 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 18 |
+
return {
|
| 19 |
+
"required": {
|
| 20 |
+
"op": (list(FLOAT_UNARY_OPERATIONS.keys()),),
|
| 21 |
+
"a": DEFAULT_NUMBER,
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
RETURN_TYPES = ("NUMBER",)
|
| 26 |
+
FUNCTION = "op"
|
| 27 |
+
CATEGORY = "math/number"
|
| 28 |
+
|
| 29 |
+
def op(self, op: str, a: Number) -> tuple[float]:
|
| 30 |
+
return (FLOAT_UNARY_OPERATIONS[op](float(a)),)
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
class NumberUnaryCondition:
|
| 34 |
+
@classmethod
|
| 35 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 36 |
+
return {
|
| 37 |
+
"required": {
|
| 38 |
+
"op": (list(FLOAT_UNARY_CONDITIONS.keys()),),
|
| 39 |
+
"a": DEFAULT_NUMBER,
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
RETURN_TYPES = ("BOOL",)
|
| 44 |
+
FUNCTION = "op"
|
| 45 |
+
CATEGORY = "math/Number"
|
| 46 |
+
|
| 47 |
+
def op(self, op: str, a: Number) -> tuple[bool]:
|
| 48 |
+
return (FLOAT_UNARY_CONDITIONS[op](float(a)),)
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
class NumberBinaryOperation:
|
| 52 |
+
@classmethod
|
| 53 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 54 |
+
return {
|
| 55 |
+
"required": {
|
| 56 |
+
"op": (list(FLOAT_BINARY_OPERATIONS.keys()),),
|
| 57 |
+
"a": DEFAULT_NUMBER,
|
| 58 |
+
"b": DEFAULT_NUMBER,
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
RETURN_TYPES = ("NUMBER",)
|
| 63 |
+
FUNCTION = "op"
|
| 64 |
+
CATEGORY = "math/number"
|
| 65 |
+
|
| 66 |
+
def op(self, op: str, a: Number, b: Number) -> tuple[float]:
|
| 67 |
+
return (FLOAT_BINARY_OPERATIONS[op](float(a), float(b)),)
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
class NumberBinaryCondition:
|
| 71 |
+
@classmethod
|
| 72 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 73 |
+
return {
|
| 74 |
+
"required": {
|
| 75 |
+
"op": (list(FLOAT_BINARY_CONDITIONS.keys()),),
|
| 76 |
+
"a": DEFAULT_NUMBER,
|
| 77 |
+
"b": DEFAULT_NUMBER,
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
RETURN_TYPES = ("BOOL",)
|
| 82 |
+
FUNCTION = "op"
|
| 83 |
+
CATEGORY = "math/float"
|
| 84 |
+
|
| 85 |
+
def op(self, op: str, a: Number, b: Number) -> tuple[bool]:
|
| 86 |
+
return (FLOAT_BINARY_CONDITIONS[op](float(a), float(b)),)
|
| 87 |
+
|
| 88 |
+
|
| 89 |
+
NODE_CLASS_MAPPINGS = {
|
| 90 |
+
"CM_NumberUnaryOperation": NumberUnaryOperation,
|
| 91 |
+
"CM_NumberUnaryCondition": NumberUnaryCondition,
|
| 92 |
+
"CM_NumberBinaryOperation": NumberBinaryOperation,
|
| 93 |
+
"CM_NumberBinaryCondition": NumberBinaryCondition,
|
| 94 |
+
}
|
custom_nodes/ComfyMath/src/comfymath/py.typed
ADDED
|
File without changes
|
custom_nodes/ComfyMath/src/comfymath/types.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import sys
|
| 2 |
+
|
| 3 |
+
if sys.version_info[1] < 10:
|
| 4 |
+
from typing import Tuple, Union
|
| 5 |
+
|
| 6 |
+
Number = Union[int, float]
|
| 7 |
+
Vec2 = Tuple[float, float]
|
| 8 |
+
Vec3 = Tuple[float, float, float]
|
| 9 |
+
Vec4 = Tuple[float, float, float, float]
|
| 10 |
+
else:
|
| 11 |
+
from typing import TypeAlias
|
| 12 |
+
|
| 13 |
+
Number: TypeAlias = int | float
|
| 14 |
+
Vec2: TypeAlias = tuple[float, float]
|
| 15 |
+
Vec3: TypeAlias = tuple[float, float, float]
|
| 16 |
+
Vec4: TypeAlias = tuple[float, float, float, float]
|
custom_nodes/ComfyMath/src/comfymath/vec.py
ADDED
|
@@ -0,0 +1,500 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy
|
| 2 |
+
|
| 3 |
+
from typing import Any, Callable, Mapping
|
| 4 |
+
|
| 5 |
+
from .types import Vec2, Vec3, Vec4
|
| 6 |
+
|
| 7 |
+
VEC2_ZERO = (0.0, 0.0)
|
| 8 |
+
DEFAULT_VEC2 = ("VEC2", {"default": VEC2_ZERO})
|
| 9 |
+
|
| 10 |
+
VEC3_ZERO = (0.0, 0.0, 0.0)
|
| 11 |
+
DEFAULT_VEC3 = ("VEC3", {"default": VEC3_ZERO})
|
| 12 |
+
|
| 13 |
+
VEC4_ZERO = (0.0, 0.0, 0.0, 0.0)
|
| 14 |
+
DEFAULT_VEC4 = ("VEC4", {"default": VEC4_ZERO})
|
| 15 |
+
|
| 16 |
+
VEC_UNARY_OPERATIONS: Mapping[str, Callable[[numpy.ndarray], numpy.ndarray]] = {
|
| 17 |
+
"Neg": lambda a: -a,
|
| 18 |
+
"Normalize": lambda a: a / numpy.linalg.norm(a),
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
VEC_TO_SCALAR_UNARY_OPERATION: Mapping[str, Callable[[numpy.ndarray], float]] = {
|
| 22 |
+
"Norm": lambda a: numpy.linalg.norm(a).astype(float),
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
VEC_UNARY_CONDITIONS: Mapping[str, Callable[[numpy.ndarray], bool]] = {
|
| 26 |
+
"IsZero": lambda a: not numpy.any(a).astype(bool),
|
| 27 |
+
"IsNotZero": lambda a: numpy.any(a).astype(bool),
|
| 28 |
+
"IsNormalized": lambda a: numpy.allclose(a, a / numpy.linalg.norm(a)),
|
| 29 |
+
"IsNotNormalized": lambda a: not numpy.allclose(a, a / numpy.linalg.norm(a)),
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
VEC_BINARY_OPERATIONS: Mapping[
|
| 33 |
+
str, Callable[[numpy.ndarray, numpy.ndarray], numpy.ndarray]
|
| 34 |
+
] = {
|
| 35 |
+
"Add": lambda a, b: a + b,
|
| 36 |
+
"Sub": lambda a, b: a - b,
|
| 37 |
+
"Cross": lambda a, b: numpy.cross(a, b),
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
VEC_TO_SCALAR_BINARY_OPERATION: Mapping[
|
| 41 |
+
str, Callable[[numpy.ndarray, numpy.ndarray], float]
|
| 42 |
+
] = {
|
| 43 |
+
"Dot": lambda a, b: numpy.dot(a, b),
|
| 44 |
+
"Distance": lambda a, b: numpy.linalg.norm(a - b).astype(float),
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
VEC_BINARY_CONDITIONS: Mapping[str, Callable[[numpy.ndarray, numpy.ndarray], bool]] = {
|
| 48 |
+
"Eq": lambda a, b: numpy.allclose(a, b),
|
| 49 |
+
"Neq": lambda a, b: not numpy.allclose(a, b),
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
VEC_SCALAR_OPERATION: Mapping[str, Callable[[numpy.ndarray, float], numpy.ndarray]] = {
|
| 53 |
+
"Mul": lambda a, b: a * b,
|
| 54 |
+
"Div": lambda a, b: a / b,
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
def _vec2_from_numpy(a: numpy.ndarray) -> Vec2:
|
| 59 |
+
return (
|
| 60 |
+
float(a[0]),
|
| 61 |
+
float(a[1]),
|
| 62 |
+
)
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
def _vec3_from_numpy(a: numpy.ndarray) -> Vec3:
|
| 66 |
+
return (
|
| 67 |
+
float(a[0]),
|
| 68 |
+
float(a[1]),
|
| 69 |
+
float(a[2]),
|
| 70 |
+
)
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
def _vec4_from_numpy(a: numpy.ndarray) -> Vec4:
|
| 74 |
+
return (
|
| 75 |
+
float(a[0]),
|
| 76 |
+
float(a[1]),
|
| 77 |
+
float(a[2]),
|
| 78 |
+
float(a[3]),
|
| 79 |
+
)
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
class Vec2UnaryOperation:
|
| 83 |
+
@classmethod
|
| 84 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 85 |
+
return {
|
| 86 |
+
"required": {
|
| 87 |
+
"op": (list(VEC_UNARY_OPERATIONS.keys()),),
|
| 88 |
+
"a": DEFAULT_VEC2,
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
RETURN_TYPES = ("VEC2",)
|
| 93 |
+
FUNCTION = "op"
|
| 94 |
+
CATEGORY = "math/vec2"
|
| 95 |
+
|
| 96 |
+
def op(self, op: str, a: Vec2) -> tuple[Vec2]:
|
| 97 |
+
return (_vec2_from_numpy(VEC_UNARY_OPERATIONS[op](numpy.array(a))),)
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
class Vec2ToScalarUnaryOperation:
|
| 101 |
+
@classmethod
|
| 102 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 103 |
+
return {
|
| 104 |
+
"required": {
|
| 105 |
+
"op": (list(VEC_TO_SCALAR_UNARY_OPERATION.keys()),),
|
| 106 |
+
"a": DEFAULT_VEC2,
|
| 107 |
+
}
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
RETURN_TYPES = ("FLOAT",)
|
| 111 |
+
FUNCTION = "op"
|
| 112 |
+
CATEGORY = "math/vec2"
|
| 113 |
+
|
| 114 |
+
def op(self, op: str, a: Vec2) -> tuple[float]:
|
| 115 |
+
return (VEC_TO_SCALAR_UNARY_OPERATION[op](numpy.array(a)),)
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
class Vec2UnaryCondition:
|
| 119 |
+
@classmethod
|
| 120 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 121 |
+
return {
|
| 122 |
+
"required": {
|
| 123 |
+
"op": (list(VEC_UNARY_CONDITIONS.keys()),),
|
| 124 |
+
"a": DEFAULT_VEC2,
|
| 125 |
+
}
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
RETURN_TYPES = ("BOOL",)
|
| 129 |
+
FUNCTION = "op"
|
| 130 |
+
CATEGORY = "math/vec2"
|
| 131 |
+
|
| 132 |
+
def op(self, op: str, a: Vec2) -> tuple[bool]:
|
| 133 |
+
return (VEC_UNARY_CONDITIONS[op](numpy.array(a)),)
|
| 134 |
+
|
| 135 |
+
|
| 136 |
+
class Vec2BinaryOperation:
|
| 137 |
+
@classmethod
|
| 138 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 139 |
+
return {
|
| 140 |
+
"required": {
|
| 141 |
+
"op": (list(VEC_BINARY_OPERATIONS.keys()),),
|
| 142 |
+
"a": DEFAULT_VEC2,
|
| 143 |
+
"b": DEFAULT_VEC2,
|
| 144 |
+
}
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
RETURN_TYPES = ("VEC2",)
|
| 148 |
+
FUNCTION = "op"
|
| 149 |
+
CATEGORY = "math/vec2"
|
| 150 |
+
|
| 151 |
+
def op(self, op: str, a: Vec2, b: Vec2) -> tuple[Vec2]:
|
| 152 |
+
return (
|
| 153 |
+
_vec2_from_numpy(VEC_BINARY_OPERATIONS[op](numpy.array(a), numpy.array(b))),
|
| 154 |
+
)
|
| 155 |
+
|
| 156 |
+
|
| 157 |
+
class Vec2ToScalarBinaryOperation:
|
| 158 |
+
@classmethod
|
| 159 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 160 |
+
return {
|
| 161 |
+
"required": {
|
| 162 |
+
"op": (list(VEC_TO_SCALAR_BINARY_OPERATION.keys()),),
|
| 163 |
+
"a": DEFAULT_VEC2,
|
| 164 |
+
"b": DEFAULT_VEC2,
|
| 165 |
+
}
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
RETURN_TYPES = ("FLOAT",)
|
| 169 |
+
FUNCTION = "op"
|
| 170 |
+
CATEGORY = "math/vec2"
|
| 171 |
+
|
| 172 |
+
def op(self, op: str, a: Vec2, b: Vec2) -> tuple[float]:
|
| 173 |
+
return (VEC_TO_SCALAR_BINARY_OPERATION[op](numpy.array(a), numpy.array(b)),)
|
| 174 |
+
|
| 175 |
+
|
| 176 |
+
class Vec2BinaryCondition:
|
| 177 |
+
@classmethod
|
| 178 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 179 |
+
return {
|
| 180 |
+
"required": {
|
| 181 |
+
"op": (list(VEC_BINARY_CONDITIONS.keys()),),
|
| 182 |
+
"a": DEFAULT_VEC2,
|
| 183 |
+
"b": DEFAULT_VEC2,
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
RETURN_TYPES = ("BOOL",)
|
| 188 |
+
FUNCTION = "op"
|
| 189 |
+
CATEGORY = "math/vec2"
|
| 190 |
+
|
| 191 |
+
def op(self, op: str, a: Vec2, b: Vec2) -> tuple[bool]:
|
| 192 |
+
return (VEC_BINARY_CONDITIONS[op](numpy.array(a), numpy.array(b)),)
|
| 193 |
+
|
| 194 |
+
|
| 195 |
+
class Vec2ScalarOperation:
|
| 196 |
+
@classmethod
|
| 197 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 198 |
+
return {
|
| 199 |
+
"required": {
|
| 200 |
+
"op": (list(VEC_SCALAR_OPERATION.keys()),),
|
| 201 |
+
"a": DEFAULT_VEC2,
|
| 202 |
+
"b": ("FLOAT",),
|
| 203 |
+
}
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
RETURN_TYPES = ("VEC2",)
|
| 207 |
+
FUNCTION = "op"
|
| 208 |
+
CATEGORY = "math/vec2"
|
| 209 |
+
|
| 210 |
+
def op(self, op: str, a: Vec2, b: float) -> tuple[Vec2]:
|
| 211 |
+
return (_vec2_from_numpy(VEC_SCALAR_OPERATION[op](numpy.array(a), b)),)
|
| 212 |
+
|
| 213 |
+
|
| 214 |
+
class Vec3UnaryOperation:
|
| 215 |
+
@classmethod
|
| 216 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 217 |
+
return {
|
| 218 |
+
"required": {
|
| 219 |
+
"op": (list(VEC_UNARY_OPERATIONS.keys()),),
|
| 220 |
+
"a": DEFAULT_VEC3,
|
| 221 |
+
}
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
+
RETURN_TYPES = ("VEC3",)
|
| 225 |
+
FUNCTION = "op"
|
| 226 |
+
CATEGORY = "math/vec3"
|
| 227 |
+
|
| 228 |
+
def op(self, op: str, a: Vec3) -> tuple[Vec3]:
|
| 229 |
+
return (_vec3_from_numpy(VEC_UNARY_OPERATIONS[op](numpy.array(a))),)
|
| 230 |
+
|
| 231 |
+
|
| 232 |
+
class Vec3ToScalarUnaryOperation:
|
| 233 |
+
@classmethod
|
| 234 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 235 |
+
return {
|
| 236 |
+
"required": {
|
| 237 |
+
"op": (list(VEC_TO_SCALAR_UNARY_OPERATION.keys()),),
|
| 238 |
+
"a": DEFAULT_VEC3,
|
| 239 |
+
}
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
RETURN_TYPES = ("FLOAT",)
|
| 243 |
+
FUNCTION = "op"
|
| 244 |
+
CATEGORY = "math/vec3"
|
| 245 |
+
|
| 246 |
+
def op(self, op: str, a: Vec3) -> tuple[float]:
|
| 247 |
+
return (VEC_TO_SCALAR_UNARY_OPERATION[op](numpy.array(a)),)
|
| 248 |
+
|
| 249 |
+
|
| 250 |
+
class Vec3UnaryCondition:
|
| 251 |
+
@classmethod
|
| 252 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 253 |
+
return {
|
| 254 |
+
"required": {
|
| 255 |
+
"op": (list(VEC_UNARY_CONDITIONS.keys()),),
|
| 256 |
+
"a": DEFAULT_VEC3,
|
| 257 |
+
}
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
RETURN_TYPES = ("BOOL",)
|
| 261 |
+
FUNCTION = "op"
|
| 262 |
+
CATEGORY = "math/vec3"
|
| 263 |
+
|
| 264 |
+
def op(self, op: str, a: Vec3) -> tuple[bool]:
|
| 265 |
+
return (VEC_UNARY_CONDITIONS[op](numpy.array(a)),)
|
| 266 |
+
|
| 267 |
+
|
| 268 |
+
class Vec3BinaryOperation:
|
| 269 |
+
@classmethod
|
| 270 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 271 |
+
return {
|
| 272 |
+
"required": {
|
| 273 |
+
"op": (list(VEC_BINARY_OPERATIONS.keys()),),
|
| 274 |
+
"a": DEFAULT_VEC3,
|
| 275 |
+
"b": DEFAULT_VEC3,
|
| 276 |
+
}
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
RETURN_TYPES = ("VEC3",)
|
| 280 |
+
FUNCTION = "op"
|
| 281 |
+
CATEGORY = "math/vec3"
|
| 282 |
+
|
| 283 |
+
def op(self, op: str, a: Vec3, b: Vec3) -> tuple[Vec3]:
|
| 284 |
+
return (
|
| 285 |
+
_vec3_from_numpy(VEC_BINARY_OPERATIONS[op](numpy.array(a), numpy.array(b))),
|
| 286 |
+
)
|
| 287 |
+
|
| 288 |
+
|
| 289 |
+
class Vec3ToScalarBinaryOperation:
|
| 290 |
+
@classmethod
|
| 291 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 292 |
+
return {
|
| 293 |
+
"required": {
|
| 294 |
+
"op": (list(VEC_TO_SCALAR_BINARY_OPERATION.keys()),),
|
| 295 |
+
"a": DEFAULT_VEC3,
|
| 296 |
+
"b": DEFAULT_VEC3,
|
| 297 |
+
}
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
RETURN_TYPES = ("FLOAT",)
|
| 301 |
+
FUNCTION = "op"
|
| 302 |
+
CATEGORY = "math/vec3"
|
| 303 |
+
|
| 304 |
+
def op(self, op: str, a: Vec3, b: Vec3) -> tuple[float]:
|
| 305 |
+
return (VEC_TO_SCALAR_BINARY_OPERATION[op](numpy.array(a), numpy.array(b)),)
|
| 306 |
+
|
| 307 |
+
|
| 308 |
+
class Vec3BinaryCondition:
|
| 309 |
+
@classmethod
|
| 310 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 311 |
+
return {
|
| 312 |
+
"required": {
|
| 313 |
+
"op": (list(VEC_BINARY_CONDITIONS.keys()),),
|
| 314 |
+
"a": DEFAULT_VEC3,
|
| 315 |
+
"b": DEFAULT_VEC3,
|
| 316 |
+
}
|
| 317 |
+
}
|
| 318 |
+
|
| 319 |
+
RETURN_TYPES = ("BOOL",)
|
| 320 |
+
FUNCTION = "op"
|
| 321 |
+
CATEGORY = "math/vec3"
|
| 322 |
+
|
| 323 |
+
def op(self, op: str, a: Vec3, b: Vec3) -> tuple[bool]:
|
| 324 |
+
return (VEC_BINARY_CONDITIONS[op](numpy.array(a), numpy.array(b)),)
|
| 325 |
+
|
| 326 |
+
|
| 327 |
+
class Vec3ScalarOperation:
|
| 328 |
+
@classmethod
|
| 329 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 330 |
+
return {
|
| 331 |
+
"required": {
|
| 332 |
+
"op": (list(VEC_SCALAR_OPERATION.keys()),),
|
| 333 |
+
"a": DEFAULT_VEC3,
|
| 334 |
+
"b": ("FLOAT",),
|
| 335 |
+
}
|
| 336 |
+
}
|
| 337 |
+
|
| 338 |
+
RETURN_TYPES = ("VEC3",)
|
| 339 |
+
FUNCTION = "op"
|
| 340 |
+
CATEGORY = "math/vec3"
|
| 341 |
+
|
| 342 |
+
def op(self, op: str, a: Vec3, b: float) -> tuple[Vec3]:
|
| 343 |
+
return (_vec3_from_numpy(VEC_SCALAR_OPERATION[op](numpy.array(a), b)),)
|
| 344 |
+
|
| 345 |
+
|
| 346 |
+
class Vec4UnaryOperation:
|
| 347 |
+
@classmethod
|
| 348 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 349 |
+
return {
|
| 350 |
+
"required": {
|
| 351 |
+
"op": (list(VEC_UNARY_OPERATIONS.keys()),),
|
| 352 |
+
"a": DEFAULT_VEC4,
|
| 353 |
+
}
|
| 354 |
+
}
|
| 355 |
+
|
| 356 |
+
RETURN_TYPES = ("VEC4",)
|
| 357 |
+
FUNCTION = "op"
|
| 358 |
+
CATEGORY = "math/vec4"
|
| 359 |
+
|
| 360 |
+
def op(self, op: str, a: Vec4) -> tuple[Vec4]:
|
| 361 |
+
return (_vec4_from_numpy(VEC_UNARY_OPERATIONS[op](numpy.array(a))),)
|
| 362 |
+
|
| 363 |
+
|
| 364 |
+
class Vec4ToScalarUnaryOperation:
|
| 365 |
+
@classmethod
|
| 366 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 367 |
+
return {
|
| 368 |
+
"required": {
|
| 369 |
+
"op": (list(VEC_TO_SCALAR_UNARY_OPERATION.keys()),),
|
| 370 |
+
"a": DEFAULT_VEC4,
|
| 371 |
+
}
|
| 372 |
+
}
|
| 373 |
+
|
| 374 |
+
RETURN_TYPES = ("FLOAT",)
|
| 375 |
+
FUNCTION = "op"
|
| 376 |
+
CATEGORY = "math/vec4"
|
| 377 |
+
|
| 378 |
+
def op(self, op: str, a: Vec4) -> tuple[float]:
|
| 379 |
+
return (VEC_TO_SCALAR_UNARY_OPERATION[op](numpy.array(a)),)
|
| 380 |
+
|
| 381 |
+
|
| 382 |
+
class Vec4UnaryCondition:
|
| 383 |
+
@classmethod
|
| 384 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 385 |
+
return {
|
| 386 |
+
"required": {
|
| 387 |
+
"op": (list(VEC_UNARY_CONDITIONS.keys()),),
|
| 388 |
+
"a": DEFAULT_VEC4,
|
| 389 |
+
}
|
| 390 |
+
}
|
| 391 |
+
|
| 392 |
+
RETURN_TYPES = ("BOOL",)
|
| 393 |
+
FUNCTION = "op"
|
| 394 |
+
CATEGORY = "math/vec4"
|
| 395 |
+
|
| 396 |
+
def op(self, op: str, a: Vec4) -> tuple[bool]:
|
| 397 |
+
return (VEC_UNARY_CONDITIONS[op](numpy.array(a)),)
|
| 398 |
+
|
| 399 |
+
|
| 400 |
+
class Vec4BinaryOperation:
|
| 401 |
+
@classmethod
|
| 402 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 403 |
+
return {
|
| 404 |
+
"required": {
|
| 405 |
+
"op": (list(VEC_BINARY_OPERATIONS.keys()),),
|
| 406 |
+
"a": DEFAULT_VEC4,
|
| 407 |
+
"b": DEFAULT_VEC4,
|
| 408 |
+
}
|
| 409 |
+
}
|
| 410 |
+
|
| 411 |
+
RETURN_TYPES = ("VEC4",)
|
| 412 |
+
FUNCTION = "op"
|
| 413 |
+
CATEGORY = "math/vec4"
|
| 414 |
+
|
| 415 |
+
def op(self, op: str, a: Vec4, b: Vec4) -> tuple[Vec4]:
|
| 416 |
+
return (
|
| 417 |
+
_vec4_from_numpy(VEC_BINARY_OPERATIONS[op](numpy.array(a), numpy.array(b))),
|
| 418 |
+
)
|
| 419 |
+
|
| 420 |
+
|
| 421 |
+
class Vec4ToScalarBinaryOperation:
|
| 422 |
+
@classmethod
|
| 423 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 424 |
+
return {
|
| 425 |
+
"required": {
|
| 426 |
+
"op": (list(VEC_TO_SCALAR_BINARY_OPERATION.keys()),),
|
| 427 |
+
"a": DEFAULT_VEC4,
|
| 428 |
+
"b": DEFAULT_VEC4,
|
| 429 |
+
}
|
| 430 |
+
}
|
| 431 |
+
|
| 432 |
+
RETURN_TYPES = ("FLOAT",)
|
| 433 |
+
FUNCTION = "op"
|
| 434 |
+
CATEGORY = "math/vec4"
|
| 435 |
+
|
| 436 |
+
def op(self, op: str, a: Vec4, b: Vec4) -> tuple[float]:
|
| 437 |
+
return (VEC_TO_SCALAR_BINARY_OPERATION[op](numpy.array(a), numpy.array(b)),)
|
| 438 |
+
|
| 439 |
+
|
| 440 |
+
class Vec4BinaryCondition:
|
| 441 |
+
@classmethod
|
| 442 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 443 |
+
return {
|
| 444 |
+
"required": {
|
| 445 |
+
"op": (list(VEC_BINARY_CONDITIONS.keys()),),
|
| 446 |
+
"a": DEFAULT_VEC4,
|
| 447 |
+
"b": DEFAULT_VEC4,
|
| 448 |
+
}
|
| 449 |
+
}
|
| 450 |
+
|
| 451 |
+
RETURN_TYPES = ("BOOL",)
|
| 452 |
+
FUNCTION = "op"
|
| 453 |
+
CATEGORY = "math/vec4"
|
| 454 |
+
|
| 455 |
+
def op(self, op: str, a: Vec4, b: Vec4) -> tuple[bool]:
|
| 456 |
+
return (VEC_BINARY_CONDITIONS[op](numpy.array(a), numpy.array(b)),)
|
| 457 |
+
|
| 458 |
+
|
| 459 |
+
class Vec4ScalarOperation:
|
| 460 |
+
@classmethod
|
| 461 |
+
def INPUT_TYPES(cls) -> Mapping[str, Any]:
|
| 462 |
+
return {
|
| 463 |
+
"required": {
|
| 464 |
+
"op": (list(VEC_SCALAR_OPERATION.keys()),),
|
| 465 |
+
"a": DEFAULT_VEC4,
|
| 466 |
+
"b": ("FLOAT",),
|
| 467 |
+
}
|
| 468 |
+
}
|
| 469 |
+
|
| 470 |
+
RETURN_TYPES = ("VEC4",)
|
| 471 |
+
FUNCTION = "op"
|
| 472 |
+
CATEGORY = "math/vec4"
|
| 473 |
+
|
| 474 |
+
def op(self, op: str, a: Vec4, b: float) -> tuple[Vec4]:
|
| 475 |
+
return (_vec4_from_numpy(VEC_SCALAR_OPERATION[op](numpy.array(a), b)),)
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
NODE_CLASS_MAPPINGS = {
|
| 479 |
+
"CM_Vec2UnaryOperation": Vec2UnaryOperation,
|
| 480 |
+
"CM_Vec2UnaryCondition": Vec2UnaryCondition,
|
| 481 |
+
"CM_Vec2ToScalarUnaryOperation": Vec2ToScalarUnaryOperation,
|
| 482 |
+
"CM_Vec2BinaryOperation": Vec2BinaryOperation,
|
| 483 |
+
"CM_Vec2BinaryCondition": Vec2BinaryCondition,
|
| 484 |
+
"CM_Vec2ToScalarBinaryOperation": Vec2ToScalarBinaryOperation,
|
| 485 |
+
"CM_Vec2ScalarOperation": Vec2ScalarOperation,
|
| 486 |
+
"CM_Vec3UnaryOperation": Vec3UnaryOperation,
|
| 487 |
+
"CM_Vec3UnaryCondition": Vec3UnaryCondition,
|
| 488 |
+
"CM_Vec3ToScalarUnaryOperation": Vec3ToScalarUnaryOperation,
|
| 489 |
+
"CM_Vec3BinaryOperation": Vec3BinaryOperation,
|
| 490 |
+
"CM_Vec3BinaryCondition": Vec3BinaryCondition,
|
| 491 |
+
"CM_Vec3ToScalarBinaryOperation": Vec3ToScalarBinaryOperation,
|
| 492 |
+
"CM_Vec3ScalarOperation": Vec3ScalarOperation,
|
| 493 |
+
"CM_Vec4UnaryOperation": Vec4UnaryOperation,
|
| 494 |
+
"CM_Vec4UnaryCondition": Vec4UnaryCondition,
|
| 495 |
+
"CM_Vec4ToScalarUnaryOperation": Vec4ToScalarUnaryOperation,
|
| 496 |
+
"CM_Vec4BinaryOperation": Vec4BinaryOperation,
|
| 497 |
+
"CM_Vec4BinaryCondition": Vec4BinaryCondition,
|
| 498 |
+
"CM_Vec4ToScalarBinaryOperation": Vec4ToScalarBinaryOperation,
|
| 499 |
+
"CM_Vec4ScalarOperation": Vec4ScalarOperation,
|
| 500 |
+
}
|
custom_nodes/ComfyUI-Detail-Daemon/.gitignore
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Byte-compiled / optimized / DLL files
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.py[cod]
|
| 4 |
+
*$py.class
|
| 5 |
+
|
| 6 |
+
# C extensions
|
| 7 |
+
*.so
|
| 8 |
+
|
| 9 |
+
# Distribution / packaging
|
| 10 |
+
.Python
|
| 11 |
+
build/
|
| 12 |
+
develop-eggs/
|
| 13 |
+
dist/
|
| 14 |
+
downloads/
|
| 15 |
+
eggs/
|
| 16 |
+
.eggs/
|
| 17 |
+
lib/
|
| 18 |
+
lib64/
|
| 19 |
+
parts/
|
| 20 |
+
sdist/
|
| 21 |
+
var/
|
| 22 |
+
wheels/
|
| 23 |
+
share/python-wheels/
|
| 24 |
+
*.egg-info/
|
| 25 |
+
.installed.cfg
|
| 26 |
+
*.egg
|
| 27 |
+
MANIFEST
|
| 28 |
+
|
| 29 |
+
# PyInstaller
|
| 30 |
+
# Usually these files are written by a python script from a template
|
| 31 |
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
| 32 |
+
*.manifest
|
| 33 |
+
*.spec
|
| 34 |
+
|
| 35 |
+
# Installer logs
|
| 36 |
+
pip-log.txt
|
| 37 |
+
pip-delete-this-directory.txt
|
| 38 |
+
|
| 39 |
+
# Unit test / coverage reports
|
| 40 |
+
htmlcov/
|
| 41 |
+
.tox/
|
| 42 |
+
.nox/
|
| 43 |
+
.coverage
|
| 44 |
+
.coverage.*
|
| 45 |
+
.cache
|
| 46 |
+
nosetests.xml
|
| 47 |
+
coverage.xml
|
| 48 |
+
*.cover
|
| 49 |
+
*.py,cover
|
| 50 |
+
.hypothesis/
|
| 51 |
+
.pytest_cache/
|
| 52 |
+
cover/
|
| 53 |
+
|
| 54 |
+
# Translations
|
| 55 |
+
*.mo
|
| 56 |
+
*.pot
|
| 57 |
+
|
| 58 |
+
# Django stuff:
|
| 59 |
+
*.log
|
| 60 |
+
local_settings.py
|
| 61 |
+
db.sqlite3
|
| 62 |
+
db.sqlite3-journal
|
| 63 |
+
|
| 64 |
+
# Flask stuff:
|
| 65 |
+
instance/
|
| 66 |
+
.webassets-cache
|
| 67 |
+
|
| 68 |
+
# Scrapy stuff:
|
| 69 |
+
.scrapy
|
| 70 |
+
|
| 71 |
+
# Sphinx documentation
|
| 72 |
+
docs/_build/
|
| 73 |
+
|
| 74 |
+
# PyBuilder
|
| 75 |
+
.pybuilder/
|
| 76 |
+
target/
|
| 77 |
+
|
| 78 |
+
# Jupyter Notebook
|
| 79 |
+
.ipynb_checkpoints
|
| 80 |
+
|
| 81 |
+
# IPython
|
| 82 |
+
profile_default/
|
| 83 |
+
ipython_config.py
|
| 84 |
+
|
| 85 |
+
# pyenv
|
| 86 |
+
# For a library or package, you might want to ignore these files since the code is
|
| 87 |
+
# intended to run in multiple environments; otherwise, check them in:
|
| 88 |
+
# .python-version
|
| 89 |
+
|
| 90 |
+
# pipenv
|
| 91 |
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
| 92 |
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
| 93 |
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
| 94 |
+
# install all needed dependencies.
|
| 95 |
+
#Pipfile.lock
|
| 96 |
+
|
| 97 |
+
# poetry
|
| 98 |
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
| 99 |
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
| 100 |
+
# commonly ignored for libraries.
|
| 101 |
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
| 102 |
+
#poetry.lock
|
| 103 |
+
|
| 104 |
+
# pdm
|
| 105 |
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
| 106 |
+
#pdm.lock
|
| 107 |
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
| 108 |
+
# in version control.
|
| 109 |
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
| 110 |
+
.pdm.toml
|
| 111 |
+
.pdm-python
|
| 112 |
+
.pdm-build/
|
| 113 |
+
|
| 114 |
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
| 115 |
+
__pypackages__/
|
| 116 |
+
|
| 117 |
+
# Celery stuff
|
| 118 |
+
celerybeat-schedule
|
| 119 |
+
celerybeat.pid
|
| 120 |
+
|
| 121 |
+
# SageMath parsed files
|
| 122 |
+
*.sage.py
|
| 123 |
+
|
| 124 |
+
# Environments
|
| 125 |
+
.env
|
| 126 |
+
.venv
|
| 127 |
+
env/
|
| 128 |
+
venv/
|
| 129 |
+
ENV/
|
| 130 |
+
env.bak/
|
| 131 |
+
venv.bak/
|
| 132 |
+
|
| 133 |
+
# Spyder project settings
|
| 134 |
+
.spyderproject
|
| 135 |
+
.spyproject
|
| 136 |
+
|
| 137 |
+
# Rope project settings
|
| 138 |
+
.ropeproject
|
| 139 |
+
|
| 140 |
+
# mkdocs documentation
|
| 141 |
+
/site
|
| 142 |
+
|
| 143 |
+
# mypy
|
| 144 |
+
.mypy_cache/
|
| 145 |
+
.dmypy.json
|
| 146 |
+
dmypy.json
|
| 147 |
+
|
| 148 |
+
# Pyre type checker
|
| 149 |
+
.pyre/
|
| 150 |
+
|
| 151 |
+
# pytype static type analyzer
|
| 152 |
+
.pytype/
|
| 153 |
+
|
| 154 |
+
# Cython debug symbols
|
| 155 |
+
cython_debug/
|
| 156 |
+
|
| 157 |
+
# PyCharm
|
| 158 |
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
| 159 |
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
| 160 |
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
| 161 |
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
| 162 |
+
#.idea/
|
custom_nodes/ComfyUI-Detail-Daemon/DetailDaemonIcon.jpg
ADDED
|
|
Git LFS Details
|
custom_nodes/ComfyUI-Detail-Daemon/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2024 Jonseed
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
custom_nodes/ComfyUI-Detail-Daemon/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+

|
| 2 |
+
|
| 3 |
+
# Video Demo
|
| 4 |
+
|
| 5 |
+
Here is a video demo showing Detail Daemon in action, provided by [MuseMachine](https://www.youtube.com/@MuseMachineAI):
|
| 6 |
+
|
| 7 |
+
[](https://www.youtube.com/watch?v=h8XhR-fjRR8)
|
| 8 |
+
|
| 9 |
+
# ComfyUI-Detail-Daemon
|
| 10 |
+
|
| 11 |
+
A port of muerrilla's [sd-webui-Detail-Daemon](https://github.com/muerrilla/sd-webui-detail-daemon/) as a node for ComfyUI, to adjust sigmas that generally enhance details, and possibly remove unwanted bokeh or background blurring, particularly with Flux models (but also works with SDXL, SD1.5, Qwen, Z-Image, and likely other models). If the values are taken too far it results in an oversharpened and/or HDR effect. There are four nodes here. Multiply Sigmas and Lying Sigma Sampler are also included as alternative methods of generally enhancing details.
|
| 12 |
+
|
| 13 |
+
- [**Detail Daemon Sampler**](#detail-daemon-sampler)
|
| 14 |
+
- [**Detail Daemon Graph Sigmas**](#detail-daemon-graph-sigmas) (to graph the sigmas adjustment visually)
|
| 15 |
+
- [**Multiply Sigmas**](#multiply-sigmas) (stateless)
|
| 16 |
+
- [**Lying Sigma Sampler**](#lying-sigma-sampler)
|
| 17 |
+
|
| 18 |
+
Note that Detail Daemon and Lying Sigma Sampler nodes work by default with custom sampler nodes such as `SamplerCustomAdvanced`. If you want to use them with non-custom sampler nodes such as `KSampler` or `KSamplerAdvanced`, then you'll need to make a custom sampler preset using the [`BlehSetSamplerPreset`](https://github.com/blepping/ComfyUI-bleh#blehsetsamplerpreset) node, so you can select the preset from the list in the sampler node, [as discussed here](https://github.com/Jonseed/ComfyUI-Detail-Daemon/discussions/4#discussioncomment-11134965).
|
| 19 |
+
|
| 20 |
+
[Example and testing workflows](#example-and-testing-workflows) are also available.
|
| 21 |
+
|
| 22 |
+
## Nodes
|
| 23 |
+
|
| 24 |
+
### Detail Daemon Sampler
|
| 25 |
+
|
| 26 |
+

|
| 27 |
+
|
| 28 |
+
Allows sampling with the Detail Daemon schedule adjustment, which keeps the noise levels injected the same while lowering the amount of noise removed at each step, which effectively adds detail. Detail_amounts between 0 and 1.0 work best. See muerrilla's [Detail Daemon](https://github.com/muerrilla/sd-webui-detail-daemon/) repo for full explanation of inputs and methodology. Generally speaking, large features are established in earlier steps and small details take shape in later steps. So adjusting the amount in earlier steps will affect bigger shapes, and adjusting it in later steps will influence smaller fine details. The default adjusts mostly in the middle steps.
|
| 29 |
+
|
| 30 |
+
Parameters (the graphing node below can help visualize these parameters):
|
| 31 |
+
- `detail_amount`: the main value that adjusts the detail in the middle of the generation process. Positive values lower the sigmas, reducing noise removed at each step, which increases detail. For Flux or Z-Image models, you'll probably want between 0.1–1.0 range, or higher. For SDXL models, probably less than 0.25. You can also use negative values if you want to *decrease* detail or simplify the image.
|
| 32 |
+
- `start`: when do you want the adjustment to start, in a percent range from 0–1.0, 0 being the first step, 1.0 being the last step. Recommended: 0.1–0.5
|
| 33 |
+
- `end`: when do you want the adjustment to end, in a percent range from 0–1.0, 0 being the first step, 1.0 being the last step. Recommended: 0.5–0.9
|
| 34 |
+
- `bias`: shifts the detail_amount in the middle steps forward or back in the generation process.
|
| 35 |
+
- `exponent`: changes the curvature of the adjustment. 0 is no curvature, 1 is smoothly curved.
|
| 36 |
+
- `start_offset`: start the detail_amount at a particular value at the beginning of the generation process. Not recommended.
|
| 37 |
+
- `end_offset`: end the detail_amount at a particular value at the end of the generation process.
|
| 38 |
+
- `fade`: reduce the entire adjustment curve by a particular value.
|
| 39 |
+
- `smooth`: (true/false), do you want the adjustment curve to be smooth or not.
|
| 40 |
+
- `cfg_scale_override`: if set to 0 (default), the sampler will automatically determine the CFG scale (if possible). Set to some other value to override (should probably match the CFG used in your workflow).
|
| 41 |
+
|
| 42 |
+
### Detail Daemon Graph Sigmas
|
| 43 |
+
|
| 44 |
+

|
| 45 |
+
|
| 46 |
+
Allows graphing adjusted sigmas to visually see the effects of different parameters on a graphed curve. This had to be a separate node from the Detail Daemon Sampler node in order to function properly. Just set the values the same as that node, or set inputs on separate primitive nodes that input into both the Detail Daemon Sampler and this Graph Sigmas node. You'll need to run the queue in order to see the graph on the node. *Please note: this node doesn't actually change the sigmas used when generating, it only graphs them*.
|
| 47 |
+
|
| 48 |
+
### Multiply Sigmas
|
| 49 |
+
|
| 50 |
+

|
| 51 |
+
|
| 52 |
+
Simple node to multiply all sigmas (noise levels) by the supplied factor. It multiplies both the noise levels added *and* denoised by the factor, which somehow adds detail with a factor less than 1. It is *stateless*, meaning it calculates the sigmas fresh on every queue (other multiply sigmas nodes seem to calculate on prior run sigmas).
|
| 53 |
+
|
| 54 |
+
Parameters:
|
| 55 |
+
- `factor`: the amount that you want to multiply the sigma (noise level) by at each step. So, for example, if the first step has a sigma of 1, then using a factor of 0.95 would make this sigma 0.95. If a step has a sigma of 0.7, then a factor of 0.95 would make it 0.665. You probably want to keep this factor between 0.95–0.99. Lower values increase detail, but might also increasingly change the composition of the image, or introduce noisy grain. Setting it to 1.0 effectively disables the node.
|
| 56 |
+
- `start`: when do you want the adjustment to start, in a percent range from 0–1.0, 0 being the first step, 1.0 being the last step.
|
| 57 |
+
- `end`: when do you want the adjustment to end, in a percent range from 0–1.0, 0 being the first step, 1.0 being the last step.
|
| 58 |
+
|
| 59 |
+
### Lying Sigma Sampler
|
| 60 |
+
|
| 61 |
+

|
| 62 |
+
|
| 63 |
+
A simpler version of Detail Daemon Sampler, with only amount adjustment and start and end values.
|
| 64 |
+
|
| 65 |
+
Parameters:
|
| 66 |
+
- `dishonesty_factor`: similar to `detail_amount` in the Detail Daemon node, this adjusts the amount of detail. It is on a different scale though, for example, -0.05 `dishonesty_factor` is the equivalent of 0.5 in `detail_amount` of Detail Daemon (or 0.95 of Multiply Sigmas). Negative values adjust the sigmas down, increasing detail. You probably want to stay between -0.1 and -0.01. Positive values would increase the sigmas, *decreasing* detail.
|
| 67 |
+
- `start_percent`: when do you want the adjustment to start, in a percent range from 0–1.0, 0 being the first step, 1.0 being the last step. Recommended: 0.1–0.5
|
| 68 |
+
- `end_percent`: when do you want the adjustment to end, in a percent range from 0–1.0, 0 being the first step, 1.0 being the last step. Recommended: 0.5–0.9
|
| 69 |
+
|
| 70 |
+
## Example and testing workflows
|
| 71 |
+
|
| 72 |
+
[](https://github.com/Jonseed/ComfyUI-Detail-Daemon/blob/main/Comparing%20Detailers.json)
|
| 73 |
+
|
| 74 |
+
- **Z-Image-Turbo**: the [Z-Image txt2image-DetailDaemon.json](https://github.com/Jonseed/ComfyUI-Detail-Daemon/blob/main/example_workflows/Z-Image%20txt2img-DetailDaemon.json) is an example of using Detail Daemon in a Z-Image txt2img workflow.
|
| 75 |
+
- **Flux**: the [Comparing Detailers.json](https://github.com/Jonseed/ComfyUI-Detail-Daemon/blob/main/example_workflows/Comparing%20Detailers.json) workflow will allow you to compare all these various detailer nodes on the same prompt and seed.
|
| 76 |
+
- **Flux img2img**: the [Flux img2img-DetailDaemon.json](https://github.com/Jonseed/ComfyUI-Detail-Daemon/blob/main/example_workflows/Flux%20img2img-DetailDaemon.json) is an example of using Detail Daemon in a Flux img2img workflow.
|
| 77 |
+
- **Flux upscale**: the [Flux upscale-DetailDaemon.json](https://github.com/Jonseed/ComfyUI-Detail-Daemon/blob/main/example_workflows/Flux%20upscale-Detail%20Daemon.json) is an example of using Detail Daemon in a Flux upscale workflow.
|
| 78 |
+
- **Flux inpainting**: the [Flux inpainting-DetailDaemon.json](https://github.com/Jonseed/ComfyUI-Detail-Daemon/blob/main/example_workflows/Flux%20inpainting-Detail%20Daemon.json) is an example of using Detail Daemon in a Flux inpainting workflow.
|
| 79 |
+
- **SDXL**: the [SDXL txt2img-DetailDaemon.json](https://github.com/Jonseed/ComfyUI-Detail-Daemon/blob/main/example_workflows/SDXL%20txt2img-DetailDaemon.json) is an example of using Detail Daemon in a SDXL workflow.
|
| 80 |
+
|
| 81 |
+
## Credits
|
| 82 |
+
|
| 83 |
+
- Detail Daemon concept and schedule generation function from muerrilla: https://github.com/muerrilla/sd-webui-detail-daemon/
|
| 84 |
+
- ComfyUI sampler implementation and schedule interpolation, as well as Lying Sigma Sampler, by https://github.com/blepping/
|
| 85 |
+
- Multiply Sigmas node based on the one included here: https://github.com/Extraltodeus/sigmas_tools_and_the_golden_scheduler
|
custom_nodes/ComfyUI-Detail-Daemon/__init__.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# __init__.py
|
| 2 |
+
|
| 3 |
+
from .detail_daemon_node import DetailDaemonSamplerNode, DetailDaemonGraphSigmasNode, MultiplySigmas, LyingSigmaSamplerNode
|
| 4 |
+
|
| 5 |
+
NODE_CLASS_MAPPINGS = {
|
| 6 |
+
"DetailDaemonSamplerNode": DetailDaemonSamplerNode,
|
| 7 |
+
"DetailDaemonGraphSigmasNode": DetailDaemonGraphSigmasNode,
|
| 8 |
+
"MultiplySigmas": MultiplySigmas,
|
| 9 |
+
"LyingSigmaSampler": LyingSigmaSamplerNode
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 13 |
+
"DetailDaemonSamplerNode": "Detail Daemon Sampler",
|
| 14 |
+
"DetailDaemonGraphSigmasNode": "Detail Daemon Graph Sigmas",
|
| 15 |
+
"MultiplySigmas": "Multiply Sigmas (stateless)",
|
| 16 |
+
"LyingSigmaSampler": "Lying Sigma Sampler",
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
__all__ = ["NODE_CLASS_MAPPINGS"]
|
| 20 |
+
|
custom_nodes/ComfyUI-Detail-Daemon/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (610 Bytes). View file
|
|
|
custom_nodes/ComfyUI-Detail-Daemon/__pycache__/detail_daemon_node.cpython-312.pyc
ADDED
|
Binary file (15.7 kB). View file
|
|
|
custom_nodes/ComfyUI-Detail-Daemon/detail_daemon_node.py
ADDED
|
@@ -0,0 +1,520 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Based on the concept from https://github.com/muerrilla/sd-webui-detail-daemon
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import io
|
| 6 |
+
|
| 7 |
+
# Trying matplotlib NSWindow warning workaround on macOS
|
| 8 |
+
import platform
|
| 9 |
+
|
| 10 |
+
if platform.system() == 'Darwin': # Check if running on macOS
|
| 11 |
+
import matplotlib
|
| 12 |
+
matplotlib.use('Agg') # Set non-GUI backend to avoid crashes
|
| 13 |
+
|
| 14 |
+
import matplotlib.pyplot as plt
|
| 15 |
+
import numpy as np
|
| 16 |
+
import torch
|
| 17 |
+
from comfy.samplers import KSAMPLER
|
| 18 |
+
from PIL import Image
|
| 19 |
+
import folder_paths
|
| 20 |
+
import random
|
| 21 |
+
import os
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
# Schedule creation function from https://github.com/muerrilla/sd-webui-detail-daemon
|
| 25 |
+
def make_detail_daemon_schedule(
|
| 26 |
+
steps,
|
| 27 |
+
start,
|
| 28 |
+
end,
|
| 29 |
+
bias,
|
| 30 |
+
amount,
|
| 31 |
+
exponent,
|
| 32 |
+
start_offset,
|
| 33 |
+
end_offset,
|
| 34 |
+
fade,
|
| 35 |
+
smooth,
|
| 36 |
+
):
|
| 37 |
+
start = min(start, end)
|
| 38 |
+
mid = start + bias * (end - start)
|
| 39 |
+
multipliers = np.zeros(steps)
|
| 40 |
+
|
| 41 |
+
start_idx, mid_idx, end_idx = [
|
| 42 |
+
int(round(x * (steps - 1))) for x in [start, mid, end]
|
| 43 |
+
]
|
| 44 |
+
|
| 45 |
+
start_values = np.linspace(0, 1, mid_idx - start_idx + 1)
|
| 46 |
+
if smooth:
|
| 47 |
+
start_values = 0.5 * (1 - np.cos(start_values * np.pi))
|
| 48 |
+
start_values = start_values**exponent
|
| 49 |
+
if start_values.any():
|
| 50 |
+
start_values *= amount - start_offset
|
| 51 |
+
start_values += start_offset
|
| 52 |
+
|
| 53 |
+
end_values = np.linspace(1, 0, end_idx - mid_idx + 1)
|
| 54 |
+
if smooth:
|
| 55 |
+
end_values = 0.5 * (1 - np.cos(end_values * np.pi))
|
| 56 |
+
end_values = end_values**exponent
|
| 57 |
+
if end_values.any():
|
| 58 |
+
end_values *= amount - end_offset
|
| 59 |
+
end_values += end_offset
|
| 60 |
+
|
| 61 |
+
multipliers[start_idx : mid_idx + 1] = start_values
|
| 62 |
+
multipliers[mid_idx : end_idx + 1] = end_values
|
| 63 |
+
multipliers[:start_idx] = start_offset
|
| 64 |
+
multipliers[end_idx + 1 :] = end_offset
|
| 65 |
+
multipliers *= 1 - fade
|
| 66 |
+
|
| 67 |
+
return multipliers
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
class DetailDaemonGraphSigmasNode:
|
| 71 |
+
@classmethod
|
| 72 |
+
def INPUT_TYPES(cls):
|
| 73 |
+
return {
|
| 74 |
+
"required": {
|
| 75 |
+
"sigmas": ("SIGMAS", {"forceInput": True}),
|
| 76 |
+
"detail_amount": (
|
| 77 |
+
"FLOAT",
|
| 78 |
+
{"default": 0.1, "min": -5.0, "max": 5.0, "step": 0.01},
|
| 79 |
+
),
|
| 80 |
+
"start": (
|
| 81 |
+
"FLOAT",
|
| 82 |
+
{"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01},
|
| 83 |
+
),
|
| 84 |
+
"end": (
|
| 85 |
+
"FLOAT",
|
| 86 |
+
{"default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01},
|
| 87 |
+
),
|
| 88 |
+
"bias": (
|
| 89 |
+
"FLOAT",
|
| 90 |
+
{"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01},
|
| 91 |
+
),
|
| 92 |
+
"exponent": (
|
| 93 |
+
"FLOAT",
|
| 94 |
+
{"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.05},
|
| 95 |
+
),
|
| 96 |
+
"start_offset": (
|
| 97 |
+
"FLOAT",
|
| 98 |
+
{"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.01},
|
| 99 |
+
),
|
| 100 |
+
"end_offset": (
|
| 101 |
+
"FLOAT",
|
| 102 |
+
{"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.01},
|
| 103 |
+
),
|
| 104 |
+
"fade": (
|
| 105 |
+
"FLOAT",
|
| 106 |
+
{"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.05},
|
| 107 |
+
),
|
| 108 |
+
"smooth": ("BOOLEAN", {"default": True}),
|
| 109 |
+
"cfg_scale": (
|
| 110 |
+
"FLOAT",
|
| 111 |
+
{
|
| 112 |
+
"default": 1.0,
|
| 113 |
+
"min": 0.0,
|
| 114 |
+
"max": 100.0,
|
| 115 |
+
"step": 0.5,
|
| 116 |
+
"round": 0.01,
|
| 117 |
+
},
|
| 118 |
+
),
|
| 119 |
+
},
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
RETURN_TYPES = ()
|
| 123 |
+
OUTPUT_NODE = True
|
| 124 |
+
CATEGORY = "sampling/custom_sampling/sigmas"
|
| 125 |
+
FUNCTION = "make_graph"
|
| 126 |
+
|
| 127 |
+
def make_graph(
|
| 128 |
+
self,
|
| 129 |
+
sigmas,
|
| 130 |
+
detail_amount,
|
| 131 |
+
start,
|
| 132 |
+
end,
|
| 133 |
+
bias,
|
| 134 |
+
exponent,
|
| 135 |
+
start_offset,
|
| 136 |
+
end_offset,
|
| 137 |
+
fade,
|
| 138 |
+
smooth,
|
| 139 |
+
cfg_scale,
|
| 140 |
+
):
|
| 141 |
+
# Create a copy of the input sigmas using clone() for tensors to avoid modifying the original
|
| 142 |
+
sigmas = sigmas.clone()
|
| 143 |
+
|
| 144 |
+
# Derive the number of steps from the length of sigmas minus 1 (ignore the final sigma)
|
| 145 |
+
steps = len(sigmas) - 1 # 21 sigmas, 20 steps
|
| 146 |
+
actual_steps = steps
|
| 147 |
+
|
| 148 |
+
# Create the schedule using the number of steps
|
| 149 |
+
schedule = make_detail_daemon_schedule(
|
| 150 |
+
actual_steps,
|
| 151 |
+
start,
|
| 152 |
+
end,
|
| 153 |
+
bias,
|
| 154 |
+
detail_amount,
|
| 155 |
+
exponent,
|
| 156 |
+
start_offset,
|
| 157 |
+
end_offset,
|
| 158 |
+
fade,
|
| 159 |
+
smooth,
|
| 160 |
+
)
|
| 161 |
+
|
| 162 |
+
# Debugging: print schedule and sigmas lengths to verify alignment
|
| 163 |
+
print(
|
| 164 |
+
f"Number of sigmas: {len(sigmas)}, Number of schedule steps: {len(schedule)}",
|
| 165 |
+
)
|
| 166 |
+
|
| 167 |
+
# Iterate over the sigmas, except for the last one (which we assume is 0 and leave untouched)
|
| 168 |
+
for idx in range(steps):
|
| 169 |
+
multiplier = schedule[idx] * 0.1
|
| 170 |
+
|
| 171 |
+
# Debugging: print each index and sigma to track what's being adjusted
|
| 172 |
+
print(f"Adjusting sigma at index {idx} with multiplier {multiplier}")
|
| 173 |
+
|
| 174 |
+
sigmas[idx] *= (
|
| 175 |
+
1 - multiplier * cfg_scale
|
| 176 |
+
) # Adjust each sigma in "both" mode
|
| 177 |
+
|
| 178 |
+
# Create the plot for visualization
|
| 179 |
+
image = self.plot_schedule(schedule)
|
| 180 |
+
|
| 181 |
+
# Save temp image
|
| 182 |
+
output_dir = folder_paths.get_temp_directory()
|
| 183 |
+
prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5))
|
| 184 |
+
|
| 185 |
+
full_output_folder, filename, counter, subfolder, _ = (
|
| 186 |
+
folder_paths.get_save_image_path(prefix_append, output_dir)
|
| 187 |
+
)
|
| 188 |
+
filename = f"{filename}_{counter:05}_.png"
|
| 189 |
+
file_path = os.path.join(full_output_folder, filename)
|
| 190 |
+
image.save(file_path, compress_level=1)
|
| 191 |
+
|
| 192 |
+
return {
|
| 193 |
+
"ui": {
|
| 194 |
+
"images": [
|
| 195 |
+
{"filename": filename, "subfolder": subfolder, "type": "temp"},
|
| 196 |
+
],
|
| 197 |
+
}
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
|
| 201 |
+
@staticmethod
|
| 202 |
+
def plot_schedule(schedule) -> Image:
|
| 203 |
+
plt.figure(figsize=(6, 4)) # Adjusted width
|
| 204 |
+
plt.plot(schedule, label="Sigma Adjustment Curve")
|
| 205 |
+
plt.xlabel("Steps")
|
| 206 |
+
plt.ylabel("Multiplier (*10)")
|
| 207 |
+
plt.title("Detail Adjustment Schedule")
|
| 208 |
+
plt.legend()
|
| 209 |
+
plt.grid(True)
|
| 210 |
+
plt.xticks(range(len(schedule)))
|
| 211 |
+
plt.ylim(-1, 1)
|
| 212 |
+
|
| 213 |
+
# Use tight_layout or subplots_adjust
|
| 214 |
+
plt.tight_layout()
|
| 215 |
+
# Or manually adjust if needed:
|
| 216 |
+
# plt.subplots_adjust(left=0.2)
|
| 217 |
+
|
| 218 |
+
buf = io.BytesIO()
|
| 219 |
+
plt.savefig(buf, format="PNG")
|
| 220 |
+
plt.close()
|
| 221 |
+
buf.seek(0)
|
| 222 |
+
image = Image.open(buf)
|
| 223 |
+
return image
|
| 224 |
+
|
| 225 |
+
|
| 226 |
+
def get_dd_schedule(
|
| 227 |
+
sigma: float,
|
| 228 |
+
sigmas: torch.Tensor,
|
| 229 |
+
dd_schedule: torch.Tensor,
|
| 230 |
+
) -> float:
|
| 231 |
+
sched_len = len(dd_schedule)
|
| 232 |
+
if (
|
| 233 |
+
sched_len < 2
|
| 234 |
+
or len(sigmas) < 2
|
| 235 |
+
or sigma <= 0
|
| 236 |
+
or not (sigmas[-1] <= sigma <= sigmas[0])
|
| 237 |
+
):
|
| 238 |
+
return 0.0
|
| 239 |
+
# First, we find the index of the closest sigma in the list to what the model was
|
| 240 |
+
# called with.
|
| 241 |
+
deltas = (sigmas[:-1] - sigma).abs()
|
| 242 |
+
idx = int(deltas.argmin())
|
| 243 |
+
if (
|
| 244 |
+
(idx == 0 and sigma >= sigmas[0])
|
| 245 |
+
or (idx == sched_len - 1 and sigma <= sigmas[-2])
|
| 246 |
+
or deltas[idx] == 0
|
| 247 |
+
):
|
| 248 |
+
# Either exact match or closest to head/tail of the DD schedule so we
|
| 249 |
+
# can't interpolate to another schedule item.
|
| 250 |
+
return dd_schedule[idx].item()
|
| 251 |
+
# If we're here, that means the sigma is in between two sigmas in the
|
| 252 |
+
# list.
|
| 253 |
+
idxlow, idxhigh = (idx, idx - 1) if sigma > sigmas[idx] else (idx + 1, idx)
|
| 254 |
+
# We find the low/high neighbor sigmas - our sigma is somewhere between them.
|
| 255 |
+
nlow, nhigh = sigmas[idxlow], sigmas[idxhigh]
|
| 256 |
+
if nhigh - nlow == 0:
|
| 257 |
+
# Shouldn't be possible, but just in case... Avoid divide by zero.
|
| 258 |
+
return dd_schedule[idxlow]
|
| 259 |
+
# Ratio of how close we are to the high neighbor.
|
| 260 |
+
ratio = ((sigma - nlow) / (nhigh - nlow)).clamp(0, 1)
|
| 261 |
+
# Mix the DD schedule high/low items according to the ratio.
|
| 262 |
+
return torch.lerp(dd_schedule[idxlow], dd_schedule[idxhigh], ratio).item()
|
| 263 |
+
|
| 264 |
+
|
| 265 |
+
def detail_daemon_sampler(
|
| 266 |
+
model: object,
|
| 267 |
+
x: torch.Tensor,
|
| 268 |
+
sigmas: torch.Tensor,
|
| 269 |
+
*,
|
| 270 |
+
dds_wrapped_sampler: object,
|
| 271 |
+
dds_make_schedule: callable,
|
| 272 |
+
dds_cfg_scale_override: float,
|
| 273 |
+
**kwargs: dict,
|
| 274 |
+
) -> torch.Tensor:
|
| 275 |
+
if dds_cfg_scale_override > 0:
|
| 276 |
+
cfg_scale = dds_cfg_scale_override
|
| 277 |
+
else:
|
| 278 |
+
maybe_cfg_scale = getattr(model.inner_model, "cfg", None)
|
| 279 |
+
cfg_scale = (
|
| 280 |
+
float(maybe_cfg_scale) if isinstance(maybe_cfg_scale, (int, float)) else 1.0
|
| 281 |
+
)
|
| 282 |
+
dd_schedule = torch.tensor(
|
| 283 |
+
dds_make_schedule(len(sigmas) - 1),
|
| 284 |
+
dtype=torch.float32,
|
| 285 |
+
device="cpu",
|
| 286 |
+
)
|
| 287 |
+
sigmas_cpu = sigmas.detach().clone().cpu()
|
| 288 |
+
sigma_max, sigma_min = float(sigmas_cpu[0]), float(sigmas_cpu[-1]) + 1e-05
|
| 289 |
+
|
| 290 |
+
def model_wrapper(x: torch.Tensor, sigma: torch.Tensor, **extra_args: dict):
|
| 291 |
+
sigma_float = float(sigma.max().detach().cpu())
|
| 292 |
+
if not (sigma_min <= sigma_float <= sigma_max):
|
| 293 |
+
return model(x, sigma, **extra_args)
|
| 294 |
+
dd_adjustment = get_dd_schedule(sigma_float, sigmas_cpu, dd_schedule) * 0.1
|
| 295 |
+
adjusted_sigma = sigma * max(1e-06, 1.0 - dd_adjustment * cfg_scale)
|
| 296 |
+
return model(x, adjusted_sigma, **extra_args)
|
| 297 |
+
|
| 298 |
+
for k in (
|
| 299 |
+
"inner_model",
|
| 300 |
+
"sigmas",
|
| 301 |
+
):
|
| 302 |
+
if hasattr(model, k):
|
| 303 |
+
setattr(model_wrapper, k, getattr(model, k))
|
| 304 |
+
return dds_wrapped_sampler.sampler_function(
|
| 305 |
+
model_wrapper,
|
| 306 |
+
x,
|
| 307 |
+
sigmas,
|
| 308 |
+
**kwargs,
|
| 309 |
+
**dds_wrapped_sampler.extra_options,
|
| 310 |
+
)
|
| 311 |
+
|
| 312 |
+
|
| 313 |
+
class DetailDaemonSamplerNode:
|
| 314 |
+
DESCRIPTION = "This sampler wrapper works by adjusting the sigma passed to the model, while the rest of sampling stays the same."
|
| 315 |
+
CATEGORY = "sampling/custom_sampling/samplers"
|
| 316 |
+
RETURN_TYPES = ("SAMPLER",)
|
| 317 |
+
FUNCTION = "go"
|
| 318 |
+
|
| 319 |
+
@classmethod
|
| 320 |
+
def INPUT_TYPES(cls) -> dict:
|
| 321 |
+
return {
|
| 322 |
+
"required": {
|
| 323 |
+
"sampler": ("SAMPLER",),
|
| 324 |
+
"detail_amount": (
|
| 325 |
+
"FLOAT",
|
| 326 |
+
{"default": 0.1, "min": -5.0, "max": 5.0, "step": 0.01},
|
| 327 |
+
),
|
| 328 |
+
"start": (
|
| 329 |
+
"FLOAT",
|
| 330 |
+
{"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01},
|
| 331 |
+
),
|
| 332 |
+
"end": (
|
| 333 |
+
"FLOAT",
|
| 334 |
+
{"default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01},
|
| 335 |
+
),
|
| 336 |
+
"bias": (
|
| 337 |
+
"FLOAT",
|
| 338 |
+
{"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01},
|
| 339 |
+
),
|
| 340 |
+
"exponent": (
|
| 341 |
+
"FLOAT",
|
| 342 |
+
{"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.05},
|
| 343 |
+
),
|
| 344 |
+
"start_offset": (
|
| 345 |
+
"FLOAT",
|
| 346 |
+
{"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.01},
|
| 347 |
+
),
|
| 348 |
+
"end_offset": (
|
| 349 |
+
"FLOAT",
|
| 350 |
+
{"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.01},
|
| 351 |
+
),
|
| 352 |
+
"fade": (
|
| 353 |
+
"FLOAT",
|
| 354 |
+
{"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.05},
|
| 355 |
+
),
|
| 356 |
+
"smooth": ("BOOLEAN", {"default": True}),
|
| 357 |
+
"cfg_scale_override": (
|
| 358 |
+
"FLOAT",
|
| 359 |
+
{
|
| 360 |
+
"default": 0,
|
| 361 |
+
"min": 0.0,
|
| 362 |
+
"max": 100.0,
|
| 363 |
+
"step": 0.5,
|
| 364 |
+
"round": 0.01,
|
| 365 |
+
"tooltip": "If set to 0, the sampler will automatically determine the CFG scale (if possible). Set to some other value to override.",
|
| 366 |
+
},
|
| 367 |
+
),
|
| 368 |
+
},
|
| 369 |
+
}
|
| 370 |
+
|
| 371 |
+
@classmethod
|
| 372 |
+
def go(
|
| 373 |
+
cls,
|
| 374 |
+
sampler: object,
|
| 375 |
+
*,
|
| 376 |
+
detail_amount,
|
| 377 |
+
start,
|
| 378 |
+
end,
|
| 379 |
+
bias,
|
| 380 |
+
exponent,
|
| 381 |
+
start_offset,
|
| 382 |
+
end_offset,
|
| 383 |
+
fade,
|
| 384 |
+
smooth,
|
| 385 |
+
cfg_scale_override,
|
| 386 |
+
) -> tuple:
|
| 387 |
+
def dds_make_schedule(steps):
|
| 388 |
+
return make_detail_daemon_schedule(
|
| 389 |
+
steps,
|
| 390 |
+
start,
|
| 391 |
+
end,
|
| 392 |
+
bias,
|
| 393 |
+
detail_amount,
|
| 394 |
+
exponent,
|
| 395 |
+
start_offset,
|
| 396 |
+
end_offset,
|
| 397 |
+
fade,
|
| 398 |
+
smooth,
|
| 399 |
+
)
|
| 400 |
+
|
| 401 |
+
return (
|
| 402 |
+
KSAMPLER(
|
| 403 |
+
detail_daemon_sampler,
|
| 404 |
+
extra_options={
|
| 405 |
+
"dds_wrapped_sampler": sampler,
|
| 406 |
+
"dds_make_schedule": dds_make_schedule,
|
| 407 |
+
"dds_cfg_scale_override": cfg_scale_override,
|
| 408 |
+
},
|
| 409 |
+
),
|
| 410 |
+
)
|
| 411 |
+
|
| 412 |
+
#MultiplySigmas Node
|
| 413 |
+
class MultiplySigmas:
|
| 414 |
+
@classmethod
|
| 415 |
+
def INPUT_TYPES(s):
|
| 416 |
+
return {
|
| 417 |
+
"required": {
|
| 418 |
+
"sigmas": ("SIGMAS", {"forceInput": True}),
|
| 419 |
+
"factor": ("FLOAT", {"default": 1, "min": 0, "max": 100, "step": 0.001}),
|
| 420 |
+
"start": ("FLOAT", {"default": 0, "min": 0, "max": 1, "step": 0.001}),
|
| 421 |
+
"end": ("FLOAT", {"default": 1, "min": 0, "max": 1, "step": 0.001})
|
| 422 |
+
}
|
| 423 |
+
}
|
| 424 |
+
|
| 425 |
+
FUNCTION = "simple_output"
|
| 426 |
+
RETURN_TYPES = ("SIGMAS",)
|
| 427 |
+
CATEGORY = "sampling/custom_sampling/sigmas"
|
| 428 |
+
|
| 429 |
+
def simple_output(self, sigmas, factor, start, end):
|
| 430 |
+
# Clone the sigmas to ensure the input is not modified (stateless)
|
| 431 |
+
sigmas = sigmas.clone()
|
| 432 |
+
|
| 433 |
+
total_sigmas = len(sigmas)
|
| 434 |
+
start_idx = int(start * total_sigmas)
|
| 435 |
+
end_idx = int(end * total_sigmas)
|
| 436 |
+
|
| 437 |
+
for i in range(start_idx, end_idx):
|
| 438 |
+
sigmas[i] *= factor
|
| 439 |
+
|
| 440 |
+
return (sigmas,)
|
| 441 |
+
|
| 442 |
+
#LyingSigmaSampler
|
| 443 |
+
def lying_sigma_sampler(
|
| 444 |
+
model,
|
| 445 |
+
x,
|
| 446 |
+
sigmas,
|
| 447 |
+
*,
|
| 448 |
+
lss_wrapped_sampler,
|
| 449 |
+
lss_dishonesty_factor,
|
| 450 |
+
lss_startend_percent,
|
| 451 |
+
**kwargs,
|
| 452 |
+
):
|
| 453 |
+
start_percent, end_percent = lss_startend_percent
|
| 454 |
+
ms = model.inner_model.inner_model.model_sampling
|
| 455 |
+
start_sigma, end_sigma = (
|
| 456 |
+
round(ms.percent_to_sigma(start_percent), 4),
|
| 457 |
+
round(ms.percent_to_sigma(end_percent), 4),
|
| 458 |
+
)
|
| 459 |
+
del ms
|
| 460 |
+
|
| 461 |
+
def model_wrapper(x, sigma, **extra_args):
|
| 462 |
+
sigma_float = float(sigma.max().detach().cpu())
|
| 463 |
+
if end_sigma <= sigma_float <= start_sigma:
|
| 464 |
+
sigma = sigma * (1.0 + lss_dishonesty_factor)
|
| 465 |
+
return model(x, sigma, **extra_args)
|
| 466 |
+
|
| 467 |
+
for k in (
|
| 468 |
+
"inner_model",
|
| 469 |
+
"sigmas",
|
| 470 |
+
):
|
| 471 |
+
if hasattr(model, k):
|
| 472 |
+
setattr(model_wrapper, k, getattr(model, k))
|
| 473 |
+
return lss_wrapped_sampler.sampler_function(
|
| 474 |
+
model_wrapper,
|
| 475 |
+
x,
|
| 476 |
+
sigmas,
|
| 477 |
+
**kwargs,
|
| 478 |
+
**lss_wrapped_sampler.extra_options,
|
| 479 |
+
)
|
| 480 |
+
|
| 481 |
+
|
| 482 |
+
class LyingSigmaSamplerNode:
|
| 483 |
+
CATEGORY = "sampling/custom_sampling"
|
| 484 |
+
RETURN_TYPES = ("SAMPLER",)
|
| 485 |
+
FUNCTION = "go"
|
| 486 |
+
|
| 487 |
+
@classmethod
|
| 488 |
+
def INPUT_TYPES(cls):
|
| 489 |
+
return {
|
| 490 |
+
"required": {
|
| 491 |
+
"sampler": ("SAMPLER",),
|
| 492 |
+
"dishonesty_factor": (
|
| 493 |
+
"FLOAT",
|
| 494 |
+
{
|
| 495 |
+
"default": -0.05,
|
| 496 |
+
"min": -0.999,
|
| 497 |
+
"step": 0.01,
|
| 498 |
+
"tooltip": "Multiplier for sigmas passed to the model. -0.05 means we reduce the sigma by 5%.",
|
| 499 |
+
},
|
| 500 |
+
),
|
| 501 |
+
},
|
| 502 |
+
"optional": {
|
| 503 |
+
"start_percent": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}),
|
| 504 |
+
"end_percent": ("FLOAT", {"default": 0.9, "min": 0.0, "max": 1.0, "step": 0.01}),
|
| 505 |
+
},
|
| 506 |
+
}
|
| 507 |
+
|
| 508 |
+
@classmethod
|
| 509 |
+
def go(cls, sampler, dishonesty_factor, *, start_percent=0.0, end_percent=1.0):
|
| 510 |
+
return (
|
| 511 |
+
KSAMPLER(
|
| 512 |
+
lying_sigma_sampler,
|
| 513 |
+
extra_options={
|
| 514 |
+
"lss_wrapped_sampler": sampler,
|
| 515 |
+
"lss_dishonesty_factor": dishonesty_factor,
|
| 516 |
+
"lss_startend_percent": (start_percent, end_percent),
|
| 517 |
+
},
|
| 518 |
+
),
|
| 519 |
+
)
|
| 520 |
+
|
custom_nodes/ComfyUI-Detail-Daemon/example_workflows/Comparing Detailers.json
ADDED
|
@@ -0,0 +1,1646 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"last_node_id": 103,
|
| 3 |
+
"last_link_id": 207,
|
| 4 |
+
"nodes": [
|
| 5 |
+
{
|
| 6 |
+
"id": 22,
|
| 7 |
+
"type": "DualCLIPLoader",
|
| 8 |
+
"pos": {
|
| 9 |
+
"0": -150,
|
| 10 |
+
"1": 210
|
| 11 |
+
},
|
| 12 |
+
"size": {
|
| 13 |
+
"0": 315,
|
| 14 |
+
"1": 106
|
| 15 |
+
},
|
| 16 |
+
"flags": {
|
| 17 |
+
"collapsed": false
|
| 18 |
+
},
|
| 19 |
+
"order": 0,
|
| 20 |
+
"mode": 0,
|
| 21 |
+
"inputs": [],
|
| 22 |
+
"outputs": [
|
| 23 |
+
{
|
| 24 |
+
"name": "CLIP",
|
| 25 |
+
"type": "CLIP",
|
| 26 |
+
"links": [
|
| 27 |
+
140
|
| 28 |
+
],
|
| 29 |
+
"slot_index": 0,
|
| 30 |
+
"shape": 3
|
| 31 |
+
}
|
| 32 |
+
],
|
| 33 |
+
"properties": {
|
| 34 |
+
"Node name for S&R": "DualCLIPLoader"
|
| 35 |
+
},
|
| 36 |
+
"widgets_values": [
|
| 37 |
+
"ViT-L-14-BEST-smooth-GmP-TE-only-HF-format.safetensors",
|
| 38 |
+
"t5xxl_fp16.safetensors",
|
| 39 |
+
"flux"
|
| 40 |
+
]
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"id": 28,
|
| 44 |
+
"type": "KSamplerSelect",
|
| 45 |
+
"pos": {
|
| 46 |
+
"0": 230,
|
| 47 |
+
"1": 480
|
| 48 |
+
},
|
| 49 |
+
"size": {
|
| 50 |
+
"0": 315,
|
| 51 |
+
"1": 58
|
| 52 |
+
},
|
| 53 |
+
"flags": {},
|
| 54 |
+
"order": 1,
|
| 55 |
+
"mode": 0,
|
| 56 |
+
"inputs": [],
|
| 57 |
+
"outputs": [
|
| 58 |
+
{
|
| 59 |
+
"name": "SAMPLER",
|
| 60 |
+
"type": "SAMPLER",
|
| 61 |
+
"links": [
|
| 62 |
+
99,
|
| 63 |
+
146,
|
| 64 |
+
151,
|
| 65 |
+
166
|
| 66 |
+
],
|
| 67 |
+
"slot_index": 0,
|
| 68 |
+
"shape": 3
|
| 69 |
+
}
|
| 70 |
+
],
|
| 71 |
+
"properties": {
|
| 72 |
+
"Node name for S&R": "KSamplerSelect"
|
| 73 |
+
},
|
| 74 |
+
"widgets_values": [
|
| 75 |
+
"dpmpp_2m"
|
| 76 |
+
]
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"id": 5,
|
| 80 |
+
"type": "EmptyLatentImage",
|
| 81 |
+
"pos": {
|
| 82 |
+
"0": 230,
|
| 83 |
+
"1": 170
|
| 84 |
+
},
|
| 85 |
+
"size": {
|
| 86 |
+
"0": 315,
|
| 87 |
+
"1": 106
|
| 88 |
+
},
|
| 89 |
+
"flags": {},
|
| 90 |
+
"order": 2,
|
| 91 |
+
"mode": 0,
|
| 92 |
+
"inputs": [],
|
| 93 |
+
"outputs": [
|
| 94 |
+
{
|
| 95 |
+
"name": "LATENT",
|
| 96 |
+
"type": "LATENT",
|
| 97 |
+
"links": [
|
| 98 |
+
30,
|
| 99 |
+
100,
|
| 100 |
+
145,
|
| 101 |
+
160
|
| 102 |
+
],
|
| 103 |
+
"slot_index": 0
|
| 104 |
+
}
|
| 105 |
+
],
|
| 106 |
+
"properties": {
|
| 107 |
+
"Node name for S&R": "EmptyLatentImage"
|
| 108 |
+
},
|
| 109 |
+
"widgets_values": [
|
| 110 |
+
1024,
|
| 111 |
+
1024,
|
| 112 |
+
1
|
| 113 |
+
]
|
| 114 |
+
},
|
| 115 |
+
{
|
| 116 |
+
"id": 96,
|
| 117 |
+
"type": "UnetLoaderGGUF",
|
| 118 |
+
"pos": {
|
| 119 |
+
"0": -150,
|
| 120 |
+
"1": 70
|
| 121 |
+
},
|
| 122 |
+
"size": {
|
| 123 |
+
"0": 315,
|
| 124 |
+
"1": 58
|
| 125 |
+
},
|
| 126 |
+
"flags": {},
|
| 127 |
+
"order": 3,
|
| 128 |
+
"mode": 0,
|
| 129 |
+
"inputs": [],
|
| 130 |
+
"outputs": [
|
| 131 |
+
{
|
| 132 |
+
"name": "MODEL",
|
| 133 |
+
"type": "MODEL",
|
| 134 |
+
"links": [
|
| 135 |
+
194,
|
| 136 |
+
195
|
| 137 |
+
],
|
| 138 |
+
"slot_index": 0
|
| 139 |
+
}
|
| 140 |
+
],
|
| 141 |
+
"properties": {
|
| 142 |
+
"Node name for S&R": "UnetLoaderGGUF"
|
| 143 |
+
},
|
| 144 |
+
"widgets_values": [
|
| 145 |
+
"flux\\flux1-dev-Q8_0.gguf"
|
| 146 |
+
]
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"id": 30,
|
| 150 |
+
"type": "RandomNoise",
|
| 151 |
+
"pos": {
|
| 152 |
+
"0": 230,
|
| 153 |
+
"1": 330
|
| 154 |
+
},
|
| 155 |
+
"size": {
|
| 156 |
+
"0": 315.3865661621094,
|
| 157 |
+
"1": 82
|
| 158 |
+
},
|
| 159 |
+
"flags": {},
|
| 160 |
+
"order": 4,
|
| 161 |
+
"mode": 0,
|
| 162 |
+
"inputs": [],
|
| 163 |
+
"outputs": [
|
| 164 |
+
{
|
| 165 |
+
"name": "NOISE",
|
| 166 |
+
"type": "NOISE",
|
| 167 |
+
"links": [
|
| 168 |
+
23,
|
| 169 |
+
97,
|
| 170 |
+
141,
|
| 171 |
+
156
|
| 172 |
+
],
|
| 173 |
+
"slot_index": 0,
|
| 174 |
+
"shape": 3
|
| 175 |
+
}
|
| 176 |
+
],
|
| 177 |
+
"properties": {
|
| 178 |
+
"Node name for S&R": "RandomNoise"
|
| 179 |
+
},
|
| 180 |
+
"widgets_values": [
|
| 181 |
+
55268804028075,
|
| 182 |
+
"fixed"
|
| 183 |
+
]
|
| 184 |
+
},
|
| 185 |
+
{
|
| 186 |
+
"id": 25,
|
| 187 |
+
"type": "BasicGuider",
|
| 188 |
+
"pos": {
|
| 189 |
+
"0": 240,
|
| 190 |
+
"1": 60
|
| 191 |
+
},
|
| 192 |
+
"size": {
|
| 193 |
+
"0": 241.79998779296875,
|
| 194 |
+
"1": 46
|
| 195 |
+
},
|
| 196 |
+
"flags": {},
|
| 197 |
+
"order": 10,
|
| 198 |
+
"mode": 0,
|
| 199 |
+
"inputs": [
|
| 200 |
+
{
|
| 201 |
+
"name": "model",
|
| 202 |
+
"type": "MODEL",
|
| 203 |
+
"link": 194
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "conditioning",
|
| 207 |
+
"type": "CONDITIONING",
|
| 208 |
+
"link": 51,
|
| 209 |
+
"slot_index": 1
|
| 210 |
+
}
|
| 211 |
+
],
|
| 212 |
+
"outputs": [
|
| 213 |
+
{
|
| 214 |
+
"name": "GUIDER",
|
| 215 |
+
"type": "GUIDER",
|
| 216 |
+
"links": [
|
| 217 |
+
17,
|
| 218 |
+
98,
|
| 219 |
+
142,
|
| 220 |
+
157
|
| 221 |
+
],
|
| 222 |
+
"slot_index": 0,
|
| 223 |
+
"shape": 3
|
| 224 |
+
}
|
| 225 |
+
],
|
| 226 |
+
"properties": {
|
| 227 |
+
"Node name for S&R": "BasicGuider"
|
| 228 |
+
},
|
| 229 |
+
"widgets_values": []
|
| 230 |
+
},
|
| 231 |
+
{
|
| 232 |
+
"id": 26,
|
| 233 |
+
"type": "SamplerCustomAdvanced",
|
| 234 |
+
"pos": {
|
| 235 |
+
"0": 750,
|
| 236 |
+
"1": 280
|
| 237 |
+
},
|
| 238 |
+
"size": {
|
| 239 |
+
"0": 236.8000030517578,
|
| 240 |
+
"1": 106
|
| 241 |
+
},
|
| 242 |
+
"flags": {
|
| 243 |
+
"collapsed": true
|
| 244 |
+
},
|
| 245 |
+
"order": 13,
|
| 246 |
+
"mode": 0,
|
| 247 |
+
"inputs": [
|
| 248 |
+
{
|
| 249 |
+
"name": "noise",
|
| 250 |
+
"type": "NOISE",
|
| 251 |
+
"link": 23
|
| 252 |
+
},
|
| 253 |
+
{
|
| 254 |
+
"name": "guider",
|
| 255 |
+
"type": "GUIDER",
|
| 256 |
+
"link": 17
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"name": "sampler",
|
| 260 |
+
"type": "SAMPLER",
|
| 261 |
+
"link": 152
|
| 262 |
+
},
|
| 263 |
+
{
|
| 264 |
+
"name": "sigmas",
|
| 265 |
+
"type": "SIGMAS",
|
| 266 |
+
"link": 163
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "latent_image",
|
| 270 |
+
"type": "LATENT",
|
| 271 |
+
"link": 30
|
| 272 |
+
}
|
| 273 |
+
],
|
| 274 |
+
"outputs": [
|
| 275 |
+
{
|
| 276 |
+
"name": "output",
|
| 277 |
+
"type": "LATENT",
|
| 278 |
+
"links": [
|
| 279 |
+
110
|
| 280 |
+
],
|
| 281 |
+
"slot_index": 0,
|
| 282 |
+
"shape": 3
|
| 283 |
+
},
|
| 284 |
+
{
|
| 285 |
+
"name": "denoised_output",
|
| 286 |
+
"type": "LATENT",
|
| 287 |
+
"links": [],
|
| 288 |
+
"slot_index": 1,
|
| 289 |
+
"shape": 3
|
| 290 |
+
}
|
| 291 |
+
],
|
| 292 |
+
"properties": {
|
| 293 |
+
"Node name for S&R": "SamplerCustomAdvanced"
|
| 294 |
+
},
|
| 295 |
+
"widgets_values": []
|
| 296 |
+
},
|
| 297 |
+
{
|
| 298 |
+
"id": 8,
|
| 299 |
+
"type": "VAEDecode",
|
| 300 |
+
"pos": {
|
| 301 |
+
"0": 780,
|
| 302 |
+
"1": 340
|
| 303 |
+
},
|
| 304 |
+
"size": {
|
| 305 |
+
"0": 210,
|
| 306 |
+
"1": 46
|
| 307 |
+
},
|
| 308 |
+
"flags": {
|
| 309 |
+
"collapsed": true
|
| 310 |
+
},
|
| 311 |
+
"order": 17,
|
| 312 |
+
"mode": 0,
|
| 313 |
+
"inputs": [
|
| 314 |
+
{
|
| 315 |
+
"name": "samples",
|
| 316 |
+
"type": "LATENT",
|
| 317 |
+
"link": 110
|
| 318 |
+
},
|
| 319 |
+
{
|
| 320 |
+
"name": "vae",
|
| 321 |
+
"type": "VAE",
|
| 322 |
+
"link": 25
|
| 323 |
+
}
|
| 324 |
+
],
|
| 325 |
+
"outputs": [
|
| 326 |
+
{
|
| 327 |
+
"name": "IMAGE",
|
| 328 |
+
"type": "IMAGE",
|
| 329 |
+
"links": [
|
| 330 |
+
49,
|
| 331 |
+
196
|
| 332 |
+
],
|
| 333 |
+
"slot_index": 0
|
| 334 |
+
}
|
| 335 |
+
],
|
| 336 |
+
"properties": {
|
| 337 |
+
"Node name for S&R": "VAEDecode"
|
| 338 |
+
},
|
| 339 |
+
"widgets_values": []
|
| 340 |
+
},
|
| 341 |
+
{
|
| 342 |
+
"id": 78,
|
| 343 |
+
"type": "VAEDecode",
|
| 344 |
+
"pos": {
|
| 345 |
+
"0": 911.50830078125,
|
| 346 |
+
"1": 783.6454467773438
|
| 347 |
+
},
|
| 348 |
+
"size": {
|
| 349 |
+
"0": 210,
|
| 350 |
+
"1": 46
|
| 351 |
+
},
|
| 352 |
+
"flags": {
|
| 353 |
+
"collapsed": true
|
| 354 |
+
},
|
| 355 |
+
"order": 19,
|
| 356 |
+
"mode": 0,
|
| 357 |
+
"inputs": [
|
| 358 |
+
{
|
| 359 |
+
"name": "samples",
|
| 360 |
+
"type": "LATENT",
|
| 361 |
+
"link": 148
|
| 362 |
+
},
|
| 363 |
+
{
|
| 364 |
+
"name": "vae",
|
| 365 |
+
"type": "VAE",
|
| 366 |
+
"link": 150
|
| 367 |
+
}
|
| 368 |
+
],
|
| 369 |
+
"outputs": [
|
| 370 |
+
{
|
| 371 |
+
"name": "IMAGE",
|
| 372 |
+
"type": "IMAGE",
|
| 373 |
+
"links": [
|
| 374 |
+
149,
|
| 375 |
+
198
|
| 376 |
+
],
|
| 377 |
+
"slot_index": 0
|
| 378 |
+
}
|
| 379 |
+
],
|
| 380 |
+
"properties": {
|
| 381 |
+
"Node name for S&R": "VAEDecode"
|
| 382 |
+
},
|
| 383 |
+
"widgets_values": []
|
| 384 |
+
},
|
| 385 |
+
{
|
| 386 |
+
"id": 77,
|
| 387 |
+
"type": "SamplerCustomAdvanced",
|
| 388 |
+
"pos": {
|
| 389 |
+
"0": 878.50830078125,
|
| 390 |
+
"1": 712.6454467773438
|
| 391 |
+
},
|
| 392 |
+
"size": {
|
| 393 |
+
"0": 355.20001220703125,
|
| 394 |
+
"1": 106
|
| 395 |
+
},
|
| 396 |
+
"flags": {
|
| 397 |
+
"collapsed": true
|
| 398 |
+
},
|
| 399 |
+
"order": 15,
|
| 400 |
+
"mode": 0,
|
| 401 |
+
"inputs": [
|
| 402 |
+
{
|
| 403 |
+
"name": "noise",
|
| 404 |
+
"type": "NOISE",
|
| 405 |
+
"link": 141
|
| 406 |
+
},
|
| 407 |
+
{
|
| 408 |
+
"name": "guider",
|
| 409 |
+
"type": "GUIDER",
|
| 410 |
+
"link": 142
|
| 411 |
+
},
|
| 412 |
+
{
|
| 413 |
+
"name": "sampler",
|
| 414 |
+
"type": "SAMPLER",
|
| 415 |
+
"link": 165
|
| 416 |
+
},
|
| 417 |
+
{
|
| 418 |
+
"name": "sigmas",
|
| 419 |
+
"type": "SIGMAS",
|
| 420 |
+
"link": 164
|
| 421 |
+
},
|
| 422 |
+
{
|
| 423 |
+
"name": "latent_image",
|
| 424 |
+
"type": "LATENT",
|
| 425 |
+
"link": 145
|
| 426 |
+
}
|
| 427 |
+
],
|
| 428 |
+
"outputs": [
|
| 429 |
+
{
|
| 430 |
+
"name": "output",
|
| 431 |
+
"type": "LATENT",
|
| 432 |
+
"links": [
|
| 433 |
+
148
|
| 434 |
+
],
|
| 435 |
+
"slot_index": 0,
|
| 436 |
+
"shape": 3
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"name": "denoised_output",
|
| 440 |
+
"type": "LATENT",
|
| 441 |
+
"links": [],
|
| 442 |
+
"slot_index": 1,
|
| 443 |
+
"shape": 3
|
| 444 |
+
}
|
| 445 |
+
],
|
| 446 |
+
"properties": {
|
| 447 |
+
"Node name for S&R": "SamplerCustomAdvanced"
|
| 448 |
+
},
|
| 449 |
+
"widgets_values": []
|
| 450 |
+
},
|
| 451 |
+
{
|
| 452 |
+
"id": 71,
|
| 453 |
+
"type": "LyingSigmaSampler",
|
| 454 |
+
"pos": {
|
| 455 |
+
"0": 823.50830078125,
|
| 456 |
+
"1": 540.6454467773438
|
| 457 |
+
},
|
| 458 |
+
"size": {
|
| 459 |
+
"0": 315,
|
| 460 |
+
"1": 106
|
| 461 |
+
},
|
| 462 |
+
"flags": {},
|
| 463 |
+
"order": 7,
|
| 464 |
+
"mode": 0,
|
| 465 |
+
"inputs": [
|
| 466 |
+
{
|
| 467 |
+
"name": "sampler",
|
| 468 |
+
"type": "SAMPLER",
|
| 469 |
+
"link": 146
|
| 470 |
+
}
|
| 471 |
+
],
|
| 472 |
+
"outputs": [
|
| 473 |
+
{
|
| 474 |
+
"name": "SAMPLER",
|
| 475 |
+
"type": "SAMPLER",
|
| 476 |
+
"links": [
|
| 477 |
+
165
|
| 478 |
+
],
|
| 479 |
+
"slot_index": 0
|
| 480 |
+
}
|
| 481 |
+
],
|
| 482 |
+
"properties": {
|
| 483 |
+
"Node name for S&R": "LyingSigmaSampler"
|
| 484 |
+
},
|
| 485 |
+
"widgets_values": [
|
| 486 |
+
-0.05,
|
| 487 |
+
0.05,
|
| 488 |
+
0.9
|
| 489 |
+
]
|
| 490 |
+
},
|
| 491 |
+
{
|
| 492 |
+
"id": 98,
|
| 493 |
+
"type": "Image Comparer (rgthree)",
|
| 494 |
+
"pos": {
|
| 495 |
+
"0": 1727.287109375,
|
| 496 |
+
"1": 459.28717041015625
|
| 497 |
+
},
|
| 498 |
+
"size": {
|
| 499 |
+
"0": 427.1917419433594,
|
| 500 |
+
"1": 458.9107666015625
|
| 501 |
+
},
|
| 502 |
+
"flags": {},
|
| 503 |
+
"order": 25,
|
| 504 |
+
"mode": 0,
|
| 505 |
+
"inputs": [
|
| 506 |
+
{
|
| 507 |
+
"name": "image_a",
|
| 508 |
+
"type": "IMAGE",
|
| 509 |
+
"link": 198,
|
| 510 |
+
"dir": 3
|
| 511 |
+
},
|
| 512 |
+
{
|
| 513 |
+
"name": "image_b",
|
| 514 |
+
"type": "IMAGE",
|
| 515 |
+
"link": 199,
|
| 516 |
+
"dir": 3
|
| 517 |
+
}
|
| 518 |
+
],
|
| 519 |
+
"outputs": [],
|
| 520 |
+
"title": "Compare with default",
|
| 521 |
+
"properties": {
|
| 522 |
+
"comparer_mode": "Slide"
|
| 523 |
+
},
|
| 524 |
+
"widgets_values": [
|
| 525 |
+
[
|
| 526 |
+
{
|
| 527 |
+
"name": "A",
|
| 528 |
+
"selected": true,
|
| 529 |
+
"url": "/api/view?filename=rgthree.compare._temp_sppos_00001_.png&type=temp&subfolder=&rand=0.9753625084622339"
|
| 530 |
+
},
|
| 531 |
+
{
|
| 532 |
+
"name": "B",
|
| 533 |
+
"selected": true,
|
| 534 |
+
"url": "/api/view?filename=rgthree.compare._temp_sppos_00002_.png&type=temp&subfolder=&rand=0.8074629265257474"
|
| 535 |
+
}
|
| 536 |
+
]
|
| 537 |
+
]
|
| 538 |
+
},
|
| 539 |
+
{
|
| 540 |
+
"id": 99,
|
| 541 |
+
"type": "Image Comparer (rgthree)",
|
| 542 |
+
"pos": {
|
| 543 |
+
"0": 1725,
|
| 544 |
+
"1": 1012
|
| 545 |
+
},
|
| 546 |
+
"size": {
|
| 547 |
+
"0": 430.4796142578125,
|
| 548 |
+
"1": 457.0982971191406
|
| 549 |
+
},
|
| 550 |
+
"flags": {},
|
| 551 |
+
"order": 27,
|
| 552 |
+
"mode": 0,
|
| 553 |
+
"inputs": [
|
| 554 |
+
{
|
| 555 |
+
"name": "image_a",
|
| 556 |
+
"type": "IMAGE",
|
| 557 |
+
"link": 200,
|
| 558 |
+
"dir": 3
|
| 559 |
+
},
|
| 560 |
+
{
|
| 561 |
+
"name": "image_b",
|
| 562 |
+
"type": "IMAGE",
|
| 563 |
+
"link": 201,
|
| 564 |
+
"dir": 3
|
| 565 |
+
}
|
| 566 |
+
],
|
| 567 |
+
"outputs": [],
|
| 568 |
+
"title": "Compare with default",
|
| 569 |
+
"properties": {
|
| 570 |
+
"comparer_mode": "Slide"
|
| 571 |
+
},
|
| 572 |
+
"widgets_values": [
|
| 573 |
+
[
|
| 574 |
+
{
|
| 575 |
+
"name": "A",
|
| 576 |
+
"selected": true,
|
| 577 |
+
"url": "/api/view?filename=rgthree.compare._temp_cquhl_00001_.png&type=temp&subfolder=&rand=0.2284940106180524"
|
| 578 |
+
},
|
| 579 |
+
{
|
| 580 |
+
"name": "B",
|
| 581 |
+
"selected": true,
|
| 582 |
+
"url": "/api/view?filename=rgthree.compare._temp_cquhl_00002_.png&type=temp&subfolder=&rand=0.11443615799445639"
|
| 583 |
+
}
|
| 584 |
+
]
|
| 585 |
+
]
|
| 586 |
+
},
|
| 587 |
+
{
|
| 588 |
+
"id": 27,
|
| 589 |
+
"type": "VAELoader",
|
| 590 |
+
"pos": {
|
| 591 |
+
"0": -149,
|
| 592 |
+
"1": 393
|
| 593 |
+
},
|
| 594 |
+
"size": {
|
| 595 |
+
"0": 315,
|
| 596 |
+
"1": 58
|
| 597 |
+
},
|
| 598 |
+
"flags": {},
|
| 599 |
+
"order": 5,
|
| 600 |
+
"mode": 0,
|
| 601 |
+
"inputs": [],
|
| 602 |
+
"outputs": [
|
| 603 |
+
{
|
| 604 |
+
"name": "VAE",
|
| 605 |
+
"type": "VAE",
|
| 606 |
+
"links": [
|
| 607 |
+
25,
|
| 608 |
+
103,
|
| 609 |
+
150,
|
| 610 |
+
154
|
| 611 |
+
],
|
| 612 |
+
"slot_index": 0,
|
| 613 |
+
"shape": 3
|
| 614 |
+
}
|
| 615 |
+
],
|
| 616 |
+
"properties": {
|
| 617 |
+
"Node name for S&R": "VAELoader"
|
| 618 |
+
},
|
| 619 |
+
"widgets_values": [
|
| 620 |
+
"ae.safetensors"
|
| 621 |
+
]
|
| 622 |
+
},
|
| 623 |
+
{
|
| 624 |
+
"id": 38,
|
| 625 |
+
"type": "CLIPTextEncodeFlux",
|
| 626 |
+
"pos": {
|
| 627 |
+
"0": -149,
|
| 628 |
+
"1": 513
|
| 629 |
+
},
|
| 630 |
+
"size": {
|
| 631 |
+
"0": 348.0617980957031,
|
| 632 |
+
"1": 394.8694152832031
|
| 633 |
+
},
|
| 634 |
+
"flags": {},
|
| 635 |
+
"order": 6,
|
| 636 |
+
"mode": 0,
|
| 637 |
+
"inputs": [
|
| 638 |
+
{
|
| 639 |
+
"name": "clip",
|
| 640 |
+
"type": "CLIP",
|
| 641 |
+
"link": 140
|
| 642 |
+
}
|
| 643 |
+
],
|
| 644 |
+
"outputs": [
|
| 645 |
+
{
|
| 646 |
+
"name": "CONDITIONING",
|
| 647 |
+
"type": "CONDITIONING",
|
| 648 |
+
"links": [
|
| 649 |
+
51
|
| 650 |
+
],
|
| 651 |
+
"slot_index": 0
|
| 652 |
+
}
|
| 653 |
+
],
|
| 654 |
+
"properties": {
|
| 655 |
+
"Node name for S&R": "CLIPTextEncodeFlux"
|
| 656 |
+
},
|
| 657 |
+
"widgets_values": [
|
| 658 |
+
"a photo of a majestic, vividly colored peacock standing proudly in an exotic, lush jungle. The bird's feathers display an iridescent array of blues, greens, and purples, with intricate eye patterns. Taken with a Canon EOS 5D Mark IV and a Canon EF 100-400mm f/4.5-5.6L IS II USM lens at 200mm, the scene includes tropical plants, vibrant flowers, and distant waterfalls under a bright, sunny sky, creating a rich and detailed paradise setting. The peacock is the focal point, exuding elegance and grace. Tack sharp, with many details. Other elements of wildlife, like colorful butterflies and exotic birds, add life to the scene, enhancing the overall photographic quality.",
|
| 659 |
+
"a photo of a majestic, vividly colored peacock standing proudly in an exotic, lush jungle. The bird's feathers display an iridescent array of blues, greens, and purples, with intricate eye patterns. Taken with a Canon EOS 5D Mark IV and a Canon EF 100-400mm f/4.5-5.6L IS II USM lens at 200mm, the scene includes tropical plants, vibrant flowers, and distant waterfalls under a bright, sunny sky, creating a rich and detailed paradise setting. The peacock is the focal point, exuding elegance and grace. Tack sharp, with many details. Other elements of wildlife, like colorful butterflies and exotic birds, add life to the scene, enhancing the overall photographic quality.",
|
| 660 |
+
3.5
|
| 661 |
+
]
|
| 662 |
+
},
|
| 663 |
+
{
|
| 664 |
+
"id": 67,
|
| 665 |
+
"type": "PreviewImage",
|
| 666 |
+
"pos": {
|
| 667 |
+
"0": 244,
|
| 668 |
+
"1": 1005
|
| 669 |
+
},
|
| 670 |
+
"size": {
|
| 671 |
+
"0": 447.607177734375,
|
| 672 |
+
"1": 461.6881103515625
|
| 673 |
+
},
|
| 674 |
+
"flags": {},
|
| 675 |
+
"order": 22,
|
| 676 |
+
"mode": 0,
|
| 677 |
+
"inputs": [
|
| 678 |
+
{
|
| 679 |
+
"name": "images",
|
| 680 |
+
"type": "IMAGE",
|
| 681 |
+
"link": 95
|
| 682 |
+
}
|
| 683 |
+
],
|
| 684 |
+
"outputs": [],
|
| 685 |
+
"title": "Default preview image (no detailer)",
|
| 686 |
+
"properties": {
|
| 687 |
+
"Node name for S&R": "PreviewImage"
|
| 688 |
+
},
|
| 689 |
+
"widgets_values": []
|
| 690 |
+
},
|
| 691 |
+
{
|
| 692 |
+
"id": 66,
|
| 693 |
+
"type": "SamplerCustomAdvanced",
|
| 694 |
+
"pos": {
|
| 695 |
+
"0": -30,
|
| 696 |
+
"1": 1159
|
| 697 |
+
},
|
| 698 |
+
"size": {
|
| 699 |
+
"0": 355.20001220703125,
|
| 700 |
+
"1": 106
|
| 701 |
+
},
|
| 702 |
+
"flags": {
|
| 703 |
+
"collapsed": true
|
| 704 |
+
},
|
| 705 |
+
"order": 14,
|
| 706 |
+
"mode": 0,
|
| 707 |
+
"inputs": [
|
| 708 |
+
{
|
| 709 |
+
"name": "noise",
|
| 710 |
+
"type": "NOISE",
|
| 711 |
+
"link": 97
|
| 712 |
+
},
|
| 713 |
+
{
|
| 714 |
+
"name": "guider",
|
| 715 |
+
"type": "GUIDER",
|
| 716 |
+
"link": 98
|
| 717 |
+
},
|
| 718 |
+
{
|
| 719 |
+
"name": "sampler",
|
| 720 |
+
"type": "SAMPLER",
|
| 721 |
+
"link": 99
|
| 722 |
+
},
|
| 723 |
+
{
|
| 724 |
+
"name": "sigmas",
|
| 725 |
+
"type": "SIGMAS",
|
| 726 |
+
"link": 96
|
| 727 |
+
},
|
| 728 |
+
{
|
| 729 |
+
"name": "latent_image",
|
| 730 |
+
"type": "LATENT",
|
| 731 |
+
"link": 100
|
| 732 |
+
}
|
| 733 |
+
],
|
| 734 |
+
"outputs": [
|
| 735 |
+
{
|
| 736 |
+
"name": "output",
|
| 737 |
+
"type": "LATENT",
|
| 738 |
+
"links": [
|
| 739 |
+
101
|
| 740 |
+
],
|
| 741 |
+
"slot_index": 0,
|
| 742 |
+
"shape": 3
|
| 743 |
+
},
|
| 744 |
+
{
|
| 745 |
+
"name": "denoised_output",
|
| 746 |
+
"type": "LATENT",
|
| 747 |
+
"links": [],
|
| 748 |
+
"slot_index": 1,
|
| 749 |
+
"shape": 3
|
| 750 |
+
}
|
| 751 |
+
],
|
| 752 |
+
"properties": {
|
| 753 |
+
"Node name for S&R": "SamplerCustomAdvanced"
|
| 754 |
+
},
|
| 755 |
+
"widgets_values": []
|
| 756 |
+
},
|
| 757 |
+
{
|
| 758 |
+
"id": 65,
|
| 759 |
+
"type": "VAEDecode",
|
| 760 |
+
"pos": {
|
| 761 |
+
"0": 5,
|
| 762 |
+
"1": 1225
|
| 763 |
+
},
|
| 764 |
+
"size": {
|
| 765 |
+
"0": 210,
|
| 766 |
+
"1": 46
|
| 767 |
+
},
|
| 768 |
+
"flags": {
|
| 769 |
+
"collapsed": true
|
| 770 |
+
},
|
| 771 |
+
"order": 18,
|
| 772 |
+
"mode": 0,
|
| 773 |
+
"inputs": [
|
| 774 |
+
{
|
| 775 |
+
"name": "samples",
|
| 776 |
+
"type": "LATENT",
|
| 777 |
+
"link": 101
|
| 778 |
+
},
|
| 779 |
+
{
|
| 780 |
+
"name": "vae",
|
| 781 |
+
"type": "VAE",
|
| 782 |
+
"link": 103
|
| 783 |
+
}
|
| 784 |
+
],
|
| 785 |
+
"outputs": [
|
| 786 |
+
{
|
| 787 |
+
"name": "IMAGE",
|
| 788 |
+
"type": "IMAGE",
|
| 789 |
+
"links": [
|
| 790 |
+
95,
|
| 791 |
+
197,
|
| 792 |
+
199,
|
| 793 |
+
201
|
| 794 |
+
],
|
| 795 |
+
"slot_index": 0
|
| 796 |
+
}
|
| 797 |
+
],
|
| 798 |
+
"properties": {
|
| 799 |
+
"Node name for S&R": "VAEDecode"
|
| 800 |
+
},
|
| 801 |
+
"widgets_values": []
|
| 802 |
+
},
|
| 803 |
+
{
|
| 804 |
+
"id": 80,
|
| 805 |
+
"type": "DetailDaemonSamplerNode",
|
| 806 |
+
"pos": {
|
| 807 |
+
"0": 735,
|
| 808 |
+
"1": -80
|
| 809 |
+
},
|
| 810 |
+
"size": {
|
| 811 |
+
"0": 228.84759521484375,
|
| 812 |
+
"1": 274
|
| 813 |
+
},
|
| 814 |
+
"flags": {},
|
| 815 |
+
"order": 8,
|
| 816 |
+
"mode": 0,
|
| 817 |
+
"inputs": [
|
| 818 |
+
{
|
| 819 |
+
"name": "sampler",
|
| 820 |
+
"type": "SAMPLER",
|
| 821 |
+
"link": 151
|
| 822 |
+
}
|
| 823 |
+
],
|
| 824 |
+
"outputs": [
|
| 825 |
+
{
|
| 826 |
+
"name": "SAMPLER",
|
| 827 |
+
"type": "SAMPLER",
|
| 828 |
+
"links": [
|
| 829 |
+
152
|
| 830 |
+
]
|
| 831 |
+
}
|
| 832 |
+
],
|
| 833 |
+
"properties": {
|
| 834 |
+
"Node name for S&R": "DetailDaemonSamplerNode"
|
| 835 |
+
},
|
| 836 |
+
"widgets_values": [
|
| 837 |
+
0.5,
|
| 838 |
+
0.1,
|
| 839 |
+
0.9,
|
| 840 |
+
0.5,
|
| 841 |
+
0,
|
| 842 |
+
0,
|
| 843 |
+
0,
|
| 844 |
+
0,
|
| 845 |
+
false,
|
| 846 |
+
0
|
| 847 |
+
]
|
| 848 |
+
},
|
| 849 |
+
{
|
| 850 |
+
"id": 37,
|
| 851 |
+
"type": "PreviewImage",
|
| 852 |
+
"pos": {
|
| 853 |
+
"0": 1276,
|
| 854 |
+
"1": -82
|
| 855 |
+
},
|
| 856 |
+
"size": {
|
| 857 |
+
"0": 444.4699401855469,
|
| 858 |
+
"1": 458.221435546875
|
| 859 |
+
},
|
| 860 |
+
"flags": {},
|
| 861 |
+
"order": 21,
|
| 862 |
+
"mode": 0,
|
| 863 |
+
"inputs": [
|
| 864 |
+
{
|
| 865 |
+
"name": "images",
|
| 866 |
+
"type": "IMAGE",
|
| 867 |
+
"link": 49
|
| 868 |
+
}
|
| 869 |
+
],
|
| 870 |
+
"outputs": [],
|
| 871 |
+
"title": "Detail Daemon preview image",
|
| 872 |
+
"properties": {
|
| 873 |
+
"Node name for S&R": "PreviewImage"
|
| 874 |
+
},
|
| 875 |
+
"widgets_values": []
|
| 876 |
+
},
|
| 877 |
+
{
|
| 878 |
+
"id": 97,
|
| 879 |
+
"type": "Image Comparer (rgthree)",
|
| 880 |
+
"pos": {
|
| 881 |
+
"0": 1728,
|
| 882 |
+
"1": -82
|
| 883 |
+
},
|
| 884 |
+
"size": {
|
| 885 |
+
"0": 438.29681396484375,
|
| 886 |
+
"1": 458.221435546875
|
| 887 |
+
},
|
| 888 |
+
"flags": {},
|
| 889 |
+
"order": 23,
|
| 890 |
+
"mode": 0,
|
| 891 |
+
"inputs": [
|
| 892 |
+
{
|
| 893 |
+
"name": "image_a",
|
| 894 |
+
"type": "IMAGE",
|
| 895 |
+
"link": 196,
|
| 896 |
+
"dir": 3
|
| 897 |
+
},
|
| 898 |
+
{
|
| 899 |
+
"name": "image_b",
|
| 900 |
+
"type": "IMAGE",
|
| 901 |
+
"link": 197,
|
| 902 |
+
"dir": 3
|
| 903 |
+
}
|
| 904 |
+
],
|
| 905 |
+
"outputs": [],
|
| 906 |
+
"title": "Compare with default",
|
| 907 |
+
"properties": {
|
| 908 |
+
"comparer_mode": "Slide"
|
| 909 |
+
},
|
| 910 |
+
"widgets_values": [
|
| 911 |
+
[
|
| 912 |
+
{
|
| 913 |
+
"name": "A",
|
| 914 |
+
"selected": true,
|
| 915 |
+
"url": "/api/view?filename=rgthree.compare._temp_mqavm_00001_.png&type=temp&subfolder=&rand=0.26559991198291977"
|
| 916 |
+
},
|
| 917 |
+
{
|
| 918 |
+
"name": "B",
|
| 919 |
+
"selected": true,
|
| 920 |
+
"url": "/api/view?filename=rgthree.compare._temp_mqavm_00002_.png&type=temp&subfolder=&rand=0.517245193682482"
|
| 921 |
+
}
|
| 922 |
+
]
|
| 923 |
+
]
|
| 924 |
+
},
|
| 925 |
+
{
|
| 926 |
+
"id": 79,
|
| 927 |
+
"type": "PreviewImage",
|
| 928 |
+
"pos": {
|
| 929 |
+
"0": 1271.287109375,
|
| 930 |
+
"1": 454.28717041015625
|
| 931 |
+
},
|
| 932 |
+
"size": {
|
| 933 |
+
"0": 441.1180114746094,
|
| 934 |
+
"1": 464.446533203125
|
| 935 |
+
},
|
| 936 |
+
"flags": {},
|
| 937 |
+
"order": 24,
|
| 938 |
+
"mode": 0,
|
| 939 |
+
"inputs": [
|
| 940 |
+
{
|
| 941 |
+
"name": "images",
|
| 942 |
+
"type": "IMAGE",
|
| 943 |
+
"link": 149
|
| 944 |
+
}
|
| 945 |
+
],
|
| 946 |
+
"outputs": [],
|
| 947 |
+
"title": "Lying Sigma Sampler preview image",
|
| 948 |
+
"properties": {
|
| 949 |
+
"Node name for S&R": "PreviewImage"
|
| 950 |
+
},
|
| 951 |
+
"widgets_values": []
|
| 952 |
+
},
|
| 953 |
+
{
|
| 954 |
+
"id": 82,
|
| 955 |
+
"type": "PreviewImage",
|
| 956 |
+
"pos": {
|
| 957 |
+
"0": 1264,
|
| 958 |
+
"1": 1002
|
| 959 |
+
},
|
| 960 |
+
"size": {
|
| 961 |
+
"0": 448.5738525390625,
|
| 962 |
+
"1": 467.3197021484375
|
| 963 |
+
},
|
| 964 |
+
"flags": {},
|
| 965 |
+
"order": 26,
|
| 966 |
+
"mode": 0,
|
| 967 |
+
"inputs": [
|
| 968 |
+
{
|
| 969 |
+
"name": "images",
|
| 970 |
+
"type": "IMAGE",
|
| 971 |
+
"link": 155
|
| 972 |
+
}
|
| 973 |
+
],
|
| 974 |
+
"outputs": [],
|
| 975 |
+
"title": "Multiply Sigmas preview image",
|
| 976 |
+
"properties": {
|
| 977 |
+
"Node name for S&R": "PreviewImage"
|
| 978 |
+
},
|
| 979 |
+
"widgets_values": []
|
| 980 |
+
},
|
| 981 |
+
{
|
| 982 |
+
"id": 100,
|
| 983 |
+
"type": "DetailDaemonGraphSigmasNode",
|
| 984 |
+
"pos": {
|
| 985 |
+
"0": 974,
|
| 986 |
+
"1": -108
|
| 987 |
+
},
|
| 988 |
+
"size": {
|
| 989 |
+
"0": 281.25433349609375,
|
| 990 |
+
"1": 486
|
| 991 |
+
},
|
| 992 |
+
"flags": {},
|
| 993 |
+
"order": 11,
|
| 994 |
+
"mode": 0,
|
| 995 |
+
"inputs": [
|
| 996 |
+
{
|
| 997 |
+
"name": "sigmas",
|
| 998 |
+
"type": "SIGMAS",
|
| 999 |
+
"link": 202
|
| 1000 |
+
}
|
| 1001 |
+
],
|
| 1002 |
+
"outputs": [],
|
| 1003 |
+
"properties": {
|
| 1004 |
+
"Node name for S&R": "DetailDaemonGraphSigmasNode"
|
| 1005 |
+
},
|
| 1006 |
+
"widgets_values": [
|
| 1007 |
+
0.5,
|
| 1008 |
+
0.1,
|
| 1009 |
+
0.9,
|
| 1010 |
+
0.5,
|
| 1011 |
+
0,
|
| 1012 |
+
0,
|
| 1013 |
+
0,
|
| 1014 |
+
0,
|
| 1015 |
+
false,
|
| 1016 |
+
1
|
| 1017 |
+
]
|
| 1018 |
+
},
|
| 1019 |
+
{
|
| 1020 |
+
"id": 29,
|
| 1021 |
+
"type": "BasicScheduler",
|
| 1022 |
+
"pos": {
|
| 1023 |
+
"0": 230,
|
| 1024 |
+
"1": 590
|
| 1025 |
+
},
|
| 1026 |
+
"size": {
|
| 1027 |
+
"0": 315,
|
| 1028 |
+
"1": 106
|
| 1029 |
+
},
|
| 1030 |
+
"flags": {},
|
| 1031 |
+
"order": 9,
|
| 1032 |
+
"mode": 0,
|
| 1033 |
+
"inputs": [
|
| 1034 |
+
{
|
| 1035 |
+
"name": "model",
|
| 1036 |
+
"type": "MODEL",
|
| 1037 |
+
"link": 195,
|
| 1038 |
+
"slot_index": 0
|
| 1039 |
+
}
|
| 1040 |
+
],
|
| 1041 |
+
"outputs": [
|
| 1042 |
+
{
|
| 1043 |
+
"name": "SIGMAS",
|
| 1044 |
+
"type": "SIGMAS",
|
| 1045 |
+
"links": [
|
| 1046 |
+
96,
|
| 1047 |
+
163,
|
| 1048 |
+
164,
|
| 1049 |
+
202,
|
| 1050 |
+
205
|
| 1051 |
+
],
|
| 1052 |
+
"slot_index": 0,
|
| 1053 |
+
"shape": 3
|
| 1054 |
+
}
|
| 1055 |
+
],
|
| 1056 |
+
"properties": {
|
| 1057 |
+
"Node name for S&R": "BasicScheduler"
|
| 1058 |
+
},
|
| 1059 |
+
"widgets_values": [
|
| 1060 |
+
"beta",
|
| 1061 |
+
20,
|
| 1062 |
+
1
|
| 1063 |
+
]
|
| 1064 |
+
},
|
| 1065 |
+
{
|
| 1066 |
+
"id": 83,
|
| 1067 |
+
"type": "SamplerCustomAdvanced",
|
| 1068 |
+
"pos": {
|
| 1069 |
+
"0": 877,
|
| 1070 |
+
"1": 1340
|
| 1071 |
+
},
|
| 1072 |
+
"size": {
|
| 1073 |
+
"0": 355.20001220703125,
|
| 1074 |
+
"1": 106
|
| 1075 |
+
},
|
| 1076 |
+
"flags": {
|
| 1077 |
+
"collapsed": true
|
| 1078 |
+
},
|
| 1079 |
+
"order": 16,
|
| 1080 |
+
"mode": 0,
|
| 1081 |
+
"inputs": [
|
| 1082 |
+
{
|
| 1083 |
+
"name": "noise",
|
| 1084 |
+
"type": "NOISE",
|
| 1085 |
+
"link": 156
|
| 1086 |
+
},
|
| 1087 |
+
{
|
| 1088 |
+
"name": "guider",
|
| 1089 |
+
"type": "GUIDER",
|
| 1090 |
+
"link": 157
|
| 1091 |
+
},
|
| 1092 |
+
{
|
| 1093 |
+
"name": "sampler",
|
| 1094 |
+
"type": "SAMPLER",
|
| 1095 |
+
"link": 166
|
| 1096 |
+
},
|
| 1097 |
+
{
|
| 1098 |
+
"name": "sigmas",
|
| 1099 |
+
"type": "SIGMAS",
|
| 1100 |
+
"link": 206
|
| 1101 |
+
},
|
| 1102 |
+
{
|
| 1103 |
+
"name": "latent_image",
|
| 1104 |
+
"type": "LATENT",
|
| 1105 |
+
"link": 160
|
| 1106 |
+
}
|
| 1107 |
+
],
|
| 1108 |
+
"outputs": [
|
| 1109 |
+
{
|
| 1110 |
+
"name": "output",
|
| 1111 |
+
"type": "LATENT",
|
| 1112 |
+
"links": [
|
| 1113 |
+
162
|
| 1114 |
+
],
|
| 1115 |
+
"slot_index": 0,
|
| 1116 |
+
"shape": 3
|
| 1117 |
+
},
|
| 1118 |
+
{
|
| 1119 |
+
"name": "denoised_output",
|
| 1120 |
+
"type": "LATENT",
|
| 1121 |
+
"links": [],
|
| 1122 |
+
"slot_index": 1,
|
| 1123 |
+
"shape": 3
|
| 1124 |
+
}
|
| 1125 |
+
],
|
| 1126 |
+
"properties": {
|
| 1127 |
+
"Node name for S&R": "SamplerCustomAdvanced"
|
| 1128 |
+
},
|
| 1129 |
+
"widgets_values": []
|
| 1130 |
+
},
|
| 1131 |
+
{
|
| 1132 |
+
"id": 81,
|
| 1133 |
+
"type": "VAEDecode",
|
| 1134 |
+
"pos": {
|
| 1135 |
+
"0": 899,
|
| 1136 |
+
"1": 1389
|
| 1137 |
+
},
|
| 1138 |
+
"size": {
|
| 1139 |
+
"0": 210,
|
| 1140 |
+
"1": 46
|
| 1141 |
+
},
|
| 1142 |
+
"flags": {
|
| 1143 |
+
"collapsed": true
|
| 1144 |
+
},
|
| 1145 |
+
"order": 20,
|
| 1146 |
+
"mode": 0,
|
| 1147 |
+
"inputs": [
|
| 1148 |
+
{
|
| 1149 |
+
"name": "samples",
|
| 1150 |
+
"type": "LATENT",
|
| 1151 |
+
"link": 162
|
| 1152 |
+
},
|
| 1153 |
+
{
|
| 1154 |
+
"name": "vae",
|
| 1155 |
+
"type": "VAE",
|
| 1156 |
+
"link": 154
|
| 1157 |
+
}
|
| 1158 |
+
],
|
| 1159 |
+
"outputs": [
|
| 1160 |
+
{
|
| 1161 |
+
"name": "IMAGE",
|
| 1162 |
+
"type": "IMAGE",
|
| 1163 |
+
"links": [
|
| 1164 |
+
155,
|
| 1165 |
+
200
|
| 1166 |
+
],
|
| 1167 |
+
"slot_index": 0
|
| 1168 |
+
}
|
| 1169 |
+
],
|
| 1170 |
+
"properties": {
|
| 1171 |
+
"Node name for S&R": "VAEDecode"
|
| 1172 |
+
},
|
| 1173 |
+
"widgets_values": []
|
| 1174 |
+
},
|
| 1175 |
+
{
|
| 1176 |
+
"id": 103,
|
| 1177 |
+
"type": "MultiplySigmas",
|
| 1178 |
+
"pos": {
|
| 1179 |
+
"0": 827,
|
| 1180 |
+
"1": 1175
|
| 1181 |
+
},
|
| 1182 |
+
"size": {
|
| 1183 |
+
"0": 340.20001220703125,
|
| 1184 |
+
"1": 106
|
| 1185 |
+
},
|
| 1186 |
+
"flags": {},
|
| 1187 |
+
"order": 12,
|
| 1188 |
+
"mode": 0,
|
| 1189 |
+
"inputs": [
|
| 1190 |
+
{
|
| 1191 |
+
"name": "sigmas",
|
| 1192 |
+
"type": "SIGMAS",
|
| 1193 |
+
"link": 205
|
| 1194 |
+
}
|
| 1195 |
+
],
|
| 1196 |
+
"outputs": [
|
| 1197 |
+
{
|
| 1198 |
+
"name": "SIGMAS",
|
| 1199 |
+
"type": "SIGMAS",
|
| 1200 |
+
"links": [
|
| 1201 |
+
206
|
| 1202 |
+
]
|
| 1203 |
+
}
|
| 1204 |
+
],
|
| 1205 |
+
"properties": {
|
| 1206 |
+
"Node name for S&R": "MultiplySigmas"
|
| 1207 |
+
},
|
| 1208 |
+
"widgets_values": [
|
| 1209 |
+
0.96,
|
| 1210 |
+
0,
|
| 1211 |
+
1
|
| 1212 |
+
]
|
| 1213 |
+
}
|
| 1214 |
+
],
|
| 1215 |
+
"links": [
|
| 1216 |
+
[
|
| 1217 |
+
17,
|
| 1218 |
+
25,
|
| 1219 |
+
0,
|
| 1220 |
+
26,
|
| 1221 |
+
1,
|
| 1222 |
+
"GUIDER"
|
| 1223 |
+
],
|
| 1224 |
+
[
|
| 1225 |
+
23,
|
| 1226 |
+
30,
|
| 1227 |
+
0,
|
| 1228 |
+
26,
|
| 1229 |
+
0,
|
| 1230 |
+
"NOISE"
|
| 1231 |
+
],
|
| 1232 |
+
[
|
| 1233 |
+
25,
|
| 1234 |
+
27,
|
| 1235 |
+
0,
|
| 1236 |
+
8,
|
| 1237 |
+
1,
|
| 1238 |
+
"VAE"
|
| 1239 |
+
],
|
| 1240 |
+
[
|
| 1241 |
+
30,
|
| 1242 |
+
5,
|
| 1243 |
+
0,
|
| 1244 |
+
26,
|
| 1245 |
+
4,
|
| 1246 |
+
"LATENT"
|
| 1247 |
+
],
|
| 1248 |
+
[
|
| 1249 |
+
49,
|
| 1250 |
+
8,
|
| 1251 |
+
0,
|
| 1252 |
+
37,
|
| 1253 |
+
0,
|
| 1254 |
+
"IMAGE"
|
| 1255 |
+
],
|
| 1256 |
+
[
|
| 1257 |
+
51,
|
| 1258 |
+
38,
|
| 1259 |
+
0,
|
| 1260 |
+
25,
|
| 1261 |
+
1,
|
| 1262 |
+
"CONDITIONING"
|
| 1263 |
+
],
|
| 1264 |
+
[
|
| 1265 |
+
95,
|
| 1266 |
+
65,
|
| 1267 |
+
0,
|
| 1268 |
+
67,
|
| 1269 |
+
0,
|
| 1270 |
+
"IMAGE"
|
| 1271 |
+
],
|
| 1272 |
+
[
|
| 1273 |
+
96,
|
| 1274 |
+
29,
|
| 1275 |
+
0,
|
| 1276 |
+
66,
|
| 1277 |
+
3,
|
| 1278 |
+
"SIGMAS"
|
| 1279 |
+
],
|
| 1280 |
+
[
|
| 1281 |
+
97,
|
| 1282 |
+
30,
|
| 1283 |
+
0,
|
| 1284 |
+
66,
|
| 1285 |
+
0,
|
| 1286 |
+
"NOISE"
|
| 1287 |
+
],
|
| 1288 |
+
[
|
| 1289 |
+
98,
|
| 1290 |
+
25,
|
| 1291 |
+
0,
|
| 1292 |
+
66,
|
| 1293 |
+
1,
|
| 1294 |
+
"GUIDER"
|
| 1295 |
+
],
|
| 1296 |
+
[
|
| 1297 |
+
99,
|
| 1298 |
+
28,
|
| 1299 |
+
0,
|
| 1300 |
+
66,
|
| 1301 |
+
2,
|
| 1302 |
+
"SAMPLER"
|
| 1303 |
+
],
|
| 1304 |
+
[
|
| 1305 |
+
100,
|
| 1306 |
+
5,
|
| 1307 |
+
0,
|
| 1308 |
+
66,
|
| 1309 |
+
4,
|
| 1310 |
+
"LATENT"
|
| 1311 |
+
],
|
| 1312 |
+
[
|
| 1313 |
+
101,
|
| 1314 |
+
66,
|
| 1315 |
+
0,
|
| 1316 |
+
65,
|
| 1317 |
+
0,
|
| 1318 |
+
"LATENT"
|
| 1319 |
+
],
|
| 1320 |
+
[
|
| 1321 |
+
103,
|
| 1322 |
+
27,
|
| 1323 |
+
0,
|
| 1324 |
+
65,
|
| 1325 |
+
1,
|
| 1326 |
+
"VAE"
|
| 1327 |
+
],
|
| 1328 |
+
[
|
| 1329 |
+
110,
|
| 1330 |
+
26,
|
| 1331 |
+
0,
|
| 1332 |
+
8,
|
| 1333 |
+
0,
|
| 1334 |
+
"LATENT"
|
| 1335 |
+
],
|
| 1336 |
+
[
|
| 1337 |
+
140,
|
| 1338 |
+
22,
|
| 1339 |
+
0,
|
| 1340 |
+
38,
|
| 1341 |
+
0,
|
| 1342 |
+
"CLIP"
|
| 1343 |
+
],
|
| 1344 |
+
[
|
| 1345 |
+
141,
|
| 1346 |
+
30,
|
| 1347 |
+
0,
|
| 1348 |
+
77,
|
| 1349 |
+
0,
|
| 1350 |
+
"NOISE"
|
| 1351 |
+
],
|
| 1352 |
+
[
|
| 1353 |
+
142,
|
| 1354 |
+
25,
|
| 1355 |
+
0,
|
| 1356 |
+
77,
|
| 1357 |
+
1,
|
| 1358 |
+
"GUIDER"
|
| 1359 |
+
],
|
| 1360 |
+
[
|
| 1361 |
+
145,
|
| 1362 |
+
5,
|
| 1363 |
+
0,
|
| 1364 |
+
77,
|
| 1365 |
+
4,
|
| 1366 |
+
"LATENT"
|
| 1367 |
+
],
|
| 1368 |
+
[
|
| 1369 |
+
146,
|
| 1370 |
+
28,
|
| 1371 |
+
0,
|
| 1372 |
+
71,
|
| 1373 |
+
0,
|
| 1374 |
+
"SAMPLER"
|
| 1375 |
+
],
|
| 1376 |
+
[
|
| 1377 |
+
148,
|
| 1378 |
+
77,
|
| 1379 |
+
0,
|
| 1380 |
+
78,
|
| 1381 |
+
0,
|
| 1382 |
+
"LATENT"
|
| 1383 |
+
],
|
| 1384 |
+
[
|
| 1385 |
+
149,
|
| 1386 |
+
78,
|
| 1387 |
+
0,
|
| 1388 |
+
79,
|
| 1389 |
+
0,
|
| 1390 |
+
"IMAGE"
|
| 1391 |
+
],
|
| 1392 |
+
[
|
| 1393 |
+
150,
|
| 1394 |
+
27,
|
| 1395 |
+
0,
|
| 1396 |
+
78,
|
| 1397 |
+
1,
|
| 1398 |
+
"VAE"
|
| 1399 |
+
],
|
| 1400 |
+
[
|
| 1401 |
+
151,
|
| 1402 |
+
28,
|
| 1403 |
+
0,
|
| 1404 |
+
80,
|
| 1405 |
+
0,
|
| 1406 |
+
"SAMPLER"
|
| 1407 |
+
],
|
| 1408 |
+
[
|
| 1409 |
+
152,
|
| 1410 |
+
80,
|
| 1411 |
+
0,
|
| 1412 |
+
26,
|
| 1413 |
+
2,
|
| 1414 |
+
"SAMPLER"
|
| 1415 |
+
],
|
| 1416 |
+
[
|
| 1417 |
+
154,
|
| 1418 |
+
27,
|
| 1419 |
+
0,
|
| 1420 |
+
81,
|
| 1421 |
+
1,
|
| 1422 |
+
"VAE"
|
| 1423 |
+
],
|
| 1424 |
+
[
|
| 1425 |
+
155,
|
| 1426 |
+
81,
|
| 1427 |
+
0,
|
| 1428 |
+
82,
|
| 1429 |
+
0,
|
| 1430 |
+
"IMAGE"
|
| 1431 |
+
],
|
| 1432 |
+
[
|
| 1433 |
+
156,
|
| 1434 |
+
30,
|
| 1435 |
+
0,
|
| 1436 |
+
83,
|
| 1437 |
+
0,
|
| 1438 |
+
"NOISE"
|
| 1439 |
+
],
|
| 1440 |
+
[
|
| 1441 |
+
157,
|
| 1442 |
+
25,
|
| 1443 |
+
0,
|
| 1444 |
+
83,
|
| 1445 |
+
1,
|
| 1446 |
+
"GUIDER"
|
| 1447 |
+
],
|
| 1448 |
+
[
|
| 1449 |
+
160,
|
| 1450 |
+
5,
|
| 1451 |
+
0,
|
| 1452 |
+
83,
|
| 1453 |
+
4,
|
| 1454 |
+
"LATENT"
|
| 1455 |
+
],
|
| 1456 |
+
[
|
| 1457 |
+
162,
|
| 1458 |
+
83,
|
| 1459 |
+
0,
|
| 1460 |
+
81,
|
| 1461 |
+
0,
|
| 1462 |
+
"LATENT"
|
| 1463 |
+
],
|
| 1464 |
+
[
|
| 1465 |
+
163,
|
| 1466 |
+
29,
|
| 1467 |
+
0,
|
| 1468 |
+
26,
|
| 1469 |
+
3,
|
| 1470 |
+
"SIGMAS"
|
| 1471 |
+
],
|
| 1472 |
+
[
|
| 1473 |
+
164,
|
| 1474 |
+
29,
|
| 1475 |
+
0,
|
| 1476 |
+
77,
|
| 1477 |
+
3,
|
| 1478 |
+
"SIGMAS"
|
| 1479 |
+
],
|
| 1480 |
+
[
|
| 1481 |
+
165,
|
| 1482 |
+
71,
|
| 1483 |
+
0,
|
| 1484 |
+
77,
|
| 1485 |
+
2,
|
| 1486 |
+
"SAMPLER"
|
| 1487 |
+
],
|
| 1488 |
+
[
|
| 1489 |
+
166,
|
| 1490 |
+
28,
|
| 1491 |
+
0,
|
| 1492 |
+
83,
|
| 1493 |
+
2,
|
| 1494 |
+
"SAMPLER"
|
| 1495 |
+
],
|
| 1496 |
+
[
|
| 1497 |
+
194,
|
| 1498 |
+
96,
|
| 1499 |
+
0,
|
| 1500 |
+
25,
|
| 1501 |
+
0,
|
| 1502 |
+
"MODEL"
|
| 1503 |
+
],
|
| 1504 |
+
[
|
| 1505 |
+
195,
|
| 1506 |
+
96,
|
| 1507 |
+
0,
|
| 1508 |
+
29,
|
| 1509 |
+
0,
|
| 1510 |
+
"MODEL"
|
| 1511 |
+
],
|
| 1512 |
+
[
|
| 1513 |
+
196,
|
| 1514 |
+
8,
|
| 1515 |
+
0,
|
| 1516 |
+
97,
|
| 1517 |
+
0,
|
| 1518 |
+
"IMAGE"
|
| 1519 |
+
],
|
| 1520 |
+
[
|
| 1521 |
+
197,
|
| 1522 |
+
65,
|
| 1523 |
+
0,
|
| 1524 |
+
97,
|
| 1525 |
+
1,
|
| 1526 |
+
"IMAGE"
|
| 1527 |
+
],
|
| 1528 |
+
[
|
| 1529 |
+
198,
|
| 1530 |
+
78,
|
| 1531 |
+
0,
|
| 1532 |
+
98,
|
| 1533 |
+
0,
|
| 1534 |
+
"IMAGE"
|
| 1535 |
+
],
|
| 1536 |
+
[
|
| 1537 |
+
199,
|
| 1538 |
+
65,
|
| 1539 |
+
0,
|
| 1540 |
+
98,
|
| 1541 |
+
1,
|
| 1542 |
+
"IMAGE"
|
| 1543 |
+
],
|
| 1544 |
+
[
|
| 1545 |
+
200,
|
| 1546 |
+
81,
|
| 1547 |
+
0,
|
| 1548 |
+
99,
|
| 1549 |
+
0,
|
| 1550 |
+
"IMAGE"
|
| 1551 |
+
],
|
| 1552 |
+
[
|
| 1553 |
+
201,
|
| 1554 |
+
65,
|
| 1555 |
+
0,
|
| 1556 |
+
99,
|
| 1557 |
+
1,
|
| 1558 |
+
"IMAGE"
|
| 1559 |
+
],
|
| 1560 |
+
[
|
| 1561 |
+
202,
|
| 1562 |
+
29,
|
| 1563 |
+
0,
|
| 1564 |
+
100,
|
| 1565 |
+
0,
|
| 1566 |
+
"SIGMAS"
|
| 1567 |
+
],
|
| 1568 |
+
[
|
| 1569 |
+
205,
|
| 1570 |
+
29,
|
| 1571 |
+
0,
|
| 1572 |
+
103,
|
| 1573 |
+
0,
|
| 1574 |
+
"SIGMAS"
|
| 1575 |
+
],
|
| 1576 |
+
[
|
| 1577 |
+
206,
|
| 1578 |
+
103,
|
| 1579 |
+
0,
|
| 1580 |
+
83,
|
| 1581 |
+
3,
|
| 1582 |
+
"SIGMAS"
|
| 1583 |
+
]
|
| 1584 |
+
],
|
| 1585 |
+
"groups": [
|
| 1586 |
+
{
|
| 1587 |
+
"title": "Multiply Sigmas",
|
| 1588 |
+
"bounding": [
|
| 1589 |
+
720,
|
| 1590 |
+
937,
|
| 1591 |
+
1450,
|
| 1592 |
+
543
|
| 1593 |
+
],
|
| 1594 |
+
"color": "#8A8",
|
| 1595 |
+
"font_size": 24,
|
| 1596 |
+
"flags": {}
|
| 1597 |
+
},
|
| 1598 |
+
{
|
| 1599 |
+
"title": "Lying Sigmas",
|
| 1600 |
+
"bounding": [
|
| 1601 |
+
725,
|
| 1602 |
+
399,
|
| 1603 |
+
1445,
|
| 1604 |
+
530
|
| 1605 |
+
],
|
| 1606 |
+
"color": "#b58b2a",
|
| 1607 |
+
"font_size": 24,
|
| 1608 |
+
"flags": {}
|
| 1609 |
+
},
|
| 1610 |
+
{
|
| 1611 |
+
"title": "Detail Daemon",
|
| 1612 |
+
"bounding": [
|
| 1613 |
+
722,
|
| 1614 |
+
-150,
|
| 1615 |
+
1450,
|
| 1616 |
+
539
|
| 1617 |
+
],
|
| 1618 |
+
"color": "#3f789e",
|
| 1619 |
+
"font_size": 24,
|
| 1620 |
+
"flags": {}
|
| 1621 |
+
},
|
| 1622 |
+
{
|
| 1623 |
+
"title": "Default (no detailer)",
|
| 1624 |
+
"bounding": [
|
| 1625 |
+
-150,
|
| 1626 |
+
925,
|
| 1627 |
+
857,
|
| 1628 |
+
555
|
| 1629 |
+
],
|
| 1630 |
+
"color": "#a1309b",
|
| 1631 |
+
"font_size": 24,
|
| 1632 |
+
"flags": {}
|
| 1633 |
+
}
|
| 1634 |
+
],
|
| 1635 |
+
"config": {},
|
| 1636 |
+
"extra": {
|
| 1637 |
+
"ds": {
|
| 1638 |
+
"scale": 0.5131581182307069,
|
| 1639 |
+
"offset": [
|
| 1640 |
+
684.079338698325,
|
| 1641 |
+
186.53831665466834
|
| 1642 |
+
]
|
| 1643 |
+
}
|
| 1644 |
+
},
|
| 1645 |
+
"version": 0.4
|
| 1646 |
+
}
|
custom_nodes/ComfyUI-Detail-Daemon/example_workflows/Flux img2img-DetailDaemon.json
ADDED
|
@@ -0,0 +1,848 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"last_node_id": 63,
|
| 3 |
+
"last_link_id": 150,
|
| 4 |
+
"nodes": [
|
| 5 |
+
{
|
| 6 |
+
"id": 9,
|
| 7 |
+
"type": "SaveImage",
|
| 8 |
+
"pos": {
|
| 9 |
+
"0": 1790,
|
| 10 |
+
"1": 230
|
| 11 |
+
},
|
| 12 |
+
"size": {
|
| 13 |
+
"0": 367.5887451171875,
|
| 14 |
+
"1": 74.19313049316406
|
| 15 |
+
},
|
| 16 |
+
"flags": {},
|
| 17 |
+
"order": 15,
|
| 18 |
+
"mode": 4,
|
| 19 |
+
"inputs": [
|
| 20 |
+
{
|
| 21 |
+
"name": "images",
|
| 22 |
+
"type": "IMAGE",
|
| 23 |
+
"link": 134
|
| 24 |
+
}
|
| 25 |
+
],
|
| 26 |
+
"outputs": [],
|
| 27 |
+
"properties": {},
|
| 28 |
+
"widgets_values": [
|
| 29 |
+
"ComfyUI"
|
| 30 |
+
]
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"id": 48,
|
| 34 |
+
"type": "UnetLoaderGGUF",
|
| 35 |
+
"pos": {
|
| 36 |
+
"0": 20,
|
| 37 |
+
"1": 90
|
| 38 |
+
},
|
| 39 |
+
"size": {
|
| 40 |
+
"0": 315,
|
| 41 |
+
"1": 58
|
| 42 |
+
},
|
| 43 |
+
"flags": {},
|
| 44 |
+
"order": 0,
|
| 45 |
+
"mode": 0,
|
| 46 |
+
"inputs": [],
|
| 47 |
+
"outputs": [
|
| 48 |
+
{
|
| 49 |
+
"name": "MODEL",
|
| 50 |
+
"type": "MODEL",
|
| 51 |
+
"links": [
|
| 52 |
+
130
|
| 53 |
+
],
|
| 54 |
+
"slot_index": 0
|
| 55 |
+
}
|
| 56 |
+
],
|
| 57 |
+
"properties": {
|
| 58 |
+
"Node name for S&R": "UnetLoaderGGUF"
|
| 59 |
+
},
|
| 60 |
+
"widgets_values": [
|
| 61 |
+
"flux\\flux1-dev-Q8_0.gguf"
|
| 62 |
+
]
|
| 63 |
+
},
|
| 64 |
+
{
|
| 65 |
+
"id": 11,
|
| 66 |
+
"type": "DualCLIPLoader",
|
| 67 |
+
"pos": {
|
| 68 |
+
"0": 20,
|
| 69 |
+
"1": 210
|
| 70 |
+
},
|
| 71 |
+
"size": {
|
| 72 |
+
"0": 315,
|
| 73 |
+
"1": 106
|
| 74 |
+
},
|
| 75 |
+
"flags": {},
|
| 76 |
+
"order": 1,
|
| 77 |
+
"mode": 0,
|
| 78 |
+
"inputs": [],
|
| 79 |
+
"outputs": [
|
| 80 |
+
{
|
| 81 |
+
"name": "CLIP",
|
| 82 |
+
"type": "CLIP",
|
| 83 |
+
"links": [
|
| 84 |
+
144
|
| 85 |
+
],
|
| 86 |
+
"slot_index": 0,
|
| 87 |
+
"shape": 3
|
| 88 |
+
}
|
| 89 |
+
],
|
| 90 |
+
"properties": {
|
| 91 |
+
"Node name for S&R": "DualCLIPLoader"
|
| 92 |
+
},
|
| 93 |
+
"widgets_values": [
|
| 94 |
+
"ViT-L-14-BEST-smooth-GmP-TE-only-HF-format.safetensors",
|
| 95 |
+
"t5xxl_fp16.safetensors",
|
| 96 |
+
"flux"
|
| 97 |
+
]
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"id": 10,
|
| 101 |
+
"type": "VAELoader",
|
| 102 |
+
"pos": {
|
| 103 |
+
"0": 20,
|
| 104 |
+
"1": 370
|
| 105 |
+
},
|
| 106 |
+
"size": {
|
| 107 |
+
"0": 311.81634521484375,
|
| 108 |
+
"1": 60.429901123046875
|
| 109 |
+
},
|
| 110 |
+
"flags": {},
|
| 111 |
+
"order": 2,
|
| 112 |
+
"mode": 0,
|
| 113 |
+
"inputs": [],
|
| 114 |
+
"outputs": [
|
| 115 |
+
{
|
| 116 |
+
"name": "VAE",
|
| 117 |
+
"type": "VAE",
|
| 118 |
+
"links": [
|
| 119 |
+
12,
|
| 120 |
+
132
|
| 121 |
+
],
|
| 122 |
+
"slot_index": 0,
|
| 123 |
+
"shape": 3
|
| 124 |
+
}
|
| 125 |
+
],
|
| 126 |
+
"properties": {
|
| 127 |
+
"Node name for S&R": "VAELoader"
|
| 128 |
+
},
|
| 129 |
+
"widgets_values": [
|
| 130 |
+
"ae.safetensors"
|
| 131 |
+
]
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"id": 22,
|
| 135 |
+
"type": "BasicGuider",
|
| 136 |
+
"pos": {
|
| 137 |
+
"0": 900,
|
| 138 |
+
"1": 183
|
| 139 |
+
},
|
| 140 |
+
"size": {
|
| 141 |
+
"0": 222.3482666015625,
|
| 142 |
+
"1": 46
|
| 143 |
+
},
|
| 144 |
+
"flags": {},
|
| 145 |
+
"order": 11,
|
| 146 |
+
"mode": 0,
|
| 147 |
+
"inputs": [
|
| 148 |
+
{
|
| 149 |
+
"name": "model",
|
| 150 |
+
"type": "MODEL",
|
| 151 |
+
"link": 54,
|
| 152 |
+
"slot_index": 0
|
| 153 |
+
},
|
| 154 |
+
{
|
| 155 |
+
"name": "conditioning",
|
| 156 |
+
"type": "CONDITIONING",
|
| 157 |
+
"link": 146,
|
| 158 |
+
"slot_index": 1
|
| 159 |
+
}
|
| 160 |
+
],
|
| 161 |
+
"outputs": [
|
| 162 |
+
{
|
| 163 |
+
"name": "GUIDER",
|
| 164 |
+
"type": "GUIDER",
|
| 165 |
+
"links": [
|
| 166 |
+
30
|
| 167 |
+
],
|
| 168 |
+
"slot_index": 0,
|
| 169 |
+
"shape": 3
|
| 170 |
+
}
|
| 171 |
+
],
|
| 172 |
+
"properties": {
|
| 173 |
+
"Node name for S&R": "BasicGuider"
|
| 174 |
+
},
|
| 175 |
+
"widgets_values": []
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"id": 13,
|
| 179 |
+
"type": "SamplerCustomAdvanced",
|
| 180 |
+
"pos": {
|
| 181 |
+
"0": 1209,
|
| 182 |
+
"1": 183
|
| 183 |
+
},
|
| 184 |
+
"size": {
|
| 185 |
+
"0": 272.3617858886719,
|
| 186 |
+
"1": 124.53733825683594
|
| 187 |
+
},
|
| 188 |
+
"flags": {},
|
| 189 |
+
"order": 13,
|
| 190 |
+
"mode": 0,
|
| 191 |
+
"inputs": [
|
| 192 |
+
{
|
| 193 |
+
"name": "noise",
|
| 194 |
+
"type": "NOISE",
|
| 195 |
+
"link": 37,
|
| 196 |
+
"slot_index": 0
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "guider",
|
| 200 |
+
"type": "GUIDER",
|
| 201 |
+
"link": 30,
|
| 202 |
+
"slot_index": 1
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"name": "sampler",
|
| 206 |
+
"type": "SAMPLER",
|
| 207 |
+
"link": 138,
|
| 208 |
+
"slot_index": 2
|
| 209 |
+
},
|
| 210 |
+
{
|
| 211 |
+
"name": "sigmas",
|
| 212 |
+
"type": "SIGMAS",
|
| 213 |
+
"link": 20,
|
| 214 |
+
"slot_index": 3
|
| 215 |
+
},
|
| 216 |
+
{
|
| 217 |
+
"name": "latent_image",
|
| 218 |
+
"type": "LATENT",
|
| 219 |
+
"link": 133,
|
| 220 |
+
"slot_index": 4
|
| 221 |
+
}
|
| 222 |
+
],
|
| 223 |
+
"outputs": [
|
| 224 |
+
{
|
| 225 |
+
"name": "output",
|
| 226 |
+
"type": "LATENT",
|
| 227 |
+
"links": [
|
| 228 |
+
24
|
| 229 |
+
],
|
| 230 |
+
"slot_index": 0,
|
| 231 |
+
"shape": 3
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "denoised_output",
|
| 235 |
+
"type": "LATENT",
|
| 236 |
+
"links": null,
|
| 237 |
+
"shape": 3
|
| 238 |
+
}
|
| 239 |
+
],
|
| 240 |
+
"properties": {
|
| 241 |
+
"Node name for S&R": "SamplerCustomAdvanced"
|
| 242 |
+
},
|
| 243 |
+
"widgets_values": []
|
| 244 |
+
},
|
| 245 |
+
{
|
| 246 |
+
"id": 41,
|
| 247 |
+
"type": "LoadImage",
|
| 248 |
+
"pos": {
|
| 249 |
+
"0": 20,
|
| 250 |
+
"1": 490
|
| 251 |
+
},
|
| 252 |
+
"size": {
|
| 253 |
+
"0": 315,
|
| 254 |
+
"1": 314
|
| 255 |
+
},
|
| 256 |
+
"flags": {},
|
| 257 |
+
"order": 4,
|
| 258 |
+
"mode": 0,
|
| 259 |
+
"inputs": [],
|
| 260 |
+
"outputs": [
|
| 261 |
+
{
|
| 262 |
+
"name": "IMAGE",
|
| 263 |
+
"type": "IMAGE",
|
| 264 |
+
"links": [
|
| 265 |
+
148
|
| 266 |
+
],
|
| 267 |
+
"slot_index": 0,
|
| 268 |
+
"shape": 3
|
| 269 |
+
},
|
| 270 |
+
{
|
| 271 |
+
"name": "MASK",
|
| 272 |
+
"type": "MASK",
|
| 273 |
+
"links": null,
|
| 274 |
+
"shape": 3
|
| 275 |
+
}
|
| 276 |
+
],
|
| 277 |
+
"properties": {
|
| 278 |
+
"Node name for S&R": "LoadImage"
|
| 279 |
+
},
|
| 280 |
+
"widgets_values": [
|
| 281 |
+
"Screenshot 2023-09-18 091517.png",
|
| 282 |
+
"image"
|
| 283 |
+
]
|
| 284 |
+
},
|
| 285 |
+
{
|
| 286 |
+
"id": 62,
|
| 287 |
+
"type": "ImageResize+",
|
| 288 |
+
"pos": {
|
| 289 |
+
"0": 25,
|
| 290 |
+
"1": 858
|
| 291 |
+
},
|
| 292 |
+
"size": {
|
| 293 |
+
"0": 315,
|
| 294 |
+
"1": 218
|
| 295 |
+
},
|
| 296 |
+
"flags": {},
|
| 297 |
+
"order": 9,
|
| 298 |
+
"mode": 0,
|
| 299 |
+
"inputs": [
|
| 300 |
+
{
|
| 301 |
+
"name": "image",
|
| 302 |
+
"type": "IMAGE",
|
| 303 |
+
"link": 148
|
| 304 |
+
}
|
| 305 |
+
],
|
| 306 |
+
"outputs": [
|
| 307 |
+
{
|
| 308 |
+
"name": "IMAGE",
|
| 309 |
+
"type": "IMAGE",
|
| 310 |
+
"links": [
|
| 311 |
+
149
|
| 312 |
+
],
|
| 313 |
+
"slot_index": 0
|
| 314 |
+
},
|
| 315 |
+
{
|
| 316 |
+
"name": "width",
|
| 317 |
+
"type": "INT",
|
| 318 |
+
"links": null
|
| 319 |
+
},
|
| 320 |
+
{
|
| 321 |
+
"name": "height",
|
| 322 |
+
"type": "INT",
|
| 323 |
+
"links": null
|
| 324 |
+
}
|
| 325 |
+
],
|
| 326 |
+
"properties": {
|
| 327 |
+
"Node name for S&R": "ImageResize+"
|
| 328 |
+
},
|
| 329 |
+
"widgets_values": [
|
| 330 |
+
1024,
|
| 331 |
+
1024,
|
| 332 |
+
"nearest",
|
| 333 |
+
"keep proportion",
|
| 334 |
+
"always",
|
| 335 |
+
0
|
| 336 |
+
]
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"id": 49,
|
| 340 |
+
"type": "VAEEncode",
|
| 341 |
+
"pos": {
|
| 342 |
+
"0": 896,
|
| 343 |
+
"1": 353
|
| 344 |
+
},
|
| 345 |
+
"size": {
|
| 346 |
+
"0": 210,
|
| 347 |
+
"1": 46
|
| 348 |
+
},
|
| 349 |
+
"flags": {},
|
| 350 |
+
"order": 12,
|
| 351 |
+
"mode": 0,
|
| 352 |
+
"inputs": [
|
| 353 |
+
{
|
| 354 |
+
"name": "pixels",
|
| 355 |
+
"type": "IMAGE",
|
| 356 |
+
"link": 149
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"name": "vae",
|
| 360 |
+
"type": "VAE",
|
| 361 |
+
"link": 132
|
| 362 |
+
}
|
| 363 |
+
],
|
| 364 |
+
"outputs": [
|
| 365 |
+
{
|
| 366 |
+
"name": "LATENT",
|
| 367 |
+
"type": "LATENT",
|
| 368 |
+
"links": [
|
| 369 |
+
133
|
| 370 |
+
],
|
| 371 |
+
"slot_index": 0
|
| 372 |
+
}
|
| 373 |
+
],
|
| 374 |
+
"properties": {
|
| 375 |
+
"Node name for S&R": "VAEEncode"
|
| 376 |
+
},
|
| 377 |
+
"widgets_values": []
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"id": 50,
|
| 381 |
+
"type": "PreviewImage",
|
| 382 |
+
"pos": {
|
| 383 |
+
"0": 1793,
|
| 384 |
+
"1": 359
|
| 385 |
+
},
|
| 386 |
+
"size": {
|
| 387 |
+
"0": 535.2194213867188,
|
| 388 |
+
"1": 523.0248413085938
|
| 389 |
+
},
|
| 390 |
+
"flags": {},
|
| 391 |
+
"order": 16,
|
| 392 |
+
"mode": 0,
|
| 393 |
+
"inputs": [
|
| 394 |
+
{
|
| 395 |
+
"name": "images",
|
| 396 |
+
"type": "IMAGE",
|
| 397 |
+
"link": 135
|
| 398 |
+
}
|
| 399 |
+
],
|
| 400 |
+
"outputs": [],
|
| 401 |
+
"properties": {
|
| 402 |
+
"Node name for S&R": "PreviewImage"
|
| 403 |
+
},
|
| 404 |
+
"widgets_values": []
|
| 405 |
+
},
|
| 406 |
+
{
|
| 407 |
+
"id": 8,
|
| 408 |
+
"type": "VAEDecode",
|
| 409 |
+
"pos": {
|
| 410 |
+
"0": 1535,
|
| 411 |
+
"1": 259
|
| 412 |
+
},
|
| 413 |
+
"size": {
|
| 414 |
+
"0": 210,
|
| 415 |
+
"1": 46
|
| 416 |
+
},
|
| 417 |
+
"flags": {},
|
| 418 |
+
"order": 14,
|
| 419 |
+
"mode": 0,
|
| 420 |
+
"inputs": [
|
| 421 |
+
{
|
| 422 |
+
"name": "samples",
|
| 423 |
+
"type": "LATENT",
|
| 424 |
+
"link": 24
|
| 425 |
+
},
|
| 426 |
+
{
|
| 427 |
+
"name": "vae",
|
| 428 |
+
"type": "VAE",
|
| 429 |
+
"link": 12
|
| 430 |
+
}
|
| 431 |
+
],
|
| 432 |
+
"outputs": [
|
| 433 |
+
{
|
| 434 |
+
"name": "IMAGE",
|
| 435 |
+
"type": "IMAGE",
|
| 436 |
+
"links": [
|
| 437 |
+
134,
|
| 438 |
+
135
|
| 439 |
+
],
|
| 440 |
+
"slot_index": 0
|
| 441 |
+
}
|
| 442 |
+
],
|
| 443 |
+
"properties": {
|
| 444 |
+
"Node name for S&R": "VAEDecode"
|
| 445 |
+
},
|
| 446 |
+
"widgets_values": []
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"id": 52,
|
| 450 |
+
"type": "DetailDaemonSamplerNode",
|
| 451 |
+
"pos": {
|
| 452 |
+
"0": 880,
|
| 453 |
+
"1": 502
|
| 454 |
+
},
|
| 455 |
+
"size": {
|
| 456 |
+
"0": 250.63522338867188,
|
| 457 |
+
"1": 274
|
| 458 |
+
},
|
| 459 |
+
"flags": {},
|
| 460 |
+
"order": 8,
|
| 461 |
+
"mode": 0,
|
| 462 |
+
"inputs": [
|
| 463 |
+
{
|
| 464 |
+
"name": "sampler",
|
| 465 |
+
"type": "SAMPLER",
|
| 466 |
+
"link": 137
|
| 467 |
+
}
|
| 468 |
+
],
|
| 469 |
+
"outputs": [
|
| 470 |
+
{
|
| 471 |
+
"name": "SAMPLER",
|
| 472 |
+
"type": "SAMPLER",
|
| 473 |
+
"links": [
|
| 474 |
+
138
|
| 475 |
+
],
|
| 476 |
+
"slot_index": 0
|
| 477 |
+
}
|
| 478 |
+
],
|
| 479 |
+
"properties": {
|
| 480 |
+
"Node name for S&R": "DetailDaemonSamplerNode"
|
| 481 |
+
},
|
| 482 |
+
"widgets_values": [
|
| 483 |
+
0.8,
|
| 484 |
+
0.05,
|
| 485 |
+
0.9,
|
| 486 |
+
0.5,
|
| 487 |
+
0.5,
|
| 488 |
+
0,
|
| 489 |
+
0,
|
| 490 |
+
0,
|
| 491 |
+
true,
|
| 492 |
+
0
|
| 493 |
+
]
|
| 494 |
+
},
|
| 495 |
+
{
|
| 496 |
+
"id": 61,
|
| 497 |
+
"type": "CLIPTextEncodeFlux",
|
| 498 |
+
"pos": {
|
| 499 |
+
"0": 403,
|
| 500 |
+
"1": 92
|
| 501 |
+
},
|
| 502 |
+
"size": [
|
| 503 |
+
402.8331782636767,
|
| 504 |
+
333.1784071867411
|
| 505 |
+
],
|
| 506 |
+
"flags": {},
|
| 507 |
+
"order": 7,
|
| 508 |
+
"mode": 0,
|
| 509 |
+
"inputs": [
|
| 510 |
+
{
|
| 511 |
+
"name": "clip",
|
| 512 |
+
"type": "CLIP",
|
| 513 |
+
"link": 144
|
| 514 |
+
}
|
| 515 |
+
],
|
| 516 |
+
"outputs": [
|
| 517 |
+
{
|
| 518 |
+
"name": "CONDITIONING",
|
| 519 |
+
"type": "CONDITIONING",
|
| 520 |
+
"links": [
|
| 521 |
+
146
|
| 522 |
+
],
|
| 523 |
+
"slot_index": 0
|
| 524 |
+
}
|
| 525 |
+
],
|
| 526 |
+
"properties": {
|
| 527 |
+
"Node name for S&R": "CLIPTextEncodeFlux"
|
| 528 |
+
},
|
| 529 |
+
"widgets_values": [
|
| 530 |
+
"a close-up photograph of a majestic lion resting in the savannah at dusk. The lion's golden fur shimmers under the soft, fading light of the setting sun, casting long shadows across the grasslands. Using a Canon EOS-1D X Mark III paired with a Canon EF 70-200mm f/2.8L IS III USM lens, every detail of the lion's face is crisp, from its piercing amber eyes to the intricate texture of its mane. The backdrop features a hazy orange sky with silhouettes of distant acacia trees, creating a breathtaking scene that encapsulates the wild beauty of the African savannah.",
|
| 531 |
+
"a close-up photograph of a majestic lion resting in the savannah at dusk. The lion's golden fur shimmers under the soft, fading light of the setting sun, casting long shadows across the grasslands. Using a Canon EOS-1D X Mark III paired with a Canon EF 70-200mm f/2.8L IS III USM lens, every detail of the lion's face is crisp, from its piercing amber eyes to the intricate texture of its mane. The backdrop features a hazy orange sky with silhouettes of distant acacia trees, creating a breathtaking scene that encapsulates the wild beauty of the African savannah.",
|
| 532 |
+
3
|
| 533 |
+
]
|
| 534 |
+
},
|
| 535 |
+
{
|
| 536 |
+
"id": 25,
|
| 537 |
+
"type": "RandomNoise",
|
| 538 |
+
"pos": {
|
| 539 |
+
"0": 457,
|
| 540 |
+
"1": 502
|
| 541 |
+
},
|
| 542 |
+
"size": [
|
| 543 |
+
315,
|
| 544 |
+
82
|
| 545 |
+
],
|
| 546 |
+
"flags": {},
|
| 547 |
+
"order": 5,
|
| 548 |
+
"mode": 0,
|
| 549 |
+
"inputs": [],
|
| 550 |
+
"outputs": [
|
| 551 |
+
{
|
| 552 |
+
"name": "NOISE",
|
| 553 |
+
"type": "NOISE",
|
| 554 |
+
"links": [
|
| 555 |
+
37
|
| 556 |
+
],
|
| 557 |
+
"shape": 3
|
| 558 |
+
}
|
| 559 |
+
],
|
| 560 |
+
"properties": {
|
| 561 |
+
"Node name for S&R": "RandomNoise"
|
| 562 |
+
},
|
| 563 |
+
"widgets_values": [
|
| 564 |
+
1010815042691718,
|
| 565 |
+
"fixed"
|
| 566 |
+
],
|
| 567 |
+
"color": "#2a363b",
|
| 568 |
+
"bgcolor": "#3f5159"
|
| 569 |
+
},
|
| 570 |
+
{
|
| 571 |
+
"id": 16,
|
| 572 |
+
"type": "KSamplerSelect",
|
| 573 |
+
"pos": {
|
| 574 |
+
"0": 460,
|
| 575 |
+
"1": 654
|
| 576 |
+
},
|
| 577 |
+
"size": {
|
| 578 |
+
"0": 315,
|
| 579 |
+
"1": 58
|
| 580 |
+
},
|
| 581 |
+
"flags": {},
|
| 582 |
+
"order": 3,
|
| 583 |
+
"mode": 0,
|
| 584 |
+
"inputs": [],
|
| 585 |
+
"outputs": [
|
| 586 |
+
{
|
| 587 |
+
"name": "SAMPLER",
|
| 588 |
+
"type": "SAMPLER",
|
| 589 |
+
"links": [
|
| 590 |
+
137
|
| 591 |
+
],
|
| 592 |
+
"slot_index": 0,
|
| 593 |
+
"shape": 3
|
| 594 |
+
}
|
| 595 |
+
],
|
| 596 |
+
"properties": {
|
| 597 |
+
"Node name for S&R": "KSamplerSelect"
|
| 598 |
+
},
|
| 599 |
+
"widgets_values": [
|
| 600 |
+
"dpmpp_2m"
|
| 601 |
+
]
|
| 602 |
+
},
|
| 603 |
+
{
|
| 604 |
+
"id": 17,
|
| 605 |
+
"type": "BasicScheduler",
|
| 606 |
+
"pos": {
|
| 607 |
+
"0": 455,
|
| 608 |
+
"1": 781
|
| 609 |
+
},
|
| 610 |
+
"size": {
|
| 611 |
+
"0": 315,
|
| 612 |
+
"1": 106
|
| 613 |
+
},
|
| 614 |
+
"flags": {},
|
| 615 |
+
"order": 10,
|
| 616 |
+
"mode": 0,
|
| 617 |
+
"inputs": [
|
| 618 |
+
{
|
| 619 |
+
"name": "model",
|
| 620 |
+
"type": "MODEL",
|
| 621 |
+
"link": 55,
|
| 622 |
+
"slot_index": 0
|
| 623 |
+
}
|
| 624 |
+
],
|
| 625 |
+
"outputs": [
|
| 626 |
+
{
|
| 627 |
+
"name": "SIGMAS",
|
| 628 |
+
"type": "SIGMAS",
|
| 629 |
+
"links": [
|
| 630 |
+
20
|
| 631 |
+
],
|
| 632 |
+
"shape": 3
|
| 633 |
+
}
|
| 634 |
+
],
|
| 635 |
+
"properties": {
|
| 636 |
+
"Node name for S&R": "BasicScheduler"
|
| 637 |
+
},
|
| 638 |
+
"widgets_values": [
|
| 639 |
+
"beta",
|
| 640 |
+
16,
|
| 641 |
+
0.8
|
| 642 |
+
]
|
| 643 |
+
},
|
| 644 |
+
{
|
| 645 |
+
"id": 30,
|
| 646 |
+
"type": "ModelSamplingFlux",
|
| 647 |
+
"pos": {
|
| 648 |
+
"0": 457,
|
| 649 |
+
"1": 939
|
| 650 |
+
},
|
| 651 |
+
"size": {
|
| 652 |
+
"0": 315,
|
| 653 |
+
"1": 130
|
| 654 |
+
},
|
| 655 |
+
"flags": {},
|
| 656 |
+
"order": 6,
|
| 657 |
+
"mode": 0,
|
| 658 |
+
"inputs": [
|
| 659 |
+
{
|
| 660 |
+
"name": "model",
|
| 661 |
+
"type": "MODEL",
|
| 662 |
+
"link": 130,
|
| 663 |
+
"slot_index": 0
|
| 664 |
+
}
|
| 665 |
+
],
|
| 666 |
+
"outputs": [
|
| 667 |
+
{
|
| 668 |
+
"name": "MODEL",
|
| 669 |
+
"type": "MODEL",
|
| 670 |
+
"links": [
|
| 671 |
+
54,
|
| 672 |
+
55
|
| 673 |
+
],
|
| 674 |
+
"slot_index": 0,
|
| 675 |
+
"shape": 3
|
| 676 |
+
}
|
| 677 |
+
],
|
| 678 |
+
"properties": {
|
| 679 |
+
"Node name for S&R": "ModelSamplingFlux"
|
| 680 |
+
},
|
| 681 |
+
"widgets_values": [
|
| 682 |
+
1.15,
|
| 683 |
+
0.5,
|
| 684 |
+
1024,
|
| 685 |
+
1024
|
| 686 |
+
]
|
| 687 |
+
}
|
| 688 |
+
],
|
| 689 |
+
"links": [
|
| 690 |
+
[
|
| 691 |
+
12,
|
| 692 |
+
10,
|
| 693 |
+
0,
|
| 694 |
+
8,
|
| 695 |
+
1,
|
| 696 |
+
"VAE"
|
| 697 |
+
],
|
| 698 |
+
[
|
| 699 |
+
20,
|
| 700 |
+
17,
|
| 701 |
+
0,
|
| 702 |
+
13,
|
| 703 |
+
3,
|
| 704 |
+
"SIGMAS"
|
| 705 |
+
],
|
| 706 |
+
[
|
| 707 |
+
24,
|
| 708 |
+
13,
|
| 709 |
+
0,
|
| 710 |
+
8,
|
| 711 |
+
0,
|
| 712 |
+
"LATENT"
|
| 713 |
+
],
|
| 714 |
+
[
|
| 715 |
+
30,
|
| 716 |
+
22,
|
| 717 |
+
0,
|
| 718 |
+
13,
|
| 719 |
+
1,
|
| 720 |
+
"GUIDER"
|
| 721 |
+
],
|
| 722 |
+
[
|
| 723 |
+
37,
|
| 724 |
+
25,
|
| 725 |
+
0,
|
| 726 |
+
13,
|
| 727 |
+
0,
|
| 728 |
+
"NOISE"
|
| 729 |
+
],
|
| 730 |
+
[
|
| 731 |
+
54,
|
| 732 |
+
30,
|
| 733 |
+
0,
|
| 734 |
+
22,
|
| 735 |
+
0,
|
| 736 |
+
"MODEL"
|
| 737 |
+
],
|
| 738 |
+
[
|
| 739 |
+
55,
|
| 740 |
+
30,
|
| 741 |
+
0,
|
| 742 |
+
17,
|
| 743 |
+
0,
|
| 744 |
+
"MODEL"
|
| 745 |
+
],
|
| 746 |
+
[
|
| 747 |
+
130,
|
| 748 |
+
48,
|
| 749 |
+
0,
|
| 750 |
+
30,
|
| 751 |
+
0,
|
| 752 |
+
"MODEL"
|
| 753 |
+
],
|
| 754 |
+
[
|
| 755 |
+
132,
|
| 756 |
+
10,
|
| 757 |
+
0,
|
| 758 |
+
49,
|
| 759 |
+
1,
|
| 760 |
+
"VAE"
|
| 761 |
+
],
|
| 762 |
+
[
|
| 763 |
+
133,
|
| 764 |
+
49,
|
| 765 |
+
0,
|
| 766 |
+
13,
|
| 767 |
+
4,
|
| 768 |
+
"LATENT"
|
| 769 |
+
],
|
| 770 |
+
[
|
| 771 |
+
134,
|
| 772 |
+
8,
|
| 773 |
+
0,
|
| 774 |
+
9,
|
| 775 |
+
0,
|
| 776 |
+
"IMAGE"
|
| 777 |
+
],
|
| 778 |
+
[
|
| 779 |
+
135,
|
| 780 |
+
8,
|
| 781 |
+
0,
|
| 782 |
+
50,
|
| 783 |
+
0,
|
| 784 |
+
"IMAGE"
|
| 785 |
+
],
|
| 786 |
+
[
|
| 787 |
+
137,
|
| 788 |
+
16,
|
| 789 |
+
0,
|
| 790 |
+
52,
|
| 791 |
+
0,
|
| 792 |
+
"SAMPLER"
|
| 793 |
+
],
|
| 794 |
+
[
|
| 795 |
+
138,
|
| 796 |
+
52,
|
| 797 |
+
0,
|
| 798 |
+
13,
|
| 799 |
+
2,
|
| 800 |
+
"SAMPLER"
|
| 801 |
+
],
|
| 802 |
+
[
|
| 803 |
+
144,
|
| 804 |
+
11,
|
| 805 |
+
0,
|
| 806 |
+
61,
|
| 807 |
+
0,
|
| 808 |
+
"CLIP"
|
| 809 |
+
],
|
| 810 |
+
[
|
| 811 |
+
146,
|
| 812 |
+
61,
|
| 813 |
+
0,
|
| 814 |
+
22,
|
| 815 |
+
1,
|
| 816 |
+
"CONDITIONING"
|
| 817 |
+
],
|
| 818 |
+
[
|
| 819 |
+
148,
|
| 820 |
+
41,
|
| 821 |
+
0,
|
| 822 |
+
62,
|
| 823 |
+
0,
|
| 824 |
+
"IMAGE"
|
| 825 |
+
],
|
| 826 |
+
[
|
| 827 |
+
149,
|
| 828 |
+
62,
|
| 829 |
+
0,
|
| 830 |
+
49,
|
| 831 |
+
0,
|
| 832 |
+
"IMAGE"
|
| 833 |
+
]
|
| 834 |
+
],
|
| 835 |
+
"groups": [],
|
| 836 |
+
"config": {},
|
| 837 |
+
"extra": {
|
| 838 |
+
"ds": {
|
| 839 |
+
"scale": 0.5644739300537774,
|
| 840 |
+
"offset": [
|
| 841 |
+
644.4923323021252,
|
| 842 |
+
344.4655124672261
|
| 843 |
+
]
|
| 844 |
+
},
|
| 845 |
+
"groupNodes": {}
|
| 846 |
+
},
|
| 847 |
+
"version": 0.4
|
| 848 |
+
}
|