ComfyUI/comfy_extras
Jedrzej Kosinski b319c8088b SelectXDevice: address code-review follow-ups
True reset semantics for "default":
- On first selector application, cache the loader's original
  load_device / offload_device on the underlying model object (which
  is shared across patcher clones) and restore those base values when
  the user picks "default". Previously "default" meant "passthrough"
  so SelectXDevice(gpu:1) -> SelectXDevice(default) silently kept the
  gpu:1 routing.

CPU + dynamic VRAM:
- When SelectModelDevice / SelectCLIPDevice resolves to CPU on a
  ModelPatcherDynamic, also call clone(disable_dynamic=True) so the
  result is a plain ModelPatcher, matching ModelPatcherDynamic.__new__'s
  intent that CPU loads never run through the dynamic path. Fallback to
  the regular dynamic clone if disable_dynamic is unsupported on that
  patcher.

MultiGPU collision pruning:
- After SelectModelDevice retargets the primary patcher, drop any
  multigpu clone (from a prior MultiGPU CFG Split) whose load_device
  now matches the primary; otherwise two patchers would be bound to
  the same device. Logs the prune at info level.

SelectVAEDevice: reject CPU at runtime:
- The UI uses get_gpu_device_options_no_cpu(), but a workflow opened
  from another machine could still pass "cpu" through validate_inputs.
  Detect that case explicitly, log a "CPU is not a supported choice"
  passthrough message, and leave the VAE unchanged.

Cosmetic:
- Update VAE node docstring to accurately reflect the runtime CPU
  rejection rather than the older "intentionally not offered" claim.
- Demote the fallback warnings inside resolve_gpu_device_option to no
  log at all; the Select*Device nodes now own a single context-rich
  info-level message per failed lookup, so there is no double logging.

Amp-Thread-ID: https://ampcode.com/threads/T-019e52b4-31ee-72cd-996b-64ecd9420e13
Co-authored-by: Amp <amp@ampcode.com>
2026-05-22 22:29:45 -07:00
..
chainner_models Replace print with logging (#6138) 2024-12-20 16:24:55 -05:00
frame_interpolation_models fix: Proper memory estimation for frame interpolation when not using dynamic VRAM (#13698) 2026-05-04 20:20:40 +03:00
mediapipe feat: MediaPipe face detection (CORE-235) (#14009) 2026-05-20 16:07:48 -07:00
nodes_ace.py Use temporal downscale to make empty audio latent nodes more reusable. (#13975) 2026-05-19 00:14:30 -04:00
nodes_advanced_samplers.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_align_your_steps.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_apg.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_ar_video.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_attention_multiply.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_audio_encoder.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_audio.py chore: Dataset nodes clean-up (CORE-237) (#14002) 2026-05-21 15:14:16 +08:00
nodes_bg_removal.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_camera_trajectory.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_canny.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_cfg.py convert CFG nodes to V3 schema (#9717) 2025-09-12 17:39:55 -04:00
nodes_chroma_radiance.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_clip_sdxl.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_color.py Add color type and Color to RGB Int node (#12145) 2026-01-30 15:01:33 -08:00
nodes_compositing.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_cond.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_context_windows.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_controlnet.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_cosmos.py convert Cosmos nodes to V3 schema (#9721) 2025-09-12 17:38:46 -04:00
nodes_curve.py image histogram node (#13153) 2026-04-06 14:54:02 -07:00
nodes_custom_sampler.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_dataset.py chore: Dataset nodes clean-up (CORE-237) (#14002) 2026-05-21 15:14:16 +08:00
nodes_differential_diffusion.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_easycache.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_edit_model.py convert nodes_edit_model.py to V3 schema (#10147) 2025-10-03 13:24:42 -07:00
nodes_eps.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_flux.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_frame_interpolation.py chore: Update display names and categories (CORE-151) (#13693) 2026-05-04 17:37:25 -07:00
nodes_freelunch.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_fresca.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_gits.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_glsl.py Add has_intermediate_output flag for nodes with interactive UI (#13048) 2026-03-27 21:06:38 -04:00
nodes_hidream_o1.py feat: Support HiDream-O1-Image (CORE-187) (#13817) 2026-05-11 20:35:53 -07:00
nodes_hidream.py add search aliases to all nodes (#12035) 2026-01-22 18:36:58 -08:00
nodes_hooks.py Disable dynamic_vram when weight hooks applied (#12653) 2026-02-28 16:50:18 -05:00
nodes_hunyuan3d.py chore: Dataset nodes clean-up (CORE-237) (#14002) 2026-05-21 15:14:16 +08:00
nodes_hunyuan.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_hypernetwork.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_hypertile.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_image_compare.py chore: Update display names and categories (CORE-151) (#13693) 2026-05-04 17:37:25 -07:00
nodes_images.py chore: Dataset nodes clean-up (CORE-237) (#14002) 2026-05-21 15:14:16 +08:00
nodes_ip2p.py convert nodes_ip2p.pt to V3 schema (#10097) 2025-10-01 12:20:30 -07:00
nodes_kandinsky5.py add search aliases to all nodes (#12035) 2026-01-22 18:36:58 -08:00
nodes_latent.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_load_3d.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_logic.py Move logic nodes into utils category (#14033) 2026-05-22 13:32:08 +08:00
nodes_lora_debug.py Move nodes from previous PR into their own file. (#12066) 2026-01-24 23:02:32 -05:00
nodes_lora_extract.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_lotus.py convert nodes_lotus.py to V3 schema (#10057) 2025-09-27 19:11:36 -07:00
nodes_lt_audio.py Revert per-loader device inputs from #13483 / #13748 2026-05-22 21:38:58 -07:00
nodes_lt_upsampler.py Support the LTXV 2 model. (#11632) 2026-01-05 01:58:59 -05:00
nodes_lt.py Add downscale ratio to empty ltxv latent. (#13999) 2026-05-19 20:28:06 -07:00
nodes_lumina2.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_mahiro.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_mask.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_math.py Move logic nodes into utils category (#14033) 2026-05-22 13:32:08 +08:00
nodes_mediapipe.py Update MediaPipe nodes to standardize with existing code base (CORE-242) (#14025) 2026-05-21 14:39:30 +08:00
nodes_mochi.py convert nodes_mochi.py to V3 schema (#10069) 2025-09-29 12:03:35 -07:00
nodes_model_advanced.py Persists ModelNoiseScale when also patching shift (#13892) 2026-05-14 18:36:17 -07:00
nodes_model_downscale.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_model_merging_model_specific.py Qwen Image model merging node. (#9202) 2025-08-06 04:07:04 -04:00
nodes_model_merging.py implement dynamic clip saving (#13959) 2026-05-18 11:46:40 -07:00
nodes_model_patch.py feat: SUPIR model support (CORE-17) (#13250) 2026-04-18 23:02:01 -04:00
nodes_moge.py Update MoGe nodes display names, search aliases and descriptions (#14030) 2026-05-21 16:50:09 +08:00
nodes_morphology.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_multigpu.py SelectXDevice: address code-review follow-ups 2026-05-22 22:29:45 -07:00
nodes_nag.py Add category to Normalized Attention Guidance node (#12565) 2026-02-21 19:51:21 -05:00
nodes_nop.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_number_convert.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_optimalsteps.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_pag.py convert nodes_pag.py to V3 schema (#10080) 2025-10-01 12:18:49 -07:00
nodes_painter.py Add has_intermediate_output flag for nodes with interactive UI (#13048) 2026-03-27 21:06:38 -04:00
nodes_perpneg.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_photomaker.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_pixart.py add search aliases to all nodes (#12035) 2026-01-22 18:36:58 -08:00
nodes_post_processing.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_preview_any.py Print more tensor values in the preview any node. (#13544) 2026-04-23 22:19:00 -04:00
nodes_primitive.py chore: Update display names and categories for text nodes (CORE-155) (#13712) 2026-05-05 22:31:24 +08:00
nodes_qwen.py Remove advanced flag from layers input in EmptyQwenImageLayeredLatentImage node (#13823) 2026-05-11 01:23:04 +08:00
nodes_rebatch.py convert nodes_rebatch.py to V3 schema (#9945) 2025-09-26 14:10:49 -07:00
nodes_replacements.py Node Replacement API (#12014) 2026-02-15 02:12:30 -08:00
nodes_resolution.py refactor: use AspectRatio enum members as ASPECT_RATIOS dict keys (#12689) 2026-02-27 20:53:46 -08:00
nodes_rope.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_rtdetr.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_sag.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_sam3.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_save_3d.py feat: Extend Save3D to save vertex colors and textures (CORE-189) (#13824) 2026-05-13 18:33:53 +03:00
nodes_sd3.py Make EmptySD3LatentImage node use intermediate dtype. (#13577) 2026-04-26 23:23:57 -04:00
nodes_sdpose.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_sdupscale.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_slg.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_stable3d.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_stable_cascade.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_string.py Adding new StringFormat node (#13997) 2026-05-20 10:25:49 +08:00
nodes_tcfg.py convert nodes_tcfg.py to V3 schema (#9942) 2025-09-26 14:13:05 -07:00
nodes_textgen.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_tomesd.py convert nodes_tomesd.py to V3 schema (#10180) 2025-10-03 11:50:38 -07:00
nodes_toolkit.py Move logic nodes into utils category (#14033) 2026-05-22 13:32:08 +08:00
nodes_torch_compile.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_train.py Update nodes categories and display names (CORE-89) (#13786) 2026-05-08 01:02:55 -04:00
nodes_upscale_model.py Defer @pollockjj's tiled-VAE and UPSCALE_MODEL MultiGPU lanes (#14066) 2026-05-22 16:44:29 -07:00
nodes_video_model.py Revert per-loader device inputs from #13483 / #13748 2026-05-22 21:38:58 -07:00
nodes_video.py Add Create Video to the essentials tab (#13863) 2026-05-13 14:42:31 +08:00
nodes_void.py chore: Various QoL updates of nodes display names, descriptions and categories (CORE-190, CORE-191) (#13830) 2026-05-19 00:13:48 -04:00
nodes_wan.py feat: Support SCAIL WanVideo model (#12614) 2026-02-28 16:49:12 -05:00
nodes_wandancer.py Use LatentCutToBatch instead. (#13815) 2026-05-09 14:17:00 -07:00
nodes_wanmove.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
nodes_webcam.py add search aliases to all nodes (#12035) 2026-01-22 18:36:58 -08:00
nodes_zimage.py feat: mark 429 widgets as advanced for collapsible UI (#12197) 2026-02-19 19:20:02 -08:00
void_noise_warp.py Void model - pass 1 & 2 (CORE-38) (#13403) 2026-05-05 19:59:04 -07:00