Gemini 3.6 Flash (openai)
Picking between three near-identical flash nodes
- text
- raw_json
- credits_consumed
- usage_json
- credits_left
Three Flash-tier Gemini nodes sit in this pack's menu - 3.5, 3.6 and 3.7, each also available in an (openai) variant - and they are, from your side of the canvas, the same node with different numbers on the tin. Same six inputs, same five outputs, same request shape. The choice is a price-and-latency question that only KIE's pricing page can answer, and it changes without the pack changing.
So here's the practical advice: pick the (openai) variant of the newest Flash, since those are the routes that resolve cleanly on a fresh install, and don't agonise. If a run feels slow or expensive, swap the node. Nothing downstream breaks, because the output is a string either way.
What it's good at
Rewriting. Cleaning. Reformatting. Turning a caption into a prompt, a list of notes into a paragraph, a rambling paragraph into JSON. That's the tier where a Flash model earns its per-call price: high volume, low stakes, short outputs. Long structured reasoning belongs to the Pro nodes two folders up.
The KB's LLM-in-ComfyUI guidance is blunt that a local model is the default answer for prompt enhancement - free, uncensored, offline - and that the API tier is for the jobs your GPU can't do. Worth keeping in mind while you decide whether this node runs on every generation or only when you ask it to.
Inputs, briefly
prompt - required, the user message. system_prompt - the job contract; write it, and include the "output nothing but the result" clause, because preambles end up in your prompt field as literal tokens.
history_json is a prior-messages array passed straight through, so multi-turn work is possible if you maintain the array. It's also the only multimodal hook on this node - the pack declares no image input for the Gemini family.
tools_json takes OpenAI-style function definitions and sits at [] by default. stream defaults off and doesn't produce live tokens in the UI: the pack reassembles a streamed response into one string first. expert_override_json is the raw-request fallback for undocumented fields; the author's tooltip calls it expert-only and means it.
Outputs
text is the string you route - into a prompt widget, a save-text node, or another LLM node if you want a two-stage rewrite. raw_json is the full response for debugging. usage_json is the token report, and on a node that might run on every queue it's the number worth glancing at weekly. credits_consumed and credits_left are floats, drawn onto the node after each run along with the running balance.
A chain that works
The pattern the community keeps landing on is two tight steps rather than one open-ended rewrite: a local vision-language model describes the image in detail, and the API model does one narrow transformation into the prompt format your diffusion model wants. Two constrained jobs drift less than one vague one, and the expensive call happens once per image instead of once per iteration.
Metadata matters here too: text is a string output, so it wires cleanly into anything that takes text. Wire it into a prompt field on a Flux-2 or Z-Image node and you've got a prompt engine; wire it into a text-save node and you've got a log of every rewrite you paid for.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
ComfyUI Manager does it too - search "KIE.ai Nodes Next" - then restart ComfyUI. Requirements are four packages (requests, Pillow, numpy, PyYAML); there is nothing to download because the model lives remotely. Then set your key once in Settings → KIE.ai Nodes Next → Connection. It's validated against KIE before the pack will overwrite a working key, kept out of workflow JSON, and masked in the frontend. Servers can skip the UI with KIE_API_KEY, which takes priority.
If a run fails
- "Endpoint has not been resolved yet" - the live catalog hasn't enriched that operation. Restart or run the pack's catalog refresh node; or just use the
(openai)twin, which is resolved in the shipped catalog. - Empty
text- readraw_json. Sometimes the provider returns the content under a field the pack's walker still finds; if it's genuinely empty, the request was probably rejected. - Cost climbing - check
usage_json, then check how many times your graph queued the node. It's almost always the loop, not the model.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | User prompt / message. | |
| system_promptopt | STRING | — | |
| streamopt | BOOLEAN | false | — |
| tools_jsonopt | STRING | [] | Optional function/tool definitions supported by this model endpoint. |
| history_jsonopt | STRING | [] | Optional prior message/input array as JSON. |
| expert_override_jsonopt | STRING | {} | Expert-only request overrides. Normal use does not require this. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| usage_json | STRING | — |
| credits_left | FLOAT | — |