Textbox π²
It's a textbox. The token counter sitting on top of it is the real show.
- text
Let's be honest about the node itself: it's a multiline textbox with a string output. The interesting thing is what sits on top of it by default - a live token counter that's actually a pack-wide feature. This node exists to demonstrate that feature, and once you see it working, you'll want it on your real prompt nodes too.
What it is
Textbox is a plain input_text widget (multiline) that outputs the text you type. That's it. The reason it ships is that it's wired into the pack's token counter by default: type into it and you'll see CLIP-L and T5 token counts rendered right on the node, updating as you type.
The token counter is configured in the RyuuNoodles π² settings page (top bar β Settings). The format is a semicolon-separated list mapping nodes and widgets to tokenizers:
Node_Name.widget_name:CLIP_L,T5_FAST;CLIPTextEncode.text:CLIP_L,T5_FAST;
The default setting literally includes this node's own widget - Ryuu_TokenCountTextBox.input_text - plus the core CLIPTextEncode text widget. That's why it works out of the box.
How the token counter works
Supported tokenizers: CLIP_L, T5, T5_Fast, UMT5, Gemma2, Gemma3, LlaMA3, Qwen2.5VL, AuraFlow (case-insensitive). The tokenizers are downloaded on first use and cached - no models, just tokenizer JSON files totaling a few tens of MB. Because it's all frontend (a tokenCounterOverlay.js drawing on the canvas, with a backend endpoint doing the tokenizing), it updates live as you type, and it respects prompt weighting syntax like (word:1.2) in its CLIP-L count.
To attach it to any other node: right-click the node β Properties Panel β copy the "Node name for S&R" value, then find the widget name (usually the placeholder text). Then add it to the settings string.
Two honest limitations, straight from the author:
- No wildcards, embeddings, or prompt scheduling. The counter reads the raw widget text; wildcard processors only resolve at queue time, so the counter can't know the final text. If you want a counter that executes at queue time, look at
comfyui-ppmor JNodes. - No Nodes 2.0 (Vue) support. The new ComfyUI frontend nodes don't get the overlay. If you're on the new node system, this feature simply won't attach.
Inputs and output
input_text- the multiline string.- Output:
text- whatever you typed, as a STRING.
It's a pass-through for text. Wire it anywhere you'd wire a string.
Installing it
The pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/DraconicDragon/ComfyUI-RyuuNoodles
Restart ComfyUI, or use ComfyUI Manager (search "RyuuNoodles"). First use of a tokenizer triggers a one-time download (20-40 MB of tokenizer files, cached locally) - after that it starts in about a second. No CLIP model is loaded; nothing heavy.
Gotchas
If the counter never appears, check the settings: RyuuSettings.TokenCountOverlay.Enabled must be true and the node/widget name must match exactly (spaces get stripped from names, so CLIP Text Encode in the old core might need the exact internal name). The BREAK keyword counter bump is off by default and, as the README notes, ComfyUI doesn't actually support BREAK without a custom node - the counter only reflects it. And on the token math itself: remember CLIP-L truncates at 77 tokens per chunk, so a big count doesn't mean the model sees all of it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| input_text | STRING | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | β |