{
 "use_case": "honest-product-imagery",
 "title": "Honest product imagery: a 750 ml label on a 500 ml bottle, a person with no consent record, and a faithful lifestyle shot",
 "about": "Three made-up products (a hand-wash bottle, a drink can and a vitamin jar), each with the seller's own packshot. An AI lifestyle image of the bottle whose label says 750 ml must be not approved with a size violation. An AI ad image of the can with a person in it and no consent-ledger identity must be refused by the consent gate before any comparison. A faithful AI lifestyle image of a vitamin jar must be approved with the IPTC DigitalSourceType in XMP, a C2PA credential and a signed record that verifies, and fails once the image hash in the record is changed.",
 "licence": "Synthetic products and brands made up for Decosa; packshots drawn with Pillow (Lato, SIL OFL 1.1; DejaVu fonts); scenes drawn by Wan2.2-VACE-Fun-A14B (Apache-2.0) in decosa-api, 27 Sep 2026. Part of decosa-api, AGPL-3.0-or-later.",
 "inputs": [
  {
   "file": "inputs/ref-handwash.jpg",
   "what": "The seller's packshot of the Fernleaf hand wash (500 ml)."
  },
  {
   "file": "inputs/handwash-750.jpg",
   "what": "An AI lifestyle image of it whose label reads 750 ml."
  },
  {
   "file": "inputs/ref-can.jpg",
   "what": "The seller's packshot of the Sol Fizz can (330 ml)."
  },
  {
   "file": "inputs/can-person.jpg",
   "what": "An AI ad image of the can with a smiling man at the table (a generated person)."
  },
  {
   "file": "inputs/facts-handwash.json",
   "what": "What the seller states about the hand wash."
  },
  {
   "file": "inputs/facts-can.json",
   "what": "What the seller states about the can."
  },
  {
   "file": "inputs/ref-jar.jpg",
   "what": "The seller's packshot of the Northwind vitamin D3 jar (60 capsules)."
  },
  {
   "file": "inputs/jar-shelf.jpg",
   "what": "A faithful AI lifestyle image of the jar on a kitchen shelf."
  },
  {
   "file": "inputs/facts-jar.json",
   "what": "What the seller states about the jar."
  }
 ],
 "steps": [
  {
   "id": "oversize",
   "method": "POST",
   "path": "/imagery/runs",
   "timeout": 300,
   "body": {
    "reference_b64": {
     "$b64": "inputs/ref-handwash.jpg"
    },
    "image_b64": {
     "$b64": "inputs/handwash-750.jpg"
    },
    "facts": {
     "$file": "inputs/facts-handwash.json"
    },
    "targets": [
     "amazon",
     "google-merchant",
     "EU"
    ],
    "stream": false
   }
  },
  {
   "id": "person",
   "method": "POST",
   "path": "/imagery/runs",
   "timeout": 300,
   "body": {
    "reference_b64": {
     "$b64": "inputs/ref-can.jpg"
    },
    "image_b64": {
     "$b64": "inputs/can-person.jpg"
    },
    "facts": {
     "$file": "inputs/facts-can.json"
    },
    "targets": [
     "amazon",
     "google-merchant",
     "EU"
    ],
    "stream": false,
    "role": "ad"
   }
  },
  {
   "id": "faithful",
   "method": "POST",
   "path": "/imagery/runs",
   "timeout": 300,
   "body": {
    "reference_b64": {
     "$b64": "inputs/ref-jar.jpg"
    },
    "image_b64": {
     "$b64": "inputs/jar-shelf.jpg"
    },
    "facts": {
     "$file": "inputs/facts-jar.json"
    },
    "targets": [
     "amazon",
     "google-merchant",
     "EU"
    ],
    "stream": false
   }
  },
  {
   "id": "verify",
   "method": "POST",
   "path": "/record/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "faithful.report.record"
    }
   }
  },
  {
   "id": "tampered",
   "method": "POST",
   "path": "/record/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "faithful.report.record"
    }
   },
   "tamper": {
    "at": "record.statement.image_sha256",
    "set": "0000000000000000000000000000000000000000000000000000000000000000"
   }
  }
 ],
 "checks": [
  {
   "says": "the 750 ml image is not approved",
   "path": "oversize.status",
   "equals": "not_approved"
  },
  {
   "says": "the size misrepresentation is named",
   "path": "oversize.report.check.violations.category",
   "contains": [
    "size"
   ]
  },
  {
   "says": "no image is released for it",
   "path": "oversize.image_url",
   "equals": null
  },
  {
   "says": "a person with no consent record is refused",
   "path": "person.status",
   "equals": "consent_refused"
  },
  {
   "says": "the refusal comes before the comparison (two locate calls only)",
   "path": "person.report.usage.calls",
   "max": 4
  },
  {
   "says": "the faithful image is approved",
   "path": "faithful.status",
   "equals": "approved"
  },
  {
   "says": "it carries the IPTC DigitalSourceType Google and others read",
   "path": "faithful.report.xmp.digital_source_type",
   "contains": "trainedAlgorithmicMedia"
  },
  {
   "says": "it carries a C2PA credential",
   "path": "faithful.report.credential.kind",
   "equals": "c2pa"
  },
  {
   "says": "the record verifies",
   "path": "verify.ok",
   "equals": true
  },
  {
   "says": "a record with the image hash changed no longer verifies",
   "path": "tampered.ok",
   "equals": false
  },
  {
   "says": "every model call has a signed receipt",
   "receipts": "signed",
   "min": 6,
   "ignore_prefix": [
    "cd_"
   ]
  }
 ]
}