Claude Opus 4.6
What Actually Changes When You Swap Opus Versions
- text
- raw_json
- credits_consumed
- usage_json
- credits_left
Swapping Opus 4.5 for 4.6 in your graph is one wire move: disconnect the old node's text output, drop in this one, reconnect. Everything else - the prompt, the system prompt, the downstream encoder - stays put. The question is whether it's worth doing, and the answer depends entirely on what your LLM step is actually doing.
When the version swap matters
If your LLM node is doing formatting - take my notes, emit one clean prompt paragraph, no preamble - versions barely matter. Any modern Claude does that. Swap freely.
If your LLM node is doing judgement - writing a six-shot storyboard where shot 3 has to inherit the wardrobe from shot 2, or resolving a contradictory brief into something coherent - then version changes are the whole product, and the cheap way to find out is A/B: same prompt, same seed downstream, two nodes side by side, diff the output. This pack makes that trivial because each version is its own node. No model dropdown, no selector to fiddle with. That's the one design decision here that I think is genuinely good rather than merely tidy.
What you can't get from me is a quality claim about 4.6 specifically. The corpus has exactly one thread mentioning "Claude Opus 5" and nothing for the intervening Opus revisions - this is a node-and-vendor ecosystem, not a Reddit-thread one, and KIE's own docs are the authority on what each page exposes.
How it works
At startup the pack reads KIE's public API index and builds a node class per published model page, then enriches each from that page's own documentation. This node ends up as a thin wrapper: it assembles an Anthropic-style request body (model, messages, stream, max_tokens, optional system, tools, thinkingFlag) and POSTs it to KIE's /claude/v1/messages. KIE is a marketplace reselling the model; your key authenticates against api.kie.ai and nowhere else.
Two details to internalise before debugging:
history_jsonis the messages array - it's parsed from JSON and sent as-is, then yourpromptis appended as the last user turn. Multi-turn means prior turns inhistory_json, current question inprompt. Not both.thinkingbecomesthinkingFlag: true. If you were expecting Anthropic'sthinkingobject withbudget_tokens, that isn't this;expert_override_jsonis the escape hatch.
Inputs and outputs
prompt is required. system_prompt is where you enforce output shape - it's the single most under-used field on these nodes. max_tokens defaults to 4096 and goes to 131072; a truncated JSON answer is almost always this. stream, tools_json and expert_override_json are advanced.
Outputs: text (wire to a CLIPTextEncode, another model's prompt socket, or Suno's prompt), raw_json for forensics, usage_json for token accounting, and credits_consumed / credits_left as floats. The node displays a credits receipt after each run.
Install
ComfyUI Manager → search ComfyUI-KIE-Nodes-Next. The README says publishing to the Registry is prepared but not shipped, so keep this fallback handy:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Restart ComfyUI, then Settings → KIE.ai Nodes Next → Connection → paste key → look for the CONNECTED line and masked fingerprint. KIE_API_KEY environment variable overrides the saved key. Python 3.10+ only; nothing downloads.
Common issues
Fresh install, no Opus nodes. The library is built from KIE's documentation index on first start and expands on the first deep sync; the frontend reloads once. Restart and wait.
A model that worked last month now errors. KIE's catalog moves - community reports of a model quietly disappearing from the marketplace exist in the wild ("Sora 2 Pro is apparently not available anymore on KIE"). The pack's whole architecture is a bet that live docs beat a hardcoded list, but a model can still leave the catalog, and then the node is a shell.
The output bleeds chat scaffolding. Role delimiters and "Here's your enhanced prompt:" are the classic failure of an LLM-as-prompt-writer. Constrain it in system_prompt; don't rely on the downstream encoder to ignore it, because it won't.
Rate limits and flaky networks. The client retries 408/425/429/5xx with exponential backoff and defaults to 4 attempts. A very long batch will still throttle; there's an advanced config node for timeout and retry counts.
It costs money on every run. Cheap relative to local-free, expensive relative to free. For a prompt-shaped job you run constantly, a local abliterated 8B costs nothing per call and never filters - the API path is for when you genuinely want frontier quality.
Inputs (8)
| 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. |
| max_tokensopt | INT | 40961–131072 | — |
| thinkingopt | BOOLEAN | false | — |
| 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 | — |