Watermarks
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.
Choosing a watermark
Section titled “Choosing a watermark”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_algorithmand 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.
Strength
Section titled “Strength”watermark_strength narrows the qualified strength ladder of the algorithm the job runs:
subtleembeds at the lowest qualified strength only, and fails rather than embedding more strongly if the watermark would not be detected there.balancedis the default: exactly what omitting the field does.robustallows 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.
Soft binding
Section titled “Soft binding”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.
Catalog
Section titled “Catalog”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.
Defaults
Section titled “Defaults”| 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 types that take a watermark
Section titled “Media types that take a watermark”| 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 |
Algorithms
Section titled “Algorithms”| 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 |
Strength levels
Section titled “Strength levels”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 |
