{
  "//": "How this app is photographed for the marketplace (docs/publishing.md § Screenshots). The engine loads the app in the Mac shell's own WebKit against the sample below, runs the steps, and writes ui/screenshots/NN-<id>.png. Nothing here reaches a real workspace.",
  "version": 1,
  "shots": [
    { "id": "desktop", "size": [1280, 800] },
    { "id": "phone", "size": [390, 844] }
  ],
  "sample": {
    "//": "Both source folders, because the app draws them as two labelled groups and a photograph of one of them would be a photograph of half the app. `files/` is where the agent's own generated media lands; `media/` is what a person dropped in. `size` is bytes of nothing: the list draws a name and a size, and shipping real video in a skill folder to photograph a list would be megabytes for no pixels.",
    "files": {
      "files/interview.mp4": { "size": 48200000 },
      "files/logo-sting.mp4": { "size": 6400000 },
      "files/room-tone.wav": { "size": 2400000 },
      "files/notes.txt": "Interview runs long — cut to the answer at 0:12.",
      "media/broll.mov": { "size": 15900000 },
      "projects/cuts/.keep": ""
    },
    "tools": {
      "render_cut": { "progress": [25, 60, 100], "exitCode": 0, "stepMs": 120 }
    }
  },
  "steps": [
    { "wait": "ready" },
    { "click": "[data-add=\"files/interview.mp4\"]" },
    { "click": "[data-add=\"media/broll.mov\"]" },
    { "click": "#render" },
    { "wait": 300 }
  ]
}
