{
 "use_case": "studio",
 "title": "Creative studio: the gallery and a credentialed render",
 "about": "One finished studio render (a 5 s Wan2.1 video from the gallery), a copy with one byte changed, and a music prompt that imitates a named artist. The gallery must list music, images and video; the render must check as credentialed with a valid render receipt; the changed copy must check as tampered; and the imitation prompt must be refused (HTTP 422) before any job exists. No new render: renders take the shared GPU for minutes and hosted video is paid.",
 "licence": "rainy-window-credentialed.mp4: rendered by Decosa with Wan-AI/Wan2.1-T2V-14B (Apache-2.0) from an original prompt; no real people. CC0 for the clip; the copy with one changed byte is the same clip.",
 "inputs": [
  {
   "file": "inputs/rainy-window-credentialed.mp4",
   "what": "A finished render as delivered: C2PA credential embedded, render receipt in the registry. Swap in any image, audio or video file to check it."
  },
  {
   "file": "inputs/rainy-window-one-byte-changed.mp4",
   "what": "The same file with one byte of the video data flipped: an edit after signing."
  },
  {
   "file": "inputs/imitation-prompt.json",
   "what": "A job request {kind, prompt, params} the prompt policy must refuse: it asks for a named artist's style."
  }
 ],
 "steps": [
  {
   "id": "gallery",
   "method": "GET",
   "path": "/studio/gallery",
   "auth": false
  },
  {
   "id": "policy",
   "method": "GET",
   "path": "/studio/policy",
   "auth": false
  },
  {
   "id": "check",
   "method": "POST",
   "path": "/provenance/check?name=rainy-window-credentialed.mp4",
   "auth": false,
   "raw_file": "inputs/rainy-window-credentialed.mp4",
   "content_type": "application/octet-stream"
  },
  {
   "id": "receipt",
   "method": "GET",
   "path": "/provenance/receipts/${check.receipt.id}",
   "auth": false
  },
  {
   "id": "tampered",
   "method": "POST",
   "path": "/provenance/check?name=rainy-window-one-byte-changed.mp4",
   "auth": false,
   "raw_file": "inputs/rainy-window-one-byte-changed.mp4",
   "content_type": "application/octet-stream"
  },
  {
   "id": "imitation",
   "method": "POST",
   "path": "/studio/jobs",
   "expect_status": 422,
   "body": {
    "$file": "inputs/imitation-prompt.json"
   }
  }
 ],
 "checks": [
  {
   "says": "the gallery lists music, images and video",
   "path": "gallery.kind",
   "all_in": [
    "music",
    "image",
    "video"
   ]
  },
  {
   "says": "the gallery has at least one video",
   "path": "gallery[kind=video]",
   "count_min": 1
  },
  {
   "says": "every MiniMax-Music3 track carries its licence notice",
   "path": "gallery[model~Music3].notice",
   "all_in": [
    "Powered by MiniMax-Music3"
   ]
  },
  {
   "says": "the render checks as credentialed",
   "path": "check.verdict",
   "equals": "credentialed"
  },
  {
   "says": "its C2PA content hash matches",
   "path": "check.credential.content_intact",
   "equals": true
  },
  {
   "says": "it leads to the Wan2.1 render receipt",
   "path": "check.receipt.model",
   "equals": "Wan-AI/Wan2.1-T2V-14B"
  },
  {
   "says": "the render receipt's signature verifies",
   "path": "receipt.verification.ok",
   "equals": true
  },
  {
   "says": "the file with one byte changed checks as tampered",
   "path": "tampered.verdict",
   "equals": "tampered"
  },
  {
   "says": "and its content hash no longer matches",
   "path": "tampered.credential.content_intact",
   "equals": false
  },
  {
   "says": "the named-artist prompt is refused as imitation (HTTP 422)",
   "path": "imitation.category",
   "equals": "imitation"
  },
  {
   "says": "no job is created for it",
   "path": "imitation.job_id",
   "exists": false
  }
 ]
}
