Nodes/Remove AI Watermarks/Identify Provenance (RAIW)
ComfyUI Node

Identify Provenance (RAIW)

What's really in that image? Point this node at the file and it tells you

By wiltodelta·Created 3 months ago·Updated about 6 hours ago· 18
Identify Provenance (RAIW)
    • report_json
    • verdict
    • platform
    • confidence
    source_path
    check_visibletrue
    check_invisibletrue

    Before you strip, remove, or repurpose anything, it helps to know what you're actually holding. Identify Provenance (RAIW) is the forensic end of this pack: give it a file on disk and it tells you whether that file carries AI provenance - the visible registered marks, the invisible watermark, or the metadata - and how confident it is about the call. It's the "read first, act second" node.

    The one thing to internalize before anything else: this node takes a file path, not an IMAGE tensor. ComfyUI's image tensors are just pixel arrays; they carry none of the C2PA, EXIF, XMP, or IPTC data the file was saved with. That's why all three provenance-aware nodes in this pack (this one, Strip Metadata, and Remove All Watermarks) read paths. The path has to be reachable by the ComfyUI server - on a remote setup, that means a path the server's filesystem can see, not your laptop's.

    What it does

    Under the hood it's a thin wrapper around remove_ai_watermarks.identify.identify(). Feed it a source and it runs the detection suite against the file, then hands back four outputs:

    • report_json - the full versioned provenance report as a JSON string. Drop this into a text-display node and read it; it's where the detail lives.
    • verdict - a tri-state string: AI-generated, not AI, or unknown. unknown is a real answer, not a bug: the checker found nothing conclusive.
    • platform - which vendor's mark or metadata it detected, if any.
    • confidence - the detector's confidence as a string.

    You only set two inputs. source_path is the one that matters - paste the absolute path to the file. check_visible and check_invisible both default to true, and honestly, leave them there unless you know you only care about one kind of mark. Turning off the invisible check speeds things up and skips the heavier detectors if you already know the file came from a visible-only pipeline.

    The realistic workflow

    The smart way to use this is as the first stop and the last check. Run it before removing anything so you know what you're dealing with and which platform's mark is in play - that's exactly the information the "auto" modes in the removal nodes use. Then run it again on the cleaned file afterward to confirm the provenance is actually gone. It's an output node, so it terminates the graph; the strings are meant for you to read or to route into a text viewer, not to feed downstream image nodes.

    Install and gotchas

    Same story as the rest of the pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/wiltodelta/ComfyUI-remove-ai-watermarks
    pip install -r ComfyUI-remove-ai-watermarks/requirements.txt
    

    or just search "Remove AI Watermarks" in ComfyUI Manager. The package pulls in the remove-ai-watermarks library with the heif extra, so HEIC/HEIF/AVIF files decode properly.

    The error you'll actually hit is Source file does not exist: <path> - check that the path is absolute, that ~ resolves on the server, and that you typed the filename exactly. If the verdict comes back unknown on a file you're sure was AI-made, the watermark vendor probably isn't in the registry yet, which is worth knowing rather than trusting the node blindly. Nobody's detector is perfect; treat this as strong evidence, not courtroom proof.

    The pack is Apache-2.0 and the author posted it openly in r/comfyui. Reception there was mixed - a couple of people were quick to point out that invisible-watermark detection isn't magic, so don't expect this to be psychic. It reports what it finds; the judgment call stays with you.

    Categoryremove-ai-watermarks

    Inputs (3)

    NameTypeDefaultDescription
    source_pathSTRING
    check_visibleoptBOOLEANtrue
    check_invisibleoptBOOLEANtrue

    Outputs (4)

    NameTypeDescription
    report_jsonSTRING
    verdictSTRING
    platformSTRING
    confidenceSTRING