Nodes/ComfyUI-PromptOrganizer/Save image to txt2any
ComfyUI Node

Save image to txt2any

Save your renders to txt2any and actually learn what each prompt word did

By txt2any·Created 2 years ago·Updated 2 years ago· 1
Save image to txt2any
  • images
    filename_prefixtxt2any

    "Save image to txt2any" is a drop-in replacement for the built-in Save Image node that does one extra thing: after saving your PNG locally, it uploads it to txt2any.com, a cloud service that reads the metadata ComfyUI bakes into every image and gives you a prompt-comparison UI. The pitch is simple - you keep tweaking prompts, and instead of squinting at ten PNGs and guessing which word changed what, you get a word-by-word diff of your prompts and a side-by-side of every generation parameter. It's the "workflow included" culture (ComfyUI embeds the whole graph in each output PNG's metadata) turned into a personal tracking tool. If you're the type who forgets what you changed between run 4 and run 7, that's genuinely useful.

    How it works

    Mechanically, this node is a re-skinned Save Image with an upload call bolted on. It takes your image tensor, writes it to ComfyUI's output folder as a PNG with the prompt and extra_pnginfo embedded as metadata - same as the default node - then POSTs the file to https://api.txt2any.com/v1/images with a Bearer token it reads from a txt2any.ini file in the pack's folder. Your local copy is always kept; the cloud copy is on top.

    There's no model, no heavy dependency, no requirements.txt. The pack only uses requests, Pillow, and numpy, which ComfyUI already ships. One honest wart in the code: the upload call disables TLS certificate verification (verify=False). It's a tiny project, and the author chose convenience over hygiene - worth knowing before you send anything sensitive.

    Inputs and outputs

    This is a terminal output node, so it has no outputs. Two inputs that matter:

    • images (IMAGE) - wire this to your VAE Decode. One image, or a batch, all get uploaded.
    • filename_prefix (STRING, default txt2any) - only affects the local filename and counter. Set it if you want your local files organized, but it doesn't change anything on the txt2any side.

    Once you've run a queue, a "View in txt2any" button appears on the node. Clicking it opens txt2any.com/#/cloud?filename=... - your image plus its full generation data, ready to compare against everything else you've uploaded.

    Installing it

    Two ways, both quick:

    cd ComfyUI/custom_nodes
    git clone https://github.com/txt2any/ComfyUI-PromptOrganizer
    

    …or in ComfyUI Manager: Manager → Install via Git URL, paste https://github.com/txt2any/ComfyUI-PromptOrganizer, restart. No model files to download, no extra Python deps.

    The one mandatory step is the API key. Create an account at www.txt2any.com, generate a key, then replace the entire contents of txt2any.ini (sitting in the pack's directory) with it. Restart ComfyUI afterward. The free tier is explicitly "always free," and the author says it stays that way.

    Where people get burned

    Real talk: this service is obscure. In the community signal we can see, txt2any barely registers - it's a small project, not a name people recommend. That cuts both ways. You're sending your images to a third-party cloud run by an operation you know almost nothing about, and its longevity is unproven. If txt2any ever shuts down, the node degrades gracefully - the local save still works, so you lose nothing but the button.

    Also, the obvious alternative: you can do prompt diffing locally with almost zero setup - check PNG metadata, drag two images into ComfyUI and read the embedded graphs. What txt2any adds is a purpose-built comparison UI and a cross-session archive you don't have to maintain. For a serious iteration workflow that's real value; for a casual "I made a cool render" hobbyist, it's a cloud dependency for a marginal feature. Reach for it if you actually track your prompt experiments. Skip it if you'd never open the compare view.

    Categoryimage

    Inputs (2)

    NameTypeDefaultDescription
    imagesIMAGE
    filename_prefixSTRINGtxt2any

    Outputs (0)

    No outputs