Use cases

Predefined workflows for common industries and scenarios. Each use case includes the required assertions, metadata, and complete embed + verify examples.

Newsroom

Wire photo verification for news agencies. Every assertion must be present and verifiable before publication.

Template newsroom
Assertions All 9 checks: signature, timestamp, author, edit history, AI declaration, GPS, copyright, data mining, pixel hash
Required metadata C2PA, EXIF, IPTC, actions, and signature chain

Python example

from jpegtrust import create_profile, save_profile, embed_image, verify_image

profile = create_profile(template="newsroom", name="AP Wire Photo Policy")
save_profile(profile, "newsroom.yml")

embed_image("raw_photo.jpg", "camera_metadata.json", "wire_photo.jpg")

report = verify_image("wire_photo.jpg", "newsroom.yml")
# Expect: status="pass", all 9 checks passed

CLI example

jpegtrust profile create --template newsroom -o newsroom.yml
jpegtrust embed raw_photo.jpg camera_metadata.json -o wire_photo.jpg
jpegtrust verify wire_photo.jpg newsroom.yml

Insurance

Claims photo validation. Verify the photo was taken at the claimed time and location by an identified person.

Template insurance
Assertions 6 checks: signature, timestamp, author, edit history, GPS location, pixel hash
Required metadata EXIF with GPS coordinates, timestamp, and camera info

Python example

from jpegtrust import create_profile, save_profile, embed_image, verify_image

profile = create_profile(template="insurance", name="Claims Photo Policy")
save_profile(profile, "insurance.yml")

embed_image("claim_photo.jpg", "claim_metadata.json", "signed_claim.jpg")

report = verify_image("signed_claim.jpg", "insurance.yml")
if "gps_location" in report.failed:
    print("WARNING: No GPS data -- cannot verify location")

CLI example

jpegtrust profile create --template insurance -o insurance.yml
jpegtrust embed claim_photo.jpg claim_metadata.json -o signed_claim.jpg
jpegtrust verify signed_claim.jpg insurance.yml

AI Labelling

Check whether an image is labelled as AI-generated or AI-modified via IPTC digital source type metadata.

Template ai-labelling
Assertions 7 checks: signature, AI declaration, digital source type, AI labelling, edit history, pixel hash, data mining
Required metadata C2PA manifest, iptc.digitalSourceType and a cawg.training-mining assertion (cawg.ai_training or cawg.ai_inference entries)

Python example

from jpegtrust import create_profile, save_profile, embed_image, verify_image

profile = create_profile(template="ai-labelling", name="AI Labelling Policy")
save_profile(profile, "ai_labelling.yml")

embed_image("ai_artwork.jpg", "ai_metadata.json", "signed_ai.jpg",
            digital_source_type="trainedAlgorithmicMedia")

report = verify_image("signed_ai.jpg", "ai_labelling.yml")
print(f"AI label: {report.ai_label}")
if "ai_declaration" in report.failed:
    print("WARNING: No AI usage declaration found")

CLI example

jpegtrust profile create --template ai-labelling -o ai_labelling.yml
jpegtrust embed ai_artwork.jpg ai_metadata.json -o signed_ai.jpg --digital-source-type trainedAlgorithmicMedia
jpegtrust verify signed_ai.jpg ai_labelling.yml

Creator Authenticity

Prove authorship and assert rights. For artists, photographers, and content creators who need to establish provenance.

Template creator
Assertions 5 checks: signature, author identity, copyright, AI declaration, pixel hash
Required metadata Author identity (stds.schema-org.CreativeWork), copyright/IPTC data

Python example

from jpegtrust import create_profile, save_profile, embed_image, verify_image

profile = create_profile(template="creator", name="Artist Authenticity")
save_profile(profile, "creator.yml")

embed_image("my_artwork.jpg", "creator_metadata.json", "signed_artwork.jpg")

report = verify_image("signed_artwork.jpg", "creator.yml")
print(f"Authenticity: {report.verdict}")

CLI example

jpegtrust profile create --template creator -o creator.yml
jpegtrust embed my_artwork.jpg creator_metadata.json -o signed_artwork.jpg
jpegtrust verify signed_artwork.jpg creator.yml

Custom Profile

Build a profile with exactly the checks your system needs. Select individual checks by ID.

Template custom
Assertions You choose: any combination of the 9 available checks
Required metadata Depends on selected checks

Python example

from jpegtrust import create_profile, save_profile, list_checks

# See available checks
for check in list_checks():
    print(f"  {check.id}: {check.label}")

# Pick exactly what you need
profile = create_profile(
    check_ids=["signature_chain", "pixel_hash", "copyright"],
    name="My Custom Policy",
    issuer="My Organization",
)
save_profile(profile, "custom.yml")

CLI example

# List available checks
jpegtrust profile list-checks

# Create with specific checks
jpegtrust profile create --checks signature_chain,pixel_hash,copyright -o custom.yml