I uploaded a banner to a LinkedIn post this week and a small notice appeared in the corner of the editor:
Content credentials label added.
A round cr badge sat on the top-left corner of the image, and it stayed there once the post was published. The same image went to my Facebook Page the same day, and Facebook put "AI content" under the Page name - even though the composer's AI label switch was showing off when I posted.
The image came out of ChatGPT. Neither platform looked at the picture and decided it looked AI-generated. Both read something hidden inside the file. Below is what that something is, the test that proves it, and what you can and can't do about the label.
The short answer: "Content credentials label added" means the image carries a signed C2PA manifest - a small block of provenance data that tools like ChatGPT, Adobe Firefly and some cameras embed in the file. LinkedIn shows it as the CR icon; Facebook and Instagram turn it into an "AI content" / "AI info" label. You can't switch the label off on the platform. It goes away only if the file you upload no longer contains the manifest - and for AI-generated images there are good reasons to leave it on.
What is inside a ChatGPT image
A PNG file is a list of named chunks: IHDR for the dimensions, IDAT for the pixels, IEND to close it. Listing the chunks of my ChatGPT banner (1672 x 941, 1,704,000 bytes) gave one I didn't expect:
IHDR 13 bytes
caBX 23,654 bytes <- the Content Credentials
IDAT (pixels)
IEND 0 bytes
caBX is where C2PA stores its manifest in a PNG. 23,654 bytes is about 1.4% of this file. Reading it with the C2PA project's own Python library (c2pa-python 0.38) gave this, trimmed to the parts that matter:
claim generator : OpenAI Media Service API
signed by : OpenAI OpCo, LLC (OpenAI Media Service), alg Ps256
actions :
c2pa.created softwareAgent: ChatGPT / gpt-image
digitalSourceType: trainedAlgorithmicMedia
c2pa.converted
c2pa.watermarked.unbound
Three lines in there do the work:
-
trainedAlgorithmicMediais the IPTC term for "created by a generative AI model". This is the value platforms look for. - The signature is OpenAI's. The manifest is cryptographically signed, so anyone can check that it wasn't edited afterwards. (My local check reported the signature as structurally valid but the certificate as "untrusted" - only because I hadn't loaded a trust list, not because anything was wrong.)
-
c2pa.watermarked.unboundis the one most articles miss. In the C2PA specification (2.3 and later) it means an invisible watermark was inserted into the image itself, without creating a soft binding. That watermark is in the pixels, not the metadata.
The test: same image, with and without the manifest
To prove the label comes from the manifest and not from what the image looks like, I made a copy with identical pixels and no manifest. Re-saving through Pillow does exactly that, because Pillow doesn't carry unknown chunks over:
from PIL import Image
Image.open("banner.png").save("banner-resaved.png")
The re-saved file had no caBX chunk, and c2pa-python reported ManifestNotFound. Then I uploaded both to the LinkedIn post editor, one after the other in the same session, and discarded the draft afterwards:
| File | C2PA manifest | LinkedIn editor |
|---|---|---|
| Original ChatGPT PNG | Yes, signed by OpenAI | cr badge + "Content credentials label added." |
| Same pixels, re-saved with Pillow | None | No badge, no notice |
Same picture, different result. LinkedIn is reading the file's metadata, and it is not (in this test, at least) detecting the invisible watermark.
Facebook I could only observe, not A/B test, because its label only appears on a published post. The original PNG got "AI content" with the composer's AI switch set to off. Clicking the label explains that it is based on a signal added by the tool that created the content - that is the manifest. The post's "..." menu has an AI content item, which opens the same explanation. There is no option there to remove it.
What LinkedIn shows people who click the CR icon
LinkedIn's help centre calls it the C2PA icon. According to that page, clicking it can show:
- whether AI was used to generate or edit the content, as stated by whoever signed it
- the app or device used - a camera model or an AI tool
- who created the image, and which organisation issued and signed the credential
- when it was signed
LinkedIn also says the feature is still rolling out, so not every account sees it, and that not every AI-generated image can be identified. On the published post, the badge is a button labelled "This image has content credentials."
How to check whether an image has Content Credentials
Before you post, you can see what a platform will see:
- Online: the Content Authenticity Initiative's Verify tool (contentcredentials.org/verify) reads the manifest in your browser and shows the same fields.
- From code: the C2PA project's own library.
# pip install c2pa-python
import json
import c2pa
with open("banner.png", "rb") as f, c2pa.Reader("image/png", f) as reader:
store = json.loads(reader.json())
manifest = store["manifests"][store["active_manifest"]]
print(manifest["claim_generator_info"][0]["name"])
for assertion in manifest["assertions"]:
if assertion["label"].startswith("c2pa.actions"):
for action in assertion["data"]["actions"]:
print(action["action"], action.get("digitalSourceType", ""))
On a file without a manifest, c2pa.Reader raises ManifestNotFound - which is also the quickest way to confirm a removal worked.
How to remove the CR label - and whether you should
There is no setting on LinkedIn or Facebook to switch a detected label off. The label follows the file, so the only way to avoid it is to upload a file without the manifest. These do that:
- Re-saving or converting the image in a tool that doesn't keep C2PA data. Pillow does this by default (tested above, for both PNG and WebP). Many image editors and online converters behave the same way; check the result with the reader rather than assuming.
- Taking a screenshot. OpenAI's own documentation says screenshots remove the metadata, and that most social platforms strip metadata from uploads anyway - which is why an image without Content Credentials proves nothing either way.
Two things to weigh before you do it:
- The watermark stays. Removing the manifest doesn't remove the invisible watermark the manifest says was added. LinkedIn didn't react to it in my test; that tells you about LinkedIn today, not about every platform or detector tomorrow. Meta said when it launched these labels that it was working on detecting invisible watermarks as well as metadata.
- The label is accurate. If ChatGPT made the image, "AI content" is true. For a banner, diagram or illustration, nobody is misled and the label costs you very little. The other case is different: a realistic AI image of a person or an event is exactly what these labels exist for, platforms expect it to be disclosed, and stripping the manifest to pass it off as a real photo is the kind of thing their AI-content rules are written against.
The legitimate reason to strip it is the opposite situation: an image you made yourself, where one small AI-assisted step (an upscale, a background fill) produced a manifest that makes the whole thing read as AI-generated. Facebook's own wording separates "entirely AI-generated" from "only modified with AI" for this reason.
A checklist before you post an AI image
- Know where the image came from. If a generator made it, assume it carries a manifest and that LinkedIn, Facebook and Instagram will label it.
- Check, don't guess. Run it through the Verify tool or the reader above. Some editing tools keep the manifest, some drop it, and some add their own - the only reliable answer is the file.
- Decide whether the label is fair. Fully AI-generated: leave it. Your own photo or design with a small AI-assisted step: removing the manifest is reasonable, and Facebook's own wording draws the same line.
- Disclose in words when it matters. For anything realistic - a person, a place, an event - say it is AI-generated in the post itself. Labels can be lost along the way; your caption isn't.
- Re-check after converting. If you resize or compress the image for a website, confirm what survived. Conversion can drop the manifest without you asking it to.
What I do now
For this site I keep two versions of every AI-generated banner. The original PNG, with its manifest, goes to LinkedIn and Facebook, where the label is honest and harmless. The site itself serves a WebP version made with Pillow - mainly because WebP at quality 88 is about 150 KB against 1.7 MB for the PNG, which is what decides how fast the page loads. The manifest disappears in that conversion as a side effect, and I've left it that way because a page's featured image isn't where people look for provenance. If you care about page weight, the same reasoning applies - I wrote up how much image size matters for Largest Contentful Paint.
The banner that started all this was for my article on the sqlcmd "scripting variable not defined" error - a reminder that the content of a file and what tools read from it are not always the same thing.
FAQ
What does 'Content credentials label added' mean on LinkedIn?
It means the image or video you uploaded carries a signed C2PA manifest - provenance data embedded by the tool that made it, such as ChatGPT, Adobe Firefly or some cameras. LinkedIn reads it and shows a CR (C2PA) icon on the post that viewers can click for details.
What is the CR icon on LinkedIn posts?
It is LinkedIn's Content Credentials icon, which LinkedIn's help centre calls the C2PA icon. Clicking it can show whether AI was used, the app or device used, who created and signed the content, and when it was signed.
How do I remove the CR label from a LinkedIn post?
There is no setting to switch it off. The label comes from metadata in the file, so it only disappears if you upload a version without the C2PA manifest - for example after re-saving or converting the image in a tool that doesn't keep it, or by using a screenshot. In a test, the same pixels without the manifest got no label.
Why does Facebook say 'AI content' or 'AI info' on my post when I turned the AI label off?
The toggle is for labelling content yourself. Facebook also adds the label automatically when the file contains a signal from the tool that created it, such as C2PA metadata saying it is AI-generated. In a test, a ChatGPT image was labelled 'AI content' with the composer's AI label set to off.
Do ChatGPT images contain C2PA metadata?
Yes. A ChatGPT image tested in October 2026 had a 23,654-byte caBX chunk holding a C2PA manifest signed by OpenAI, recording that it was created by ChatGPT (gpt-image) as trainedAlgorithmicMedia, plus a c2pa.watermarked.unbound action indicating an invisible watermark.
Does removing C2PA metadata remove the AI watermark?
No. The metadata and the watermark are separate. The C2PA manifest is in the file's metadata; the invisible watermark is in the pixels. Re-saving the image removes the first but not the second.
How can I check if an image has Content Credentials?
Upload it to the Content Authenticity Initiative's Verify tool at contentcredentials.org/verify, or read it in code with the c2pa-python library. A file without a manifest returns ManifestNotFound.
Originally published on knowledgemarkg.com.
Top comments (0)