Profile creation
Trust profiles define what "trusted" means for your use case. They specify which assertions an image must carry and how those assertions are evaluated.
How trust profiles work
A trust profile is a multi-document YAML file. The first document contains metadata (name, issuer, version). Subsequent documents contain sections of checks -- each check has an expression that is evaluated against the image's extracted metadata.
When verification runs, each expression returns true or false. The ratio of passed checks to total checks determines the trust score: >= 0.95 is "pass", >= 0.7 is "warning", below that is "fail".
Workflow
Python API
from jpegtrust import create_profile, save_profile, profile_to_yaml # From a predefined template profile = create_profile( template="newsroom", name="AP Wire Photo Policy", issuer="Associated Press", ) save_profile(profile, "newsroom.yml") # With specific checks only profile = create_profile( check_ids=["signature_chain", "pixel_hash", "author_identity"], name="Minimal Policy", ) # Get YAML string without saving yaml_str = profile_to_yaml(profile)
CLI
# Create from template jpegtrust profile create --template newsroom --name "Wire Photo" -o profile.yml # List available templates jpegtrust profile list-templates # List all available checks jpegtrust profile list-checks # Create with specific checks jpegtrust profile create --checks signature_chain,pixel_hash -o minimal.yml
Profile YAML structure
# Document 1: metadata --- metadata: name: "Wire Photo Policy" issuer: "Associated Press" date: "2025-06-15T00:00:00Z" version: "1.0.0" language: en # Document 2: required checks --- - id: required_checks_info title: "Required checks" report_text: "Required checks for Wire Photo Policy" - id: signature_chain description: "Valid cryptographic signature" expression: > manifests[0].status.signature == "claimSignature.validated" report_text: 'true': en: "Valid signature chain found" 'false': en: "No valid signature chain" # Document 3: optional checks --- - id: optional_checks_info title: "Optional checks" report_text: "Optional checks for Wire Photo Policy" - id: gps_location description: "Geolocation data" expression: > manifests[0].assertions.'cawg.metadata'.'exif:GPSLatitude' != null report_text: 'true': en: "GPS location data is present" 'false': en: "No GPS location data found"
Available checks
Predefined templates
Templates are named sets of check IDs. When you create a profile from a template, the corresponding checks are automatically enabled.
newsroom
All 9 checks enabled. Strictest profile -- every assertion must be present.
insurance
6 checks: signature_chain, capture_timestamp, author_identity, edit_history, gps_location, pixel_hash
creator
5 checks: signature_chain, author_identity, copyright, ai_declaration, pixel_hash
ai-labelling
7 checks: signature_chain, ai_declaration, digital_source_type, ai_labelling, edit_history, pixel_hash, data_mining
custom
No checks enabled by default. Pass check_ids to select exactly which checks you need.