Skip to content

Watermarks

llms.txtAsk agent

An invisible watermark is a signal embedded in the pixels or samples of the published file. It is meant to survive edits that strip a C2PA manifest, such as re-encoding, so that verification can search your account’s watermark bindings for the original; see Lookup and recovery. A recovered match is reported as recovery, never as cryptographic validity: the signed manifest is what establishes validity.

Only the decoded media types take a watermark: the embedded lane’s images, audio and video. Structural and sidecar formats are signed without decoding and carry none; see Formats.

A watermark runs only in a recipe that includes one: “Sign + watermark” (rcp_system_watermark_then_sign_unfingerprinted), “Sign + watermark + fingerprint” (rcp_system_watermark_then_sign) or rcp_system_watermark_only. See Recipes for choosing between them.

  • Omit watermark_algorithm and the job uses the default for the asset’s media type.
  • Name the recommended algorithm to opt in to the one that ranks best in our watermark benchmark. Where it is already the default, naming it runs the same algorithm as omitting the field.
  • Any other value must be one listed for that media type in GET /v1/capabilities.
  • A job keeps the algorithm it was admitted with. A later change of default never reaches it.

The request rules and error codes are in Sign.

watermark_strength narrows the qualified strength ladder of the algorithm the job runs:

  • subtle embeds at the lowest qualified strength only, and fails rather than embedding more strongly if the watermark would not be detected there.
  • balanced is the default: exactly what omitting the field does.
  • robust allows the full qualified ladder.

No level uses a strength outside the algorithm’s qualified ladder. The exact strengths per level are in the table below. See Sign for the request rules.

Some algorithms are on the C2PA soft-binding algorithm list. When one of them is embedded, the manifest records the watermark as a soft binding, so a C2PA validator can use it to find the manifest again. The others are not written as a soft binding.

The tables below are generated from the capability snapshot the API is built with. A deployment can enable fewer, so GET /v1/capabilities stays the authority at run time.

Modality Default (field omitted) Recommended Selectable
audio audioseal-mm02-4 audioseal-mm02-4 audioseal, audioseal-mm02-4
image pixelseal pixelseal pixelseal, trustmark-b, trustmark-c, trustmark-p, trustmark-q, videoseal-image
video pixelseal-video pixelseal-video pixelseal-video, videoseal
Modality Why the default is what it is
audio benchmark recommendation
image benchmark recommendation
video benchmark recommendation
Media type Modality Default Selectable
audio/mpeg audio audioseal-mm02-4 audioseal, audioseal-mm02-4
audio/wav audio audioseal-mm02-4 audioseal, audioseal-mm02-4
image/avif image pixelseal pixelseal, trustmark-b, trustmark-c, trustmark-p, trustmark-q, videoseal-image
image/jpeg image pixelseal pixelseal, trustmark-b, trustmark-c, trustmark-p, trustmark-q, videoseal-image
image/png image pixelseal pixelseal, trustmark-b, trustmark-c, trustmark-p, trustmark-q, videoseal-image
image/tiff image pixelseal pixelseal, trustmark-b, trustmark-c, trustmark-p, trustmark-q, videoseal-image
image/webp image pixelseal pixelseal, trustmark-b, trustmark-c, trustmark-p, trustmark-q, videoseal-image
video/mp4 video pixelseal-video pixelseal-video, videoseal
Algorithm Name Modality C2PA soft-binding list
audioseal Meta AudioSeal (streaming) audio Not registered
audioseal-mm02-4 Meta AudioSeal (streaming, quality-first) audio Not registered
pixelseal Meta PixelSeal image Not registered
pixelseal-video Meta PixelSeal (video) video Not registered
trustmark-b Adobe TrustMark B image Not registered
trustmark-c Adobe TrustMark C image Registered
trustmark-p Adobe TrustMark P image Registered
trustmark-q Adobe TrustMark Q image Registered
videoseal Meta VideoSeal 1.0 video Not registered
videoseal-image Meta VideoSeal 1.0 (image mode) image Not registered

The qualified strengths each watermark_strength level allows, per algorithm:

Algorithm subtle balanced robust
audioseal 0.5 0.5, 1.0, 1.1 0.5, 1.0, 1.1
audioseal-mm02-4 0.5 0.5, 1.0 0.5, 1.0
pixelseal 0.15 0.15, 0.2, 0.25 0.15, 0.2, 0.25
pixelseal-video 0.2 0.2, 0.4, 0.6 0.2, 0.4, 0.6
trustmark-b 1.0 1.0 1.0
trustmark-c 1.0 1.0 1.0
trustmark-p 0.8 0.8 0.8
trustmark-q 1.2 1.2, 1.3, 1.4, 1.5 1.2, 1.3, 1.4, 1.5
videoseal 0.4 0.4, 0.7, 1.1 0.4, 0.7, 1.1
videoseal-image 0.2 0.2 0.2