diff --git a/docs/community.md b/docs/community.md index 7935d98..02cbec3 100644 --- a/docs/community.md +++ b/docs/community.md @@ -29,7 +29,7 @@ Participants are required to follow the [Adobe Code of Conduct](https://github.c ### Verify -The code for the [C2PA Verify website](https://verify.contentauthenticity.org/) is open source. For general information on using it, see [Using the Verify tool](getting-started/verify.mdx). +The code for the [C2PA Verify website](https://verify.contentauthenticity.org/) is open source. However, it currently uses the deprecated [Legacy JavaScript library](https://github.com/contentauth/c2pa-js-legacy). ### Related projects diff --git a/docs/getting-started/aca-inspect.mdx b/docs/getting-started/aca-inspect.mdx new file mode 100644 index 0000000..4b6709d --- /dev/null +++ b/docs/getting-started/aca-inspect.mdx @@ -0,0 +1,388 @@ +--- +id: inspect +title: Using the inspect tool on Adobe Content Authenticity (Beta) +--- + +import aca_inspect from '@site/static/img/aca-inspect.png'; +import inspect_actions from '@site/static/img/inspect_actions.png'; +import MarkdownCell from '@site/src/components/MarkdownCell'; + +The [**Inspect tool on Adobe Content Authenticity (Beta)**](https://verify.contentauthenticity.org) (often referred to as "ACA Inspect" or simply "Inspect") is a [C2PA conforming validator product](../conformance.mdx#validator-products) that validates and displays Content Credentials for various asset types. + + + +For more information, see [Inspect Content Credentials](https://helpx.adobe.com/creative-cloud/apps/adobe-content-authenticity/inspect/inspect-tool.html) on Adobe HelpX. + +## How to use Inspect + +You can use Inspect to view Content Credentials for an asset in two ways: + +- [Upload an asset file](#uploading-an-asset) from your local computer. +- [Use an asset URL](#using-an-asset-url). + +Supported asset file types include: + +- **Image**: AVIF, DNG, GIF, HEIC, HEIF, JPEG, PNG, SVG, TIFF, and WebP. +- **Video and audio**: AVI, M4A, MOV, MP3, MP4, and WAV. +- **Document**: PDF. + +:::tip +When you first load the site and no asset is displayed on the page, Inspect shows the complete current list of supported file types. +::: + +### Uploading an asset + +Click **Select a file from your device** then use the native picker or drag and drop a file to upload it and display information from the associated Content Credentials (if any) such as the author, the tools used to create the asset, and so on. + +### Using an asset URL + +You can also display Content Credentials for an asset with a publicly-visible URL by using a URL with the following format: + +``` +https://inspect.cr?source= +``` + +where `` is the URL of the asset. + +For example: https://inspect.cr?source=https://contentauth.github.io/example-assets/images/car-es-Ps-Cr.jpg + +:::note +To use Inspect on an asset URL, the URL must not require any authentication and the hosting server must allow cross-origin resource sharing (CORS) in the `Access-Control-Allow-Origin` HTTP response header. +::: + +## Example assets + +The [example-assets](https://contentauth.github.io/example-assets/) repository contains some sample assets that demonstrate Content Credentials, including links to view the corresponding manifest reports generated by [C2PA Tool](../c2patool/readme.md) and to view the Content Credentials using Inspect. + +## Information displayed + +Once you've uploaded an asset or entered an asset URL, if the asset: + +- **Does not** have an associated manifest store, Inspect displays the message **No Content Credential**. +- **Does** have an associated manifest store, Inspect displays information from it in the three vertical panels, for example as shown below. + +import verify_sections from '@site/static/img/inspect-sections.png'; + + + + + + + + + + + + + + + +This section shows a thumbnail image and the asset name from the `title` property in the active manifest, which may not be the same as the file name. If there's no `title` property, it says "Untitled asset." + +Also shows who signed the Content Credentials ("Recorded by"). + +Adobe products can save manifest stores in the [Adobe Content Credentials Cloud](index.mdx#storing-a-manifest-in-the-cloud). Click **Search for possible matches** to search there for content similar to the asset's ingredients. + + + + +Shows all the asset's ingredients in a tree-like layout. +- Click on an ingredient thumbnail to inspect its Content Credentials in the right panel. +- Click **Compare** to compare ingredients either side-by-side or using a slider. + +Zoom in and out using the mouse wheel or trackpad and pan by dragging. + +NOTE: The example above shows only one ingredient. + + + + +Shows information from the asset's manifest store, as described below: + +- [Title and signing information](#title-and-signing-information) +- [Contributor details](#contributor-details) +- [Content details](#content-details) + + + + +
+ Left panel ↑{' '} + + Center panel ↑ + + Right panel ↑ +
+ +### Title and signing information + +The top of the right panel displays a thumbnail of the image along with the same title and signing information as shown in the left panel. + +If the Content Credential was signed by a certificate that is NOT on the [C2PA trust list](conformance.mdx#c2pa-trust-lists), such as one of the SDK's [test certificates](signing/test-certs.md), then Inspect displays "Unrecognized" at the top of this section with this notice: + +import verify_unknown_source from '@site/static/img/unknown-source.png'; + + + +However, if the Content Credential was signed by a certificate on the [C2PA trust list list](conformance.mdx#c2pa-trust-lists), then this section displays the name of the issuer of the claim signature from the `signature_info.issuer` property in the active manifest, as shown in the example snippet below. + +:::note +This section shows the organization name only if the signing certificate includes the "O" or [Organization Name attribute](https://www.alvestrand.no/objectid/2.5.4.10.html) (OID value 2.5.4.10) in the certificate's distinguished name information. +::: + +For signers on the C2PA trust list, this section also displays the time of the claim signature from the `signature_info.time` property in the active manifest, as shown in the example snippet below. The date is converted from UTC to the local time zone. + +```json +"signature_info": { + "alg": "Ps256", + "issuer": "Adobe Inc.", + "common_name": "Adobe C2PA", + "cert_serial_number": "419323736054358557205556576293173262079519360989", + "time": "2025-10-23T19:22:19+00:00" +}, +``` + +If the issuer string is too long, then the date might be truncated or not shown at all. + + + +### Contributor details + +For assets edited and signed with Adobe tools, if the creator has configured [connected social media accounts](https://helpx.adobe.com/creative-cloud/apps/adobe-content-authenticity/connect-accounts.html) such as Instagram, LinkedIn, and Behance, then this section displays that information with links to the creator's profile on the social media platform. + +### Content details + +The **Content details** section displays information about the asset, divided into the following subsections: + +- [App or device used](#app-or-device-used) +- [Recorded by](#recorded-by) +- [Actions](#actions) +- [Ingredients](#ingredients) + +Additionally, if the image was created with a generative AI tool, an **AI-generated** note is displayed at the top of the section. + +#### App or device used + +The value shown for **App or device used** is derived from the `claim_generator` and `claim_generator_info` properties in the active manifest. + +#### Recorded by + +The organization, device, or individual that signed the Content Credentials, based on the `signature_info` field in the manifest, for example: + +```json +"signature_info": { + "alg": "Ps256", + "issuer": "Adobe Inc.", + "common_name": "Adobe C2PA", + "cert_serial_number": "419323736054358557205556576293173262079519360989", + "time": "2025-10-23T19:22:19+00:00" +}, +``` + +#### Actions + + + +The **Actions** subsection lists [actions](https://opensource.contentauthenticity.org/docs/manifest/assertions-actions#actions) in the active manifest, for example, as shown at right. + +The corresponding `actions` array in the asset's manifest is shown below. + +
+ +
+Show manifest code + +```json +{ + "label": "c2pa.actions.v2", + "data": { + "actions": [ + { + "action": "c2pa.opened", + "parameters": { + "description": "Opened a pre-existing file", + "com.adobe.tool": "open", + "com.adobe.icon": "https://cai-assertions.adobe.com/icons/import-dark.svg", + "instanceId": "xmp:iid:73f1d577-2d17-46ec-908a-09f2380df77c" + } + }, + { + "action": "c2pa.cropped", + "parameters": { + "com.adobe.tool": "crop", + "com.adobe.icon": "https://cai-assertions.adobe.com/icons/crop-dark.svg", + "description": "Used cropping tools, reducing or expanding visible content area" + } + }, + { + "action": "c2pa.resized", + "parameters": { + "com.adobe.tool": "image_size", + "description": "Changed dimensions or file size", + "com.adobe.icon": "https://cai-assertions.adobe.com/icons/resize-dark.svg" + } + } + ], + ... + } +} +``` + +
+ +#### Ingredients + +The **Ingredients** section shows the resources used to create the asset, derived from the `ingredients` array in the active manifest. A thumbnail image is shown for each ingredient, if applicable. If an ingredient itself had Content Credentials, the "cr" icon is shown next to the thumbnail. + + diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 2329f19..419d6c3 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -50,12 +50,12 @@ An embedded application can use the Rust FFI (foreign function interface) to cal For more information about the C2PA and CAI, see the following websites: -| Website | Organization | Purpose / Description | -| ----------------------------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------- | -| [c2pa.org](https://c2pa.org/) | C2PA / Linux Foundation | Standards body
Technical specifications and guidance documents | -| [contentcredentials.org](https://contentcredentials.org/) | C2PA | Consumer-friendly site | -| [Verify](https://verify.contentauthenticity.org) | C2PA | Open-source web tool to display Content Credentials.
For more information, see [Using the Verify tool](verify) | -| [contentauthenticity.org](https://contentauthenticity.org/) | CAI | Industry consortium
Open-source software and community resources | +| Website | Organization | Purpose / Description | +| ----------------------------------------------------------- | ----------------------- | -------------------------------------------------------------------- | +| [c2pa.org](https://c2pa.org/) | C2PA / Linux Foundation | Standards body
Technical specifications and guidance documents | +| [contentcredentials.org](https://contentcredentials.org/) | C2PA | Consumer-friendly site | +| [Verify](https://verify.contentauthenticity.org) | C2PA | Open-source web tool to display Content Credentials. | +| [contentauthenticity.org](https://contentauthenticity.org/) | CAI | Industry consortium
Open-source software and community resources | ### C2PA diff --git a/sidebars.js b/sidebars.js index bed2e8b..6976097 100644 --- a/sidebars.js +++ b/sidebars.js @@ -17,11 +17,8 @@ const sidebars = { }, { type: 'doc', - id: 'getting-started/verify', - }, - { - type: 'doc', - id: 'getting-started/verify-known-cert-list', + label: 'Using ACA Inspect', + id: 'getting-started/inspect', }, ], }, @@ -392,10 +389,18 @@ const sidebars = { ], }, { - type: 'doc', + type: 'category', label: 'C2PA conformance program', - id: 'conformance', + link: { type: 'doc', id: 'conformance' }, + collapsed: true, + items: [ + { + type: 'doc', + id: 'getting-started/verify-known-cert-list', + }, + ], }, + { type: 'category', label: 'Durable Content Credentials', diff --git a/src/components/MarkdownCell.jsx b/src/components/MarkdownCell.jsx new file mode 100644 index 0000000..62e9378 --- /dev/null +++ b/src/components/MarkdownCell.jsx @@ -0,0 +1,23 @@ +import React from 'react'; + +export default function MarkdownCell({ + children, + className, + style, + valign, + width, + bg, +}) { + const tdStyle = { + ...(style || {}), + ...(valign ? { verticalAlign: valign } : {}), + ...(width ? { width } : {}), + ...(bg ? { backgroundColor: bg } : {}), + }; + + return ( + + {children} + + ); +} diff --git a/static/img/aca-inspect.png b/static/img/aca-inspect.png new file mode 100644 index 0000000..8575888 Binary files /dev/null and b/static/img/aca-inspect.png differ diff --git a/static/img/inspect-sections.png b/static/img/inspect-sections.png new file mode 100644 index 0000000..7119ef6 Binary files /dev/null and b/static/img/inspect-sections.png differ diff --git a/static/img/inspect_actions.png b/static/img/inspect_actions.png new file mode 100644 index 0000000..a0e1989 Binary files /dev/null and b/static/img/inspect_actions.png differ diff --git a/static/img/unknown-source.png b/static/img/unknown-source.png new file mode 100644 index 0000000..bec6486 Binary files /dev/null and b/static/img/unknown-source.png differ