subgraphs: collection of bugs when using comfy core nodes
- Dominant language
- Python
- Stars
- 133k
- Forks
- 15.7k
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 158
Description
### Custom Node Testing
- [x] I have tried disabling custom nodes and the issue persists (see [how to disable custom nodes](https://docs.comfy.org/troubleshooting/custom-node-issues#step-1%3A-test-with-all-custom-nodes-disabled) if you need help)
### Expected Behavior
1. ksampler: exposing `seed` to outside the subgraph shouldn't disable control after generate
2. select image from output: buttons should work when exposed and be exposeable on the subgraph
3. load video: video preview should be visible on the subgrpah when exposed
4. image selection nodes: image preview should be visible on the subgraph when exposed
5. all nodes: nodes inputs without wire connections should be reorderable and toggleable from the `edit subgraph widgets` pane
6. all nodes: toggling a node's input visiblity via the `edit subgraph widgets` pane should not be irreversible without opening the subgraph and deleting the wiring
### Actual Behavior
1. ksampler: exposing `seed` to outside the subgraph disables control after generate (can't change the value from inside or outside the subgraph)
2. select image from output: upload image button doesnt work when exposed on the subgraph, the others are inacessible (see 5.)
3. load video: video preview are not visible on the subgrpah when exposed
4. image selection nodes: image previews are not visible on the subgraph when exposed
5. all nodes: node inputs without wire connections are not accesible at all from outside the subgraph (used to be they could be exposed in the `edit subgraph widgets` pane)
6. all nodes: toggling a node's input visiblity via the `edit subgraph widgets` pane requires opening the subgraph and deleting the wiring to remove it
### Steps to Reproduce
Example workflow with some of the buggy interactions.
```json
{"id":"2289da68-b2ac-4360-9e61-bc596fa9023d","revision":0,"last_node_id":11,"last_link_id":23,"nodes":[{"id":10,"type":"PreviewImage","pos":[5272.302956062969,-383.2077673462519],"size":[140,26],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":16}],"outputs":[{"localized_name":"images","name":"images","type":"IMAGE","links":null}],"properties":{"Node name for S&R":"PreviewImage"}},{"id":9,"type":"29d82a11-cc84-4b7b-a643-c5158340ccfc","pos":[4868.380285878667,-379.4418896304072],"size":[317.9714725274898,524.4106919759016],"flags":{},"order":0,"mode":0,"inputs":[{"name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"name":"images","type":"IMAGE","links":[16]}],"title":"Try to expose the internal nodes","properties":{"previewExposures":[{"name":"$$canvas-image-preview","sourceNodeId":"2","sourcePreviewName":"$$canvas-image-preview"},{"name":"$$canvas-image-preview_1","sourceNodeId":"1","sourcePreviewName":"$$canvas-image-preview"},{"name":"$$canvas-image-preview_2","sourceNodeId":"3","sourcePreviewName":"$$canvas-image-preview"}]},"widgets_values":[534639133998431,"main_02292_.png [output]","image"],"widgets_values_named":{"seed":534639133998431,"image":"main_02292_.png [output]","upload":"image"}}],"links":[[16,9,0,10,0,"IMAGE"]],"groups":[],"definitions":{"subgraphs":[{"id":"29d82a11-cc84-4b7b-a643-c5158340ccfc","version":1,"state":{"lastGroupId":0,"lastNodeId":11,"lastLinkId":23,"lastRerouteId":0},"revision":0,"config":{},"name":"Try to expose the internal nodes","inputNode":{"id":-10,"bounding":[4195.211253818757,-391.5871713797536,128,108]},"outputNode":{"id":-20,"bounding":[5853.576203536802,-391.5871713797536,128,68]},"inputs":[{"id":"86316ed1-2d1c-4524-9c27-83afadf71ece","name":"seed","type":"INT","linkIds":[13],"pos":[4299.211253818757,-367.5871713797536]},{"id":"74613e53-77c3-4e7a-a794-c30525d5d054","name":"image","type":"COMBO","linkIds":[14],"pos":[4299.211253818757,-347.5871713797536]},{"id":"d63342f8-8d25-4728-b5eb-294e4b53fac8","name":"upload","type":"IMAGEUPLOAD","linkIds":[23],"pos":[4299.211253818757,-327.5871713797536]}],"outputs":[{"id":"98bea609-fd17-41ac-8a16-7d6a307bab26","name":"images","type":"IMAGE","linkIds":[15],"pos":[5877.576203536802,-367.5871713797536]}],"widgets":[],"nodes":[{"id":6,"type":"VAEEncode","pos":[4774.898993444231,-342.08065504280773],"size":[140,46],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"pixels","name":"pixels","type":"IMAGE","link":3},{"localized_name":"vae","name":"vae","type":"VAE","link":5}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[4]}],"properties":{"Node name for S&R":"VAEEncode"}},{"id":7,"type":"CLIPTextEncode","pos":[4781.206558437178,-723.9672815529042],"size":[400,200],"flags":{"collapsed":false},"order":2,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":6},{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null}],"outputs":[{"localized_name":"CONDITIONING","name":"CONDITIONING","type":"CONDITIONING","links":[7,8]}],"properties":{"Node name for S&R":"CLIPTextEncode"},"widgets_values":[""],"widgets_values_named":{"text":""}},{"id":1,"type":"KSampler","pos":[5197.255104622157,-483.18426685332196],"size":[270,262],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":2},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":7},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":8},{"localized_name":"latent_image","name":"latent_image","type":"LATENT","link":4},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":13},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[9]}],"properties":{"Node name for S&R":"KSampler"},"widgets_values":[0,"randomize",20,8,"euler","simple",1],"widgets_values_named":{"seed":0,"control_after_generate":"randomize","steps":20,"cfg":8,"sampler_name":"euler","scheduler":"simple","denoise":1}},{"id":5,"type":"CheckpointLoaderSimple","pos":[4383.211253818757,-649.617685021146],"size":[270,98],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"MODEL","name":"MODEL","type":"MODEL","links":[2]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","links":[6]},{"localized_name":"VAE","name":"VAE","type":"VAE","links":[5,10]}],"properties":{"Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["darkSushiMixMix_225D.safetensors"],"widgets_values_named":{"ckpt_name":"darkSushiMixMix_225D.safetensors"}},{"id":8,"type":"VAEDecode","pos":[5536.419219272235,-499.79187092923655],"size":[140,46],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":9},{"localized_name":"vae","name":"vae","type":"VAE","link":10}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[11]}],"properties":{"Node name for S&R":"VAEDecode"}},{"id":3,"type":"LoadImageOutput","pos":[4435.143913889275,-343.2070612066031],"size":[283.29166412353516,362],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":14},{"localized_name":"choose file to upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":23}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[3]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImageOutput"},"widgets_values":["main_02292_.png [output]",false,"refresh","image"],"widgets_values_named":{"image":"main_02292_.png [output]","Auto-refresh after generation":false,"refresh":"refresh","upload":"image"}},{"id":2,"type":"PreviewImage","pos":[5653.576203536802,-402.91208842143993],"size":[140,26],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":11}],"outputs":[{"localized_name":"images","name":"images","type":"IMAGE","links":[15]}],"properties":{"Node name for S&R":"PreviewImage"}}],"groups":[],"links":[{"id":3,"origin_id":3,"origin_slot":0,"target_id":6,"target_slot":0,"type":"IMAGE"},{"id":5,"origin_id":5,"origin_slot":2,"target_id":6,"target_slot":1,"type":"VAE"},{"id":6,"origin_id":5,"origin_slot":1,"target_id":7,"target_slot":0,"type":"CLIP"},{"id":11,"origin_id":8,"origin_slot":0,"target_id":2,"target_slot":0,"type":"IMAGE"},{"id":2,"origin_id":5,"origin_slot":0,"target_id":1,"target_slot":0,"type":"MODEL"},{"id":7,"origin_id":7,"origin_slot":0,"target_id":1,"target_slot":1,"type":"CONDITIONING"},{"id":8,"origin_id":7,"origin_slot":0,"target_id":1,"target_slot":2,"type":"CONDITIONING"},{"id":4,"origin_id":6,"origin_slot":0,"target_id":1,"target_slot":3,"type":"LATENT"},{"id":9,"origin_id":1,"origin_slot":0,"target_id":8,"target_slot":0,"type":"LATENT"},{"id":10,"origin_id":5,"origin_slot":2,"target_id":8,"target_slot":1,"type":"VAE"},{"id":13,"origin_id":-10,"origin_slot":0,"target_id":1,"target_slot":4,"type":"INT"},{"id":14,"origin_id":-10,"origin_slot":1,"target_id":3,"target_slot":0,"type":"COMBO"},{"id":15,"origin_id":2,"origin_slot":0,"target_id":-20,"target_slot":0,"type":"IMAGE"},{"id":23,"origin_id":-10,"origin_slot":2,"target_id":3,"target_slot":1,"type":"IMAGEUPLOAD"}],"extra":{}}]},"config":{},"extra":{"ds":{"scale":1.5222875211272873,"offset":[-4707.747034256536,792.6597126046097]}},"version":0.4}
```
### Debug Logs
```powershell
❯ python main.py --disable-all-custom-nodes
[INFO] setup plugin alembic.autogenerate.schemas
[INFO] setup plugin alembic.autogenerate.tables
[INFO] setup plugin alembic.autogenerate.types
[INFO] setup plugin alembic.autogenerate.constraints
[INFO] setup plugin alembic.autogenerate.defaults
[INFO] setup plugin alembic.autogenerate.comments
[INFO] Found comfy_kitchen backend hip: {'available': False, 'disabled': False, 'unavailable_reason': 'PyTorch ROCm/HIP runtime not available', 'capabilities': []}
[INFO] Found comfy_kitchen backend eager: {'available': True, 'disabled': False, 'unavailable_reason': None, 'capabilities': ['adaln', 'apply_rope', 'apply_rope1', 'apply_rope1_', 'apply_rope_', 'apply_rope_split_half', 'apply_rope_split_half1', 'apply_rope_split_half1_', 'apply_rope_split_half_', 'convrot_w4a4_linear', 'dequantize_convrot_w4a4_weight', 'dequantize_int8_convrot_weight', 'dequantize_int8_convrot_weight_dtype', 'dequantize_int8_embedding', 'dequantize_int8_simple', 'dequantize_int8_simple_dtype', 'dequantize_mxfp8', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'dequantize_w4a8_int8_weight', 'gemv_awq_w4a16', 'int8_linear', 'na3d', 'prepare_int4_weight_for_int8_linear', 'quantize_and_rotate_rowwise', 'quantize_convrot_w4a4_weight', 'quantize_int8_convrot_weight', 'quantize_int8_rowwise', 'quantize_int8_tensorwise', 'quantize_mxfp8', 'quantize_nvfp4', 'quantize_per_tensor_fp8', 'quantize_svdquant_w4a4', 'quantize_w4a8_int8_weight', 'rms_adaln', 'rms_rope', 'rms_rope1', 'rms_rope1_', 'rms_rope_', 'rms_rope_split_half', 'rms_rope_split_half1', 'rms_rope_split_half1_', 'rms_rope_split_half_', 'rotate_int8_convrot_weight', 'scaled_mm_mxfp8', 'scaled_mm_nvfp4', 'scaled_mm_svdquant_w4a4', 'stochastic_rounding_fp8', 'w4a8_int8_linear']}
[INFO] Found comfy_kitchen backend cuda: {'available': True, 'disabled': False, 'unavailable_reason': None, 'capabilities': ['adaln', 'apply_rope', 'apply_rope1', 'apply_rope1_', 'apply_rope_', 'apply_rope_split_half', 'apply_rope_split_half1', 'apply_rope_split_half1_', 'apply_rope_split_half_', 'convrot_w4a4_linear', 'dequantize_convrot_w4a4_weight', 'dequantize_int8_convrot_weight', 'dequantize_int8_convrot_weight_dtype', 'dequantize_int8_simple', 'dequantize_int8_simple_dtype', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'dequantize_w4a8_int8_weight', 'gemv_awq_w4a16', 'int8_linear', 'na3d', 'prepare_int4_weight_for_int8_linear', 'quantize_and_rotate_rowwise', 'quantize_convrot_w4a4_weight', 'quantize_int8_convrot_weight', 'quantize_int8_rowwise', 'quantize_int8_tensorwise', 'quantize_mxfp8', 'quantize_nvfp4', 'quantize_per_tensor_fp8', 'quantize_svdquant_w4a4', 'quantize_w4a8_int8_weight', 'rms_adaln', 'rms_rope', 'rms_rope1', 'rms_rope1_', 'rms_rope_', 'rms_rope_split_half', 'rms_rope_split_half1', 'rms_rope_split_half1_', 'rms_rope_split_half_', 'rotate_int8_convrot_weight', 'scaled_mm_nvfp4', 'scaled_mm_svdquant_w4a4', 'stochastic_rounding_fp8', 'w4a8_int8_linear']}
[INFO] Found comfy_kitchen backend triton: {'available': True, 'disabled': True, 'unavailable_reason': None, 'capabilities': ['adaln', 'apply_rope', 'apply_rope1', 'apply_rope1_', 'apply_rope_', 'apply_rope_split_half', 'apply_rope_split_half1', 'apply_rope_split_half1_', 'apply_rope_split_half_', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'int8_linear', 'na3d', 'quantize_and_rotate_rowwise', 'quantize_int8_rowwise', 'quantize_mxfp8', 'quantize_nvfp4', 'quantize_per_tensor_fp8', 'rms_adaln', 'rms_rope', 'rms_rope1', 'rms_rope1_', 'rms_rope_', 'rms_rope_split_half', 'rms_rope_split_half1', 'rms_rope_split_half1_', 'rms_rope_split_half_', 'w4a8_int8_linear']}
[INFO] Checkpoint files will always be loaded safely.
[INFO] Total VRAM 15886 MB, total RAM 31807 MB
[INFO] pytorch version: 2.14.0.dev20260720+cu132
[INFO] Set vram state to: NORMAL_VRAM
[INFO] Device: cuda:0 NVIDIA GeForce RTX 5060 Ti : cudaMallocAsync
[INFO] Using async weight offloading with 2 streams
[INFO] Enabled pinned memory 15422
[INFO] Using pytorch attention
[INFO] aimdo: /project/src/control.c:276:INFO:comfy-aimdo inited for GPU: NVIDIA GeForce RTX 5060 Ti (VRAM: 15886 MB)
[INFO] DynamicVRAM support detected and enabled
[INFO] Python version: 3.14.6 (main, Jun 11 2026, 00:00:00) [GCC 16.1.1 20260515 (Red Hat 16.1.1-2)]
[INFO] ComfyUI version: 0.33.0
[INFO] comfy-aimdo version: 0.4.13
[INFO] comfy-kitchen version: 0.2.31
[INFO] comfyui-frontend-package version: 1.49.6
[INFO] comfyui-workflow-templates version: 0.11.41
[INFO] comfyui-embedded-docs version: 0.5.10
[INFO] comfy-kitchen version: 0.2.31
[INFO] comfy-aimdo version: 0.4.13
[INFO] [Prompt Server] web root: /home/kian/ComfyUI/venv/lib64/python3.14/site-packages/comfyui_frontend_package/static
[INFO] Asset seeder disabled
/home/kian/ComfyUI/venv/lib64/python3.14/site-packages/torch/jit/_script.py:1485: FutureWarning: `torch.jit.script` is not supported in Python 3.14+ and may break. Please switch to `torch.compile` or `torch.export`.
warnings.warn(
[INFO] No OpenGL_accelerate module loaded: No module named 'OpenGL_accelerate'
[INFO] Skipping loading of custom nodes
[INFO] Context impl SQLiteImpl.
[INFO] Will assume non-transactional DDL.
[INFO] Using RAM pressure cache.
[INFO] Starting server
[INFO] To see the GUI go to: http://127.0.0.1:8188
```
### Other
Don't remember the exact update but their was one that introduced all of these bugs (except the video preview one which was preexisting) at the same time.
Contributor guide
Research direction
Start by running `python main.py --disable-all-custom-nodes` and importing the workflow in the issue. Reproduce the KSampler seed, LoadImageOutput upload, video and image preview, and edit-subgraph-widgets behaviors while exposing inputs. Done means exposed controls remain usable, previews appear, unconnected inputs can be reordered or toggled, and visibility changes can be reversed without deleting wiring.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100