{
  "schemaVersion": 2,
  "id": "upcoming",
  "title": "Plan future work with Upcoming",
  "video": "upcoming.mp4",
  "poster": "upcoming-poster.jpg",
  "captions": "upcoming.vtt",
  "srt": "upcoming.srt",
  "subtitleLog": "upcoming.json",
  "sourceMaster": "output/video-masters-narrated/upcoming.mp4",
  "fps": 30,
  "frameIndexConvention": "zero-based; start inclusive, end exclusive",
  "width": 1280,
  "height": 1040,
  "screenHeight": 800,
  "frameCount": 814,
  "durationSeconds": 27.133333333333333,
  "captionsBurnedIn": true,
  "audioTracks": 1,
  "exampleDate": "2026-09-24",
  "capture": "Live Chromium Page.startScreencast frames; resampled to constant frame rate without cutting or speeding up actions.",
  "nativeDialogs": "OS file pickers are not captured. Cues explicitly identify file-selection steps.",
  "demoNote": null,
  "cues": [
    {
      "id": "upcoming-01",
      "helpStep": 1,
      "stepTitle": "Select Upcoming",
      "text": "Select Upcoming to see unfinished tasks with future dates.",
      "narrationText": "Select Upcoming to see unfinished tasks with future dates.",
      "startFrame": 0,
      "endFrameExclusive": 122,
      "startSeconds": 0.0,
      "endSeconds": 4.066666666666666,
      "actions": [
        {
          "action": "click",
          "target": "[data-view=\"upcoming\"]"
        }
      ],
      "originalStartFrame": 0,
      "originalEndFrameExclusive": 122,
      "addedHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/upcoming-01.mp3",
        "taskId": "f237887c-5412-4e54-bf32-e00b2887417d",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 4800,
        "endSampleExclusive": 160838,
        "startSeconds": 0.1,
        "endSeconds": 3.350791666666667,
        "startFrame": 3,
        "endFrameExclusive": 101,
        "sourceSha256": "bdce321805293d04b2f0ef53acb30edfa95c5449be0804604d5852c774268989"
      }
    },
    {
      "id": "upcoming-02",
      "helpStep": 1,
      "stepTitle": "Select Upcoming",
      "text": "Choose Due date to put the nearest deadlines first.",
      "narrationText": "Choose Due date to put the nearest deadlines first.",
      "startFrame": 122,
      "endFrameExclusive": 237,
      "startSeconds": 4.066666666666666,
      "endSeconds": 7.9,
      "actions": [
        {
          "action": "select",
          "target": "#sort",
          "value": "due"
        }
      ],
      "originalStartFrame": 122,
      "originalEndFrameExclusive": 237,
      "addedHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/upcoming-02.mp3",
        "taskId": "55f571ca-9f76-4c8b-bff8-23828d71cce9",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 200000,
        "endSampleExclusive": 340435,
        "startSeconds": 4.166666666666667,
        "endSeconds": 7.092395833333334,
        "startFrame": 125,
        "endFrameExclusive": 213,
        "sourceSha256": "ed95420987ca94c9325cebe11eeb8e8e35d6b3d986916c846e1ad988a75d8d2f"
      }
    },
    {
      "id": "upcoming-03",
      "helpStep": 2,
      "stepTitle": "Create a future task",
      "text": "New task defaults to tomorrow here. Set another future date if needed.",
      "narrationText": "New task defaults to tomorrow here. Set another future date if needed.",
      "startFrame": 237,
      "endFrameExclusive": 377,
      "startSeconds": 7.9,
      "endSeconds": 12.566666666666666,
      "actions": [
        {
          "action": "click",
          "target": "#new-task"
        },
        {
          "action": "highlight",
          "target": "#task-due"
        },
        {
          "action": "fill",
          "target": "#task-due",
          "value": "2026-09-28"
        },
        {
          "action": "click",
          "target": "#cancel-editor"
        }
      ],
      "originalStartFrame": 237,
      "originalEndFrameExclusive": 377,
      "addedHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/upcoming-03.mp3",
        "taskId": "3e52719a-472a-48b3-af57-d3ba3940e1f2",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 384000,
        "endSampleExclusive": 577933,
        "startSeconds": 8.0,
        "endSeconds": 12.040270833333333,
        "startFrame": 240,
        "endFrameExclusive": 362,
        "sourceSha256": "b2ca16bb7564ffd13528b1a81e3da16bf09d050159ce9e8115db116aeba14228"
      }
    },
    {
      "id": "upcoming-04",
      "helpStep": 3,
      "stepTitle": "Change the schedule",
      "text": "Change a future task to today, then save it.",
      "narrationText": "Change a future task to today, then save it.",
      "startFrame": 377,
      "endFrameExclusive": 491,
      "startSeconds": 12.566666666666666,
      "endSeconds": 16.366666666666667,
      "actions": [
        {
          "action": "click",
          "target": "[data-id=\"demo-5\"] [data-action=\"edit\"]"
        },
        {
          "action": "fill",
          "target": "#task-due",
          "value": "2026-09-24"
        },
        {
          "action": "click",
          "target": "#save-task"
        }
      ],
      "originalStartFrame": 377,
      "originalEndFrameExclusive": 491,
      "addedHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/upcoming-04.mp3",
        "taskId": "4fc1fb92-1b1e-4e6a-97cb-6fc1feb9e384",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 608000,
        "endSampleExclusive": 741747,
        "startSeconds": 12.666666666666666,
        "endSeconds": 15.4530625,
        "startFrame": 380,
        "endFrameExclusive": 464,
        "sourceSha256": "31529e015f2389249f9ce2c304890ec2eb623a29e62f1c83c778076db37a6763"
      }
    },
    {
      "id": "upcoming-05",
      "helpStep": 3,
      "stepTitle": "Change the schedule",
      "text": "The task now belongs in Today. Undated tasks appear in All tasks and their list.",
      "narrationText": "The task now belongs in Today. Undated tasks appear in All tasks and their list.",
      "startFrame": 491,
      "endFrameExclusive": 662,
      "startSeconds": 16.366666666666667,
      "endSeconds": 22.066666666666666,
      "actions": [
        {
          "action": "click",
          "target": "[data-view=\"today\"]"
        },
        {
          "action": "highlight",
          "target": "[data-id=\"demo-5\"]"
        }
      ],
      "originalStartFrame": 491,
      "originalEndFrameExclusive": 648,
      "addedHoldFrames": 14,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/upcoming-05.mp3",
        "taskId": "1a2a3112-6b0d-4dde-ab7d-3e680c289b1a",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 790400,
        "endSampleExclusive": 1051207,
        "startSeconds": 16.466666666666665,
        "endSeconds": 21.900145833333333,
        "startFrame": 494,
        "endFrameExclusive": 658,
        "sourceSha256": "c80218f4e76d053839a13687d42a231527013047adcb3e2cdfc3fa2b4efd636f"
      }
    },
    {
      "id": "upcoming-06",
      "helpStep": 4,
      "stepTitle": "Review work as dates arrive",
      "text": "As dates arrive, return to the tab or reload to refresh the date-based views.",
      "narrationText": "As dates arrive, return to the tab or reload to refresh the date-based views.",
      "startFrame": 662,
      "endFrameExclusive": 814,
      "startSeconds": 22.066666666666666,
      "endSeconds": 27.133333333333333,
      "actions": [
        {
          "action": "reload"
        },
        {
          "action": "click",
          "target": "[data-view=\"today\"]"
        }
      ],
      "originalStartFrame": 648,
      "originalEndFrameExclusive": 800,
      "addedHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "sourceClip": "output/narration/clips/upcoming-06.mp3",
        "taskId": "e244a9f5-6152-4792-a7ad-af688d23533e",
        "generationSpeed": 1.05,
        "playbackSpeed": 1.0,
        "sampleRate": 48000,
        "startSample": 1064000,
        "endSampleExclusive": 1289141,
        "startSeconds": 22.166666666666668,
        "endSeconds": 26.857104166666666,
        "startFrame": 665,
        "endFrameExclusive": 806,
        "sourceSha256": "1b78a6d7cee4d6faeb0cba2c40f07ac30176196f56ac3d410ab3ab3443323567"
      }
    }
  ],
  "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
  "videoSha256": "d74b6177616c50b2997e2a0d16b846de8ba8d463d7deebbd8b343b3a666ecb25",
  "masterSha256": "6fa17cf1d6e2d174cd5327b9ffe832712d2daea85111debf051e1b635362bce6",
  "controlsClearancePixels": 128,
  "originalSourceMaster": "output/video-masters/upcoming.mp4",
  "originalMasterSha256": "9c9d0a592e9d9e9e8af21ebd6df80c8583e4ad88971a5130ad78c5c270cc34e1",
  "originalFrameCount": 800,
  "addedNarrationHoldFrames": 14,
  "narration": {
    "voice": "Niki",
    "language": "en",
    "description": "Friendly American narration",
    "generatedSpeech": true,
    "model": "eleven_multilingual_v2",
    "generationSpeed": 1.05,
    "sampleRate": 48000,
    "codec": "AAC",
    "audioFile": "upcoming-narration.m4a",
    "trackMaster": "output/narration/tracks/upcoming.wav",
    "alignment": "Each original cue plays at its original pace. End-frame holds extend cues when needed for natural speech, with 100 ms lead-in and at least 150 ms end clearance. Audio is never truncated or sped up.",
    "timingConvention": "Audio sample indices at 48000 Hz are exact; covering video frame ranges are rounded outward."
  }
}
