Nodes/LLS-node/LLS Universal Image Generator
ComfyUI Node

LLS Universal Image Generator

A whole txt2img pipeline hiding in a single node

By Gin3601·Created 3 months ago·Updated 3 months ago· 0
LLS Universal Image Generator
    • image
    model_familySD1.5
    task_modetxt2img
    model_name
    positive_prompt
    negative_prompt
    width1024
    height1024
    steps20
    cfg7.0
    seed-1
    sampler_nameeuler
    schedulernormal
    denoise1.00

    Everything you'd normally wire together to go from prompt to image - checkpoint loader, prompt encoder, sampler, VAE decode - is inside this one node. LLS Universal Image Generator takes a checkpoint name, a prompt, and sampling settings, and returns a finished IMAGE. Pick SD1.5, SDXL, or FLUX in the family dropdown and it swaps in the right backend for you. It's the "just make me a picture" node of the LLS-node pack, and for beginners it's a genuinely nice on-ramp: one node to learn instead of four.

    There's a real trade to be honest about, though. All that wiring it hides is also leverage you lose. No img2img, no ControlNet port, no LoRA slot - task_mode currently only has txt2img, and the node won't be growing img2img until the author ships it. Treat it as a fast path to a first image, not a replacement for a real graph once you start iterating.

    How it works

    The node does almost no work itself. It collects your settings into a generation request object and hands it to a dispatcher (get_backend), which picks a family-specific backend adapter - SD 1.5, SDXL, or FLUX. Each backend then: loads the checkpoint through ComfyUI's model loading, encodes your positive and negative prompts the way its family expects, runs the sampler with your steps/CFG/seed, and VAE-decodes the latent back to pixels. The backend split is the interesting architectural bit - it means each family gets correct, tailored handling (FLUX gets T5-style prompt encoding and its own default guidance, SDXL gets its dual-encoder treatment) without you having to build three workflows.

    Inputs that matter

    • model_family - SD1.5, SDXL, or FLUX. This must match the checkpoint you pick in model_name; the backend validates the loaded model against the family you claimed and errors if they disagree.
    • model_name - dropdown of every checkpoint in ComfyUI/models/checkpoints/.
    • positive_prompt / negative_prompt - remember the family rules: on FLUX the negative is effectively ignored.
    • width / height (default 1024²) - step-locked to multiples of 8. 1024 is right for SDXL/FLUX; knock it down to 512 for SD 1.5.
    • steps (20), cfg (7.0), sampler_name (euler), scheduler (normal) - standard sampling controls. SD 1.5 likes CFG 7 and 20–30 steps; FLUX and distilled models usually want lower CFG and fewer steps, and the backend's per-family defaults are what make the one-node approach workable.
    • seed (-1 = random; the node ships with a control_after_generate toggle on the seed, so set it to fixed when you land on an image you want to keep - the "lost seed" trap is real).
    • denoise (1.0) - leave at 1.0 for txt2img.

    Output

    A single image IMAGE tensor. Wire it to Preview Image or Save Image. That's the whole output surface - which is the point, and also the limitation.

    Installing

    ComfyUI Manager → search "LLS-node", or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Gin3601/LLS-node
    

    Restart, look under LLS/Image. The pack has no requirements.txt; it relies on core ComfyUI plus whatever the backends load from your models folder.

    Gotchas

    • (no checkpoints found) in model_name means models/checkpoints/ is empty. Add a checkpoint and refresh before troubleshooting anything else.
    • Family mismatch is the top failure. Pick FLUX in the dropdown but an SDXL file in model_name and the backend raises a validation error rather than silently producing garbage - which is good, but it means the dropdown and the family are a matched pair. Set them together.
    • It's txt2img only. The moment you want an image input, an img2img task, or a LoRA, you're back in the full graph - which is honestly fine, because that's also the moment you should be.
    CategoryLLS/Image

    Inputs (13)

    NameTypeDefaultDescription
    model_familyCOMBOSD1.53 options: SD1.5, SDXL, FLUX
    task_modeCOMBOtxt2img1 options: txt2img
    model_nameCOMBO1 options: (no checkpoints found)
    positive_promptSTRING
    negative_promptSTRING
    widthINT102464–16384
    heightINT102464–16384
    stepsINT201–10000
    cfgFLOAT7.00–100
    seedINT-1-1–18446744073709550000
    sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
    schedulerCOMBOnormal9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
    denoiseFLOAT1.000–1

    Outputs (1)

    NameTypeDescription
    imageIMAGE