Imprint - Export Labelled PNG (+ C2PA)
The C2PA export node that hands you a file path instead of an image, on purpose
- image
- labelled_png_path
- exported
- c2pa_status
Imprint - Export Labelled PNG (+ C2PA) is the finish line of the ImprintAI pack: the output node that writes your final, labelled PNG file and, when the service has a signer configured, attaches a cryptographically signed C2PA manifest to it. C2PA is the same open standard behind the "Content Credentials" you see on Adobe, Microsoft, and camera products - a tamper-evident manifest of who made the image and how. This node is how an Imprint workflow speaks that language instead of only whispering in steganographic pixels.
It's the only node in the pack you should treat as the true end of the graph, because of a quirk that looks like a bug until you understand metadata: it returns a file path, not an IMAGE. That's deliberate. C2PA/JUMBF manifests only survive in exact encoded PNG bytes, and if this node handed you an IMAGE tensor you'd likely route it through Save Image - which re-encodes and silently deletes the manifest. The whole reason the node exists would evaporate in one save. ComfyUI's own docs culture already treats metadata as the payload rather than a footnote, and re-encoding is precisely how metadata dies. So this node writes the exact bytes the server returns and gives you a string.
How it works
Feed it the image, the txid and anchor_ready from ImprintLog, and an API key. It encodes your pixels to PNG locally and POSTs them to https://imprintai.link/api/c2pa/label. The server embeds the stego label (v1 or v3, same tradeoffs as ImprintLabel) and, if a C2PA signer is configured for your account, attaches a manifest that references the already-anchored blockchain assertion - no second anchor is created. The node then writes the returned bytes to ComfyUI's output directory as {filename_prefix}_{first-12-chars-of-txid}.png and reports where it went.
Three outputs: labelled_png_path (the file path - wire it into a "text" preview or just read the console), exported (whether the file was written), and c2pa_status, which is one of three honest values: signed (a cryptographic signature was added), not-configured (no signer was available), or failed (signing failed - but you still get a valid labelled PNG). A couple of config inputs: stego_method and redundancy match ImprintLabel's, and filename_prefix defaults to imprint.
The take you need
A signed manifest is not a certificate of trustworthiness. The README is careful here, and so should you be: C2PA signing doesn't imply certification, membership of a public trust list, or acceptance by every verifier. Trust is verifier-dependent - and in practice the community remains split on whether C2PA manifests are meaningful when most platforms strip metadata anyway. What this node buys you over ImprintLabel alone is a file that a C2PA-aware verifier (like contentcredentials.org/verify) can inspect and that carries the on-chain reference in its pixels. That's the real differentiator: pixels that survive casual re-encoding plus a manifest for the tooling that reads manifests.
Where people get burned
Do not route this node's output back through ComfyUI's native Save Image, or re-encode the returned file at all, if you want the C2PA manifest to survive - the README warns about this explicitly and it's the most common way to nullify the whole run. And unlike ImprintLabel, this node requires an API key (it falls back to the IMPRINT_API_KEY environment variable if you leave the input blank), and it only fires when anchor_ready is true - no anchor, no export, empty path. You'll also need the source image at 512×512 or larger if you use the v3 stego method.
Installing
Not on the ComfyUI Registry yet, so install manually rather than hunting through Manager:
cd ComfyUI/custom_nodes
git clone https://github.com/svcBSV/imprintai-comfyui.git
cd imprintai-comfyui
python -m pip install -r requirements.txt
Restart ComfyUI completely. Just requests and Pillow as dependencies, plus an approved ImprintAI account for the actual signing/anchoring.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| api_key | STRING | — | |
| txid | STRING | — | |
| anchor_ready | BOOLEAN | false | — |
| filename_prefix | STRING | imprint | — |
| stego_methodopt | COMBO | imprint-stego-v1 | 2 options: imprint-stego-v1, imprint-stego-v3 |
| redundancyopt | COMBO | medium | 3 options: low, medium, high |
| api_urlopt | STRING | https://imprintai.link | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| labelled_png_path | STRING | — |
| exported | BOOLEAN | — |
| c2pa_status | STRING | — |