Nodes/Comfy-UmiAI/Umi Prompt Syntax Lint
ComfyUI Node

Umi Prompt Syntax Lint

Catch the Typo Before the 40-Image Batch

By Tinuva88·Created 10 months ago·Updated 12 days ago· 28
Umi Prompt Syntax Lint
    • errors
    • warnings
    • report_json
    ◄prompt—►
    ◄negative_prompt►
    ◄profileNone►

    Umi Prompt Syntax Lint is the node you add when your prompt has grown past the "type a sentence and hope" stage. It reads prompt text the way the wildcard processor would, reports what's broken, and - this is the part that makes it usable in a live graph - expands nothing. No randomness runs, no LoRAs load, nothing changes. You can leave it wired in permanently.

    What it checks

    Feed it the same template you give the Wildcard Processor and it walks the syntax:

    • unbalanced or unclosed delimiters - [, {, (, a lone __, an odd @@, a <lora: with no >
    • wildcard ranges where the minimum is greater than the maximum, or a range so wide it'll produce an absurdly long prompt
    • empty wildcard names and empty logic filters
    • missing wildcard files, with a fuzzy "did you mean" suggestion based on your actual wildcards/ collection - this is the one that pays for the node
    • LoRA strengths outside [-5.0, 5.0], which get clamped silently otherwise
    • conditionals with no branches
    • suspicious joins, like __pose__in-universe location where a wildcard butts straight into text, or an inline helper followed by a word with no comma or space
    • the profile lint (see Umi Prompt Profile), so a missing quality tag or an over-short prompt shows up here too

    A wildcard that isn't in your collection but has a fallback (__pose|standing calmly__) is reported as a note rather than a warning, because the expansion will still work. No fallback, no file - that's a warning, and it's the one that quietly puts a literal [NO_MATCHES: ...] in your prompt.

    Inputs and outputs

    prompt is required; negative_prompt and profile are optional. The profile dropdown is the same list the Profile node uses - None, Illustrious, Pony, SDXL, Flux - and picking one turns on its family-specific checks.

    Outputs are errors (a newline-joined list; empty means valid), warnings (which also carries the notes), and report_json. The JSON is the useful one for anything programmatic: a valid boolean plus counts of wildcards found, missing wildcards, LoRA tags, conditionals and negative spans. Wire errors into a text preview node and you've got a prompt health indicator sitting next to your workflow.

    Example of the kind of thing it catches before you queue:

    1girl, __hair_color__, [if $mood==calm: gentle smile
    

    Unclosed bracket, and if hair_color isn't a file you have, that too - with the closest name in your collection suggested.

    Install

    Part of the pack core, so one install covers it. ComfyUI Manager (search the pack title, or install via git URL) or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Tinuva88/Comfy-UmiAI
    cd Comfy-UmiAI && pip install -r requirements.txt
    

    Core needs pyyaml only. Restart ComfyUI; the node appears under UmiAI/prompt.

    What it can't do

    It checks structure, not taste. A perfectly balanced prompt full of made-up Danbooru tags passes with flying colors, and inventing tags is one of the more reliable ways to get mediocre anime-model output - real tags beat plausible-sounding ones because the model was trained on the real vocabulary. If your lint report is clean and your images are bad, the problem is the words, not the syntax.

    It also can't see intent. __pose__ joining straight into the next word is a warning because it's usually a mistake, but if your prompt is deliberately concatenating fragments, you'll learn to ignore that line.

    And it only knows the files on disk at the moment it runs. Add a new wildcard file, and the lint node will find it on the next run - the pack hashes the wildcard collection into its cache key, so a changed or added file does re-trigger, though a stale browser panel is a different problem. If the node doesn't appear at all, that's the usual install story: pyyaml missing, or ComfyUI never restarted.

    CategoryUmiAI/prompt

    Inputs (3)

    NameTypeDefaultDescription
    promptSTRING—
    negative_promptoptSTRING—
    profileoptCOMBONone5 options: None, Illustrious, Pony, SDXL, Flux

    Outputs (3)

    NameTypeDescription
    errorsSTRING—
    warningsSTRING—
    report_jsonSTRING—