Caption Review Pixaroma
The node that proves your training captions are wrong
Captions are the part of a training set nobody checks twice, which is exactly why they stay wrong. You caption 60 images with JoyCaption or Florence 2 or by hand, then you ship it - and the folder has four images with no .txt at all, one caption still reads "a photo of", and one is describing the picture next to it.
Caption Review Pixaroma is the node that makes that check take two minutes instead of an evening. Every picture in a folder with its caption underneath, editable, in one window.
Why captions live in separate files in the first place
A training set isn't PNGs with captions baked in. It's pairs that share a basename - 0001.png next to 0001.txt - because that's the sidecar convention kohya, ai-toolkit and OneTrainer all walk the folder looking for. Deliberately separate, so a captioning model can write thousands in one pass, and so you can see at a glance which image is missing its caption. What goes in those captions is its own discipline (describe what you want to stay variable, leave what should be permanent undescribed). This node is about the file layer: are they all there, and are they any good.
How it works
It never runs. That's the whole trick. The node has no outputs and is deliberately not an output node - same category as the pack's Note and Label nodes - so ComfyUI skips it completely when you press Run. No wires, nothing to execute, no error, no cost.
Type a folder or click Browse, then hit Review captions. It reads that folder server-side, pairing each image with its .txt, and shows the whole set as cards. Type to fix a caption and Save changes writes the edited ones back to disk. A picture with no caption isn't a dead end: type one and it gets a new .txt. Filter by a word shows only the captions containing it, and show only the pictures that still need a caption is the feature that saves you - "did I miss any" becomes one click instead of a scroll.
The one input
folder is the only input, and it's a text field, not a wire.
- empty → ComfyUI's
outputfolder - a bare name like
Training Set→ that folder insideoutput - a full path → any folder you approved once with Browse
No outputs. Nothing to connect. If you find yourself hunting for a socket, stop.
The loop this node is built for
It's the middle step of a three-node pipeline in the same pack. Save Text's One file per entry writes one .txt per entry, named after the picture - an AI does the captioning. Caption Review is where you actually read them and fix the ones it got wrong. Then Load Texts from Folder runs the graph again, one run per caption, with your corrected text. If you're captioning a set for a LoRA, that loop is the whole job.
Installing
Through ComfyUI Manager: search Pixaroma, hit Install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/pixaroma/ComfyUI-Pixaroma
Restart ComfyUI afterwards. No models to download for this node, no heavy dependencies - the pack declares exactly one (imageio-ffmpeg, and that's for the video nodes), with PIL and torch coming from ComfyUI itself. If you're on Windows with ComfyUI Easy Install, the pack is already bundled; just update.
Worth knowing: this is one person's pack - the designer/photographer behind Pixaroma (@pixaroma on YouTube) - and support runs through the Pixaroma Discord rather than GitHub. Issues and pull requests are closed on purpose, because a change here usually has to be carried into the help text and the tooltips at the same time. There's a lot of hand-holding, which is what you want from a utility pack.
Where people get stuck
"Folder not approved." A full path outside ComfyUI's own folders has to be approved once with Browse - typing a path the server hasn't been given permission for gets denied instead of silently listing it. That's a security change (ComfyUI's API is unauthenticated), not a bug, and the message spells out the steps. Easiest fix: put the training set inside ComfyUI/output and just type the name.
The window looks old or broken after an update. Hard-refresh the browser tab - Ctrl+Shift+R, Cmd+Shift+R on Mac. The browser caches the node's visuals, so you can be looking at the previous version of a node that updated fine. This is the pack's number one support answer.
A card refuses to save. If the picture's filename is one the save path would sanitise into a different name (leading underscore, odd characters, something very long), the node won't write a second, differently named .txt next to your image. It's protecting you from a caption file the trainer will never find.
It does nothing when you press Run. Correct. There's nothing to run. It's a tool on the canvas, like a Note.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| folder | STRING | The folder with the pictures and their .txt captions. Empty = ComfyUI's output folder; a name like Training Set = a folder inside output; or a full path to a folder you approved with Browse. |
Outputs (0)
No outputs