Nodes/Comfyui-EzFlex-Presets/EzFlex-ModelsCombo
ComfyUI Node

EzFlex-ModelsCombo

Load Five Models From One Node, With Dynamic Ports

By blackbossokok·Created 20 days ago·Updated about 15 hours ago· 1
EzFlex-ModelsCombo
    • MODEL 1
    • MODEL 2
    • MODEL 3
    • MODEL 4
    • MODEL 5
    • MODEL 6
    • MODEL 7
    • MODEL 8
    • MODEL 9
    • MODEL 10
    • MODEL 11
    • MODEL 12
    • MODEL 13
    • MODEL 14
    • MODEL 15
    • MODEL 16
    • MODEL 17
    • MODEL 18
    • MODEL 19
    • MODEL 20
    • MODEL 21
    • MODEL 22
    • MODEL 23
    • MODEL 24
    • MODEL 25
    • MODEL 26
    • MODEL 27
    • MODEL 28
    • MODEL 29
    • MODEL 30
    • MODEL 31
    • MODEL 32
    • CLIP 1
    • CLIP 2
    • CLIP 3
    • CLIP 4
    • CLIP 5
    • CLIP 6
    • CLIP 7
    • CLIP 8
    • CLIP 9
    • CLIP 10
    • CLIP 11
    • CLIP 12
    • CLIP 13
    • CLIP 14
    • CLIP 15
    • CLIP 16
    • CLIP 17
    • CLIP 18
    • CLIP 19
    • CLIP 20
    • CLIP 21
    • CLIP 22
    • CLIP 23
    • CLIP 24
    • CLIP 25
    • CLIP 26
    • CLIP 27
    • CLIP 28
    • CLIP 29
    • CLIP 30
    • CLIP 31
    • CLIP 32
    • VAE 1
    • VAE 2
    • VAE 3
    • VAE 4
    • VAE 5
    • VAE 6
    • VAE 7
    • VAE 8
    • VAE 9
    • VAE 10
    • VAE 11
    • VAE 12
    • VAE 13
    • VAE 14
    • VAE 15
    • VAE 16
    • VAE 17
    • VAE 18
    • VAE 19
    • VAE 20
    • VAE 21
    • VAE 22
    • VAE 23
    • VAE 24
    • VAE 25
    • VAE 26
    • VAE 27
    • VAE 28
    • VAE 29
    • VAE 30
    • VAE 31
    • VAE 32
    config[]

    The models you load are the most repeated part of any workflow: a checkpoint loader here, a second one for the refiner, a UNETLoader and an CLIPLoader for the video pipeline, a VAELoader, then a LoraLoaderModelOnly stack on top of each. Six nodes, twelve wires, and every time you change the recipe you rewire all of it.

    EzFlex-ModelsCombo replaces that with one node whose output ports are generated from a list you build in its panel. Card types: checkpoint, UNet, CLIP, VAE, LoRA. Add cards, reorder them, and the node grows exactly the ports it needs.

    How the ports work

    This is the interesting part, because dynamic ports in ComfyUI are genuinely awkward. The node declares a big static ceiling of *-typed slots (32 per type) and then, per run, re-syncs its class-level RETURN_TYPES / RETURN_NAMES to match your card list. That class-level write is not a hack for its own sake - ComfyUI's executor type-checks a link by reading the upstream class's RETURN_TYPES[slot], so an all-* class tuple plus per-run names is how a node keeps its ports honest while the panel changes them. The pack also registers a route the frontend POSTs to whenever the structure changes, so the canvas and the validator agree.

    The output names are built from your card names, so a card you rename to flux gives you flux_model, flux_clip, flux_vae rather than MODEL 1. A checkpoint card produces all three; a UNet card only _model; CLIP and VAE cards only their own.

    LoRA cards are different: they don't get ports. Each LoRA card is attached to a target loader card, and the node chains them - LoRAs are applied in card order, each patching the result of the previous one, and the final patched MODEL/CLIP is what lands on the target's ports. A LoRA whose target can't be found is skipped with a console line rather than an exception, which is a debugging hint: if a LoRA silently does nothing, check the target card and read the console.

    One extra port appears when you have LoRAs: trigger_words, a STRING that concatenates the trigger words of the LoRAs that carry them. That's the same problem rgthree's Power Lora Loader solves with its info dialog - the KB's troubleshooting notes that a missing trigger word is the classic "why does my LoRA do nothing" bug - and here it's a wire, so you can feed it into a PromptHelper card or straight into a text-encode node.

    The inputs, which are almost nothing

    One required input: config, a multiline STRING holding the loader array as JSON, produced by the panel. Default "[]" - an empty array loads nothing and yields no ports. There's no second input, no type dropdown, no LoRA strength widget on the node itself (strengths live on the LoRA cards, strength_model / strength_clip).

    Install and setup

    cd ComfyUI/custom_nodes
    git clone https://github.com/blackbossokok/Comfyui-EzFlex-Presets
    pip install -r requirements.txt   # mutagen
    

    Manager users can just search EzFlex. Restart afterwards. Files must live where ComfyUI already looks - it resolves through folder_paths, so checkpoints in models/checkpoints, LoRAs in models/loras, and so on. There are no model downloads of its own and no API keys.

    Two optional extras are worth calling out. The gallery view needs the separate ComfyUI-Lora-Manager plugin plus its Civitai-generated JSON - so a blank gallery means that's missing, and it's one more pack in your dependency pile. Reading metadata off .gguf / .onnx files needs pip install gguf onnx. Both are optional and deliberately absent from requirements.txt so Manager doesn't try to build them.

    Where people get burned

    Port count caps out. 32 per type. If you exceed it the node raises rather than truncating, and the README's advice is to split the config across two nodes.

    Missing nodes after loading someone else's workflow. The KB's ecosystem doc is blunt about this being the ecosystem's number-one complaint: a workflow referencing this node without the pack installed fails to validate. It's the usual Manager install, then restart.

    LoRAs applying in the wrong order. Order is by card sequence, and the target must be a loader card with a MODEL or CLIP. If a LoRA prints "target has no MODEL/CLIP, skipped", it's aimed at a VAE-only card.

    Presets vanishing between sessions. The combo presets are stored server-side in the pack's own user_data folder, so they follow the install, not the workflow - moving the workflow to another machine brings the node's config but not necessarily the named presets.

    Panel weirdness. Like every EzFlex node this one renders its own DOM panel rather than stock widgets, and heavy custom panels are precisely what ComfyUI's Nodes 2.0 frontend rewrite has been unkind to. If the card list won't respond, try the legacy canvas before assuming the pack is broken.

    CategoryEzFlex

    Inputs (1)

    NameTypeDefaultDescription
    configSTRING[]JSON config copied from the Models Combo panel (loader array).

    Outputs (96)

    NameTypeDescription
    MODEL 1*
    MODEL 2*
    MODEL 3*
    MODEL 4*
    MODEL 5*
    MODEL 6*
    MODEL 7*
    MODEL 8*
    MODEL 9*
    MODEL 10*
    MODEL 11*
    MODEL 12*
    MODEL 13*
    MODEL 14*
    MODEL 15*
    MODEL 16*
    MODEL 17*
    MODEL 18*
    MODEL 19*
    MODEL 20*
    MODEL 21*
    MODEL 22*
    MODEL 23*
    MODEL 24*
    MODEL 25*
    MODEL 26*
    MODEL 27*
    MODEL 28*
    MODEL 29*
    MODEL 30*
    MODEL 31*
    MODEL 32*
    CLIP 1*
    CLIP 2*
    CLIP 3*
    CLIP 4*
    CLIP 5*
    CLIP 6*
    CLIP 7*
    CLIP 8*
    CLIP 9*
    CLIP 10*
    CLIP 11*
    CLIP 12*
    CLIP 13*
    CLIP 14*
    CLIP 15*
    CLIP 16*
    CLIP 17*
    CLIP 18*
    CLIP 19*
    CLIP 20*
    CLIP 21*
    CLIP 22*
    CLIP 23*
    CLIP 24*
    CLIP 25*
    CLIP 26*
    CLIP 27*
    CLIP 28*
    CLIP 29*
    CLIP 30*
    CLIP 31*
    CLIP 32*
    VAE 1*
    VAE 2*
    VAE 3*
    VAE 4*
    VAE 5*
    VAE 6*
    VAE 7*
    VAE 8*
    VAE 9*
    VAE 10*
    VAE 11*
    VAE 12*
    VAE 13*
    VAE 14*
    VAE 15*
    VAE 16*
    VAE 17*
    VAE 18*
    VAE 19*
    VAE 20*
    VAE 21*
    VAE 22*
    VAE 23*
    VAE 24*
    VAE 25*
    VAE 26*
    VAE 27*
    VAE 28*
    VAE 29*
    VAE 30*
    VAE 31*
    VAE 32*