Fusenchat Prompt Chips
Drag a PNG back in and get your prompt as editable, reorderable chips
- prompt
You've probably been there: you generate a good image somewhere else, then want to reuse that exact prompt in ComfyUI, but it's buried in PNG metadata and you end up hand-typing it into a CLIP Text Encode node. Fusenchat Prompt Chips exists to kill that chore. Drop a PNG onto it and the prompt comes back as a row of text chips you can reorder, toggle, or delete before it flows into your sampler.
This is the first (and so far only) node from Sekiun/ComfyUI-fusenchatPrompter, a companion to the author's own tool fusenchat, which stamps prompts into PNG text chunks so they survive outside ComfyUI. If you're already producing those images, this is the round-trip home. If you've never heard of fusenchat, the node still works - it just won't read a random A1111/ComfyUI PNG, because it's specifically looking for the fusenchat:text (or fusenchat:payload) chunks that tool writes.
How it works (spoiler: the Python does almost nothing)
The backend class is a five-line shell. get_prompt() literally returns the prompt string it's handed; all the real work lives in the frontend JavaScript under web/js/. That's worth knowing, because it means the node is pure browser code - no models, no API calls, no Python dependencies beyond ComfyUI itself. The README is the source of truth here: no requirements.txt ships in the pack at all.
Drop PNGs on the node and the browser parses the PNG text chunks (tEXt, zTXt, iTXt) itself, reads fusenchat:text, and falls back to the text field inside the fusenchat:payload JSON if the direct chunk is missing. Each chip's text gets newlines flattened to spaces, then the enabled chips are joined in display order into one line - that's your prompt output.
The inputs that actually matter
The schema lists two required STRING widgets, but you'll never touch them directly:
prompt(STRING, multiline) - the built prompt. The frontend hides the widget and syncs it behind the scenes; this is what the output carries.chip_data(STRING) - a JSON blob ({"version":1,"singleSelect":false,"chips":[...]}) that stores each chip's text, order, and enabled state. It's how the node restores your chips when you reload a workflow. Filenames and image data are not saved - just the text.
The only output is prompt (STRING), which wires straight into a CLIP Text Encode node (or any node that wants a STRING). Remember that's all it is - a string. You still need the encode step before it reaches your sampler.
In the UI: drag chips to reorder (order matters - earlier tags get stronger attention on tag-based models), hit the ● to disable a chip (disabled chips go purple and drop out of the output), the + adds a hand-typed tag, and single-select mode (単一選択モード - the UI is Japanese-only, fair warning) keeps exactly one chip enabled.
Installing it
ComfyUI Manager is the easy route - search "ComfyUI-fusenchatPrompter" and hit install. Or from a terminal:
cd ComfyUI/custom_nodes
git clone https://github.com/Sekiun/ComfyUI-fusenchatPrompter
Then restart ComfyUI. It'll be under prompt/fusenchat > Fusenchat Prompt Chips. Nothing heavy to download - no model files, no pip deps. It's the rarest kind of custom node: a dependency-free frontend gadget.
Where people get burned
- It only reads fusenchat-format PNGs. Drop a normal PNG with no
fusenchat:chunks and the node errors out (status text turns red). This is by design, not a bug - it's reading a very specific metadata format. - Compressed metadata needs a modern browser. The parser uses
DecompressionStreamto inflatezTXt/iTXtchunks, so anything older than a ~2022 Chrome/Edge/Firefox can't read compressed payloads. - Don't expect a REST API or key. The name sounds like a chat service, but "fusenchat" is just the author's PNG metadata project. No network calls anywhere.
If your prompt workflow already lives inside ComfyUI, this node is niche - you're probably fine with a plain text node. But if you're round-tripping prompts between fusenchat and the canvas, it's exactly the missing link.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| chip_data | STRING | {"version":1,"singleSelect":false,"chips":[]} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |