Simple Remove Think π
Strip <think>...</think> reasoning blocks from LLM output
- cleaned_text
If you've wired a reasoning model - DeepSeek-R1, QwQ, or one of the other "thinking" LLMs - into a ComfyUI graph to generate or expand prompts, you've probably seen it hand back a wall of <think>...reasoning about what the user wants...</think> before it ever gets to the actual answer. That's the model showing its work, and it's genuinely useful for chat, but it's dead weight if what you actually want out the other end is a clean prompt string to feed a CLIP Text Encode. Simple Remove Think is a one-job node: strip that block out and leave the real output.
How it works
There's not much mechanism to describe, and that's the appeal - you hand it a text string, it finds and removes the <think>...</think> section (tags included), and returns what's left. No LLM call happens here, no model is loaded; it's a pure text-cleanup step that sits downstream of whatever node is actually talking to your language model.
The inputs and outputs that matter
One input, text - the raw output from your LLM node, think-block and all. One output, cleaned_text - the same string with the reasoning trace removed, ready to feed onward into a text encoder or anywhere else you'd use a plain prompt string.
Installing it
ComfyUI Manager β search ComfyUI_SimpleButcher β install β restart. Manual install:
cd ComfyUI/custom_nodes
git clone https://github.com/KLL535/ComfyUI_SimpleButcher.git
cd ComfyUI_SimpleButcher
pip install -r requirements.txt
No dependencies of note for this one specifically - it's string processing, not model inference.
Common issues
Nothing changes after the node. The most likely reason is there was nothing to strip in the first place. A lot of local LLM front-ends and API wrappers (including some ComfyUI LLM nodes) already separate or discard the reasoning trace before you ever see it, in which case your text input never contained a <think> block to remove and this node is correctly doing nothing. Check the raw output of your LLM node directly before assuming this node isn't working.
Only handles the standard tag. This node is built around the literal <think>...</think> format that DeepSeek-R1-style models use. If whatever you're running wraps its reasoning in a different marker, or doesn't close the tag consistently, don't expect this node to guess - it's a straightforward strip, not a general-purpose reasoning-trace detector.
It's the smallest node in the pack by a wide margin, and it shows - there isn't a config surface to get wrong here. If your workflow includes a reasoning LLM anywhere upstream of a text encoder, this is the kind of node you drop in once and stop thinking about.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| cleaned_text | STRING | β |