Skip to content

Commit fd1a704

Browse files
authored
Merge pull request #198 from contentauth/add-trustmark
Add TrustMark to doc site
2 parents d7a98d0 + db5c19e commit fd1a704

File tree

7 files changed

+154
-0
lines changed

7 files changed

+154
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
/docs/rust-sdk/docs/*.md
2727
/docs/**/readme.md
2828
/static/sb-alg-list.json
29+
/docs/trustmark/*.md
2930

3031
# Misc
3132
.DS_Store

docs/trustmark-faq.mdx

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
id: tm-faq
3+
title: TrustMark FAQ
4+
hide_table_of_contents: true
5+
---
6+
7+
- [General Usage and Adoption](#general-usage-and-adoption)
8+
- [What is TrustMark?](#what-is-trustmark)
9+
- [How does TrustMark compare to traditional visible watermarks?](#how-does-trustmark-compare-to-traditional-visible-watermarks)
10+
- [What is this software?](#what-is-this-software)
11+
- [Can I integrate TrustMark into my own application?](#can-i-integrate-trustmark-into-my-own-application)
12+
- [Can I use TrustMark in commercial projects?](#can-i-use-trustmark-in-commercial-projects)
13+
- [Why would I want to make an image identifiable using TrustMark?](#why-would-i-want-to-make-an-image-identifiable-using-trustmark)
14+
- [Can TrustMark be embedded in any images, including those generated by AI?](#can-trustmark-be-embedded-in-any-images-including-those-generated-by-ai)
15+
- [How does TrustMark align with provenance standards such as the C2PA?](#how-does-trustmark-align-with-provenance-standards-such-as-the-c2pa)
16+
- [Does TrustMark alter metadata or EXIF information?](#does-trustmark-alter-metadata-or-exif-information)
17+
- [Technical Details](#technical-details)
18+
- [Does TrustMark support my image format?](#does-trustmark-support-my-image-format)
19+
- [Does TrustMark work on grayscale images?](#does-trustmark-work-on-grayscale-images)
20+
- [How fast is TrustMark?](#how-fast-is-trustmark)
21+
- [What are the image resolution limits of TrustMark?](#what-are-the-image-resolution-limits-of-trustmark)
22+
- [How robust is TrustMark?](#how-robust-is-trustmark)
23+
- [Can I print TrustMark?](#can-i-print-trustmark)
24+
- [Can TrustMark be embedded in vector graphics?](#can-trustmark-be-embedded-in-vector-graphics)
25+
- [What dataset was TrustMark trained on?](#what-dataset-was-trustmark-trained-on)
26+
- [What happens if I apply TrustMark to an already watermarked image?](#what-happens-if-i-apply-trustmark-to-an-already-watermarked-image)
27+
- [How does TrustMark compare to State of the Art Watermarking approaches](#how-does-trustmark-compare-to-state-of-the-art-watermarking-approaches)
28+
- [Can TrustMark co-exist with other watermarks?](#can-trustmark-co-exist-with-other-watermarks)
29+
- [Configuration](#configuration)
30+
- [Which variant of TrustMark should I use?](#which-variant-of-trustmark-should-i-use)
31+
- [How can I trade off between robustness and capacity?](#how-can-i-trade-off-between-robustness-and-capacity)
32+
- [How can I trade off between robustness and quality?](#how-can-i-trade-off-between-robustness-and-quality)
33+
- [Can I control where the watermark is embedded in an image?](#can-i-control-where-the-watermark-is-embedded-in-an-image)
34+
- [Does TrustMark affect the file size of an image?](#does-trustmark-affect-the-file-size-of-an-image)
35+
- [Security and Privacy](#security-and-privacy)
36+
- [Can TrustMark be removed?](#can-trustmark-be-removed)
37+
- [Can TrustMark be used to track users or infringe on privacy?](#can-trustmark-be-used-to-track-users-or-infringe-on-privacy)
38+
- [Can TrustMark be used to secretly mark images without user consent?](#can-trustmark-be-used-to-secretly-mark-images-without-user-consent)
39+
- [Is TrustMark steganographic watermarking?](#is-trustmark-steganographic-watermarking)
40+
- [Why release removal code?](#why-release-removal-code)
41+
- [Does TrustMark interfere with other AI or image processing tasks like object detection?](#does-trustmark-interfere-with-other-ai-or-image-processing-tasks-like-object-detection)
42+
- [Can TrustMark be used to detect image manipulation?](#can-trustmark-be-used-to-detect-image-manipulation)
43+
- [Can TrustMark be transferred from one image to another?](#can-trustmark-be-transferred-from-one-image-to-another)
44+
- [What stops someone from spoofing a TrustMark?](#what-stops-someone-from-spoofing-a-trustmark)
45+
- [Future Developments](#future-developments)
46+
- [Will TrustMark support other media types like video?](#will-trustmark-support-other-media-types-like-video)
47+
- [Is TrustMark compatible with blockchain technology?](#is-trustmark-compatible-with-blockchain-technology)
48+
- [Can TrustMark be used for NFT provenance?](#can-trustmark-be-used-for-nft-provenance)
49+
50+
import Faq from './trustmark/faq.md';
51+
52+
<Faq name="faq" />

docs/trustmark-intro.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
id: trustmark-intro
3+
title: TrustMark watermarking
4+
---
5+
6+
TrustMark is an open-source universal watermarking system for images that:
7+
8+
- Can encode, decode, and remove watermarks from images.
9+
- Works with arbitrary resolution images.
10+
- Has implementations in both Python (using PyTorch) and JavaScript (using ONNX).
11+
12+
:::info
13+
For full technical details and help getting started with TrustMark, see [TrustMark - Overview](trustmark/readme.md).
14+
:::
15+
16+
## Variants
17+
18+
TrustMark has three primary model variants, each with different characteristics.
19+
20+
Images encoded with one variant cannot be decoded with another variant, so you need to stick with the same variant throughout your pipeline.
21+
22+
- **Variant Q (Default)** Use in most cases, where you want a good balance between robustness and imperceptibility. PSNR is 43-45 dB.
23+
- **Variant P** - Use when image quality is the top priority. PSNR is 48-50 dB.
24+
- **Variant C (Compact)** - Use if you need to minimize model size and can live with slightly lower visual quality. PSNR is 38-39 dB.
25+
26+
The general recommendation is to use either:
27+
- Variant Q for most use cases.
28+
- Variant P when visual quality is paramount.
29+
30+
## About PSNR
31+
32+
PSNR (Peak Signal-to-Noise Ratio) is a measure of image quality when comparing an original image to the watermarked image. PSNR is measured in decibels (dB), with higher values indicating better quality:
33+
- Values around 45+ dB typically indicate very good quality.
34+
- Values around 40 dB indicate acceptable quality.
35+
- Values below 30 dB indicate poor quality, unacceptable for most uses.
36+

docs/trustmark/.gitkeep

Whitespace-only changes.

scripts/fetch-readme.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,32 @@ const readmes = [
194194
repo: 'c2pa-org/softbinding-algorithm-list',
195195
path: 'softbinding-algorithm-list.json',
196196
},
197+
// TrustMark
198+
{
199+
dest: resolve(__dirname, '../docs/trustmark/readme.md'),
200+
repo: 'adobe/trustmark',
201+
path: 'README.md',
202+
},
203+
{
204+
dest: resolve(__dirname, '../docs/trustmark/config.md'),
205+
repo: 'adobe/trustmark',
206+
path: 'CONFIG.md',
207+
},
208+
{
209+
dest: resolve(__dirname, '../docs/trustmark/faq.md'),
210+
repo: 'adobe/trustmark',
211+
path: 'FAQ.md',
212+
},
213+
{
214+
dest: resolve(__dirname, '../docs/trustmark/python-readme.md'),
215+
repo: 'adobe/trustmark',
216+
path: 'python/README.md',
217+
},
218+
{
219+
dest: resolve(__dirname, '../docs/trustmark/js-readme.md'),
220+
repo: 'adobe/trustmark',
221+
path: 'js/README.md',
222+
},
197223
];
198224

199225
function resolveMarkdownLinks(linkBase, content) {

sidebars.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,39 @@ const sidebars = {
269269
label: 'Watermarking and fingerprinting',
270270
id: 'sb-algs',
271271
},
272+
{
273+
type: 'category',
274+
label: 'TrustMark watermarking',
275+
link: { type: 'doc', id: 'trustmark-intro' },
276+
collapsed: true,
277+
items: [
278+
{
279+
type: 'doc',
280+
id: 'trustmark/readme',
281+
label: 'Overview',
282+
},
283+
{
284+
type: 'doc',
285+
id: 'trustmark/config',
286+
label: 'Configuration',
287+
},
288+
{
289+
type: 'doc',
290+
id: 'tm-faq',
291+
label: 'FAQ',
292+
},
293+
{
294+
type: 'doc',
295+
id: 'trustmark/js-readme',
296+
label: 'JavaScript example',
297+
},
298+
{
299+
type: 'link',
300+
label: 'GitHub',
301+
href: 'https://github.com/adobe/trustmark/',
302+
},
303+
],
304+
},
272305
],
273306
},
274307
{

src/css/custom.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,3 +418,9 @@ body:not(.is-scrolling) .navbar {
418418
.trust-table th:nth-child(1) {
419419
width: 170px;
420420
}
421+
422+
/* For content to be displayed only in GitHub. Typically this will be used in imported markdown files. */
423+
424+
.github-only {
425+
display: none;
426+
}

0 commit comments

Comments
 (0)