{
 "use_case": "music-video-starring-you",
 "session_vertical": "studio",
 "title": "Music video starring you: a storyboard cut on the beat, labelled and credentialed",
 "about": "A synthetic sample performer (an adult, consent clip on the server) and a sample song made with MiniMax-Music3. Asking for moving H3 shots while no render GPU is attached must be refused; the storyboard must finish with 10 shots, every planned cut found on the beat in the file, no frame flagged, and a C2PA credential on every export. About 1.5-2 minutes on a shared GPU.",
 "licence": "No local inputs. The sample performers are synthetic (designed faces and voices, no real person); the sample song was made with MiniMax-Music3 through music-gen-cleared and carries its licence certificate.",
 "inputs": [],
 "steps": [
  {
   "id": "project",
   "method": "POST",
   "path": "/studio/projects",
   "body": {
    "name": "[TEST] rehearsal artist video"
   }
  },
  {
   "id": "performers",
   "method": "POST",
   "path": "/studio/projects/${project.project.id}/performers/sample?key=${project.project_key}",
   "body": {
    "which": "artist"
   },
   "timeout": 120
  },
  {
   "id": "track",
   "method": "POST",
   "path": "/studio/projects/${project.project.id}/tracks?key=${project.project_key}",
   "body": {
    "sample": "paper-lanterns"
   },
   "timeout": 120
  },
  {
   "id": "h3off",
   "method": "POST",
   "path": "/studio/projects/${project.project.id}/videos?key=${project.project_key}",
   "expect_status": 409,
   "body": {
    "mode": "artist",
    "performers": {
     "$ref": "performers.performers.id"
    },
    "track_id": {
     "$ref": "track.id"
    },
    "look": "cinematic",
    "aspect": "16:9",
    "direction": "warm dusk by a harbour, paper lanterns on the water, a bicycle ride",
    "video": "h3-sketch"
   }
  },
  {
   "id": "video",
   "method": "POST",
   "path": "/studio/projects/${project.project.id}/videos?key=${project.project_key}",
   "body": {
    "mode": "artist",
    "performers": {
     "$ref": "performers.performers.id"
    },
    "track_id": {
     "$ref": "track.id"
    },
    "look": "cinematic",
    "aspect": "16:9",
    "direction": "warm dusk by a harbour, paper lanterns on the water, a bicycle ride"
   },
   "timeout": 120
  },
  {
   "id": "done",
   "method": "GET",
   "path": "/studio/videos/${video.id}?key=${project.project_key}",
   "until": {
    "path": "status",
    "in": [
     "done",
     "failed"
    ]
   },
   "interval": 5,
   "max_wait": 900
  }
 ],
 "checks": [
  {
   "says": "moving H3 shots are refused while no render GPU is attached",
   "path": "h3off.code",
   "equals": "h3_off"
  },
  {
   "says": "the video finishes",
   "path": "done.status",
   "equals": "done"
  },
  {
   "says": "the shot list has 10 shots",
   "path": "done.shots",
   "count": 10
  },
  {
   "says": "all 9 planned cuts are found on the beat in the file",
   "path": "done.sync.found",
   "min": 9
  },
  {
   "says": "no cut appears that wasn't planned",
   "path": "done.sync.unplanned",
   "equals": 0
  },
  {
   "says": "the worst cut is within 17 ms of the beat",
   "path": "done.sync.max_abs_ms",
   "max": 17
  },
  {
   "says": "no frame is flagged by the safety check",
   "path": "done.safety[0].flagged",
   "equals": 0
  },
  {
   "says": "the 16:9 export carries a C2PA credential",
   "path": "done.exports.16:9.credential",
   "equals": "c2pa"
  },
  {
   "says": "the credits say the video is AI",
   "path": "done.credits",
   "any_equals": "Video made with AI"
  },
  {
   "says": "every model call has a signed receipt",
   "receipts": "signed",
   "min": 2
  }
 ]
}