Create a Trust Profile
newDefine what "trusted" means for your use case. Pick a template, toggle the checks that matter, and export a config file you can share.
Start from a template
Required & optional checks
Signature chain
Valid cryptographic signature anchored to a trust root
Capture timestamp
UTC time set by camera at the moment of exposure
Author identity
Name and credential of the person who made the image
Edit history
Complete chain of signed actions from capture to publication
AI declaration
Explicit statement about whether AI was used
GPS / location
Geolocation embedded or explicitly withheld
Copyright / licence
Rights declaration and usage terms
Data mining declaration
Data mining usage permissions
Pixel hash binding
SHA-256 of pixel data matches signed hash
Live preview
YAML# My Trust Profile
# Generated by JPEG Trust Profile Builder
---
metadata:
name: "My Trust Profile"
issuer: "JPEG Trust Profile Builder"
date: "2026-11-08T12:51:54.143Z"
version: "1.0.0"
language: en
---
# Required checks
- id: required_checks_info
title: "Required checks"
report_text: "Required checks for My Trust Profile"
- id: signature_chain
description: "Valid cryptographic signature anchored to a trust root"
expression: >
manifests[0].status.signature == "claimSignature.validated" || manifests[0].'claim.v2'.signature_status == "claimSignature.validated" || (manifests[0] == null && (declaration.'claim.v2'.signature_status == "claimSignature.validated" || declaration.claim.signature_status == "claimSignature.validated"))
report_text:
'true':
en: "Valid signature chain found"
'false':
en: "No valid signature chain"
- id: ai_declaration
description: "Explicit statement about whether AI was used"
expression: >
length(manifests[?assertions.'cawg.training-mining'.entries.'cawg.ai_training' != null]) > 0 || declaration.assertions.'cawg.training-mining'.entries.'cawg.ai_training' != null || length(manifests[?assertions.'cawg.training-mining'.entries.'cawg.ai_inference' != null]) > 0 || declaration.assertions.'cawg.training-mining'.entries.'cawg.ai_inference' != null || declaration.assertions.'cawg.ai_training' != null || declaration.assertions.'cawg.ai_inference' != null
report_text:
'true':
en: "AI usage declaration is present"
'false':
en: "No AI usage declaration found"
- id: pixel_hash
description: "SHA-256 of pixel data matches signed hash"
expression: >
manifests[0].status.content == "assertion.dataHash.match" || manifests[0].'claim.v2'.content_status == "assertion.dataHash.match" || (manifests[0] == null && (declaration.'claim.v2'.content_status == "assertion.dataHash.match" || declaration.claim.content_status == "assertion.dataHash.match"))
report_text:
'true':
en: "Pixel hash matches — content integrity verified"
'false':
en: "Pixel hash mismatch — content may have been modified"