ComfyUI_Mira
A custom node for ComfyUI to improve all those custom nodes I feel not comfortable in my workflow.
Installation
Clone
the repository to custom_nodes in your ComfyUI\custom_nodes
directory:
git clone https://github.com/mirabarukaso/ComfyUI_Mira.git
Functions
Mask
Create Tilling PNG Mask
Create a Tilling
PNG image with Color Mask stack for regional conditioning mask.
Ideas from sd-webui-regional-prompter
| Inputs | Description |
| --- | --- |
| Width
Height
| Image size, could be difference with cavan size, but recommended to connect them together. |
| Colum_first
| A boolean trigger, when enabled, will treat default cut as a horizontal cut. |
| Rows
Colums
| Define how many Blocks
you want, all Blocks
are the same weight. (Blocks = Rows x Colums) <br /> Low prority, only works when Layout is incorrect. |
| Layout
| Customized Blocks
with layouts input. e.g. 1,2,1,1;2,4,6
<br /> 0-9
,
;
Check Examples section for more detail. <br />High prority, in case you don't need custom layout, simply put #
here. |
| Outputs | Description |
| --- | --- |
| Image
| Visualisation Image of your Layout. |
| PngColorMasks
| A List contains all your Blocks' color information. <br />Connect to Create PNG Mask
Color Mask to HEX String
Color Mask to INT RGB
Color Masks List
|
| PngRectangles
| A List contains all PNG Blocks' rectangle informationm, last one is the whole Image's Width and Height. |
| Debug
| Debug information as String. |
| Examples | Description |
| --- | --- |
| 0-9
| Block weights |
| ,
| A normal segmentation. Let's call it N
cut|
| ;
| A high-priority segmentation perpendicular to the normal direction. Let's call it G
cut|
| 1,2,1,1;2,4,6
<br /> Colum_first ENABLED
| When combining ,
and ;
, the first and the following ;
elements are treated as the weight of G
for current cavans. Node will first split the canvas with weight 1
and ;2
as G
cuts. Then split the following parts with 2,1,1
and 4,6
as N
cuts. <br />NOTE: The arithmetic logic here are different from WebUI, please use "Colum_first" if you need to change the direction, don't replace ,
and ;
directly. |
| 1,2,3,2,1
<br /> Colum_first DISABLED
| A simple horizontal N
cut with weights. |
| 1,2,3,2,1
<br /> Colum_first ENABLED
| A simple vertical N
cut with weights. |
| 1,2,1,1;2,4,6 with Colum_first | 1,2,3,2,1 | 1,2,3,2,1 with Colum_first | | --- | --- | --- | | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_mask2rgb.png" width=35% height=35%> | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_mask2rgb_12321_f.png" width=35% height=35%> | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_mask2rgb_12321_t.png" width=35% height=35%> |
Create Nested Rectangles PNG Mask
Create a Nested Rectangles
PNG image with Color Mask stack for regional conditioning mask.
Ideas from Watermark Removal
| Inputs | Description |
| --- | --- |
| Width
Height
| Image size, could be difference with cavan size, but recommended to connect them together. |
| X
, Y
| Center point (X
,Y
) of all Rectangles. |
| unlimit_top
| When ENABLED
, all masks
will create from the top of Image. |
| unlimit_bottom
| When ENABLED
, all masks
will create till the bottom of Image. |
| unlimit_left
| When ENABLED
, all masks
will create from the left of Image. |
| unlimit_right
| When ENABLED
, all masks
will create till the right of Image. |
| Layout
| Customized Blocks
with layouts input. e.g. 2,4,1
<br /> 0-9
,
;
Check Examples section for more detail. |
| Outputs | Description |
| --- | --- |
| Image
| Visualisation Image of your Layout. |
| PngColorMasks
| A List contains all your Blocks' color information. <br />Connect to Create PNG Mask
Color Mask to HEX String
Color Mask to INT RGB
Color Masks List
|
| PngRectangles
| A List contains all PNG Blocks' rectangle informationm, last one is the whole Image's Width and Height. |
| Debug
| Debug information as String. |
| Examples | Description |
| --- | --- |
| 0-9
| Block weights |
| ,
| A normal segmentation. ;
will treat as same as ,
|
| ;
| Ignored in , ;
|
| 2,4,1 | 2,4,1 unlimit bottom | 2,4,1 unlimit bottom and right and blur 16 | | --- | --- | --- | | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_createnestedpng.png" width=35% height=35%> | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_createnestedpng_ub.png" width=35% height=35%> | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_createnestedpng_ubr_b16.png" width=35% height=35%> |
PngColor Masks to Mask List
Convert ranged PngColorMasks
to Masks with(or without) Blur. Dunno if there is a proper way to solve the output problem.
Ideas from ComfyUI_essentials
| Inputs | Description |
| --- | --- |
| Image
| Image from Mira/Mask/Create PNG Mask
|
| PngColorMasks
| List from Mira/Mask/Create PNG Mask
|
| Blur
| The intensity of blur around the edge of Mask, set to 0
for a solid edge. |
| Start_At_Index
| The first block index number you want. |
| Outputs | Description |
| --- | --- |
| mask_[0-9]
| The Mask for Regional Conditioning
or Anything who need a Mask. |
| Solid | Blur 16.0 | | --- | --- | | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_mask2mask_solid.png" width=35% height=35%> | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_mask2mask_blur.png" width=35% height=35%> |
PngColor Mask to HEX String
Convert specified Index
of PngColorMasks
to HEX value. e.g. RGB(255,0,255)
to #FF00FF
| Inputs | Description |
| --- | --- |
| PngColorMasks
| List from Mira/Mask/Create PNG Mask
|
| Index
| The block index number. |
| Outputs | Description |
| --- | --- |
| mask_color
| The color RGB in HEX for Regional Conditioning By Color Mask (Inspire)
or etc. |
PngColor Mask to INT RGB
Convert specified Index
PngColorMasks
to RGB value for 🔧 Mask From Color
or etc. e.g. RGB(255,0,255)
| Inputs | Description |
| --- | --- |
| PngColorMasks
| List from Mira/Mask/Create PNG Mask
|
| Index
| The block index number. |
| Outputs | Description |
| --- | --- |
| R
| Red |
| G
| Green |
| B
| Blue |
PngColor Masks to List
Convert ranged PngColorMasks
to HEX value. Dunno if there is a proper way to solve the output problem.
| Inputs | Description |
| --- | --- |
| PngColorMasks
| List from Mira/Mask/Create PNG Mask
|
| Start_At_Index
| The first block index number you want. |
| Outputs | Description |
| --- | --- |
| mask_color_[0-9]
| The color RGB in HEX for Regional Conditioning By Color Mask (Inspire)
or etc. |
PngRectangles to Mask (List)
Convert ranged PngRectangles
to Mask with Mask Intenisity
and Blur
function.
| Inputs (Common) | Description |
| --- | --- |
| PngRectangles
| List from Mira/Mask/Create PNG Mask
|
| Intenisity
| Intenisity
of Mask, set to 1.0
for solid Mask. |
| Blur
| The intensity of blur around the edge of Mask, set to 0
for a solid edge. |
| Start_At_Index
| The first block index number you want. |
| Inputs (Single Mask) | Description |
| --- | --- |
| Overlap
| Combine the Previous
or Next
Masks into current Mask. None
for disable. |
| Overlap_Count
| How many Previous
or Next
Masks you want to combine. |
| Outputs | Description |
| --- | --- |
| Normal |
| mask
| Mask with specified Intenisity
and Blur
. |
| List |
| mask_[0-9]
| Masks List with specified Intenisity
and Blur
. |
Example
| Normal | Overlap |
| --- | --- |
| <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_pngrect2masks.png" width=35% height=35%> | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_pngrect2masks_overlap.png" width=35% height=35%> |
Create Mask With Canvas
Create a new mask
on defined cavans
.
In case you need merge
multiple masks
, try search MaskComposite
with operation add
.
| Inputs | Description |
| --- | --- |
| C_Width
| Width of cavans. |
| C_Height
| Height of cavans. |
| X
| The left point of new mask on cavans. |
| Y
| The top point of new mask on cavans. |
| Width
| Mask width. |
| Height
| Mask height. |
| Intenisity
| Intenisity
of Mask, set to 1.0
for solid Mask. |
| Blur
| The intensity of blur around the edge of Mask, set to 0
for a solid edge. |
| Outputs | Description |
| --- | --- |
| mask
| New mask with defined cavans |
Example
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_createmaskwithcavans.png" width=35% height=35%>
Create Watermark Removal Mask
Creates multiple masks
at the corners of the image for subsequent watermark detection and removal.
Ideas from comfyui-lama-remover
***Reminder: If you disable all 4 corners, the bottom right corner will be enabled by default. ***
| Inputs | Description |
| --- | --- |
| C_Width
| Width of cavans. |
| C_Height
| Height of cavans. |
| Mask_W
| Mask width, maxium value are half of cavans width. |
| Mask_H
| Mask height, maxium value are half of cavans height. |
| Top_L
| Create mask from top left. |
| Top_R
| Create mask from top right. |
| Bottom_L
| Create mask from bottom left. |
| Bottom_R
| Create mask from bottom right. |
| EdgeToEdge
| Preserve the N pixels at the outermost edges of the image to prevent image noise. Set to 0 for borderless. |
| Intenisity
| Intenisity
of Mask, set to 1.0
for solid Mask. |
| Blur
| The intensity of blur around the edge of Mask, set to 0
for a solid edge. |
| Outputs | Description |
| --- | --- |
| Mask
| New mask with defined cavans |
| Before | After | | --- | --- | | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_watermark_removal_mask_before.png" width=35% height=35%> | <img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_watermark_removal_mask_after.png" width=35% height=35%> |
Util
Create Canvas
Create Canvas information Width
and Height
for Latent with Landscape switch. There's an advanced version also controls Batch
and HiResMultiplier
.
| Inputs | Description |
| --- | --- |
| Basic |
| Width
Height
| Image size. |
| Normal |
| Landscape
| Swap Width
and Height
by one click. |
| Advanced |
| Batch
| Batch size. |
| HiResMultiplier
| Automatically calculated (in steps of 8) for HiResFix. |
| Debug
| Debug information as String. |
| Outputs | Description |
| --- | --- |
| Basic & Normal |
| Width
Height
| Image size. Swaps automatically when Landscape
is Enabled. |
| Advanced |
| Batch
| Batch size. |
| HiRes Width
HiRes Height
| Width and Height for HiResFix or etc. <br />NOTE:The result is not the product of the original data, but the nearest multiple of 8.|
Random Tilling Layouts
Random Tilling Mask Layout
Generator for Create Tilling PNG Mask -> Layout
Highly recommend connect the output layout
or Create PNG Mask -> Debug
to ShowText
node.
Refer to ComfyUI-Custom-Scripts
Known Issue about Seed Generator
Switching randomize
to fixed
now works immediately.
But, switching fixed
to randomize
, it need 2 times Queue Prompt
to take affect. (Because of the ComfyUI logic)
Solution: Try Global Seed (Inspire)
from ComfyUI-Inspire-Pack
Reminder
The rnd_seed
have nothing to do with the actual random numbers, you can't get the same layout
with the same rnd_seed
, it is recommended to use ShowText
and Notes
to save your favourite layout
.
Hint
Set rows or colums to 0
for only one direction cuts. Whichever is set to 0
will automatically cut according to the other non-zero setting. Just in case all fours are 0
, it will return 1,1
.
| Inputs | Description |
| --- | --- |
| min_rows
max_rows
| Range of how many N cuts
you may want, set both to 0 to disable it. |
| min_colums
max_colums
| Range of how many G cuts
you may want, set both to 0 to disable it. |
| max_weights_gcuts
| The maxium weight of G cuts
range from 1 to max_weights_gcuts
|
| max_weights_ncuts
| The maxium weight of N cuts
range from 1 to max_weights_ncuts
|
| rnd_seed
| Connect to the Seed Generator
node, then use Global Seed (Inspire)
node to control it properly. |
| Outputs | Description |
| --- | --- |
| Layout
| Layouts string, you need connect it to Create PNG Mask -> layout
|
Example
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_random_layouts.png" width=35% height=35%>
Random Nested Mask Layouts
Random Nested Mask Layout
Generator for Create Nested PNG Mask -> Layout
Known Issue same as upper one.
| Inputs | Description |
| --- | --- |
| min_nested
, max_nested
| Range of nest you want. |
| min_weights
, max_weights
| The weight of every nest. |
| rnd_seed
| Connect to the Seed Generator
node, then use Global Seed (Inspire)
node to control it properly. |
| Outputs | Description |
| --- | --- |
| Layout
| Layouts string, you need connect it to Create Nested PNG Mask -> layout
|
| top
, bottom
, left
, right
| Random Boolean for Create Nested PNG Mask -> Layout
|
Example
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_random_nested_layouts.png" width=35% height=35%>
Seed Generator
Random Seed
Generator for Random Layouts
, same as normal random seed generator.
Text
Text Switcher
Selects text1
or text2
depending on the use_text2
and automatically adds common_text
for output.
| Inputs | Description |
| --- | --- |
| use_text2
| When ENABLED
, will switch Output
to text2 + separator + common_text
. |
| common_text_at_front
| When ENABLED
, the common text is placed in front of the text (1 or 2). |
| text1
| Default output text. |
| text2
| Alternative text when use_text2
is ENABLED
. |
| common_text
| Common text input for quality tags and etc, leave it blank if you don't need it.. |
| Outputs | Description |
| --- | --- |
| text
| A combined text output. |
| text_alt
| Alternative combined text output. |
Example
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_text_switcher.png" width=35% height=35%>
Text Combiner
Simply combine text inputs together, switch them to input node
as you wish, then connect to Text Switcher
or Simple Text Box
| Inputs | Description |
| --- | --- |
| text1-6
| Default output text. |
| Outputs | Description |
| --- | --- |
| text
| A combined text output. |
For Text Combiner Six
, you can use my naming logic to make the whole workflow easier to understand.
| Inputs | Description |
| --- | --- |
| text1
| All common prompts
for model required. e.g. score_9, score_8_up, score_7_up, score_6_up, score_5_up, best quality, masterpiece,
|
| text2
| Base information for what you want. e.g. camera front view, low angle view,
, style cyberpunk, reflection,
, location street, outdoors,
, characters (number) 1anthro
|
| text3
| The Charater's pose information. e.g. smile, standing, open mouth, looking at viewer,
|
| text4
| The Charater's race and outlook information. e.g. anthro dragon, no pupils, cowboy shot, (4 fingers:1.2), claws, (hair slicked back:1.1),
and (two-tone scales, (blue scales:1.2), grey stomach scales, cyan striped, cyan hair, black sclera, gold eyes:1.1), (wet, shark dragon, shark tail, (skin-covered dragon horn:1.3), arm fins, ear fins, gills, (mohawk:0.9), sidelocks:1.1),
|
| text5
| LoRA trigger words. |
| text6
| Any addional informaion you want. e.g. glowing eyes,
|
Text Switcher Two/Three Ways
Found a satisfied random number and didn't want to mess up your regional nodes too much?
Reminder: In case you are not use a symmetrical(1:1:1
) Mask, do not forget your Mask Layout
| Inputs | Description |
| --- | --- |
| text1-3
| Full combined text before Regional confiton |
| switch
| Boolean/List for how to switch outputs |
| Outputs | Description |
| --- | --- |
| text1-3
| As is, but switched order |
Three ways
| Switch | Output |
| --- | --- |
| False
| text1
text2
|
| True
| text2
text1
|
Three ways
| Switch | Output |
| --- | --- |
| 1 | 123 |
| 2 | 132 |
| 3 | 213 |
| 4 | 231 |
| 5 | 312 |
| 6 | 321 |
Logic
Boolean
Few Boolean
stacks.
| Inputs | Description |
| --- | --- |
| bool_N
| Triggers. |
| bool_list
| Boolean List from N Bool
|
| NOT_Mode
| Inverts the Boolean value from input to output (1->0 0->1) |
| Outputs | Description |
| --- | --- |
| bool_N
| Bool value. |
| bool_list
| Boolean List to N Bool from List
|
Logic NOT
Always return not Boolean
| Input | Output |
| --- | --- |
| True
| False
|
| False
| True
|
Even or Odd
Check if a Integer
is odd or even.
| Input | Output |
| --- | --- |
| Even
| False
|
| Odd
| True
|
None To Zero
Check if the check_none
is None, then set return value to 0
.
This is a spoofing Node
to mess up
with other Nodes
. Imaging everyothers could follow this rule to create their Custom Node
, the ComfyUI
could be more Logic
.
The extra logic calls do add a bit of system overhead, but it's Python, so who cares?
| Inputs | Description |
| --- | --- |
| check_none
| None
or NOT None
from 74 family
|
| ret_float
| The float
result when NOT None
|
| ret_int
| The intenger
result when NOT None
|
| Outputs | Description |
| --- | --- |
| ret_float
| AS IS
when NOT None
, and 0
when None
|
| ret_int
| AS IS
when NOT None
, and 0
when None
|
| ret_image
| AS IS
when NOT None
, and 2x2 img
when None
|
| none_image
| AS IS
when NOT None
, and None
when None
|
Even or Odd List
Checks whether each digit
(decimal) of the input integer
is odd or even, and returns true
for even numbers and false
for odd numbers.
The final output is a Boolean List
which is connected to the Boolean List Interpreter
.
If the input Number of digits
is less than the Requirement
, it will go back to the lowest digit to re-recognize and complete the list,
and the way the list is completed can be chosen as as is
or not
.
The output node String
displays the actual results.
| Inputs | Description |
| --- | --- |
| integer
| Recommend connect to Seed Generator
|
| quantity
| Length of the Boolean list
, if quantity
is greater than len(str(integer))
, will trigger filling
for extra bits.|
| NOT_filling
| Filling algorithm, Enable
for switch between NOT
and AS IS
in future loop, Disable
for AS IS
in every loop. |
| Outputs | Description |
| --- | --- |
| bool_list
| Boolean list |
| result
| String result |
Example
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_evenoroddlist.png" width=35% height=35%>
Function Swap
Swap func1
and func2
outputs depends on trigger
.
| Inputs | Description |
| --- | --- |
| swap
| True
or False
|
| func1
| Any function. E.g. Mask_1
. |
| func2
| Any function. E.g. Mask_2
. |
| Outputs | A | B |
| --- | --- | --- |
| swap | A | B |
| True
| func2 | func1 |
| False
| func1 | func2 |
Logic-74
In case you didn't know about 74 family
, refer to List of 7400-series integrated circuits
SN74LVC1G125
Single Bus Buffer Gate With Enable
| OE | A | | --- | --- | | True | Y | | False | None |
SN74HC1G86
Single 2-Input Exclusive-OR(XOR) Gate
SN74HC86
Quadruple 2-Input Exclusive-OR(XOR) Gates
| A | B | Y | | --- | --- | --- | | True | True | None | | False | False | None | | True | False | A | | False | True | B |
Example
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_SN74HC86.png" width=35% height=35%>
Numeral
Convert Numeral to String
Convert Integer
or Float
to String.
Floats
And, few Float
stacks.
| Inputs | Description |
| --- | --- |
| float_N
| Triggers. |
| float_list
| Float List from N Float
|
| Outputs | Description |
| --- | --- |
| float_N
| Float value. |
| float_list
| Float List to N Float from List
|
Arithmetic (WIP as I need......)
Addition, Subtraction, Multiplication and Division.
Multiplier now renamed to Arithmetic.
Multiplication
Integer
and Float
Multiplier with various output interfaces.
There is also an Integer to Float
Multiplier, connect to Seed Generator
(x0.1) for Even or Odd
and Text Switcher
.
| Inputs | Description |
| --- | --- |
| int_value
float_value
| The number you want to multiply. |
| multiply_value
| How many times? |
| Outputs | Description |
| --- | --- |
| Integer
| Integer
result. When converting Floating
to Integer
, the fractional part are discarded.|
| Float
| Float
result. |
| String
| Convert result to String
. |
Subtraction
Integer
Subtraction with various output interfaces.
Mostly usage for Create Mask With Cavans
, connect Y
with Result
then connect height
with subtracted_value
.
| Inputs | Description |
| --- | --- |
| int_value
| Subtracted number. |
| subtracted_value
| Subtracted by how much? |
| Outputs | Description |
| --- | --- |
| Integer
| Integer
result. |
| String
| Convert result to String
. |
| subtracted_value
| As is |
Example
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/example_subtraction.png" width=35% height=35%>
LoRA
LoRA Loader With Name Stacker
A simple LoRA loader with name stacker for any website that could not identify all LoRAs' information from image.
Apparently that only happens with ComfyUI...
| Inputs | Description |
| --- | --- |
| model
| Your Model node, the purple
one. |
| clip
| Your Clip node, the lemon yellow
one. |
| lora_name
| Selected LoRA. |
| strength_model
| LoRA strength for Model. |
| strength_clip
| LoRA strength for Clip. |
| bypass
| Bypass current LoRA. |
| Optional Input | Description |
| --- | --- |
| lora_stack
| A STRING
array from previous LoRA Loader With Name Stacker
. |
Reminder: leave the locomotive(first one) empty.
| Outputs | Description |
| --- | --- |
| MODEL
| Model |
| CLIP
| CLIP |
| lora_stack
| New STRING
array with current LoRA name and strength information. AS is when bypass
is Enable
or strengths
are all 0
. |
Reminder: For the 2nd Hires fix, the same LoRA name will be ignored.
Overview - Regional Conditioning Mask with HiRes Fix
SDXL with LoRA Train
<img src="https://github.com/mirabarukaso/ComfyUI_Mira/blob/main/examples/overview01.png" width=50% height=50%>
Latest Change Log
2024.10.04 Ver 0.4.4.1
・Add NOT Mode
for all Bool List
・・For someone who likes to disable all bool triggers
・Remove useless code