Commit Graph

43 Commits

Author SHA1 Message Date
NubeBuster 39e79a925b Add max and min operations to MaskComposite.
The and/or/xor operations round both masks to 0 or 1 before combining,
so they discard feathering. There was previously no way to take the
union or intersection of two soft masks without losing intermediate
values. max and min are the standard fuzzy-set equivalents and preserve
them.

Also documents on the operation widget which ops are arithmetic and
which binarize, since the distinction is not visible from the names.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 07:08:35 +02:00
Alexis Rolland 1f51e146a8
chore: Update preview nodes (#14871) 2026-07-10 19:32:53 -04:00
Alexis Rolland ca1622ca24
chore: Update nodes categories (CORE-263) (#14460) 2026-06-17 08:33:09 +08:00
Alexis Rolland 174208df6b
chore: Update nodes categories (#14145)
* Move dataset/text nodes to text category

* Rename category utils into utilities

* Rename category api node into partner

* Move categories conditioning, latent, sampling, model_patches, training, etc. under model category

* Dispatch partner nodes in to 3d, audio, image, text, video categories

* Move PreviewAny node to utilities category
2026-05-27 20:43:33 -04:00
Alexis Rolland d71cc1c8f2
chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830)
* Move detection category under image category

* Add missing categories

* Move detection nodes to detection category

* Move save nodes to image root catefory

* Rename postprocessors

* Move mask category under image

* Move guiders category to parent level at root of sampling category

* Move custom_sampling category to parent level at the root of sampling category

* Modify description of LoRA loaders

* Fix node id SolidMask

* Move VOID Quadmask under image/mask

* Group compositing nodes under image/compositing

* Move load image as mask to image category for consistency with other load image nodes

* Align display name with Load Checkpoint

* Move dataset category under training category

* Rename Number Convert to Conver Number (verb first)

* Rename Canny node

* Revert wanBlockSwap + description

* Add description to RemoveBackground node

* Revert category update of dataset
2026-05-19 00:13:48 -04:00
Alvin Tang d4c6c9eff8
fix(FeatherMask): correct negative zero indexing for right/bottom feathering (#12881) 2026-05-18 20:22:15 +08:00
comfyanonymous 300b6c8c91
Revert some breaking changes. (#13861) 2026-05-12 17:28:20 -07:00
Yousef R. Gamaleldin d3c18c1636
Add support for BiRefNet background remove model (CORE-46) (#12747) 2026-05-08 17:59:24 +08:00
Alexis Rolland 15a4494a4e
chore: Update display names and categories (CORE-151) (#13693)
* Standardize DEPRECATED label in node display name

* Promote category image/video to root level video/

* Update images and masks names and categories
2026-05-04 17:37:25 -07:00
Gilad Schreiber 24de8dc01b
Fix SolidMask and MaskComposite device mismatch with --gpu-only (#13296)
SolidMask had a hardcoded device="cpu" while other nodes (e.g.
EmptyImage) follow intermediate_device(). This causes a RuntimeError
when MaskComposite combines masks from different device sources
under --gpu-only.

- SolidMask: use intermediate_device() instead of hardcoded "cpu"
- MaskComposite: align source device to destination before operating

Co-authored-by: Alexis Rolland <alexisrolland@hotmail.com>
Co-authored-by: Jedrzej Kosinski <kosinkadink1@gmail.com>
2026-04-28 01:18:19 -07:00
Christian Byrne 4d172e9ad7
feat: mark 429 widgets as advanced for collapsible UI (#12197)
* feat: mark 429 widgets as advanced for collapsible UI

Mark widgets as advanced across core, comfy_extras, and comfy_api_nodes
to support the new collapsible advanced inputs section in the frontend.

Changes:
- 267 advanced markers in comfy_extras/
- 162 advanced markers in comfy_api_nodes/
- All files pass python3 -m py_compile verification

Widgets marked advanced (hidden by default):
- Scheduler internals: sigma_max, sigma_min, rho, mu, beta, alpha
- Sampler internals: eta, s_noise, order, rtol, atol, h_init, pcoeff, etc.
- Memory optimization: tile_size, overlap, temporal_size, temporal_overlap
- Pipeline controls: add_noise, start_at_step, end_at_step
- Timing controls: start_percent, end_percent
- Layer selection: stop_at_clip_layer, layers, block_number
- Video encoding: codec, crf, format
- Device/dtype: device, noise_device, dtype, weight_dtype

Widgets kept basic (always visible):
- Core params: strength, steps, cfg, denoise, seed, width, height
- Model selectors: ckpt_name, lora_name, vae_name, sampler_name
- Common controls: upscale_method, crop, batch_size, fps, opacity

Related: frontend PR #11939
Amp-Thread-ID: https://ampcode.com/threads/T-019c1734-6b61-702e-b333-f02c399963fc

* fix: remove advanced=True from DynamicCombo.Input (unsupported)

Amp-Thread-ID: https://ampcode.com/threads/T-019c1734-6b61-702e-b333-f02c399963fc

* fix: address review - un-mark model merge, video, image, and training node widgets as advanced

Per comfyanonymous review:
- Model merge arguments should not be advanced (all 14 model-specific merge classes)
- SaveAnimatedWEBP lossless/quality/method should not be advanced
- SaveWEBM/SaveVideo codec/crf/format should not be advanced
- TrainLoraNode options should not be advanced (7 inputs)

Amp-Thread-ID: https://ampcode.com/threads/T-019c322b-a3a8-71b7-9962-d44573ca6352

* fix: un-mark batch_size and webcam width/height as advanced (should stay basic)

Amp-Thread-ID: https://ampcode.com/threads/T-019c3236-1417-74aa-82a3-bcb365fbe9d1

---------

Co-authored-by: Jedrzej Kosinski <kosinkadink1@gmail.com>
2026-02-19 19:20:02 -08:00
Christian Byrne bbb8864778
add search aliases to all nodes (#12035)
* feat: Add search_aliases field to node schema

Adds `search_aliases` field to improve node discoverability. Users can define alternative search terms for nodes (e.g., "text concat" → StringConcatenate).

Changes:
- Add `search_aliases: list[str]` to V3 Schema
- Add `SEARCH_ALIASES` support for V1 nodes
- Include field in `/object_info` response
- Add aliases to high-priority core nodes

V1 usage:
```python
class MyNode:
    SEARCH_ALIASES = ["alt name", "synonym"]
```

V3 usage:
```python
io.Schema(
    node_id="MyNode",
    search_aliases=["alt name", "synonym"],
    ...
)
```

## Related PRs
- Frontend: Comfy-Org/ComfyUI_frontend#XXXX (draft - merge after this)
- Docs: Comfy-Org/docs#XXXX (draft - merge after stable)

* Propagate search_aliases through V3 Schema.get_v1_info to NodeInfoV1

* feat: add SEARCH_ALIASES for core nodes (#12016)

Add search aliases to 22 core nodes in nodes.py to improve node discoverability:
- Checkpoint/model loaders: CheckpointLoader, DiffusersLoader
- Conditioning nodes: ConditioningAverage, ConditioningSetArea, ConditioningSetMask, ConditioningZeroOut
- Style nodes: StyleModelApply
- Image nodes: LoadImageMask, LoadImageOutput, ImageBatch, ImageInvert, ImagePadForOutpaint
- Latent nodes: LoadLatent, SaveLatent, LatentBlend, LatentComposite, LatentCrop, LatentFlip, LatentFromBatch, LatentUpscale, LatentUpscaleBy, RepeatLatentBatch

* feat: add SEARCH_ALIASES for image, mask, and string nodes (#12017)

Add search aliases to nodes in comfy_extras for better discoverability:
- nodes_mask.py: mask manipulation nodes
- nodes_images.py: image processing nodes
- nodes_post_processing.py: post-processing effect nodes
- nodes_string.py: string manipulation nodes
- nodes_compositing.py: compositing nodes
- nodes_morphology.py: morphological operation nodes
- nodes_latent.py: latent space nodes

Uses search_aliases parameter in io.Schema() for v3 nodes.

* feat: add SEARCH_ALIASES for audio and video nodes (#12018)

Add search aliases to audio and video nodes for better discoverability:
- nodes_audio.py: audio loading, saving, and processing nodes
- nodes_video.py: video loading and processing nodes
- nodes_wan.py: WAN model nodes

Uses search_aliases parameter in io.Schema() for v3 nodes.

* feat: add SEARCH_ALIASES for model and misc nodes (#12019)

Add search aliases to model-related and miscellaneous nodes:
- Model nodes: nodes_model_merging.py, nodes_model_advanced.py, nodes_lora_extract.py
- Sampler nodes: nodes_custom_sampler.py, nodes_align_your_steps.py
- Control nodes: nodes_controlnet.py, nodes_attention_multiply.py, nodes_hooks.py
- Training nodes: nodes_train.py, nodes_dataset.py
- Utility nodes: nodes_logic.py, nodes_canny.py, nodes_differential_diffusion.py
- Architecture-specific: nodes_sd3.py, nodes_pixart.py, nodes_lumina2.py, nodes_kandinsky5.py, nodes_hidream.py, nodes_fresca.py, nodes_hunyuan3d.py
- Media nodes: nodes_load_3d.py, nodes_webcam.py, nodes_preview_any.py, nodes_wanmove.py

Uses search_aliases parameter in io.Schema() for v3 nodes, SEARCH_ALIASES class attribute for legacy nodes.
2026-01-22 18:36:58 -08:00
Alexander Piskun 913f86b727
[V3] convert nodes_mask.py to V3 schema (#10669)
* convert nodes_mask.py to V3 schema

* set "Preview Mask" as display name for MaskPreview
2025-12-05 20:24:10 -08:00
comfyanonymous ce4cb2389c
Make LatentCompositeMasked work with basic video latents. (#10023) 2025-09-25 17:20:13 -04:00
Brandon Wallace 6b8062f414
Fix MaskComposite error when destination has 2 dimensions (#8915)
Fix code that is using the original `destination` input instead of the reshaped value.
2025-07-15 21:08:27 -04:00
comfyanonymous 34c8eeec06
Fix ImageColorToMask not returning right mask values. (#8771) 2025-07-02 15:35:11 -04:00
Terry Jia 454a635c1b
upstream MaskPreview from ComfyUI_essentials (#7719) 2025-04-22 05:00:28 -04:00
comfyanonymous 3d2e3a6f29 Fix alpha image issue in more nodes. 2025-04-02 19:32:49 -04:00
comfyanonymous 548457bac4 Fix alpha channel mismatch on destination in ImageCompositeMasked 2025-03-31 20:59:12 -04:00
comfyanonymous 0b4584c741 Fix latent composite node not working when source has alpha. 2025-03-30 21:47:05 -04:00
comfyanonymous d170292594 Remove some trailing white space. 2024-12-27 18:02:30 -05:00
comfyanonymous b2e1744a16 Add a ThresholdMask node. 2024-03-04 00:31:59 -05:00
comfyanonymous 6781b181ef Fix potential tensor device issue with ImageCompositeMasked. 2023-12-21 02:35:01 -05:00
Jairo Correa b5fa3d28d7 Fix MaskComposite 2023-10-13 13:40:53 -03:00
Jairo Correa 87097a11c3 Fix FeatherMask 2023-10-13 12:26:54 -03:00
MoonRide303 ece69bf28c Change channel type to MASK (reduced redundancy, increased usability) 2023-10-04 19:04:52 +02:00
Jukka Seppänen 1c8ae9dbb2
Allow GrowMask node to work with batches (for AnimateDiff) (#1623)
* Allow mask batches

This allows LatentCompositeMasked -node to work with AnimateDiff. I tried to keep old functionality too, unsure if it's correct, but both single mask and batch of masks seems to work with this change.

* Update nodes_mask.py
2023-09-28 22:01:19 -04:00
comfyanonymous 1d36dfb9fe GrowMask now works with mask batches. 2023-09-26 02:53:57 -04:00
comfyanonymous d76d71de3f GrowMask can now be used with negative numbers to erode it. 2023-09-26 02:45:31 -04:00
comfyanonymous d2cec6cdbf Make mask functions work with batches of masks and images. 2023-09-25 16:19:37 -04:00
comfyanonymous 046b4fe0ee Support batches of masks in mask composite nodes. 2023-09-25 16:02:21 -04:00
comfyanonymous 81d9200e18 Add node to convert a specific colour in an image to a mask. 2023-08-29 17:55:42 -04:00
Corey 18e86a4010 add a node to allow growing of masks through dilation 2023-08-16 10:57:14 -04:00
comfyanonymous 6dc02c7bac Add a "resize_source" option to Image and Latent CompositeMasked. 2023-08-15 17:51:52 -04:00
comfyanonymous 8c730dc4a7 Add an ImageCompositeMasked node. 2023-08-12 01:02:36 -04:00
comfyanonymous f3ac938b4a Round the mask values for bitwise operations. 2023-05-28 00:42:53 -04:00
space-nuko 00646b0813 Bitwise operations for masks 2023-05-27 21:48:49 -05:00
comfyanonymous 51583164ef Make MaskToImage support masks with a batch size. 2023-05-10 10:03:30 -04:00
comfyanonymous 476d543fe8 Fix for older python.
from: https://github.com/comfyanonymous/ComfyUI/discussions/476
2023-04-15 10:56:15 -04:00
comfyanonymous d98a4de9eb LatentCompositeMasked: negative x, y don't work. 2023-04-14 00:49:19 -04:00
comfyanonymous f48f0872e2 Refactor: move nodes_mask_convertion nodes to nodes_mask. 2023-04-14 00:21:01 -04:00
comfyanonymous 35a2c790b6
Update comfy_extras/nodes_mask.py
Co-authored-by: missionfloyd <missionfloyd@users.noreply.github.com>
2023-04-14 00:12:15 -04:00
mligaintart 022a9f271b Adds masking to Latent Composite, and provides new masking utilities to
allow better compositing.
2023-04-06 15:18:20 -04:00