Claude Fable 5
Claude Fable 5 — extended thinking with built-in prompt caching
- messages
- images
- text
Claude is Anthropic's model line, and "Fable 5" is the current generation in Runware's catalog - the one with the deep extended-thinking tier. This node drops it into ComfyUI as a text node: build a conversation with the Runware Messages builder, optionally attach images, and get a string back. What makes this specific node worth seeking out over the other LLM nodes in the pack is its control surface: six thinking levels including max and adaptive, explicit prompt caching with a TTL, and extended-thinking output that can be split off from the main answer.
For ComfyUI purposes, this is the "give me the serious reasoning model for the hard parts of my workflow" node - prompt engineering, complex captioning, workflow logic that needs actual judgment, or generating structured JSON that drives other nodes. It's also vision-capable (images in, descriptions/analysis out).
How it works
Same text-node pattern as the rest of the pack: required messages socket from the Runware Messages builder, a textInference request, STRING text out. The distinctive parts are under settings: cache management and thinking control, which are where Claude's economics and personality live.
Inputs that matter
messages(required) +settings.systemPrompt- the conversation and system instruction. With caching on, the system prompt is also what gets cached, so this is both a behavior knob and a cost knob.settings.thinkingLevel-low,medium,high,xhigh,max,adaptive(defaulthigh). This is the deepest thinking range in the pack.adaptivelets the model spend as long as the task deserves;maxis the ceiling for genuinely hard reasoning. For quick pipeline tasks, drop tolow- you're paying for thinking tokens either way.settings.splitThinking- on by default. The model's internal reasoning is separated from the main response and returned in a dedicatedreasoningContentfield. Keep it on if you want to see (and separate) the chain of thought; the maintextoutput stays clean either way.settings.cache.scope-system(default) orsystem+history. What gets cached across requests.system+historycaches the whole conversation, which is a real cost saver if you're iterating on the same context - at the price of cache size.settings.cache.ttl-5m(default) or1h. How long the cache lives. If you're doing a burst of related calls, the longer TTL means more of them hit cache.images- anIMAGEinput for vision tasks.settings.maxTokens- off-by-default gate withmaxTokens_value(up to 128,000). Reasoning models consume tokens in the thinking phase too; if you're maxing out, it may be the thinking, not the answer.outputFormat-TEXTorJSON. JSON mode plusadvanced_json'sjsonSchemagets you structured output for downstream nodes.toolChoice/toolChoice.type/toolChoice.name- tool calling; theadvanced_jsonfield coverstools,inputs.documents,settings.stopSequences, andjsonSchema.numberResults(1–4),includeUsage- variations and spend visibility. With caching involved,includeUsageis worth a look once to understand what you're actually paying for.
Single output: text - a plain string.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Or ComfyUI Manager → search Runware → install → restart. API key via Settings, RUNWARE_API_KEY, or runware auth login. No local models.
Honest notes
The two things that actually matter in practice are the thinking level and the cache. thinkingLevel is a cost lever as much as a quality lever - max thinking on every trivial call is how you run up a bill, and the title bar shows each run's price. And the cache only helps if your workflow actually repeats context: one-shot prompts don't benefit, batch/iteration loops do. Don't turn splitThinking off thinking it speeds things up - it doesn't; it just hides the reasoning. This is the node to reach for when the task genuinely needs Claude-grade judgment, not for trivial string munging where a cheaper model in the pack will do.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| messages | RUNWARE_MESSAGES | — | |
| imagesopt | IMAGE | — | |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| includeUsageopt | BOOLEAN | false | Include token usage statistics in the response. |
| settings.maxTokensopt | BOOLEAN | false | Enable to set settings.maxTokens. Off uses the model's default. |
| settings.maxTokens_valueopt | INT | 11–128000 | Maximum number of tokens to generate in the response. |
| settings.cache.scopeopt | COMBO | system+history | Controls which parts of the request are cached. |
| settings.splitThinkingopt | BOOLEAN | true | When enabled, the model's internal reasoning is separated from the main response and returned in a dedicated `reasoningContent` field. |
| settings.systemPromptopt | STRING | System-level instruction that guides the model's behavior and output style across the entire generation. | |
| settings.thinkingLevelopt | COMBO | high | Controls the depth of internal reasoning the model performs before generating a response. |
| toolChoiceopt | BOOLEAN | false | Enable to set toolChoice. Off uses the model's default. |
| toolChoice.nameopt | STRING | Name of the specific tool the model must call. Required when type is `tool`. | |
| toolChoice.typeopt | COMBO | (default) | Strategy the model uses to decide when and which tools to call. |
| outputFormatopt | COMBO | TEXT | Output format for the generated text. |
| settings.cache.ttlopt | COMBO | 5m | Time-to-live for the cache. |
| advanced_jsonopt | STRING | Optional JSON merged into the request. For: inputs.documents, settings.stopSequences, jsonSchema, tools |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |