Nodes/Overtli Studio Suite/OVERTLI Studio · Prompt Director
ComfyUI Node

OVERTLI Studio · Prompt Director

The prompt compiler that would rather error out than truncate

By OvertliDS·Created 7 months ago·Updated 23 days ago· 20
OVERTLI Studio · Prompt Director
    • prompt
    • checks
    ◄prompt—►
    ◄state{}►

    Pull this node into a graph and it looks underwhelming: two inputs, two outputs, all strings. That's because the node is the backend half of a very large frontend panel. The Director is a prompt authoring surface with style presets, prompt libraries, an optional LLM pass, and - the part that actually saves you a bad night - a validator that checks your prompt against the real limits of the model you're targeting, and hits you with an error rather than quietly sending three quarters of it to the encoder.

    Why a prompt compiler at all

    The honest context: on 2026 checkpoints your prompt isn't a bag of tokens any more, it's an instruction fed to a language model (prompt-engineering.md). MiniMax H3 is a 33B omni-modal model that takes text, image, video and audio in one context; FLUX.2 Klein and Qwen Image 2.1 are both LLM-encoded. For those, (word:1.3), BREAK, masterpiece, best quality are somewhere between inert and harmful, and structure is what carries. Prompt enhancement as a node category went mainstream for exactly that reason (llm-in-comfyui.md).

    So the Director does two jobs. It composes a prompt from layers - custom instructions, a provider guide, your raw prompt, up to seven style presets, and a trailing [Constant] block that survives every other edit. And it can hand the result to an LLM to rewrite, using engineering guides that ship with the pack: guides/minimax_h3.md for H3's ordered six-field Ref2VA grammar (or Base's three), and guides/image_director.md for FLUX.2 Klein 9B and Qwen Image 2.1 reference-authority reasoning. Treat a guide as a better system prompt, not a guarantee of output quality - the pack says the same thing itself.

    The two inputs, and why state looks like that

    prompt is a forced input socket, not a text box you type into. You wire your authored text in - from the Director's own prompt source, or any string node - and the node resolves it. state is a STRING defaulting to "{}": the node's frontend writes a JSON blob into it describing your guide, provider, model, styles, instruction text, response/context budgets and auto-unload preference. Because it defaults to {}, you can also drop this node alone into a graph as a plain pass-through-plus-validator, and you'll get your prompt back untouched with checks run against the default H3 Ref2VA guide.

    Outputs: prompt is the final composed string - wire it to the text input of your CLIP Text Encode node and your pipeline stays as it is. checks is a JSON report of errors and warnings: forbidden cases are missing H3 fields, out-of-order fields, or reference tags that point at media your graph doesn't actually supply; warnings cover things like a missing [Shot 1]. Send checks to a text preview node if you want to read it. Warnings never rewrite your prompt.

    Enhancement, providers, and when it fires

    Enhancement starts disabled, deliberately - opening or migrating a workflow never contacts a provider. Tick the enable control and the next run sends the composed prompt out. Five providers are wired in: LM Studio on 127.0.0.1:1234 (the autoUnload default unloads the selected model afterwards), Ollama via /api/chat with num_ctx/num_predict and keep_alive: 0, the Codex CLI if you're signed in with gh, Pollinations, and any OpenAI-compatible endpoint. Keys and URLs live in ComfyUI/user/overtli_studio_settings.json (plus GZ_* env vars), are redacted on read, and never get written into workflow JSON. An identical prompt and settings pair reuses the previous result for ten minutes, so re-running a graph isn't ten LLM calls.

    Install

    Search Overtli in ComfyUI Manager, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/OvertliDS/overtli-studio-suite
    cd overtli-studio-suite
    pip install -r requirements.txt
    

    Restart. Dependencies are requests, Pillow, numpy - torch comes from ComfyUI. Nothing downloads models on its own, which is a genuinely good property in a category where "one-click, downloads its own weights" has historically been the red flag (comfyui-ecosystem.md). For the video save/compare extras you also need ComfyUI-Pixaroma; prompt authoring works without it.

    Where people get burned

    • "I enabled it and nothing changed." Unless enhancement is on, this node composes and validates but calls nothing. That's the design.
    • The budget error. H3 gets a hard 7,000 UTF-16-unit ceiling on the final text, matching the hosted CLI's rejection point. Blow past it and the run fails with the count and your text intact - no silent clipping. Guides target under 6,000 units for a reason.
    • A 512-token FLUX warning is not a wall. Locally ComfyUI pads rather than truncates at 512; the warning is about matching the reference encoder.
    • Empty model list. The provider isn't up, or you changed connections and didn't hit Refresh models - catalogues and failures are cached for five minutes. Model discovery is never done at schema time.
    • "Provider returned no final prompt." Usually a thinking model spending the whole response budget on reasoning. Raise the output budget or pick a non-thinking model.
    • Tokenizer counts missing. Measurement uses the local Qwen tokenizer under comfy/text_encoders; without it you get characters-only estimates, not limits.
    • This pack has essentially no community footprint. I looked; the corpus doesn't discuss it. It's a one-author suite, so read the code before you paste real API keys into it - the same advice that applies to any fresh node with network reach (external-api-nodes.md).
    CategoryOvertli/Studio

    Inputs (2)

    NameTypeDefaultDescription
    promptSTRING—
    stateSTRING{}—

    Outputs (2)

    NameTypeDescription
    promptSTRING—
    checksSTRING—