Nodes/Comfyui-Visual-Select/🎨 Visual Select Model Browser
ComfyUI Node

🎨 Visual Select Model Browser

The Visual Select Model Browser

By VodooWaWa·Created 5 months ago·Updated 5 months ago· 15
🎨 Visual Select Model Browser
    • model_name
    model_typecheckpoints
    selected_model

    Nobody memorizes fifty checkpoint filenames. The native ComfyUI model dropdown - a scroll of realistic-v9-fp16.safetensors-style strings with zero context - is arguably the worst part of an otherwise great UI. Visual Select fixes that by replacing model pickers with a card grid that shows cover images, base model, precision, and even NSFW tags. The 🎨 Visual Select Model Browser node is the standalone version of that: drop it on the canvas, browse, and it hands you the model name as a string. It doesn't load anything itself - think of it as a nicer way to pick, not to run.

    This is a front-end extension in the spirit of rgthree's pack: it adds no generation capability, it just makes the working environment less miserable. The pack does two things - it intercepts model dropdowns across every node (click a ckpt_name and a faint green "🎨 Visual Select" button pops up next to your cursor), and it gives you this browser node for when you want the picker on the canvas instead of hidden inside a loader.

    How it works

    The node is genuinely thin on the Python side, which is a good thing. It reads model_type from ComfyUI's own registry of model folders (folder_paths.folder_names_and_paths), so you get checkpoints, configs, loras, vae, text_encoders, diffusion_models, controlnet, embeddings, and the rest - the same list ComfyUI already knows about, no hardcoded paths. The selected_model widget lists files in whatever folder you chose. When you click it, the front-end intercepts the click and opens the card browser instead of the dropdown; the get_model function just returns the chosen name.

    The pretty part is a separate server route. For a model my_model.safetensors, the browser looks for a sibling image (my_model.png, .jpg, .webp, .gif) to show as the cover, reads a my_model.civitai.info file for the display name, base model, precision and NSFW badge, and renders a my_model.html into the Details popup when one exists. No cover file means a gray "no image" placeholder - the grid is only as good as the sidecar files you give it.

    Inputs and output

    Only two inputs matter, both required:

    • model_type - the folder to browse (checkpoints, loras, vae, …). Change this and the list reloads.
    • selected_model - click it to open the visual browser and pick.

    The single output, model_name, is a STRING - the model filename with any subfolder path, exactly like a loader's ckpt_name value. Wire it into any node that accepts a model path string. Here's the trap for beginners: a stock Load Checkpoint's dropdown is a widget, not a wire input, so you can't drag this output straight into it. It pairs with loaders that take a string input, or with a little glue like a "string to combo" node. The README is upfront about this: connect it to "any node that accepts a model path string."

    Installing

    No requirements.txt, no Python deps - this is a web extension plus one utility node, so it's a pure clone-and-restart. Either install via ComfyUI Manager (search "Visual Select" or "Comfyui-Visual-Select"), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/VodooWaWa/Comfyui-Visual-Select
    

    Restart ComfyUI. After updating, a hard refresh (Ctrl+Shift+R) is worth doing since the changes live in browser JS.

    Common gotchas

    • No cover images showing up. That's expected until you add sidecar files. Rename any image to match the model's basename (drop it in the same folder) and it appears. The author's companion Civitai-Download-Tool auto-generates covers and metadata while downloading - handy, though it's Chinese-first and the Details button needs its donation tier.
    • Floating button doesn't appear on a dropdown. The interception is keyword-based: the widget's name must contain one of the trigger keywords (defaults: ckpt, model, lora, vae, unet, controlnet, checkpoint) and not be in the exclude list (defaults to model_type). Oddly-named widgets get skipped - tweak the lists in Settings → 🎨 Visual Select.
    • Details button missing. It self-hides when no matching .html exists, so that's not a bug.
    • Chinese UI. Default language is zh-CN; switch to English in settings. Config persists to config.json in the pack's folder.

    It's a niche, low-drama pack - but if you've ever squinted at a dropdown full of sd15 variants, it earns its keep.

    Category🎨 Visual Select

    Inputs (2)

    NameTypeDefaultDescription
    model_typeCOMBOcheckpoints27 options: checkpoints, configs, loras, vae, text_encoders, diffusion_models, +21
    selected_modelCOMBO1 options:

    Outputs (1)

    NameTypeDescription
    model_nameSTRING