Freedam

Content Credentials

Content Credentials are a tamper-evident record of where a file comes from and what happened to it, embedded in the file itself. They follow the open C2PA standard and are written by a growing list of cameras (Leica, Sony, Canon, Google Pixel), creative tools (Photoshop, Lightroom, Firefly) and AI image generators (OpenAI, Google Imagen). Each record, called a manifest, is cryptographically signed, so any change to the pixels after signing can be detected.

Freedam reads and verifies these credentials the moment a file is uploaded, keeps the result with the asset, and surfaces it wherever you look at your library: the asset page, the gallery cards and the filters.

What happens on upload

Every uploaded original is checked for an embedded manifest. When one is found, Freedam verifies three things:

  1. Integrity: the signature is valid and the file still matches the hashes recorded in the manifest.
  2. Trust: the signing certificate chains to the official C2PA trust list, the same list the industry verification tools use.
  3. Origin: the recorded actions declare how the content was produced, for example a camera capture or an AI model.

The outcome is stored as a status plus two origin markers. Files without a manifest are marked as having no credentials. The check never delays or blocks an upload: if a file cannot be verified, it is ingested as usual and can be re-checked later.

Statuses

Status Meaning
Verified The signature and the content match, and the signer is on the C2PA trust list. This is the strongest guarantee.
Signed, unverified signer The signature and the content match, but the signer is not on the trust list. Typical for tools that sign with their own or a test certificate. The history is intact, but the identity of the signer is not vouched for.
Invalid The credentials do not match the file. The file was edited after signing, or the manifest is broken. Treat the recorded history as unreliable.
No credentials The file carries no manifest. Most files in a typical library fall here today.

AI and camera markers

Two markers are derived from the recorded history, across every manifest in the file (an export from Photoshop keeps the camera's original manifest as an ingredient, so the camera origin survives the edit):

  • AI-generated content is set when any action or ingredient declares an AI source type (trainedAlgorithmicMedia or compositeWithTrainedAlgorithmicMedia). It is set even when the manifest is invalid, so a suspicious file never loses its AI marker.
  • Captured by a camera is set when the history starts with a camera capture and the credentials are Verified. A self-signed manifest can claim anything, so this positive marker requires a trusted signer.

Reading the credentials on an asset

Open an asset that carries credentials. A Content Credentials section appears in the details panel, below the EXIF section.

The Content Credentials section on an AI-generated asset: signed status, AI-generated marker, signer, producing software and the recorded history

The section shows:

  • Status pill and markers: click any of them to open the gallery filtered on that value.
  • Signed by and Signed on: the certificate issuer and the signing time.
  • Produced with: the software that wrote the active manifest.
  • Verified on: when Freedam last checked the file, with the verifier version and the number of manifests in the store.
  • History: every recorded action (created, opened, edited, cropped, colour adjusted, resized, and so on), with the tool that performed it and, when declared, the source type.
  • Ingredients: the source files that were combined into this one, whether each carried its own signed manifest, and what produced them.

When the credentials are invalid, the section also lists the validation notes from the verifier so you can see what failed, for example a content hash mismatch after an edit.

The Content Credentials section on a file that was edited after signing: invalid status and the validation note explaining the hash mismatch

Gallery cards carry a small pin in the top-right corner when there is something worth knowing at a glance: a green shield for Verified credentials, a red shield for Invalid credentials, and an amber AI pill for AI-generated content. Files that are signed by an unverified signer show no pin; open the asset to see the details.

Gallery cards with Content Credentials pins: an AI-generated file with the amber AI pill and an edited file with the red invalid shield

Filtering by credentials

The advanced filters gain a Content Credentials group under asset properties with three fields:

  • Content Credentials: the status (Verified, Signed with an unverified signer, Invalid, No credentials).
  • AI-generated (Content Credentials): yes or no.
  • Camera-captured (Content Credentials): yes or no.

Combine them like any other rule. Typical uses are excluding AI-generated files from a campaign selection, keeping only verified camera captures for editorial use, or finding files whose credentials broke after an edit.

The gallery filtered with the AI-generated (Content Credentials) rule: the rule in the filter bar and the single matching asset

The status and marker pills on the asset page open the same filters with one click, and the conversational search understands requests such as "AI-generated images" or "photos with verified credentials".

Good to know

  • Verification runs on the original file. Downloading the original keeps the credentials intact; resized or converted downloads are new files and do not carry them.
  • "Signed, unverified signer" is not a warning about the content. It only means the signer's certificate is not on the C2PA trust list, which is common for test certificates and tools that are not part of the C2PA conformance program.
  • The trust list is refreshed automatically. Your administrator can re-run verification across the library after a refresh, or for files uploaded before this feature was enabled.
  • Files in formats the verifier cannot read (office documents, archives) are marked as having no credentials.

show.relatedDocs.heading

show.relatedDocs.subheading