{
  "schemaVersion": 2,
  "description": "Recorded Today List help videos with Niki narration and exact subtitle and audio timing logs.",
  "frameConvention": "Zero-based start inclusive, end exclusive; all videos are constant 30 fps.",
  "audio": "Niki narration in AAC audio, with burned-in subtitles. Original clean captures remain unchanged; narration-aligned clean masters include extra end holds where needed.",
  "videos": [
    {
      "schemaVersion": 2,
      "id": "start",
      "title": "Get started and find your way around",
      "video": "start.mp4",
      "poster": "start-poster.jpg",
      "captions": "start.vtt",
      "srt": "start.srt",
      "subtitleLog": "start.json",
      "sourceMaster": "output/video-masters-narrated/start.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 1142,
      "durationSeconds": 38.06666666666667,
      "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": "start-01",
          "helpStep": 1,
          "stepTitle": "Open your workspace",
          "text": "Open Today List in your browser. Your saved tasks appear in this workspace.",
          "narrationText": "Open Today List in your browser. Your saved tasks appear in this workspace.",
          "startFrame": 0,
          "endFrameExclusive": 149,
          "startSeconds": 0.0,
          "endSeconds": 4.966666666666667,
          "actions": [
            {
              "action": "highlight",
              "target": ".page-heading"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 149,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/start-01.mp3",
            "taskId": "83ac7b70-f6e5-4094-a1d7-8a136a04d337",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 212108,
            "startSeconds": 0.1,
            "endSeconds": 4.418916666666667,
            "startFrame": 3,
            "endFrameExclusive": 133,
            "sourceSha256": "aaf9137f98e0c0deb595934b8e7e8c8550e5bed7dc37a9affcaab309d9ad8502"
          }
        },
        {
          "id": "start-02",
          "helpStep": 2,
          "stepTitle": "Recognize the main areas",
          "text": "Use the left navigation to switch between task views and lists.",
          "narrationText": "Use the left navigation to switch between task views and lists.",
          "startFrame": 149,
          "endFrameExclusive": 279,
          "startSeconds": 4.966666666666667,
          "endSeconds": 9.3,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"today\"]"
            },
            {
              "action": "click",
              "target": "[data-view=\"Work\"]"
            }
          ],
          "originalStartFrame": 149,
          "originalEndFrameExclusive": 279,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/start-02.mp3",
            "taskId": "56ab7ca8-fbe6-48bd-9686-cfdd4a5498ee",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 243200,
            "endSampleExclusive": 410384,
            "startSeconds": 5.066666666666666,
            "endSeconds": 8.549666666666667,
            "startFrame": 152,
            "endFrameExclusive": 257,
            "sourceSha256": "ba0840c7d1450546d21e52a46991934e4e149be4d551fe0d3d69b5f8503f3d19"
          }
        },
        {
          "id": "start-03",
          "helpStep": 2,
          "stepTitle": "Recognize the main areas",
          "text": "The top bar reports save status. Progress, quick add, search, and filters sit above the tasks.",
          "narrationText": "The top bar reports save status. Progress, quick add, search, and filters sit above the tasks.",
          "startFrame": 279,
          "endFrameExclusive": 485,
          "startSeconds": 9.3,
          "endSeconds": 16.166666666666668,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            },
            {
              "action": "highlight",
              "target": ".overview"
            },
            {
              "action": "highlight",
              "target": ".toolbar"
            }
          ],
          "originalStartFrame": 279,
          "originalEndFrameExclusive": 457,
          "addedHoldFrames": 28,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/start-03.mp3",
            "taskId": "cb2f8433-b2ef-46d0-afdd-4f09f6549d20",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 451200,
            "endSampleExclusive": 767735,
            "startSeconds": 9.4,
            "endSeconds": 15.994479166666666,
            "startFrame": 282,
            "endFrameExclusive": 480,
            "sourceSha256": "c81bd7cd7852701f5daf8438aafe118ffa7d35a46e3c7dde4375612934dc8989"
          }
        },
        {
          "id": "start-04",
          "helpStep": 3,
          "stepTitle": "Read a task row",
          "text": "Each row shows a checkbox, editable title, notes, list, date, priority, and delete button.",
          "narrationText": "Each row shows a checkbox, editable title, notes, list, date, priority, and delete button.",
          "startFrame": 485,
          "endFrameExclusive": 678,
          "startSeconds": 16.166666666666668,
          "endSeconds": 22.6,
          "actions": [
            {
              "action": "highlight",
              "target": "[data-id=\"demo-1\"]"
            }
          ],
          "originalStartFrame": 457,
          "originalEndFrameExclusive": 630,
          "addedHoldFrames": 20,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/start-04.mp3",
            "taskId": "f00574c6-5f41-406b-90c8-442e51d8b56a",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 780800,
            "endSampleExclusive": 1077273,
            "startSeconds": 16.266666666666666,
            "endSeconds": 22.4431875,
            "startFrame": 488,
            "endFrameExclusive": 674,
            "sourceSha256": "1d238e00a6621c99759bd18708633afe4c68d7db0c6ff9e50384f71d72c5d177"
          }
        },
        {
          "id": "start-05",
          "helpStep": 3,
          "stepTitle": "Read a task row",
          "text": "Select a task title to open its details. Cancel closes the editor without saving.",
          "narrationText": "Select a task title to open its details. Cancel closes the editor without saving.",
          "startFrame": 678,
          "endFrameExclusive": 835,
          "startSeconds": 22.6,
          "endSeconds": 27.833333333333332,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] [data-action=\"edit\"]"
            },
            {
              "action": "click",
              "target": "#cancel-editor"
            }
          ],
          "originalStartFrame": 630,
          "originalEndFrameExclusive": 787,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/start-05.mp3",
            "taskId": "f9c0db0a-7455-4806-8f50-b55f01572d28",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1089600,
            "endSampleExclusive": 1325887,
            "startSeconds": 22.7,
            "endSeconds": 27.622645833333333,
            "startFrame": 681,
            "endFrameExclusive": 829,
            "sourceSha256": "d918be7f52ef2ce2d308212e0c72da36caa1e806d16a3e9a592f88bd36669f39"
          }
        },
        {
          "id": "start-06",
          "helpStep": 4,
          "stepTitle": "Open this guide again",
          "text": "Help opens a separate tab. Here is the same guide with topic navigation and search.",
          "narrationText": "Help opens a separate tab. Here is the same guide with topic navigation and search.",
          "startFrame": 835,
          "endFrameExclusive": 997,
          "startSeconds": 27.833333333333332,
          "endSeconds": 33.233333333333334,
          "actions": [
            {
              "action": "click",
              "target": ".help-link"
            },
            {
              "action": "highlight",
              "target": "#help-search"
            }
          ],
          "originalStartFrame": 787,
          "originalEndFrameExclusive": 949,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/start-06.mp3",
            "taskId": "93c46fbd-6630-4724-9738-617109955d24",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1340800,
            "endSampleExclusive": 1579316,
            "startSeconds": 27.933333333333334,
            "endSeconds": 32.90241666666667,
            "startFrame": 838,
            "endFrameExclusive": 988,
            "sourceSha256": "2c3cc462cab43adc5dc5454acc57441b486b9d767c563658dab9ac5bb67c772b"
          }
        },
        {
          "id": "start-07",
          "helpStep": 4,
          "stepTitle": "Open this guide again",
          "text": "Search for a topic, or use Download PDF for the existing printable guide.",
          "narrationText": "Search for a topic, or use Download PDF for the existing printable guide.",
          "startFrame": 997,
          "endFrameExclusive": 1142,
          "startSeconds": 33.233333333333334,
          "endSeconds": 38.06666666666667,
          "actions": [
            {
              "action": "type",
              "target": "#help-search",
              "value": "backups"
            },
            {
              "action": "highlight",
              "target": ".hero-actions"
            }
          ],
          "originalStartFrame": 949,
          "originalEndFrameExclusive": 1094,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/start-07.mp3",
            "taskId": "9ea61575-45e9-4101-b5df-1a31007e2de2",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1600000,
            "endSampleExclusive": 1802850,
            "startSeconds": 33.333333333333336,
            "endSeconds": 37.559375,
            "startFrame": 1000,
            "endFrameExclusive": 1127,
            "sourceSha256": "1d1473945fb5bc5945df744d768872212ba35df633f71062eb4b101167e41a9a"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "30b2a0b3be97f3fa49c1b68f9311a309cd2d70bba116b715cfc9e6e0aa388015",
      "masterSha256": "bcf431d8333dee9f7346c2f9b877e759eac258eff4257a92e6585d6478697cbc",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/start.mp4",
      "originalMasterSha256": "89cd813591ea0b8e24433f0ab02af343c33478788041e6d47353923d3325ebb9",
      "originalFrameCount": 1094,
      "addedNarrationHoldFrames": 48,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "start-narration.m4a",
        "trackMaster": "output/narration/tracks/start.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "quick-add",
      "title": "Add a task quickly",
      "video": "quick-add.mp4",
      "poster": "quick-add-poster.jpg",
      "captions": "quick-add.vtt",
      "srt": "quick-add.srt",
      "subtitleLog": "quick-add.json",
      "sourceMaster": "output/video-masters-narrated/quick-add.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 691,
      "durationSeconds": 23.033333333333335,
      "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": "quick-add-01",
          "helpStep": 1,
          "stepTitle": "Choose the view or list first",
          "text": "Choose a list first. Tasks added from Work are assigned to Work.",
          "narrationText": "Choose a list first. Tasks added from Work are assigned to Work.",
          "startFrame": 0,
          "endFrameExclusive": 132,
          "startSeconds": 0.0,
          "endSeconds": 4.4,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"Work\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 132,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/quick-add-01.mp3",
            "taskId": "72b8b6dc-b746-4a4e-bbad-8ac268793d7a",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 192046,
            "startSeconds": 0.1,
            "endSeconds": 4.000958333333333,
            "startFrame": 3,
            "endFrameExclusive": 121,
            "sourceSha256": "8ce91a6a650736d99cdae27c945b61a0968302252ec63284d79fb6b84f1340d4"
          }
        },
        {
          "id": "quick-add-02",
          "helpStep": 2,
          "stepTitle": "Type a task name",
          "text": "Type a clear task name in the quick-add field.",
          "narrationText": "Type a clear task name in the quick-add field.",
          "startFrame": 132,
          "endFrameExclusive": 246,
          "startSeconds": 4.4,
          "endSeconds": 8.2,
          "actions": [
            {
              "action": "type",
              "target": "#quick-title",
              "value": "Review the workshop agenda"
            }
          ],
          "originalStartFrame": 132,
          "originalEndFrameExclusive": 246,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/quick-add-02.mp3",
            "taskId": "7bcafd9e-a776-45fe-b7ba-af512ae34f84",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 216000,
            "endSampleExclusive": 343060,
            "startSeconds": 4.5,
            "endSeconds": 7.147083333333334,
            "startFrame": 135,
            "endFrameExclusive": 215,
            "sourceSha256": "c3a95d5d3c1139722c1bb41d67f0ce88b3695bd302bc18187ed83463eb4be49e"
          }
        },
        {
          "id": "quick-add-03",
          "helpStep": 3,
          "stepTitle": "Add it",
          "text": "Press Enter to add it. Quick-added tasks start with Medium priority.",
          "narrationText": "Press Enter to add it. Quick-added tasks start with Medium priority.",
          "startFrame": 246,
          "endFrameExclusive": 386,
          "startSeconds": 8.2,
          "endSeconds": 12.866666666666667,
          "actions": [
            {
              "action": "keyboard",
              "key": "Enter"
            },
            {
              "action": "highlight",
              "target": ".task-row:first-of-type"
            }
          ],
          "originalStartFrame": 246,
          "originalEndFrameExclusive": 384,
          "addedHoldFrames": 2,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/quick-add-03.mp3",
            "taskId": "954581fc-8c6c-4f1a-8824-04b2d29f33b2",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 398400,
            "endSampleExclusive": 610166,
            "startSeconds": 8.3,
            "endSeconds": 12.711791666666667,
            "startFrame": 249,
            "endFrameExclusive": 382,
            "sourceSha256": "7e009b0f589d061550b261539bd289284c2e2a8fdff0da78ae803b9ca1312857"
          }
        },
        {
          "id": "quick-add-04",
          "helpStep": 4,
          "stepTitle": "Add more detail if needed",
          "text": "Select the new task name to add notes, a due date, or a different priority.",
          "narrationText": "Select the new task name to add notes, a due date, or a different priority.",
          "startFrame": 386,
          "endFrameExclusive": 534,
          "startSeconds": 12.866666666666667,
          "endSeconds": 17.8,
          "actions": [
            {
              "action": "click",
              "target": ".task-row:first-of-type .task-name"
            },
            {
              "action": "type",
              "target": "#task-notes",
              "value": "Ask the team for feedback."
            },
            {
              "action": "select",
              "target": "#task-priority",
              "value": "high"
            }
          ],
          "originalStartFrame": 384,
          "originalEndFrameExclusive": 532,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/quick-add-04.mp3",
            "taskId": "dcfce741-41c9-4390-871c-9ddd22c987ff",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 622400,
            "endSampleExclusive": 825250,
            "startSeconds": 12.966666666666667,
            "endSeconds": 17.192708333333332,
            "startFrame": 389,
            "endFrameExclusive": 516,
            "sourceSha256": "3290d0e89f1684c22bcc51c3e69fb6b696677cab91c5c7302f9dc975f3d9c68c"
          }
        },
        {
          "id": "quick-add-05",
          "helpStep": 4,
          "stepTitle": "Add more detail if needed",
          "text": "Save changes to keep those details. Clear search or filters if a task is hidden.",
          "narrationText": "Save changes to keep those details. Clear search or filters if a task is hidden.",
          "startFrame": 534,
          "endFrameExclusive": 691,
          "startSeconds": 17.8,
          "endSeconds": 23.033333333333335,
          "actions": [
            {
              "action": "click",
              "target": "#save-task"
            },
            {
              "action": "highlight",
              "target": ".toolbar"
            }
          ],
          "originalStartFrame": 532,
          "originalEndFrameExclusive": 689,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/quick-add-05.mp3",
            "taskId": "0d93608f-c3be-43fb-819f-6445a433c5ef",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 859200,
            "endSampleExclusive": 1088799,
            "startSeconds": 17.9,
            "endSeconds": 22.6833125,
            "startFrame": 537,
            "endFrameExclusive": 681,
            "sourceSha256": "74a2a4c12d40fd91785b7d3fcbc6cfb3f309cde02fe92c6790aa8494d6d683d6"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "ab6c7a26439667658aa081a97f215ae7cd31457a514627e6bd88711254fa72a4",
      "masterSha256": "ce2785c160dec26a805b2bef4686c23bf999534f94a1d71dc1a12254efcf4b33",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/quick-add.mp4",
      "originalMasterSha256": "ff4a4a29d95babe3b8a3cd1e604a61e720d2f25d415376b94b48a7fbe782d1d7",
      "originalFrameCount": 689,
      "addedNarrationHoldFrames": 2,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "quick-add-narration.m4a",
        "trackMaster": "output/narration/tracks/quick-add.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "create",
      "title": "Create a task with all its details",
      "video": "create.mp4",
      "poster": "create-poster.jpg",
      "captions": "create.vtt",
      "srt": "create.srt",
      "subtitleLog": "create.json",
      "sourceMaster": "output/video-masters-narrated/create.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 760,
      "durationSeconds": 25.333333333333332,
      "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": "create-01",
          "helpStep": 1,
          "stepTitle": "Open the editor",
          "text": "Select New task to open the full editor.",
          "narrationText": "Select New task to open the full editor.",
          "startFrame": 0,
          "endFrameExclusive": 115,
          "startSeconds": 0.0,
          "endSeconds": 3.8333333333333335,
          "actions": [
            {
              "action": "click",
              "target": "#new-task"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 115,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/create-01.mp3",
            "taskId": "65b53e44-a02c-4d66-ae1c-6ff77f9907e9",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 116256,
            "startSeconds": 0.1,
            "endSeconds": 2.422,
            "startFrame": 3,
            "endFrameExclusive": 73,
            "sourceSha256": "75afc1adee5690a9b4c7901bf4a76d2854f6b42725d3c0649855b1d0d82075ad"
          }
        },
        {
          "id": "create-02",
          "helpStep": 2,
          "stepTitle": "Fill in the fields",
          "text": "Enter a task name. Notes are optional and can describe the next action.",
          "narrationText": "Enter a task name. Notes are optional and can describe the next action.",
          "startFrame": 115,
          "endFrameExclusive": 257,
          "startSeconds": 3.8333333333333335,
          "endSeconds": 8.566666666666666,
          "actions": [
            {
              "action": "type",
              "target": "#task-title",
              "value": "Plan the team workshop"
            },
            {
              "action": "type",
              "target": "#task-notes",
              "value": "Draft the agenda and invite the team."
            }
          ],
          "originalStartFrame": 115,
          "originalEndFrameExclusive": 257,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/create-02.mp3",
            "taskId": "71335d8e-ca75-42d9-8021-54804a99e24d",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 188800,
            "endSampleExclusive": 400566,
            "startSeconds": 3.933333333333333,
            "endSeconds": 8.345125,
            "startFrame": 118,
            "endFrameExclusive": 251,
            "sourceSha256": "797a26afd548d2476338c5c4e1b1ee68200b51fbc645a49a0dd08672d1769330"
          }
        },
        {
          "id": "create-03",
          "helpStep": 2,
          "stepTitle": "Fill in the fields",
          "text": "Choose the list and priority for this task.",
          "narrationText": "Choose the list and priority for this task.",
          "startFrame": 257,
          "endFrameExclusive": 371,
          "startSeconds": 8.566666666666666,
          "endSeconds": 12.366666666666667,
          "actions": [
            {
              "action": "select",
              "target": "#task-list",
              "value": "Work"
            },
            {
              "action": "select",
              "target": "#task-priority",
              "value": "high"
            }
          ],
          "originalStartFrame": 257,
          "originalEndFrameExclusive": 371,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/create-03.mp3",
            "taskId": "fc0cf48e-4353-410b-8e56-968cff615bd1",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 416000,
            "endSampleExclusive": 536372,
            "startSeconds": 8.666666666666666,
            "endSeconds": 11.174416666666668,
            "startFrame": 260,
            "endFrameExclusive": 336,
            "sourceSha256": "8788f0f904f8bcb82551baf95b0dce7b07dbe87783c6e19920d85132cf9fd0d5"
          }
        },
        {
          "id": "create-04",
          "helpStep": 2,
          "stepTitle": "Fill in the fields",
          "text": "Set a due date, or leave it blank for an undated task.",
          "narrationText": "Set a due date, or leave it blank for an undated task.",
          "startFrame": 371,
          "endFrameExclusive": 486,
          "startSeconds": 12.366666666666667,
          "endSeconds": 16.2,
          "actions": [
            {
              "action": "fill",
              "target": "#task-due",
              "value": "2026-09-25"
            }
          ],
          "originalStartFrame": 371,
          "originalEndFrameExclusive": 486,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/create-04.mp3",
            "taskId": "bab679ad-b8c2-4dd1-98c6-d03ec36c2f13",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 598400,
            "endSampleExclusive": 754438,
            "startSeconds": 12.466666666666667,
            "endSeconds": 15.717458333333333,
            "startFrame": 374,
            "endFrameExclusive": 472,
            "sourceSha256": "2c85d8bcc518afc11c81e54835e63d8294c2475e31e7ae887d1440aa5588262a"
          }
        },
        {
          "id": "create-05",
          "helpStep": 3,
          "stepTitle": "Save the task",
          "text": "Select Create task. The saved row shows the details you entered.",
          "narrationText": "Select Create task. The saved row shows the details you entered.",
          "startFrame": 486,
          "endFrameExclusive": 618,
          "startSeconds": 16.2,
          "endSeconds": 20.6,
          "actions": [
            {
              "action": "click",
              "target": "#save-task"
            },
            {
              "action": "highlight",
              "target": ".task-row:first-of-type"
            }
          ],
          "originalStartFrame": 486,
          "originalEndFrameExclusive": 618,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/create-05.mp3",
            "taskId": "60c9566d-e09d-4547-bc09-1cb738ed55c2",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 782400,
            "endSampleExclusive": 971875,
            "startSeconds": 16.3,
            "endSeconds": 20.247395833333332,
            "startFrame": 489,
            "endFrameExclusive": 608,
            "sourceSha256": "75dc0dead216522e54ba14743c299d5c81e741d643f88137af5f326633cc2fd4"
          }
        },
        {
          "id": "create-06",
          "helpStep": 4,
          "stepTitle": "Leave without saving",
          "text": "To discard a new draft, choose Cancel. The draft will not be saved.",
          "narrationText": "To discard a new draft, choose Cancel. The draft will not be saved.",
          "startFrame": 618,
          "endFrameExclusive": 760,
          "startSeconds": 20.6,
          "endSeconds": 25.333333333333332,
          "actions": [
            {
              "action": "click",
              "target": "#new-task"
            },
            {
              "action": "type",
              "target": "#task-title",
              "value": "Unsaved example"
            },
            {
              "action": "click",
              "target": "#cancel-editor"
            }
          ],
          "originalStartFrame": 618,
          "originalEndFrameExclusive": 753,
          "addedHoldFrames": 7,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/create-06.mp3",
            "taskId": "7940195d-c5f6-417d-b67e-07f712f06d2a",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 993600,
            "endSampleExclusive": 1207595,
            "startSeconds": 20.7,
            "endSeconds": 25.15822916666667,
            "startFrame": 621,
            "endFrameExclusive": 755,
            "sourceSha256": "3235adac2f1f3c87b143ac3356e6af1f3c1083398a619c4409a1ccc3614f2c4e"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "b1664b7a95cc69cf0f1c768a5dc15936d57dc10bd2682d69e35f1a98b9e20015",
      "masterSha256": "055e7eb474d4ba9b5c84bcf062bb6b56227f12d3f32a214f6bb9107352c2823f",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/create.mp4",
      "originalMasterSha256": "2eb7092775277e98e7fe200b60e1daa6902bd4bd6851bc57e51e1340f86ae04c",
      "originalFrameCount": 753,
      "addedNarrationHoldFrames": 7,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "create-narration.m4a",
        "trackMaster": "output/narration/tracks/create.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "edit",
      "title": "Edit a task and manage notes",
      "video": "edit.mp4",
      "poster": "edit-poster.jpg",
      "captions": "edit.vtt",
      "srt": "edit.srt",
      "subtitleLog": "edit.json",
      "sourceMaster": "output/video-masters-narrated/edit.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 828,
      "durationSeconds": 27.6,
      "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": "edit-01",
          "helpStep": 1,
          "stepTitle": "Find and open the task",
          "text": "Select the task name or pencil icon to open Edit task.",
          "narrationText": "Select the task name or pencil icon to open Edit task.",
          "startFrame": 0,
          "endFrameExclusive": 116,
          "startSeconds": 0.0,
          "endSeconds": 3.8666666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] [data-action=\"edit\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 116,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/edit-01.mp3",
            "taskId": "1c96b62c-deb4-4365-9bdb-84cfc6cf2239",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 163067,
            "startSeconds": 0.1,
            "endSeconds": 3.3972291666666665,
            "startFrame": 3,
            "endFrameExclusive": 102,
            "sourceSha256": "5407ccbdc3a49197d9206d40aa1019908bec51238ba6157901d2c0e9cd92de8b"
          }
        },
        {
          "id": "edit-02",
          "helpStep": 2,
          "stepTitle": "Update the details",
          "text": "Update the notes, list, priority, or date as needed.",
          "narrationText": "Update the notes, list, priority, or date as needed.",
          "startFrame": 116,
          "endFrameExclusive": 248,
          "startSeconds": 3.8666666666666667,
          "endSeconds": 8.266666666666667,
          "actions": [
            {
              "action": "type",
              "target": "#task-notes",
              "value": "Share milestones and next steps.\nAttach the revised timeline."
            },
            {
              "action": "fill",
              "target": "#task-due",
              "value": "2026-09-25"
            }
          ],
          "originalStartFrame": 116,
          "originalEndFrameExclusive": 248,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/edit-02.mp3",
            "taskId": "fbd3e61e-5bbe-45a3-9ade-1dc5f0513f60",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 190400,
            "endSampleExclusive": 339751,
            "startSeconds": 3.966666666666667,
            "endSeconds": 7.078145833333333,
            "startFrame": 119,
            "endFrameExclusive": 213,
            "sourceSha256": "68b8dc3b6294df91d3738509eaf1207ebd50b225bff6b3dfa995d1ac4a0b6a7a"
          }
        },
        {
          "id": "edit-03",
          "helpStep": 3,
          "stepTitle": "Save or cancel",
          "text": "Select Save changes to keep the edits.",
          "narrationText": "Select Save changes to keep the edits.",
          "startFrame": 248,
          "endFrameExclusive": 362,
          "startSeconds": 8.266666666666667,
          "endSeconds": 12.066666666666666,
          "actions": [
            {
              "action": "click",
              "target": "#save-task"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-1\"]"
            }
          ],
          "originalStartFrame": 248,
          "originalEndFrameExclusive": 362,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/edit-03.mp3",
            "taskId": "7c73a49f-c696-4152-9eca-45c570d757dc",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 401600,
            "endSampleExclusive": 501910,
            "startSeconds": 8.366666666666667,
            "endSeconds": 10.456458333333334,
            "startFrame": 251,
            "endFrameExclusive": 314,
            "sourceSha256": "d989d9b6a301cc92209ddfb34eddc87ff8de5c9f1fac909194be7a8ebabd28b9"
          }
        },
        {
          "id": "edit-04",
          "helpStep": 4,
          "stepTitle": "Read longer notes",
          "text": "Rows show only a preview of notes. Reopen the editor to read the complete text.",
          "narrationText": "Rows show only a preview of notes. Reopen the editor to read the complete text.",
          "startFrame": 362,
          "endFrameExclusive": 517,
          "startSeconds": 12.066666666666666,
          "endSeconds": 17.233333333333334,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] [data-action=\"edit\"]"
            },
            {
              "action": "highlight",
              "target": "#task-notes"
            }
          ],
          "originalStartFrame": 362,
          "originalEndFrameExclusive": 517,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/edit-04.mp3",
            "taskId": "0f3c0763-3ccf-44f7-85f9-256de275b2f2",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 584000,
            "endSampleExclusive": 811370,
            "startSeconds": 12.166666666666666,
            "endSeconds": 16.903541666666666,
            "startFrame": 365,
            "endFrameExclusive": 508,
            "sourceSha256": "2fce24f11b810b21ebe8a06161e6c7163cf9496047b130109ef3b490ccfb6b4e"
          }
        },
        {
          "id": "edit-05",
          "helpStep": 2,
          "stepTitle": "Update the details",
          "text": "Clear the date field to remove a deadline; delete the notes text to remove notes.",
          "narrationText": "Clear the date field to remove a deadline; delete the notes text to remove notes.",
          "startFrame": 517,
          "endFrameExclusive": 678,
          "startSeconds": 17.233333333333334,
          "endSeconds": 22.6,
          "actions": [
            {
              "action": "fill",
              "target": "#task-due",
              "value": ""
            },
            {
              "action": "fill",
              "target": "#task-notes",
              "value": ""
            }
          ],
          "originalStartFrame": 517,
          "originalEndFrameExclusive": 675,
          "addedHoldFrames": 3,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/edit-05.mp3",
            "taskId": "87f2226c-8dff-474b-895f-5a9441203178",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 832000,
            "endSampleExclusive": 1077203,
            "startSeconds": 17.333333333333332,
            "endSeconds": 22.441729166666665,
            "startFrame": 520,
            "endFrameExclusive": 674,
            "sourceSha256": "38f4f55ebfd55741c17c04fb921a3d7439cd841624c743b40a80c1e3d75a82f0"
          }
        },
        {
          "id": "edit-06",
          "helpStep": 3,
          "stepTitle": "Save or cancel",
          "text": "Cancel discards those unsaved removals. The previously saved details remain.",
          "narrationText": "Cancel discards those unsaved removals. The previously saved details remain.",
          "startFrame": 678,
          "endFrameExclusive": 828,
          "startSeconds": 22.6,
          "endSeconds": 27.6,
          "actions": [
            {
              "action": "click",
              "target": "#cancel-editor"
            },
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] [data-action=\"edit\"]"
            },
            {
              "action": "highlight",
              "target": "#task-notes"
            }
          ],
          "originalStartFrame": 675,
          "originalEndFrameExclusive": 825,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/edit-06.mp3",
            "taskId": "0128b544-c431-4ebd-b0ff-e70cf52cf4f4",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1089600,
            "endSampleExclusive": 1316970,
            "startSeconds": 22.7,
            "endSeconds": 27.436875,
            "startFrame": 681,
            "endFrameExclusive": 824,
            "sourceSha256": "f603b7850860f91ca9140950fdc6330acd55641b1e213b98ea078ba58b760b71"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "f451048b31ea2ee6aca5b8fa36b20c6aac59e4d21088b99e3764d3a0c43e60e3",
      "masterSha256": "10862e96060bb0a1b71dd3382e9ec1f6d08748fb3e9faa2f1686044b276d0374",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/edit.mp4",
      "originalMasterSha256": "c1d7fd9afc6e1b2f7b9ab51fe66caba03558f255e7214385e13e6599184ffdf5",
      "originalFrameCount": 825,
      "addedNarrationHoldFrames": 3,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "edit-narration.m4a",
        "trackMaster": "output/narration/tracks/edit.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "lists",
      "title": "Organize tasks into Personal, Work, and Ideas",
      "video": "lists.mp4",
      "poster": "lists-poster.jpg",
      "captions": "lists.vtt",
      "srt": "lists.srt",
      "subtitleLog": "lists.json",
      "sourceMaster": "output/video-masters/lists.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 592,
      "durationSeconds": 19.733333333333334,
      "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": "lists-01",
          "helpStep": 1,
          "stepTitle": "Open a list",
          "text": "Select Work to show tasks assigned to the Work list.",
          "narrationText": "Select Work to show tasks assigned to the Work list.",
          "startFrame": 0,
          "endFrameExclusive": 115,
          "startSeconds": 0.0,
          "endSeconds": 3.8333333333333335,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"Work\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 115,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/lists-01.mp3",
            "taskId": "8ef989e6-043c-44b2-9362-1fc43a85513a",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 140776,
            "startSeconds": 0.1,
            "endSeconds": 2.9328333333333334,
            "startFrame": 3,
            "endFrameExclusive": 88,
            "sourceSha256": "beea6b30fc4fc9ad3de23f3c92bebff7dc26c26a18e6988dcfae6a1d155efbf3"
          }
        },
        {
          "id": "lists-02",
          "helpStep": 2,
          "stepTitle": "Create directly in that list",
          "text": "New tasks opened from a list inherit that list automatically.",
          "narrationText": "New tasks opened from a list inherit that list automatically.",
          "startFrame": 115,
          "endFrameExclusive": 241,
          "startSeconds": 3.8333333333333335,
          "endSeconds": 8.033333333333333,
          "actions": [
            {
              "action": "click",
              "target": "#new-task"
            },
            {
              "action": "highlight",
              "target": "#task-list"
            }
          ],
          "originalStartFrame": 115,
          "originalEndFrameExclusive": 241,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/lists-02.mp3",
            "taskId": "33ebd472-24bc-4b08-9359-28b597526963",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 188800,
            "endSampleExclusive": 358213,
            "startSeconds": 3.933333333333333,
            "endSeconds": 7.462770833333333,
            "startFrame": 118,
            "endFrameExclusive": 224,
            "sourceSha256": "f2f126349000f7b614b104f42fefedeea025e71db8d6cca2d89fe7e9501646e8"
          }
        },
        {
          "id": "lists-03",
          "helpStep": 2,
          "stepTitle": "Create directly in that list",
          "text": "Name the task and create it in Work.",
          "narrationText": "Name the task and create it in Work.",
          "startFrame": 241,
          "endFrameExclusive": 355,
          "startSeconds": 8.033333333333333,
          "endSeconds": 11.833333333333334,
          "actions": [
            {
              "action": "type",
              "target": "#task-title",
              "value": "Prepare meeting notes"
            },
            {
              "action": "click",
              "target": "#save-task"
            }
          ],
          "originalStartFrame": 241,
          "originalEndFrameExclusive": 355,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/lists-03.mp3",
            "taskId": "e87c1afe-3040-4e8f-a603-0158bfc59679",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 390400,
            "endSampleExclusive": 497398,
            "startSeconds": 8.133333333333333,
            "endSeconds": 10.362458333333333,
            "startFrame": 244,
            "endFrameExclusive": 311,
            "sourceSha256": "54c1cbd07649b17dfdcd8f2adc95c3a7ec08e7b690f9b7cdcb663b9ac3e40e24"
          }
        },
        {
          "id": "lists-04",
          "helpStep": 3,
          "stepTitle": "Move an existing task",
          "text": "To move a task, open its editor and choose another List.",
          "narrationText": "To move a task, open its editor and choose another List.",
          "startFrame": 355,
          "endFrameExclusive": 474,
          "startSeconds": 11.833333333333334,
          "endSeconds": 15.8,
          "actions": [
            {
              "action": "click",
              "target": ".task-row:first-of-type .task-name"
            },
            {
              "action": "select",
              "target": "#task-list",
              "value": "Ideas"
            }
          ],
          "originalStartFrame": 355,
          "originalEndFrameExclusive": 474,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/lists-04.mp3",
            "taskId": "1813d77b-2119-47b1-a08e-76be2dd4c485",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 572800,
            "endSampleExclusive": 737755,
            "startSeconds": 11.933333333333334,
            "endSeconds": 15.369895833333333,
            "startFrame": 358,
            "endFrameExclusive": 462,
            "sourceSha256": "8bd8c6f3bd09fff065c704c91f1800f02b1db83c622f693c4b55a1ccbf54b49d"
          }
        },
        {
          "id": "lists-05",
          "helpStep": 3,
          "stepTitle": "Move an existing task",
          "text": "Save changes, then open Ideas to confirm the moved task.",
          "narrationText": "Save changes, then open Ideas to confirm the moved task.",
          "startFrame": 474,
          "endFrameExclusive": 592,
          "startSeconds": 15.8,
          "endSeconds": 19.733333333333334,
          "actions": [
            {
              "action": "click",
              "target": "#save-task"
            },
            {
              "action": "click",
              "target": "[data-view=\"Ideas\"]"
            },
            {
              "action": "highlight",
              "target": ".task-row:first-of-type"
            }
          ],
          "originalStartFrame": 474,
          "originalEndFrameExclusive": 592,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/lists-05.mp3",
            "taskId": "a3bc6d7a-a7c5-46f7-b0ed-9af82c6559bd",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 763200,
            "endSampleExclusive": 930384,
            "startSeconds": 15.9,
            "endSeconds": 19.383,
            "startFrame": 477,
            "endFrameExclusive": 582,
            "sourceSha256": "c3e9879b909c17b6aed74163d158f226fefb668e5496a0b8d828ed4b3b2d559c"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "a719034e348f077268427706ce48220166932ef03c59dbaea34fc6d18215877c",
      "masterSha256": "8fd6db6c1f3f06a277dc5f51887777cf1ab48fe3c4f2fee19d0fd57b07bd1477",
      "controlsClearancePixels": 128,
      "originalFrameCount": 592,
      "addedNarrationHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "lists-narration.m4a",
        "trackMaster": "output/narration/tracks/lists.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "today",
      "title": "Plan Today and handle overdue tasks",
      "video": "today.mp4",
      "poster": "today-poster.jpg",
      "captions": "today.vtt",
      "srt": "today.srt",
      "subtitleLog": "today.json",
      "sourceMaster": "output/video-masters-narrated/today.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 835,
      "durationSeconds": 27.833333333333332,
      "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": "today-01",
          "helpStep": 1,
          "stepTitle": "Select Today",
          "text": "Select Today. It includes unfinished tasks due today and overdue tasks.",
          "narrationText": "Select Today. It includes unfinished tasks due today and overdue tasks.",
          "startFrame": 0,
          "endFrameExclusive": 149,
          "startSeconds": 0.0,
          "endSeconds": 4.966666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"today\"]"
            },
            {
              "action": "highlight",
              "target": "#task-area"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 143,
          "addedHoldFrames": 6,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/today-01.mp3",
            "taskId": "888879fa-5c0c-4940-aaa6-85e3f61f25b2",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 229941,
            "startSeconds": 0.1,
            "endSeconds": 4.7904375,
            "startFrame": 3,
            "endFrameExclusive": 144,
            "sourceSha256": "31d41ba50549ec5778247c707e974ee37c16e1cf8f1d98c55b6172134b315bf3"
          }
        },
        {
          "id": "today-02",
          "helpStep": 2,
          "stepTitle": "Add a task for today",
          "text": "New task opened from Today preselects the current date.",
          "narrationText": "New task opened from Today preselects the current date.",
          "startFrame": 149,
          "endFrameExclusive": 266,
          "startSeconds": 4.966666666666667,
          "endSeconds": 8.866666666666667,
          "actions": [
            {
              "action": "click",
              "target": "#new-task"
            },
            {
              "action": "highlight",
              "target": "#task-due"
            }
          ],
          "originalStartFrame": 143,
          "originalEndFrameExclusive": 260,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/today-02.mp3",
            "taskId": "f174c5f6-e001-4fb6-aff0-e39551519c8a",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 243200,
            "endSampleExclusive": 392551,
            "startSeconds": 5.066666666666666,
            "endSeconds": 8.178145833333334,
            "startFrame": 152,
            "endFrameExclusive": 246,
            "sourceSha256": "fc292252679b035055a6249cd2822733bddacf898500bbf6115205d247354a35"
          }
        },
        {
          "id": "today-03",
          "helpStep": 2,
          "stepTitle": "Add a task for today",
          "text": "You can create it with that date, or cancel this example.",
          "narrationText": "You can create it with that date, or cancel this example.",
          "startFrame": 266,
          "endFrameExclusive": 386,
          "startSeconds": 8.866666666666667,
          "endSeconds": 12.866666666666667,
          "actions": [
            {
              "action": "type",
              "target": "#task-title",
              "value": "Call the workshop venue"
            },
            {
              "action": "click",
              "target": "#save-task"
            }
          ],
          "originalStartFrame": 260,
          "originalEndFrameExclusive": 380,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/today-03.mp3",
            "taskId": "198769e9-e114-4afa-bc31-ac5fd1ff6b91",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 430400,
            "endSampleExclusive": 575293,
            "startSeconds": 8.966666666666667,
            "endSeconds": 11.985270833333333,
            "startFrame": 269,
            "endFrameExclusive": 360,
            "sourceSha256": "3be08271286b3def8d498378e25d97fa8cd78ad2885aa0e7128d1b14627d5ffe"
          }
        },
        {
          "id": "today-04",
          "helpStep": 3,
          "stepTitle": "Resolve an overdue task",
          "text": "Reschedule an overdue task by editing its Due date.",
          "narrationText": "Reschedule an overdue task by editing its Due date.",
          "startFrame": 386,
          "endFrameExclusive": 500,
          "startSeconds": 12.866666666666667,
          "endSeconds": 16.666666666666668,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-2\"] [data-action=\"edit\"]"
            },
            {
              "action": "fill",
              "target": "#task-due",
              "value": "2026-09-27"
            },
            {
              "action": "click",
              "target": "#save-task"
            }
          ],
          "originalStartFrame": 380,
          "originalEndFrameExclusive": 494,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/today-04.mp3",
            "taskId": "1dbd4277-1ed7-48a8-9f1f-e8ffd8d5389d",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 622400,
            "endSampleExclusive": 765064,
            "startSeconds": 12.966666666666667,
            "endSeconds": 15.938833333333333,
            "startFrame": 389,
            "endFrameExclusive": 479,
            "sourceSha256": "2f37878bf6ce1f4aac417d4b1f25380ca9f8c6deea25227fb3f312bfc3b13cf3"
          }
        },
        {
          "id": "today-05",
          "helpStep": 3,
          "stepTitle": "Resolve an overdue task",
          "text": "The rescheduled task appears in Upcoming. Completed tasks leave Today too.",
          "narrationText": "The rescheduled task appears in Upcoming. Completed tasks leave Today too.",
          "startFrame": 500,
          "endFrameExclusive": 656,
          "startSeconds": 16.666666666666668,
          "endSeconds": 21.866666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"upcoming\"]"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-2\"]"
            },
            {
              "action": "click",
              "target": "[data-view=\"today\"]"
            },
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] .task-check"
            }
          ],
          "originalStartFrame": 494,
          "originalEndFrameExclusive": 641,
          "addedHoldFrames": 9,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/today-05.mp3",
            "taskId": "dc4b99e4-8408-4db8-abf8-620a1070d215",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 804800,
            "endSampleExclusive": 1041087,
            "startSeconds": 16.766666666666666,
            "endSeconds": 21.6893125,
            "startFrame": 503,
            "endFrameExclusive": 651,
            "sourceSha256": "b721734c07d36d0dbe050ecc239db4312dd360599dcfb122ec597cde93dd2fd5"
          }
        },
        {
          "id": "today-06",
          "helpStep": 4,
          "stepTitle": "Understand an empty view",
          "text": "When no unfinished tasks remain due today, this view is clear. Other tasks still exist.",
          "narrationText": "When no unfinished tasks remain due today, this view is clear. Other tasks still exist.",
          "startFrame": 656,
          "endFrameExclusive": 835,
          "startSeconds": 21.866666666666667,
          "endSeconds": 27.833333333333332,
          "actions": [
            {
              "action": "click",
              "target": ".task-row .task-check"
            },
            {
              "action": "highlight",
              "target": ".empty"
            }
          ],
          "originalStartFrame": 641,
          "originalEndFrameExclusive": 808,
          "addedHoldFrames": 12,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/today-06.mp3",
            "taskId": "584f64a3-cb70-4efa-b91b-8fdbb2aff46f",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1054400,
            "endSampleExclusive": 1328581,
            "startSeconds": 21.966666666666665,
            "endSeconds": 27.678770833333335,
            "startFrame": 659,
            "endFrameExclusive": 831,
            "sourceSha256": "30427a55671efaae8f8acacf9824c47d9dc914fcb60977cc842e1df443bd16fb"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "0a094c256aa185d7ec0e11ae6c57b1df975f6b58e845e210c53221a7c72ed8a3",
      "masterSha256": "e647b587f22dcc62d2740e5d45acf7ab6eb67a49e10523b4866f7e98859942e7",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/today.mp4",
      "originalMasterSha256": "c6d50b7a2be8a9aa480e27e90cb104fbd640c8659c06d59625b90f5bbb607463",
      "originalFrameCount": 808,
      "addedNarrationHoldFrames": 27,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "today-narration.m4a",
        "trackMaster": "output/narration/tracks/today.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."
      }
    },
    {
      "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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "complete",
      "title": "Complete and reopen tasks",
      "video": "complete.mp4",
      "poster": "complete-poster.jpg",
      "captions": "complete.vtt",
      "srt": "complete.srt",
      "subtitleLog": "complete.json",
      "sourceMaster": "output/video-masters-narrated/complete.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 680,
      "durationSeconds": 22.666666666666668,
      "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": "complete-01",
          "helpStep": 1,
          "stepTitle": "Complete a task",
          "text": "Check the box beside the task to mark it complete.",
          "narrationText": "Check the box beside the task to mark it complete.",
          "startFrame": 0,
          "endFrameExclusive": 115,
          "startSeconds": 0.0,
          "endSeconds": 3.8333333333333335,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] .task-check"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 115,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/complete-01.mp3",
            "taskId": "084a8b17-3b23-44f0-99d1-182b42721a42",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 134089,
            "startSeconds": 0.1,
            "endSeconds": 2.7935208333333335,
            "startFrame": 3,
            "endFrameExclusive": 84,
            "sourceSha256": "bd516107534099cd4d6ac1d459d9cb59f659635f8dac1bbd01f408e8875ee059"
          }
        },
        {
          "id": "complete-02",
          "helpStep": 2,
          "stepTitle": "Review finished work",
          "text": "Open Completed to review finished tasks and their checked boxes.",
          "narrationText": "Open Completed to review finished tasks and their checked boxes.",
          "startFrame": 115,
          "endFrameExclusive": 246,
          "startSeconds": 3.8333333333333335,
          "endSeconds": 8.2,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"completed\"]"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-1\"]"
            }
          ],
          "originalStartFrame": 115,
          "originalEndFrameExclusive": 246,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/complete-02.mp3",
            "taskId": "6c5412f3-3c44-46cc-a561-0cc4ec363952",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 188800,
            "endSampleExclusive": 364900,
            "startSeconds": 3.933333333333333,
            "endSeconds": 7.602083333333334,
            "startFrame": 118,
            "endFrameExclusive": 229,
            "sourceSha256": "de4c638f4ad29d5781267805a2b483c699bc37d844447315a0b1d90527950908"
          }
        },
        {
          "id": "complete-03",
          "helpStep": 3,
          "stepTitle": "Reopen a task",
          "text": "Uncheck the task to reopen it. It leaves the Completed view.",
          "narrationText": "Uncheck the task to reopen it. It leaves the Completed view.",
          "startFrame": 246,
          "endFrameExclusive": 371,
          "startSeconds": 8.2,
          "endSeconds": 12.366666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] .task-check"
            }
          ],
          "originalStartFrame": 246,
          "originalEndFrameExclusive": 371,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/complete-03.mp3",
            "taskId": "af7f5f35-fa70-4bbd-9a9b-a17b0510611e",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 398400,
            "endSampleExclusive": 574500,
            "startSeconds": 8.3,
            "endSeconds": 11.96875,
            "startFrame": 249,
            "endFrameExclusive": 360,
            "sourceSha256": "8f6dd6a00f2f41f62f987455294bd4599223d66108dfe537c77a271f82474c99"
          }
        },
        {
          "id": "complete-04",
          "helpStep": 4,
          "stepTitle": "Undo an accidental status change",
          "text": "Select Undo within 12 seconds to restore the previous completion status.",
          "narrationText": "Select Undo within 12 seconds to restore the previous completion status.",
          "startFrame": 371,
          "endFrameExclusive": 518,
          "startSeconds": 12.366666666666667,
          "endSeconds": 17.266666666666666,
          "actions": [
            {
              "action": "click",
              "target": "#undo"
            }
          ],
          "originalStartFrame": 371,
          "originalEndFrameExclusive": 515,
          "addedHoldFrames": 3,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/complete-04.mp3",
            "taskId": "d9d6cad9-3eb3-4305-b61d-285c6ee65e71",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 598400,
            "endSampleExclusive": 821312,
            "startSeconds": 12.466666666666667,
            "endSeconds": 17.110666666666667,
            "startFrame": 374,
            "endFrameExclusive": 514,
            "sourceSha256": "54c5093c48acefbef313260adc4e103a345b9f0c1955781f9ef6e71551de2a11"
          }
        },
        {
          "id": "complete-05",
          "helpStep": 3,
          "stepTitle": "Reopen a task",
          "text": "Reopened tasks keep their details and can be found in All tasks or their named list.",
          "narrationText": "Reopened tasks keep their details and can be found in All tasks or their named list.",
          "startFrame": 518,
          "endFrameExclusive": 680,
          "startSeconds": 17.266666666666666,
          "endSeconds": 22.666666666666668,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] .task-check"
            },
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-1\"]"
            }
          ],
          "originalStartFrame": 515,
          "originalEndFrameExclusive": 677,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/complete-05.mp3",
            "taskId": "225fe4bd-d265-4199-b9db-8217480f694e",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 833600,
            "endSampleExclusive": 1067657,
            "startSeconds": 17.366666666666667,
            "endSeconds": 22.242854166666667,
            "startFrame": 521,
            "endFrameExclusive": 668,
            "sourceSha256": "e44ae8c186faa9eb326668cca6a77e7acfbc7db730d249fd113a4a9ae97501c2"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "d05c034c290a18753bdf0aea0d6fa12b5ddf7a01d0dee07ffc24cd65f32dd0d2",
      "masterSha256": "907a4bd6df5c331eca7e2b2b30c423b69a2a277f7165c8b318fe2daf328ccd55",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/complete.mp4",
      "originalMasterSha256": "7d8dbb59f5f6d401f7f58165f8692539f1060fa637098b4230f79d3612a45a8c",
      "originalFrameCount": 677,
      "addedNarrationHoldFrames": 3,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "complete-narration.m4a",
        "trackMaster": "output/narration/tracks/complete.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "delete",
      "title": "Delete a task and use Undo",
      "video": "delete.mp4",
      "poster": "delete-poster.jpg",
      "captions": "delete.vtt",
      "srt": "delete.srt",
      "subtitleLog": "delete.json",
      "sourceMaster": "output/video-masters-narrated/delete.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 914,
      "durationSeconds": 30.466666666666665,
      "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": "delete-01",
          "helpStep": 1,
          "stepTitle": "Choose the correct task",
          "text": "Read the title and details to identify the task you want to delete.",
          "narrationText": "Read the title and details to identify the task you want to delete.",
          "startFrame": 0,
          "endFrameExclusive": 136,
          "startSeconds": 0.0,
          "endSeconds": 4.533333333333333,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"Ideas\"]"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-4\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 136,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/delete-01.mp3",
            "taskId": "b47553fe-76e2-4ea3-be1f-8039b7bf38ed",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 187588,
            "startSeconds": 0.1,
            "endSeconds": 3.9080833333333334,
            "startFrame": 3,
            "endFrameExclusive": 118,
            "sourceSha256": "4241bbacf1c0169f6086656d214deb081346ca7d84c6eeecc44dac9a2e68ac03"
          }
        },
        {
          "id": "delete-02",
          "helpStep": 2,
          "stepTitle": "Select the row delete button",
          "text": "Select the row\u2019s \u00d7 button. Deletion happens immediately, without a confirmation.",
          "narrationText": "Select the row\u2019s \u00d7 button. Deletion happens immediately, without a confirmation.",
          "startFrame": 136,
          "endFrameExclusive": 293,
          "startSeconds": 4.533333333333333,
          "endSeconds": 9.766666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-4\"] [data-action=\"delete\"]"
            }
          ],
          "originalStartFrame": 136,
          "originalEndFrameExclusive": 293,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/delete-02.mp3",
            "taskId": "fff35a3d-f97f-445f-b1ac-9869eb74b826",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 222400,
            "endSampleExclusive": 449770,
            "startSeconds": 4.633333333333334,
            "endSeconds": 9.370208333333334,
            "startFrame": 139,
            "endFrameExclusive": 282,
            "sourceSha256": "6bff5c6d82e17ee283ecc9c7ba329b5e194cba40a37841a71e9ffb1b2f975c95"
          }
        },
        {
          "id": "delete-03",
          "helpStep": 3,
          "stepTitle": "Undo promptly if needed",
          "text": "Select Undo within 12 seconds to restore the task and its details.",
          "narrationText": "Select Undo within 12 seconds to restore the task and its details.",
          "startFrame": 293,
          "endFrameExclusive": 427,
          "startSeconds": 9.766666666666667,
          "endSeconds": 14.233333333333333,
          "actions": [
            {
              "action": "click",
              "target": "#undo"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-4\"]"
            }
          ],
          "originalStartFrame": 293,
          "originalEndFrameExclusive": 427,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/delete-03.mp3",
            "taskId": "7f3b3274-b0ad-46bd-b78f-18ad37d0f20e",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 473600,
            "endSampleExclusive": 674221,
            "startSeconds": 9.866666666666667,
            "endSeconds": 14.046270833333333,
            "startFrame": 296,
            "endFrameExclusive": 422,
            "sourceSha256": "98a06ea61dc35e7a8b6e494912dc64057a947888a57bfde9df9e46a3aaed6ca4"
          }
        },
        {
          "id": "delete-04",
          "helpStep": 4,
          "stepTitle": "Recover after Undo expires",
          "text": "When Undo is no longer visible, recovery needs an earlier backup. There is no trash folder.",
          "narrationText": "When Undo is no longer visible, recovery needs an earlier backup. There is no trash folder.",
          "startFrame": 427,
          "endFrameExclusive": 606,
          "startSeconds": 14.233333333333333,
          "endSeconds": 20.2,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-4\"] [data-action=\"delete\"]"
            },
            {
              "action": "click",
              "target": "#dismiss-toast"
            },
            {
              "action": "highlight",
              "target": "#import"
            }
          ],
          "originalStartFrame": 427,
          "originalEndFrameExclusive": 601,
          "addedHoldFrames": 5,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/delete-04.mp3",
            "taskId": "10113d4c-38af-40dd-aacd-adb2755f1f08",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 688000,
            "endSampleExclusive": 962181,
            "startSeconds": 14.333333333333334,
            "endSeconds": 20.0454375,
            "startFrame": 430,
            "endFrameExclusive": 602,
            "sourceSha256": "9d30890d3e2cc92ab69d6db67fa2cd5053420128e0b598d69182fc73b273fc78"
          }
        },
        {
          "id": "delete-05",
          "helpStep": 4,
          "stepTitle": "Recover after Undo expires",
          "text": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "narrationText": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "startFrame": 606,
          "endFrameExclusive": 772,
          "startSeconds": 20.2,
          "endSeconds": 25.733333333333334,
          "actions": [
            {
              "action": "choose-file",
              "name": "today-list-example.json",
              "note": "Native operating-system chooser is outside browser screencast."
            }
          ],
          "originalStartFrame": 601,
          "originalEndFrameExclusive": 767,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/delete-05.mp3",
            "taskId": "ef8eb9c7-4de4-44c2-9295-e0cbb575b1e7",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 974400,
            "endSampleExclusive": 1224061,
            "startSeconds": 20.3,
            "endSeconds": 25.501270833333333,
            "startFrame": 609,
            "endFrameExclusive": 766,
            "sourceSha256": "78974730a35fd7ec287f9d67799daa34c92176c6c11edfa587951dba7f40c37d"
          }
        },
        {
          "id": "delete-06",
          "helpStep": 4,
          "stepTitle": "Recover after Undo expires",
          "text": "Import restored the missing task and kept the existing tasks unchanged.",
          "narrationText": "Import restored the missing task and kept the existing tasks unchanged.",
          "startFrame": 772,
          "endFrameExclusive": 914,
          "startSeconds": 25.733333333333334,
          "endSeconds": 30.466666666666665,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"Ideas\"]"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-4\"]"
            }
          ],
          "originalStartFrame": 767,
          "originalEndFrameExclusive": 909,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/delete-06.mp3",
            "taskId": "41d445d0-1a52-46a2-893c-dd3bd72c5fe2",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1240000,
            "endSampleExclusive": 1433933,
            "startSeconds": 25.833333333333332,
            "endSeconds": 29.873604166666667,
            "startFrame": 775,
            "endFrameExclusive": 897,
            "sourceSha256": "c5349a26964b35ae30b8885fb8505f8972b64c22df95525a7f99c14fdd084a7d"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "6345f45d0b166f105c2a2a92db11c62151c0f2ba446c90f75f51ca159c1f4ba0",
      "masterSha256": "2a3692abe5c9892ab5d5a0593002013d99ddfd65f1dea5f1a7f7ac3c2b9f9ead",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/delete.mp4",
      "originalMasterSha256": "d6246ce292ad78632d99e86403cdf2c3b44d3a2ccdbd024bdec4a9673c4bad8c",
      "originalFrameCount": 909,
      "addedNarrationHoldFrames": 5,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "delete-narration.m4a",
        "trackMaster": "output/narration/tracks/delete.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "search",
      "title": "Search tasks and clear filters",
      "video": "search.mp4",
      "poster": "search-poster.jpg",
      "captions": "search.vtt",
      "srt": "search.srt",
      "subtitleLog": "search.json",
      "sourceMaster": "output/video-masters-narrated/search.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 687,
      "durationSeconds": 22.9,
      "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": "search-01",
          "helpStep": 1,
          "stepTitle": "Choose the search scope",
          "text": "Choose All tasks to search across every list and completion status.",
          "narrationText": "Choose All tasks to search across every list and completion status.",
          "startFrame": 0,
          "endFrameExclusive": 136,
          "startSeconds": 0.0,
          "endSeconds": 4.533333333333333,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 136,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/search-01.mp3",
            "taskId": "8de2866b-0bef-470d-b5b8-89ad05a9a2dc",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 185359,
            "startSeconds": 0.1,
            "endSeconds": 3.861645833333333,
            "startFrame": 3,
            "endFrameExclusive": 116,
            "sourceSha256": "724773d30e284f016d2496c2cdd96a364fe4ec0274e1aa0de1297c9e4ea9a4e9"
          }
        },
        {
          "id": "search-02",
          "helpStep": 2,
          "stepTitle": "Enter a word or phrase",
          "text": "Type milestones in Search tasks. Search includes names, notes, and list names.",
          "narrationText": "Type milestones in Search tasks. Search includes names, notes, and list names.",
          "startFrame": 136,
          "endFrameExclusive": 299,
          "startSeconds": 4.533333333333333,
          "endSeconds": 9.966666666666667,
          "actions": [
            {
              "action": "type",
              "target": "#search",
              "value": "milestones"
            }
          ],
          "originalStartFrame": 136,
          "originalEndFrameExclusive": 290,
          "addedHoldFrames": 9,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/search-02.mp3",
            "taskId": "4efc89d0-b102-4008-8993-1179b96b758b",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 222400,
            "endSampleExclusive": 469832,
            "startSeconds": 4.633333333333334,
            "endSeconds": 9.788166666666667,
            "startFrame": 139,
            "endFrameExclusive": 294,
            "sourceSha256": "2bff48ceb17af12f9a154238f3fddc9148b232addb3c16d5e396c894196cc237"
          }
        },
        {
          "id": "search-03",
          "helpStep": 3,
          "stepTitle": "Review the matching rows",
          "text": "This task matches because its notes include milestones.",
          "narrationText": "This task matches because its notes include milestones.",
          "startFrame": 299,
          "endFrameExclusive": 415,
          "startSeconds": 9.966666666666667,
          "endSeconds": 13.833333333333334,
          "actions": [
            {
              "action": "highlight",
              "target": "[data-id=\"demo-1\"]"
            }
          ],
          "originalStartFrame": 290,
          "originalEndFrameExclusive": 406,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/search-03.mp3",
            "taskId": "dafcc2c8-7702-4ee2-a7da-b958db3a22d4",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 483200,
            "endSampleExclusive": 645926,
            "startSeconds": 10.066666666666666,
            "endSeconds": 13.456791666666666,
            "startFrame": 302,
            "endFrameExclusive": 404,
            "sourceSha256": "bf7a1856e21c45ede24b2fb49f2a93ca8742e04c7f8a2a0d53d8fbe5b2e2533a"
          }
        },
        {
          "id": "search-04",
          "helpStep": 4,
          "stepTitle": "Reset a search with no matches",
          "text": "A search with no matches offers Clear filters.",
          "narrationText": "A search with no matches offers Clear filters.",
          "startFrame": 415,
          "endFrameExclusive": 530,
          "startSeconds": 13.833333333333334,
          "endSeconds": 17.666666666666668,
          "actions": [
            {
              "action": "type",
              "target": "#search",
              "value": "unfindable"
            },
            {
              "action": "highlight",
              "target": ".empty"
            }
          ],
          "originalStartFrame": 406,
          "originalEndFrameExclusive": 521,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/search-04.mp3",
            "taskId": "03a7e6b7-0263-47b6-bba6-261a4d88d0d1",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 668800,
            "endSampleExclusive": 800318,
            "startSeconds": 13.933333333333334,
            "endSeconds": 16.673291666666668,
            "startFrame": 418,
            "endFrameExclusive": 501,
            "sourceSha256": "c56fdee5c7be14327ba3a49cd9b1e6cf67ef3087aab9cf9cd1770759c0797907"
          }
        },
        {
          "id": "search-05",
          "helpStep": 4,
          "stepTitle": "Reset a search with no matches",
          "text": "Clear filters empties search and resets priority, while keeping the current view.",
          "narrationText": "Clear filters empties search and resets priority, while keeping the current view.",
          "startFrame": 530,
          "endFrameExclusive": 687,
          "startSeconds": 17.666666666666668,
          "endSeconds": 22.9,
          "actions": [
            {
              "action": "click",
              "target": "#clear-filters"
            },
            {
              "action": "highlight",
              "target": ".toolbar"
            }
          ],
          "originalStartFrame": 521,
          "originalEndFrameExclusive": 678,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/search-05.mp3",
            "taskId": "58380123-d46a-47b5-9932-c27d6be27d9b",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 852800,
            "endSampleExclusive": 1062337,
            "startSeconds": 17.766666666666666,
            "endSeconds": 22.132020833333332,
            "startFrame": 533,
            "endFrameExclusive": 664,
            "sourceSha256": "4aa8504b38b905721c7ca060a375e561b647e98dd7bb40672925f8e521d21efe"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "e2bf3309c7ee9f4e387a32fafa88878bbc21db707a4d2ba2096ba061bc371d0a",
      "masterSha256": "7fbb68dd0d0c9f4eb8d40bd98318e14059097ab1cd904a7ec3a540c7e88f2197",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/search.mp4",
      "originalMasterSha256": "2766c5cce03f0281cfa57a06967411fbed9c9308b5a899718ab6ebf514c68bec",
      "originalFrameCount": 678,
      "addedNarrationHoldFrames": 9,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "search-narration.m4a",
        "trackMaster": "output/narration/tracks/search.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "priority",
      "title": "Set priorities and filter by importance",
      "video": "priority.mp4",
      "poster": "priority-poster.jpg",
      "captions": "priority.vtt",
      "srt": "priority.srt",
      "subtitleLog": "priority.json",
      "sourceMaster": "output/video-masters/priority.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 656,
      "durationSeconds": 21.866666666666667,
      "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": "priority-01",
          "helpStep": 1,
          "stepTitle": "Assign a priority",
          "text": "Open a task, choose its Priority, and save the change.",
          "narrationText": "Open a task, choose its Priority, and save the change.",
          "startFrame": 0,
          "endFrameExclusive": 116,
          "startSeconds": 0.0,
          "endSeconds": 3.8666666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-5\"] [data-action=\"edit\"]"
            },
            {
              "action": "select",
              "target": "#task-priority",
              "value": "high"
            },
            {
              "action": "click",
              "target": "#save-task"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 116,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/priority-01.mp3",
            "taskId": "a007cbe7-4473-460e-bb4c-20ff2ed34c6e",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 160838,
            "startSeconds": 0.1,
            "endSeconds": 3.350791666666667,
            "startFrame": 3,
            "endFrameExclusive": 101,
            "sourceSha256": "1c223db40d5c709a42f6372be4e05a2792a0caa910559f791982ea5f27c72e52"
          }
        },
        {
          "id": "priority-02",
          "helpStep": 2,
          "stepTitle": "Filter the visible tasks",
          "text": "Choose High priority in the filter above the task list.",
          "narrationText": "Choose High priority in the filter above the task list.",
          "startFrame": 116,
          "endFrameExclusive": 233,
          "startSeconds": 3.8666666666666667,
          "endSeconds": 7.766666666666667,
          "actions": [
            {
              "action": "select",
              "target": "#priority-filter",
              "value": "high"
            }
          ],
          "originalStartFrame": 116,
          "originalEndFrameExclusive": 233,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/priority-02.mp3",
            "taskId": "d6415f2d-d0c9-4aa2-a6ff-dab018a39d5e",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 190400,
            "endSampleExclusive": 339751,
            "startSeconds": 3.966666666666667,
            "endSeconds": 7.078145833333333,
            "startFrame": 119,
            "endFrameExclusive": 213,
            "sourceSha256": "cb022407bfb5f8db1a48bb71dfa180d597a5f4e3d9f8ae5d1fe92d97ddafb732"
          }
        },
        {
          "id": "priority-03",
          "helpStep": 3,
          "stepTitle": "Read the result",
          "text": "Only matching tasks remain. The High priority badges confirm their priority.",
          "narrationText": "Only matching tasks remain. The High priority badges confirm their priority.",
          "startFrame": 233,
          "endFrameExclusive": 383,
          "startSeconds": 7.766666666666667,
          "endSeconds": 12.766666666666667,
          "actions": [
            {
              "action": "highlight",
              "target": "#task-area"
            }
          ],
          "originalStartFrame": 233,
          "originalEndFrameExclusive": 383,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/priority-03.mp3",
            "taskId": "ebba0089-2a20-4bdb-9a5c-731d3f49fc91",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 377600,
            "endSampleExclusive": 600512,
            "startSeconds": 7.866666666666666,
            "endSeconds": 12.510666666666667,
            "startFrame": 236,
            "endFrameExclusive": 376,
            "sourceSha256": "0267d429e88e705616573b07af6f69f57f52f92ed93ff2888e03bd4be5ca05b1"
          }
        },
        {
          "id": "priority-04",
          "helpStep": 4,
          "stepTitle": "Return to every priority",
          "text": "Choose All priorities to bring the other tasks back.",
          "narrationText": "Choose All priorities to bring the other tasks back.",
          "startFrame": 383,
          "endFrameExclusive": 497,
          "startSeconds": 12.766666666666667,
          "endSeconds": 16.566666666666666,
          "actions": [
            {
              "action": "select",
              "target": "#priority-filter",
              "value": "all"
            },
            {
              "action": "highlight",
              "target": "#task-area"
            }
          ],
          "originalStartFrame": 383,
          "originalEndFrameExclusive": 497,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/priority-04.mp3",
            "taskId": "08adc1a6-ca04-4b58-ba53-36d385ece3a9",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 617600,
            "endSampleExclusive": 760264,
            "startSeconds": 12.866666666666667,
            "endSeconds": 15.838833333333334,
            "startFrame": 386,
            "endFrameExclusive": 476,
            "sourceSha256": "7eb26a47887eb279d36f394f3b264f4d5622697050f405aa46036558b309da7d"
          }
        },
        {
          "id": "priority-05",
          "helpStep": 4,
          "stepTitle": "Return to every priority",
          "text": "To order all priorities instead of filtering, choose Priority in the sort control.",
          "narrationText": "To order all priorities instead of filtering, choose Priority in the sort control.",
          "startFrame": 497,
          "endFrameExclusive": 656,
          "startSeconds": 16.566666666666666,
          "endSeconds": 21.866666666666667,
          "actions": [
            {
              "action": "select",
              "target": "#sort",
              "value": "priority"
            }
          ],
          "originalStartFrame": 497,
          "originalEndFrameExclusive": 656,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/priority-05.mp3",
            "taskId": "c2b1c71b-b091-44ee-9af3-b91f8966a8c7",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 800000,
            "endSampleExclusive": 1013995,
            "startSeconds": 16.666666666666668,
            "endSeconds": 21.124895833333333,
            "startFrame": 500,
            "endFrameExclusive": 634,
            "sourceSha256": "afbd39ff7772d3ce9181c804bea3b32dab60b8fa119c996ce967aab0bb9296f6"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "e41eafe03b3ecfb873578f6c839705a85d8922de0e171b27011b87ce8e99210b",
      "masterSha256": "398382581459c970af6c03e14f93daae4acc111121e80d525d487b1021c30f41",
      "controlsClearancePixels": 128,
      "originalFrameCount": 656,
      "addedNarrationHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "priority-narration.m4a",
        "trackMaster": "output/narration/tracks/priority.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "sort",
      "title": "Sort tasks",
      "video": "sort.mp4",
      "poster": "sort-poster.jpg",
      "captions": "sort.vtt",
      "srt": "sort.srt",
      "subtitleLog": "sort.json",
      "sourceMaster": "output/video-masters/sort.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 750,
      "durationSeconds": 25.0,
      "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": "sort-01",
          "helpStep": 1,
          "stepTitle": "Choose a view and filters",
          "text": "Select the view you want to sort. Here we use All tasks.",
          "narrationText": "Select the view you want to sort. Here we use All tasks.",
          "startFrame": 0,
          "endFrameExclusive": 119,
          "startSeconds": 0.0,
          "endSeconds": 3.966666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 119,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/sort-01.mp3",
            "taskId": "c54c23d6-235b-4ce9-9b48-fc45f8884168",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 174213,
            "startSeconds": 0.1,
            "endSeconds": 3.6294375,
            "startFrame": 3,
            "endFrameExclusive": 109,
            "sourceSha256": "62b43b5dd8e76a17706218303e74a5973f8512fcb7c88f9f52237ef8148b4a47"
          }
        },
        {
          "id": "sort-02",
          "helpStep": 2,
          "stepTitle": "Select an ordering",
          "text": "Due date puts earlier dates first and undated tasks last.",
          "narrationText": "Due date puts earlier dates first and undated tasks last.",
          "startFrame": 119,
          "endFrameExclusive": 239,
          "startSeconds": 3.966666666666667,
          "endSeconds": 7.966666666666667,
          "actions": [
            {
              "action": "select",
              "target": "#sort",
              "value": "due"
            },
            {
              "action": "highlight",
              "target": "#task-area"
            }
          ],
          "originalStartFrame": 119,
          "originalEndFrameExclusive": 239,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/sort-02.mp3",
            "taskId": "f6f7a6fd-3965-446c-a8ce-a338c38123a8",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 195200,
            "endSampleExclusive": 366842,
            "startSeconds": 4.066666666666666,
            "endSeconds": 7.642541666666666,
            "startFrame": 122,
            "endFrameExclusive": 230,
            "sourceSha256": "b27f7fb67fa5d50678e55e923b8371a9fc2301ebd54feb74235225ca949bec6e"
          }
        },
        {
          "id": "sort-03",
          "helpStep": 2,
          "stepTitle": "Select an ordering",
          "text": "Priority orders High, then Medium, then Low.",
          "narrationText": "Priority orders High, then Medium, then Low.",
          "startFrame": 239,
          "endFrameExclusive": 353,
          "startSeconds": 7.966666666666667,
          "endSeconds": 11.766666666666667,
          "actions": [
            {
              "action": "select",
              "target": "#sort",
              "value": "priority"
            }
          ],
          "originalStartFrame": 239,
          "originalEndFrameExclusive": 353,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/sort-03.mp3",
            "taskId": "74d9b512-b293-4b06-87a5-9dab686fb455",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 387200,
            "endSampleExclusive": 520947,
            "startSeconds": 8.066666666666666,
            "endSeconds": 10.8530625,
            "startFrame": 242,
            "endFrameExclusive": 326,
            "sourceSha256": "856d9915bac1cf14c421b1a5397a43d4ba9d190b6af20e697d0ba86e9a849ae6"
          }
        },
        {
          "id": "sort-04",
          "helpStep": 2,
          "stepTitle": "Select an ordering",
          "text": "A\u2013Z orders task names alphabetically.",
          "narrationText": "A\u2013Z orders task names alphabetically.",
          "startFrame": 353,
          "endFrameExclusive": 467,
          "startSeconds": 11.766666666666667,
          "endSeconds": 15.566666666666666,
          "actions": [
            {
              "action": "select",
              "target": "#sort",
              "value": "title"
            }
          ],
          "originalStartFrame": 353,
          "originalEndFrameExclusive": 467,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/sort-04.mp3",
            "taskId": "df4b7320-5696-4735-b4c1-2d215f01a2e4",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 569600,
            "endSampleExclusive": 681056,
            "startSeconds": 11.866666666666667,
            "endSeconds": 14.188666666666666,
            "startFrame": 356,
            "endFrameExclusive": 426,
            "sourceSha256": "84dc3c370be168bc165324db604ff8d88cfca72b6ffbcb2fb355a3d1adb46226"
          }
        },
        {
          "id": "sort-05",
          "helpStep": 3,
          "stepTitle": "Read each section separately",
          "text": "TO DO and COMPLETED remain separate sections, each using the chosen order.",
          "narrationText": "TO DO and COMPLETED remain separate sections, each using the chosen order.",
          "startFrame": 467,
          "endFrameExclusive": 614,
          "startSeconds": 15.566666666666666,
          "endSeconds": 20.466666666666665,
          "actions": [
            {
              "action": "scroll",
              "target": ".task-list:last-of-type"
            },
            {
              "action": "highlight",
              "target": ".task-list:last-of-type"
            }
          ],
          "originalStartFrame": 467,
          "originalEndFrameExclusive": 614,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/sort-05.mp3",
            "taskId": "228d05e9-9c6e-4fe5-aa4e-490210b990c5",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 752000,
            "endSampleExclusive": 968224,
            "startSeconds": 15.666666666666666,
            "endSeconds": 20.171333333333333,
            "startFrame": 470,
            "endFrameExclusive": 606,
            "sourceSha256": "854752607a474ae5b0f69eb5fa13c594e04a5f0513ea1a325105af1ebe27441c"
          }
        },
        {
          "id": "sort-06",
          "helpStep": 4,
          "stepTitle": "Change the order whenever needed",
          "text": "Switch back to Newest first to show the latest-created tasks first.",
          "narrationText": "Switch back to Newest first to show the latest-created tasks first.",
          "startFrame": 614,
          "endFrameExclusive": 750,
          "startSeconds": 20.466666666666665,
          "endSeconds": 25.0,
          "actions": [
            {
              "action": "scroll",
              "target": "#sort"
            },
            {
              "action": "select",
              "target": "#sort",
              "value": "created"
            }
          ],
          "originalStartFrame": 614,
          "originalEndFrameExclusive": 750,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/sort-06.mp3",
            "taskId": "cdebaad9-d5fa-4c6a-95d3-904fa7bcdad1",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 987200,
            "endSampleExclusive": 1156613,
            "startSeconds": 20.566666666666666,
            "endSeconds": 24.096104166666667,
            "startFrame": 617,
            "endFrameExclusive": 723,
            "sourceSha256": "66b3994c374969c1f805b274b516a0bd7d3bf8c4972d493d99add4a149f36702"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "f265a4606f2cbfd0f244c0ea842a48cd3ea8422a73b9365e82296e157ed845e7",
      "masterSha256": "b1325b81c56b5efed1ee905d7424ab050eebfc7a2abd6980bc2cdbe81fe5c5c2",
      "controlsClearancePixels": 128,
      "originalFrameCount": 750,
      "addedNarrationHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "sort-narration.m4a",
        "trackMaster": "output/narration/tracks/sort.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "progress",
      "title": "Understand progress and task counts",
      "video": "progress.mp4",
      "poster": "progress-poster.jpg",
      "captions": "progress.vtt",
      "srt": "progress.srt",
      "subtitleLog": "progress.json",
      "sourceMaster": "output/video-masters/progress.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 759,
      "durationSeconds": 25.3,
      "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": "progress-01",
          "helpStep": 1,
          "stepTitle": "Read the fraction",
          "text": "The fraction shows completed tasks out of all saved tasks: one of six here.",
          "narrationText": "The fraction shows completed tasks out of all saved tasks: one of six here.",
          "startFrame": 0,
          "endFrameExclusive": 149,
          "startSeconds": 0.0,
          "endSeconds": 4.966666666666667,
          "actions": [
            {
              "action": "highlight",
              "target": ".overview"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 149,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/progress-01.mp3",
            "taskId": "95898548-0514-42ba-a93f-2a219698fc72",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 223254,
            "startSeconds": 0.1,
            "endSeconds": 4.651125,
            "startFrame": 3,
            "endFrameExclusive": 140,
            "sourceSha256": "97e3b9208e2f000c10f209c3b1ffa9e0dfee653f2f9c5d5701b61c5913e7de9f"
          }
        },
        {
          "id": "progress-02",
          "helpStep": 2,
          "stepTitle": "Read the remaining count",
          "text": "The remaining count covers the whole workspace. Complete a task to update it.",
          "narrationText": "The remaining count covers the whole workspace. Complete a task to update it.",
          "startFrame": 149,
          "endFrameExclusive": 301,
          "startSeconds": 4.966666666666667,
          "endSeconds": 10.033333333333333,
          "actions": [
            {
              "action": "click",
              "target": "[data-id=\"demo-1\"] .task-check"
            },
            {
              "action": "highlight",
              "target": ".overview"
            }
          ],
          "originalStartFrame": 149,
          "originalEndFrameExclusive": 301,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/progress-02.mp3",
            "taskId": "1fcf4d23-be93-4ddf-9ecf-0d540eb18146",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 243200,
            "endSampleExclusive": 461654,
            "startSeconds": 5.066666666666666,
            "endSeconds": 9.617791666666667,
            "startFrame": 152,
            "endFrameExclusive": 289,
            "sourceSha256": "811a3567180a0c932421f0a159dcdef6f334450d3f2d82dae48069e32449e092"
          }
        },
        {
          "id": "progress-03",
          "helpStep": 3,
          "stepTitle": "Compare navigation and section badges",
          "text": "List badges count unfinished tasks. Section headings count the visible rows.",
          "narrationText": "List badges count unfinished tasks. Section headings count the visible rows.",
          "startFrame": 301,
          "endFrameExclusive": 451,
          "startSeconds": 10.033333333333333,
          "endSeconds": 15.033333333333333,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"Work\"]"
            },
            {
              "action": "highlight",
              "target": "#navigation"
            },
            {
              "action": "highlight",
              "target": "#task-area"
            }
          ],
          "originalStartFrame": 301,
          "originalEndFrameExclusive": 451,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/progress-03.mp3",
            "taskId": "82e594c9-bb47-4ae4-8eba-9ea9b80d32d1",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 486400,
            "endSampleExclusive": 713770,
            "startSeconds": 10.133333333333333,
            "endSeconds": 14.870208333333334,
            "startFrame": 304,
            "endFrameExclusive": 447,
            "sourceSha256": "d8147a3389483a8aec3b769f09403444869e09555e78d91edf1b2c8d91e9ecc0"
          }
        },
        {
          "id": "progress-04",
          "helpStep": 4,
          "stepTitle": "Interpret all-done and empty states",
          "text": "A clear Today view does not mean every task is complete. Other views may still contain work.",
          "narrationText": "A clear Today view does not mean every task is complete. Other views may still contain work.",
          "startFrame": 451,
          "endFrameExclusive": 626,
          "startSeconds": 15.033333333333333,
          "endSeconds": 20.866666666666667,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"today\"]"
            },
            {
              "action": "click",
              "target": "[data-id=\"demo-2\"] .task-check"
            },
            {
              "action": "highlight",
              "target": ".empty"
            }
          ],
          "originalStartFrame": 451,
          "originalEndFrameExclusive": 626,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/progress-04.mp3",
            "taskId": "850f639b-733d-41b1-91d1-695aedd50606",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 726400,
            "endSampleExclusive": 993894,
            "startSeconds": 15.133333333333333,
            "endSeconds": 20.706125,
            "startFrame": 454,
            "endFrameExclusive": 622,
            "sourceSha256": "24f1c2ceb05f550a7240f08cf303a14d52025ccc4d574257d5b1aa879d35731f"
          }
        },
        {
          "id": "progress-05",
          "helpStep": 4,
          "stepTitle": "Interpret all-done and empty states",
          "text": "All tasks shows the unfinished work and completed tasks together.",
          "narrationText": "All tasks shows the unfinished work and completed tasks together.",
          "startFrame": 626,
          "endFrameExclusive": 759,
          "startSeconds": 20.866666666666667,
          "endSeconds": 25.3,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            },
            {
              "action": "highlight",
              "target": ".overview"
            }
          ],
          "originalStartFrame": 626,
          "originalEndFrameExclusive": 759,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/progress-05.mp3",
            "taskId": "640a4ee6-7818-4d11-8b4f-1400de86773f",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1006400,
            "endSampleExclusive": 1189188,
            "startSeconds": 20.966666666666665,
            "endSeconds": 24.77475,
            "startFrame": 629,
            "endFrameExclusive": 744,
            "sourceSha256": "3f838f12e4ca3cbbd85b5250aeaf39eb60ee0429e93f938f0b8c1e10c51cb97a"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "14663fd3f868be049ca530a0852e68bbd1d96d4ed451404ffa4c731f84fd49c6",
      "masterSha256": "f602f77482ef9d6362987400b3bb0f5ce169a0aa5c41dfb80d5f55583273f1c0",
      "controlsClearancePixels": 128,
      "originalFrameCount": 759,
      "addedNarrationHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "progress-narration.m4a",
        "trackMaster": "output/narration/tracks/progress.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "export",
      "title": "Export a backup",
      "video": "export.mp4",
      "poster": "export-poster.jpg",
      "captions": "export.vtt",
      "srt": "export.srt",
      "subtitleLog": "export.json",
      "sourceMaster": "output/video-masters/export.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 1054,
      "durationSeconds": 35.13333333333333,
      "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": "export-01",
          "helpStep": 1,
          "stepTitle": "Find Export backup",
          "text": "Find Export backup at the bottom of the desktop sidebar.",
          "narrationText": "Find Export backup at the bottom of the desktop sidebar.",
          "startFrame": 0,
          "endFrameExclusive": 119,
          "startSeconds": 0.0,
          "endSeconds": 3.966666666666667,
          "actions": [
            {
              "action": "highlight",
              "target": "#export"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 119,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/export-01.mp3",
            "taskId": "ee4a8d61-093c-434b-bdc7-8d5af403112b",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 160838,
            "startSeconds": 0.1,
            "endSeconds": 3.350791666666667,
            "startFrame": 3,
            "endFrameExclusive": 101,
            "sourceSha256": "05877b93a6d34776f412b0c7cf6af9af33d885165e1dad33758b73e2e17d94f2"
          }
        },
        {
          "id": "export-02",
          "helpStep": 2,
          "stepTitle": "Download the backup",
          "text": "Select Export backup to download all saved tasks as a JSON file.",
          "narrationText": "Select Export backup to download all saved tasks as a JSON file.",
          "startFrame": 119,
          "endFrameExclusive": 250,
          "startSeconds": 3.966666666666667,
          "endSeconds": 8.333333333333334,
          "actions": [
            {
              "action": "download-backup"
            },
            {
              "action": "click",
              "target": "#export"
            }
          ],
          "originalStartFrame": 119,
          "originalEndFrameExclusive": 250,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/export-02.mp3",
            "taskId": "78c336e3-693c-479d-8242-a9d9f6d3209d",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 195200,
            "endSampleExclusive": 391362,
            "startSeconds": 4.066666666666666,
            "endSeconds": 8.153375,
            "startFrame": 122,
            "endFrameExclusive": 245,
            "sourceSha256": "69ae9ef5a2d64dd1ecfa6f62086e8c0bde0cc04046fae6a153a13125197d6f5b"
          }
        },
        {
          "id": "export-03",
          "helpStep": 3,
          "stepTitle": "Check and store the file",
          "text": "Open the saved JSON from your downloads. Here is the actual file from this recording.",
          "narrationText": "Open the saved JSON from your downloads. Here is the actual file from this recording.",
          "startFrame": 250,
          "endFrameExclusive": 415,
          "startSeconds": 8.333333333333334,
          "endSeconds": 13.833333333333334,
          "actions": [
            {
              "action": "demo-fixture",
              "description": "Open the actual downloaded JSON file in the browser."
            }
          ],
          "originalStartFrame": 250,
          "originalEndFrameExclusive": 415,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/export-03.mp3",
            "taskId": "fa9a4328-6889-4dd5-817f-295447377078",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 404800,
            "endSampleExclusive": 632170,
            "startSeconds": 8.433333333333334,
            "endSeconds": 13.170208333333333,
            "startFrame": 253,
            "endFrameExclusive": 396,
            "sourceSha256": "e211dbcbd4fde3c7727d7748690bc7850063d1f69023477e2af9ceb82fc2b698"
          }
        },
        {
          "id": "export-04",
          "helpStep": 3,
          "stepTitle": "Check and store the file",
          "text": "The file contains all saved tasks. Keep a copy somewhere you can find later.",
          "narrationText": "The file contains all saved tasks. Keep a copy somewhere you can find later.",
          "startFrame": 415,
          "endFrameExclusive": 565,
          "startSeconds": 13.833333333333334,
          "endSeconds": 18.833333333333332,
          "actions": [],
          "originalStartFrame": 415,
          "originalEndFrameExclusive": 565,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/export-04.mp3",
            "taskId": "93a575e0-d217-42df-99c1-9e8d8ad6e389",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 668800,
            "endSampleExclusive": 887254,
            "startSeconds": 13.933333333333334,
            "endSeconds": 18.484458333333333,
            "startFrame": 418,
            "endFrameExclusive": 555,
            "sourceSha256": "2339dc843745dba9857d1ad0d3cbb6db7b13a2735bd58f1c892f28aa7f58bdf7"
          }
        },
        {
          "id": "export-05",
          "helpStep": 4,
          "stepTitle": "Use the backup on another browser or device",
          "text": "To move data, open Today List in the destination browser and import that backup.",
          "narrationText": "To move data, open Today List in the destination browser and import that backup.",
          "startFrame": 565,
          "endFrameExclusive": 721,
          "startSeconds": 18.833333333333332,
          "endSeconds": 24.033333333333335,
          "actions": [
            {
              "action": "highlight",
              "target": "#import"
            }
          ],
          "originalStartFrame": 565,
          "originalEndFrameExclusive": 721,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/export-05.mp3",
            "taskId": "5848ebaa-0f38-4af2-87d5-2d2aa5315e0a",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 908800,
            "endSampleExclusive": 1127254,
            "startSeconds": 18.933333333333334,
            "endSeconds": 23.484458333333333,
            "startFrame": 568,
            "endFrameExclusive": 705,
            "sourceSha256": "16b10447f38956c98a896cf89c4b8fa4b9db4af539a7db6cf248daa7b9535d16"
          }
        },
        {
          "id": "export-06",
          "helpStep": 4,
          "stepTitle": "Use the backup on another browser or device",
          "text": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "narrationText": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "startFrame": 721,
          "endFrameExclusive": 887,
          "startSeconds": 24.033333333333335,
          "endSeconds": 29.566666666666666,
          "actions": [
            {
              "action": "choose-file",
              "name": "today-list-example.json",
              "note": "Native operating-system chooser is outside browser screencast."
            }
          ],
          "originalStartFrame": 721,
          "originalEndFrameExclusive": 887,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/export-06.mp3",
            "taskId": "7212c605-79a0-4a05-a272-a67033f771b1",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1158400,
            "endSampleExclusive": 1408061,
            "startSeconds": 24.133333333333333,
            "endSeconds": 29.334604166666665,
            "startFrame": 724,
            "endFrameExclusive": 881,
            "sourceSha256": "e6c1dfb8bfb8f40bedc4198c210c312e2bb4a7decef647b5e8e91e3afaf62ec5"
          }
        },
        {
          "id": "export-07",
          "helpStep": 4,
          "stepTitle": "Use the backup on another browser or device",
          "text": "This example uses the same workspace, so matching task IDs are kept without duplicates.",
          "narrationText": "This example uses the same workspace, so matching task IDs are kept without duplicates.",
          "startFrame": 887,
          "endFrameExclusive": 1054,
          "startSeconds": 29.566666666666666,
          "endSeconds": 35.13333333333333,
          "actions": [
            {
              "action": "highlight",
              "target": "#toast"
            }
          ],
          "originalStartFrame": 887,
          "originalEndFrameExclusive": 1054,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/export-07.mp3",
            "taskId": "b44e9ce8-ddeb-4906-9748-da83c80f2903",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1424000,
            "endSampleExclusive": 1671432,
            "startSeconds": 29.666666666666668,
            "endSeconds": 34.8215,
            "startFrame": 890,
            "endFrameExclusive": 1045,
            "sourceSha256": "1a2261da1c8a4edf168471e733bc0db9ea891ff52b8c67d5d3072724630ba977"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "71b8f00022481753e790dfd234bf8d32e8a1e4bb504c74fc79b2006d16fea98d",
      "masterSha256": "3195492f7c4d8496cb55647b15c0c7c1db1139e1fd5c99b3164098652811f80b",
      "controlsClearancePixels": 128,
      "originalFrameCount": 1054,
      "addedNarrationHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "export-narration.m4a",
        "trackMaster": "output/narration/tracks/export.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "import",
      "title": "Import a backup and understand duplicates",
      "video": "import.mp4",
      "poster": "import-poster.jpg",
      "captions": "import.vtt",
      "srt": "import.srt",
      "subtitleLog": "import.json",
      "sourceMaster": "output/video-masters-narrated/import.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 821,
      "durationSeconds": 27.366666666666667,
      "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": "import-01",
          "helpStep": 1,
          "stepTitle": "Choose the backup file",
          "text": "Select Import at the bottom of the sidebar.",
          "narrationText": "Select Import at the bottom of the sidebar.",
          "startFrame": 0,
          "endFrameExclusive": 115,
          "startSeconds": 0.0,
          "endSeconds": 3.8333333333333335,
          "actions": [
            {
              "action": "highlight",
              "target": "#import"
            },
            {
              "action": "click",
              "target": "#import"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 115,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/import-01.mp3",
            "taskId": "ca4249e1-69ed-4d3b-9ff7-ede92a2c5907",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 118485,
            "startSeconds": 0.1,
            "endSeconds": 2.4684375,
            "startFrame": 3,
            "endFrameExclusive": 75,
            "sourceSha256": "e9ed971e87ab80216890784f5cb86234ca80ee0e9ee26c5bb206bc2b3c633b83"
          }
        },
        {
          "id": "import-02",
          "helpStep": 1,
          "stepTitle": "Choose the backup file",
          "text": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "narrationText": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "startFrame": 115,
          "endFrameExclusive": 286,
          "startSeconds": 3.8333333333333335,
          "endSeconds": 9.533333333333333,
          "actions": [
            {
              "action": "choose-file",
              "name": "today-list-example.json",
              "note": "Native operating-system chooser is outside browser screencast."
            }
          ],
          "originalStartFrame": 115,
          "originalEndFrameExclusive": 281,
          "addedHoldFrames": 5,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/import-02.mp3",
            "taskId": "59390edd-db31-4f13-bc3a-3bc90d5c24e3",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 188800,
            "endSampleExclusive": 449607,
            "startSeconds": 3.933333333333333,
            "endSeconds": 9.3668125,
            "startFrame": 118,
            "endFrameExclusive": 282,
            "sourceSha256": "798017cf714085efd9475989ae55dc6bc1a9474358bde65c2345fddbfead4339"
          }
        },
        {
          "id": "import-03",
          "helpStep": 2,
          "stepTitle": "Check the import result",
          "text": "The message reports how many tasks were added. Existing tasks remain unchanged.",
          "narrationText": "The message reports how many tasks were added. Existing tasks remain unchanged.",
          "startFrame": 286,
          "endFrameExclusive": 446,
          "startSeconds": 9.533333333333333,
          "endSeconds": 14.866666666666667,
          "actions": [
            {
              "action": "highlight",
              "target": "#toast"
            }
          ],
          "originalStartFrame": 281,
          "originalEndFrameExclusive": 435,
          "addedHoldFrames": 6,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/import-03.mp3",
            "taskId": "15bea24c-5742-48b8-8533-8304fe0f322f",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 462400,
            "endSampleExclusive": 705374,
            "startSeconds": 9.633333333333333,
            "endSeconds": 14.695291666666666,
            "startFrame": 289,
            "endFrameExclusive": 441,
            "sourceSha256": "d649ca452c3f16c7ba0a88653f9cc6710652639f534bcc271f5c6f83a305aed4"
          }
        },
        {
          "id": "import-04",
          "helpStep": 3,
          "stepTitle": "Find imported tasks",
          "text": "Open All tasks and clear filters to find the imported task.",
          "narrationText": "Open All tasks and clear filters to find the imported task.",
          "startFrame": 446,
          "endFrameExclusive": 570,
          "startSeconds": 14.866666666666667,
          "endSeconds": 19.0,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-import\"]"
            }
          ],
          "originalStartFrame": 435,
          "originalEndFrameExclusive": 559,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/import-04.mp3",
            "taskId": "f09ab1bd-67d4-488d-93ff-b0fe2721ffd5",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 718400,
            "endSampleExclusive": 894500,
            "startSeconds": 14.966666666666667,
            "endSeconds": 18.635416666666668,
            "startFrame": 449,
            "endFrameExclusive": 560,
            "sourceSha256": "7422a469b43b66d46aa27be90a12781a84a30fa9bbab44c14e7ba0d22f1ef5a4"
          }
        },
        {
          "id": "import-05",
          "helpStep": 4,
          "stepTitle": "Understand duplicates",
          "text": "Importing the same backup again skips existing task IDs.",
          "narrationText": "Importing the same backup again skips existing task IDs.",
          "startFrame": 570,
          "endFrameExclusive": 688,
          "startSeconds": 19.0,
          "endSeconds": 22.933333333333334,
          "actions": [
            {
              "action": "choose-file",
              "name": "today-list-example.json",
              "note": "Native operating-system chooser is outside browser screencast."
            }
          ],
          "originalStartFrame": 559,
          "originalEndFrameExclusive": 677,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/import-05.mp3",
            "taskId": "8c291f90-6739-4f82-a8e1-b5cecad58605",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 916800,
            "endSampleExclusive": 1077297,
            "startSeconds": 19.1,
            "endSeconds": 22.4436875,
            "startFrame": 573,
            "endFrameExclusive": 674,
            "sourceSha256": "a5d10b02923918669ff907060078e16be9191314a10d019b23ba9a158685f55b"
          }
        },
        {
          "id": "import-06",
          "helpStep": 4,
          "stepTitle": "Understand duplicates",
          "text": "These tasks are already in your list means nothing new was added.",
          "narrationText": "These tasks are already in your list means nothing new was added.",
          "startFrame": 688,
          "endFrameExclusive": 821,
          "startSeconds": 22.933333333333334,
          "endSeconds": 27.366666666666667,
          "actions": [
            {
              "action": "highlight",
              "target": "#toast"
            }
          ],
          "originalStartFrame": 677,
          "originalEndFrameExclusive": 810,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/import-06.mp3",
            "taskId": "9f8df2b8-54ba-4639-9894-80f280d46bdc",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1105600,
            "endSampleExclusive": 1263867,
            "startSeconds": 23.033333333333335,
            "endSeconds": 26.3305625,
            "startFrame": 691,
            "endFrameExclusive": 790,
            "sourceSha256": "2edfba03333e9ef9053580d7f4a4c38680b2f490bf435a7fe4d7043eff1d5024"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "3efb5681d9ae62fe39f04012daaddf68128caced81459b4d24fd699e038c33f0",
      "masterSha256": "1dc40e657b85d75387d942ee5faceb59ba9bea58e3ed52fb9b3a068d90dd9d46",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/import.mp4",
      "originalMasterSha256": "9bf3aeafcce026e13a704882a4a2511884bf3422235635157aeb64034b11e0b8",
      "originalFrameCount": 810,
      "addedNarrationHoldFrames": 11,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "import-narration.m4a",
        "trackMaster": "output/narration/tracks/import.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "storage",
      "title": "Saving, browser storage, and moving devices",
      "video": "storage.mp4",
      "poster": "storage-poster.jpg",
      "captions": "storage.vtt",
      "srt": "storage.srt",
      "subtitleLog": "storage.json",
      "sourceMaster": "output/video-masters/storage.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 1209,
      "durationSeconds": 40.3,
      "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": "storage-01",
          "helpStep": 1,
          "stepTitle": "Check the save status",
          "text": "Saved locally confirms a successful write in this browser and site address.",
          "narrationText": "Saved locally confirms a successful write in this browser and site address.",
          "startFrame": 0,
          "endFrameExclusive": 149,
          "startSeconds": 0.0,
          "endSeconds": 4.966666666666667,
          "actions": [
            {
              "action": "type",
              "target": "#quick-title",
              "value": "Check local saving"
            },
            {
              "action": "keyboard",
              "key": "Enter"
            },
            {
              "action": "highlight",
              "target": "#save-status"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 149,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-01.mp3",
            "taskId": "b2a1e1b3-23d7-4bd2-a8b7-ccc2a780c880",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 185359,
            "startSeconds": 0.1,
            "endSeconds": 3.861645833333333,
            "startFrame": 3,
            "endFrameExclusive": 116,
            "sourceSha256": "41970d2863944547020433fb068cc62dc84dcdeb6495c059b2a3696c0e1c0016"
          }
        },
        {
          "id": "storage-02",
          "helpStep": 1,
          "stepTitle": "Check the save status",
          "text": "Reload the same site to confirm that saved tasks are still here.",
          "narrationText": "Reload the same site to confirm that saved tasks are still here.",
          "startFrame": 149,
          "endFrameExclusive": 280,
          "startSeconds": 4.966666666666667,
          "endSeconds": 9.333333333333334,
          "actions": [
            {
              "action": "reload"
            }
          ],
          "originalStartFrame": 149,
          "originalEndFrameExclusive": 280,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-02.mp3",
            "taskId": "23df0409-cee8-4d07-aaf7-a0b079f9535b",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 243200,
            "endSampleExclusive": 412613,
            "startSeconds": 5.066666666666666,
            "endSeconds": 8.596104166666667,
            "startFrame": 152,
            "endFrameExclusive": 258,
            "sourceSha256": "6529a7931b6c796074b13a2450b4bab56a6c83dc57fca9337ea0186e8c9da1ac"
          }
        },
        {
          "id": "storage-03",
          "helpStep": 2,
          "stepTitle": "Keep using the same browser and site address",
          "text": "Different browsers, profiles, and site addresses keep separate task collections.",
          "narrationText": "Different browsers, profiles, and site addresses keep separate task collections.",
          "startFrame": 280,
          "endFrameExclusive": 437,
          "startSeconds": 9.333333333333334,
          "endSeconds": 14.566666666666666,
          "actions": [
            {
              "action": "highlight",
              "target": ".local-label"
            }
          ],
          "originalStartFrame": 280,
          "originalEndFrameExclusive": 437,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-03.mp3",
            "taskId": "43348382-06ae-48d7-80e3-27217a2d3f9d",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 452800,
            "endSampleExclusive": 680170,
            "startSeconds": 9.433333333333334,
            "endSeconds": 14.170208333333333,
            "startFrame": 283,
            "endFrameExclusive": 426,
            "sourceSha256": "871ba74ff5e18176c33b6df038608482ce7af660b2252c047837cb969cddc026"
          }
        },
        {
          "id": "storage-04",
          "helpStep": 3,
          "stepTitle": "Use tabs with care",
          "text": "Another tab saves a new task; this tab automatically displays the update.",
          "narrationText": "Another tab saves a new task; this tab automatically displays the update.",
          "startFrame": 437,
          "endFrameExclusive": 582,
          "startSeconds": 14.566666666666666,
          "endSeconds": 19.4,
          "actions": [
            {
              "action": "highlight",
              "target": ".task-row:first-of-type"
            }
          ],
          "originalStartFrame": 437,
          "originalEndFrameExclusive": 582,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-04.mp3",
            "taskId": "8655b6d8-98cd-409f-9993-f9d2ea30ad69",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 704000,
            "endSampleExclusive": 915766,
            "startSeconds": 14.666666666666666,
            "endSeconds": 19.078458333333334,
            "startFrame": 440,
            "endFrameExclusive": 573,
            "sourceSha256": "13d08c5ba21859b77e8fc2b6cb6aea54e5bf32406efe1c53337417d708382dda"
          }
        },
        {
          "id": "storage-05",
          "helpStep": 4,
          "stepTitle": "Move data deliberately",
          "text": "Export a backup before moving to a different browser or device.",
          "narrationText": "Export a backup before moving to a different browser or device.",
          "startFrame": 582,
          "endFrameExclusive": 711,
          "startSeconds": 19.4,
          "endSeconds": 23.7,
          "actions": [
            {
              "action": "download-backup"
            },
            {
              "action": "click",
              "target": "#export"
            }
          ],
          "originalStartFrame": 582,
          "originalEndFrameExclusive": 711,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-05.mp3",
            "taskId": "cc5fae3a-8c12-4c51-8700-6288fe57ac1c",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 936000,
            "endSampleExclusive": 1098726,
            "startSeconds": 19.5,
            "endSeconds": 22.890125,
            "startFrame": 585,
            "endFrameExclusive": 687,
            "sourceSha256": "bac3e70ae51818620a2389334fb6d8393a0bac784287cb79920af66030d1e217"
          }
        },
        {
          "id": "storage-06",
          "helpStep": 4,
          "stepTitle": "Move data deliberately",
          "text": "A different site address starts with separate storage. This example switches to localhost.",
          "narrationText": "A different site address starts with separate storage. This example switches to localhost.",
          "startFrame": 711,
          "endFrameExclusive": 884,
          "startSeconds": 23.7,
          "endSeconds": 29.466666666666665,
          "actions": [
            {
              "action": "highlight",
              "target": ".empty"
            }
          ],
          "originalStartFrame": 711,
          "originalEndFrameExclusive": 884,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-06.mp3",
            "taskId": "ebeffd75-ebba-40e6-aabf-20e2804d8b57",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1142400,
            "endSampleExclusive": 1387603,
            "startSeconds": 23.8,
            "endSeconds": 28.908395833333334,
            "startFrame": 714,
            "endFrameExclusive": 868,
            "sourceSha256": "3d145d65ffb427340b9056a1fa3a261e033ef3a0be91a311bbe1c53bb9a822d8"
          }
        },
        {
          "id": "storage-07",
          "helpStep": 4,
          "stepTitle": "Move data deliberately",
          "text": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "narrationText": "The device file chooser is outside this recording. Select your Today List JSON backup.",
          "startFrame": 884,
          "endFrameExclusive": 1050,
          "startSeconds": 29.466666666666665,
          "endSeconds": 35.0,
          "actions": [
            {
              "action": "choose-file",
              "name": "today-list-example.json",
              "note": "Native operating-system chooser is outside browser screencast."
            }
          ],
          "originalStartFrame": 884,
          "originalEndFrameExclusive": 1050,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-07.mp3",
            "taskId": "4dca352e-66fc-4b67-bff6-6d9a1d32b06d",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1419200,
            "endSampleExclusive": 1671090,
            "startSeconds": 29.566666666666666,
            "endSeconds": 34.814375,
            "startFrame": 887,
            "endFrameExclusive": 1045,
            "sourceSha256": "a149f689baf27e7aae7151bde2dff1ab79d359fdd6cb932228ed51cd17e3f060"
          }
        },
        {
          "id": "storage-08",
          "helpStep": 4,
          "stepTitle": "Move data deliberately",
          "text": "Verify the imported tasks here before removing anything from the original browser.",
          "narrationText": "Verify the imported tasks here before removing anything from the original browser.",
          "startFrame": 1050,
          "endFrameExclusive": 1209,
          "startSeconds": 35.0,
          "endSeconds": 40.3,
          "actions": [
            {
              "action": "highlight",
              "target": "#task-area"
            }
          ],
          "originalStartFrame": 1050,
          "originalEndFrameExclusive": 1209,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/storage-08.mp3",
            "taskId": "2dacdc74-62fd-40eb-8e64-9716618b6a35",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1684800,
            "endSampleExclusive": 1898795,
            "startSeconds": 35.1,
            "endSeconds": 39.55822916666666,
            "startFrame": 1053,
            "endFrameExclusive": 1187,
            "sourceSha256": "638c6c3df5df58f20983c3dbe178c158573fc2ddfdf2f470a9da12a539a764a5"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "f530e4cc32e2241fbafa0f6f98d6b4467f0ac2332badc2bd652db7ff99fde6ac",
      "masterSha256": "50b664460a563bd772eb7b3286cd7ebeedcfed7198bb2386c8f975234fd68ab8",
      "controlsClearancePixels": 128,
      "originalFrameCount": 1209,
      "addedNarrationHoldFrames": 0,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "storage-narration.m4a",
        "trackMaster": "output/narration/tracks/storage.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "troubleshooting",
      "title": "Troubleshoot missing tasks and save or import errors",
      "video": "troubleshooting.mp4",
      "poster": "troubleshooting-poster.jpg",
      "captions": "troubleshooting.vtt",
      "srt": "troubleshooting.srt",
      "subtitleLog": "troubleshooting.json",
      "sourceMaster": "output/video-masters-narrated/troubleshooting.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 1370,
      "durationSeconds": 45.666666666666664,
      "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": "Storage failures and reset use fictional data in an isolated browser.",
      "cues": [
        {
          "id": "troubleshooting-01",
          "helpStep": 1,
          "stepTitle": "If a task seems missing",
          "text": "For missing tasks, select All tasks to clear filters, then check Completed and the lists.",
          "narrationText": "For missing tasks, select All tasks to clear filters, then check Completed and the lists.",
          "startFrame": 0,
          "endFrameExclusive": 171,
          "startSeconds": 0.0,
          "endSeconds": 5.7,
          "actions": [
            {
              "action": "type",
              "target": "#search",
              "value": "unfindable"
            },
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            },
            {
              "action": "click",
              "target": "[data-view=\"completed\"]"
            },
            {
              "action": "click",
              "target": "[data-view=\"all\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 171,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-01.mp3",
            "taskId": "37d4722e-30a0-4c89-941e-34f882f1f7e9",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 263378,
            "startSeconds": 0.1,
            "endSeconds": 5.487041666666666,
            "startFrame": 3,
            "endFrameExclusive": 165,
            "sourceSha256": "f30ab3d8a18683aed30774847090e41097de8ff6b0072a93dec4acf48c4d3053"
          }
        },
        {
          "id": "troubleshooting-02",
          "helpStep": 2,
          "stepTitle": "If an import is rejected",
          "text": "Example: an invalid JSON backup is rejected. Your saved tasks are not changed.",
          "narrationText": "Example: an invalid JSON backup is rejected. Your saved tasks are not changed.",
          "startFrame": 171,
          "endFrameExclusive": 345,
          "startSeconds": 5.7,
          "endSeconds": 11.5,
          "actions": [
            {
              "action": "demo-fixture",
              "description": "Import intentionally malformed example JSON."
            },
            {
              "action": "choose-file",
              "name": "invalid-example.json",
              "note": "Native operating-system chooser is outside browser screencast."
            },
            {
              "action": "highlight",
              "target": "#toast"
            }
          ],
          "originalStartFrame": 171,
          "originalEndFrameExclusive": 324,
          "addedHoldFrames": 21,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-02.mp3",
            "taskId": "bbf14f3a-dec1-412e-9fdc-70592135990a",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 278400,
            "endSampleExclusive": 543665,
            "startSeconds": 5.8,
            "endSeconds": 11.326354166666667,
            "startFrame": 174,
            "endFrameExclusive": 340,
            "sourceSha256": "fecf174721bc9267e537793dd0624099082679b4dfb083709c3551f1a6e56101"
          }
        },
        {
          "id": "troubleshooting-03",
          "helpStep": 3,
          "stepTitle": "If Storage needs attention appears",
          "text": "Example: unreadable sample storage causes Storage needs attention.",
          "narrationText": "Example: unreadable sample storage causes Storage needs attention.",
          "startFrame": 345,
          "endFrameExclusive": 480,
          "startSeconds": 11.5,
          "endSeconds": 16.0,
          "actions": [
            {
              "action": "demo-fixture",
              "description": "Set only the isolated browser sample storage to malformed JSON."
            },
            {
              "action": "reload"
            },
            {
              "action": "highlight",
              "target": "#save-status"
            }
          ],
          "originalStartFrame": 324,
          "originalEndFrameExclusive": 459,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-03.mp3",
            "taskId": "c1fe3601-1437-491b-b8c0-16595958f251",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 556800,
            "endSampleExclusive": 757421,
            "startSeconds": 11.6,
            "endSeconds": 15.779604166666667,
            "startFrame": 348,
            "endFrameExclusive": 474,
            "sourceSha256": "f8776bd543c6a06de3244feadc155d1861b9b6262297570943cbed974ce48eac"
          }
        },
        {
          "id": "troubleshooting-04",
          "helpStep": 3,
          "stepTitle": "If Storage needs attention appears",
          "text": "Export the raw stored data before any reset. It may need repair before import.",
          "narrationText": "Export the raw stored data before any reset. It may need repair before import.",
          "startFrame": 480,
          "endFrameExclusive": 633,
          "startSeconds": 16.0,
          "endSeconds": 21.1,
          "actions": [
            {
              "action": "click",
              "target": "#export"
            }
          ],
          "originalStartFrame": 459,
          "originalEndFrameExclusive": 612,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-04.mp3",
            "taskId": "e8b64596-775f-402b-a8bb-d0a3bb661b53",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 772800,
            "endSampleExclusive": 1002399,
            "startSeconds": 16.1,
            "endSeconds": 20.8833125,
            "startFrame": 483,
            "endFrameExclusive": 627,
            "sourceSha256": "4c71c3001b946cbf64c4f58979700a6f7d783be7535e9acda65e285259348b91"
          }
        },
        {
          "id": "troubleshooting-05",
          "helpStep": 4,
          "stepTitle": "If Unable to save appears",
          "text": "Example: blocked storage causes Unable to save. The failed change is not saved.",
          "narrationText": "Example: blocked storage causes Unable to save. The failed change is not saved.",
          "startFrame": 633,
          "endFrameExclusive": 811,
          "startSeconds": 21.1,
          "endSeconds": 27.033333333333335,
          "actions": [
            {
              "action": "demo-fixture",
              "description": "Restore fictional tasks, then simulate a blocked Storage.setItem write."
            },
            {
              "action": "reload"
            },
            {
              "action": "type",
              "target": "#quick-title",
              "value": "Unsaved example"
            },
            {
              "action": "keyboard",
              "key": "Enter"
            }
          ],
          "originalStartFrame": 612,
          "originalEndFrameExclusive": 767,
          "addedHoldFrames": 23,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-05.mp3",
            "taskId": "000c5c2c-4345-4946-b975-959faec02125",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1017600,
            "endSampleExclusive": 1289552,
            "startSeconds": 21.2,
            "endSeconds": 26.865666666666666,
            "startFrame": 636,
            "endFrameExclusive": 806,
            "sourceSha256": "96ddc849c5202084775485c6852a322450609b3e3991e035fff1010572e19ed7"
          }
        },
        {
          "id": "troubleshooting-06",
          "helpStep": 4,
          "stepTitle": "If Unable to save appears",
          "text": "Export saved tasks and keep unsaved text separately. Fix storage settings, then retry.",
          "narrationText": "Export saved tasks and keep unsaved text separately. Fix storage settings, then retry.",
          "startFrame": 811,
          "endFrameExclusive": 990,
          "startSeconds": 27.033333333333335,
          "endSeconds": 33.0,
          "actions": [
            {
              "action": "highlight",
              "target": "#toast"
            }
          ],
          "originalStartFrame": 767,
          "originalEndFrameExclusive": 933,
          "addedHoldFrames": 13,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-06.mp3",
            "taskId": "c2faaf97-542a-456d-9db7-6f906071e224",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1302400,
            "endSampleExclusive": 1576581,
            "startSeconds": 27.133333333333333,
            "endSeconds": 32.8454375,
            "startFrame": 814,
            "endFrameExclusive": 986,
            "sourceSha256": "b6c305850248b9f979254aec210aba47a27ac59489905af55f44d8950d38994c"
          }
        },
        {
          "id": "troubleshooting-07",
          "helpStep": 5,
          "stepTitle": "Reset only after preserving what you need",
          "text": "Reset demonstration: only this recording\u2019s sample storage is cleared, then the app reloads.",
          "narrationText": "Reset demonstration: only this recording\u2019s sample storage is cleared, then the app reloads.",
          "startFrame": 990,
          "endFrameExclusive": 1164,
          "startSeconds": 33.0,
          "endSeconds": 38.8,
          "actions": [
            {
              "action": "demo-fixture",
              "description": "Simulate browser clear-site-data by removing the isolated task key."
            },
            {
              "action": "reload"
            }
          ],
          "originalStartFrame": 933,
          "originalEndFrameExclusive": 1107,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-07.mp3",
            "taskId": "559fad8d-598a-4ed4-9916-eca07d31b325",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1588800,
            "endSampleExclusive": 1840690,
            "startSeconds": 33.1,
            "endSeconds": 38.34770833333334,
            "startFrame": 993,
            "endFrameExclusive": 1151,
            "sourceSha256": "ddd5547e98eaaca76798918ed8d66d2fcee45aa5bf61ead2eb7c0e0ccd0b92ab"
          }
        },
        {
          "id": "troubleshooting-08",
          "helpStep": 5,
          "stepTitle": "Reset only after preserving what you need",
          "text": "In normal use, export first and clear this site\u2019s data in browser settings. Then import a good backup.",
          "narrationText": "In normal use, export first and clear this site\u2019s data in browser settings. Then import a good backup.",
          "startFrame": 1164,
          "endFrameExclusive": 1370,
          "startSeconds": 38.8,
          "endSeconds": 45.666666666666664,
          "actions": [
            {
              "action": "choose-file",
              "name": "today-list-example.json",
              "note": "Native operating-system chooser is outside browser screencast."
            },
            {
              "action": "highlight",
              "target": "#task-area"
            }
          ],
          "originalStartFrame": 1107,
          "originalEndFrameExclusive": 1298,
          "addedHoldFrames": 15,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/troubleshooting-08.mp3",
            "taskId": "5a54e45d-6130-4f2b-aadd-1b7b8e5b8423",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1867200,
            "endSampleExclusive": 2183735,
            "startSeconds": 38.9,
            "endSeconds": 45.494479166666665,
            "startFrame": 1167,
            "endFrameExclusive": 1365,
            "sourceSha256": "327d5298fe4739895f8be9701063e19ed225b2f9c7b305bfe0e4b2024b9a66d2"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "a0f4ecd6f14a80beaf9e7fa2feb6145ac135987be41c7a96480af9bcd2187276",
      "masterSha256": "6084e5a175fc50a995ebe14b25a8b5ecf7fdd472a5f154a6ebbc4b5f4ca2b19e",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/troubleshooting.mp4",
      "originalMasterSha256": "39dafeade4903b866e78b062e401e2c3e166522c1e23221eff681811fd60701d",
      "originalFrameCount": 1298,
      "addedNarrationHoldFrames": 72,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "troubleshooting-narration.m4a",
        "trackMaster": "output/narration/tracks/troubleshooting.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "mobile",
      "title": "Use Today List on a phone or narrow screen",
      "video": "mobile.mp4",
      "poster": "mobile-poster.jpg",
      "captions": "mobile.vtt",
      "srt": "mobile.srt",
      "subtitleLog": "mobile.json",
      "sourceMaster": "output/video-masters-narrated/mobile.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 480,
      "height": 1128,
      "screenHeight": 850,
      "frameCount": 786,
      "durationSeconds": 26.2,
      "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": "mobile-01",
          "helpStep": 1,
          "stepTitle": "Navigate horizontally",
          "text": "On a phone, navigation scrolls sideways. Swipe to reveal the lists.",
          "narrationText": "On a phone, navigation scrolls sideways. Swipe to reveal the lists.",
          "startFrame": 0,
          "endFrameExclusive": 139,
          "startSeconds": 0.0,
          "endSeconds": 4.633333333333334,
          "actions": [
            {
              "action": "click",
              "target": "[data-view=\"Ideas\"]"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 136,
          "addedHoldFrames": 3,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/mobile-01.mp3",
            "taskId": "a089824e-1f05-4c51-87d2-22d0c5f52108",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 214337,
            "startSeconds": 0.1,
            "endSeconds": 4.465354166666667,
            "startFrame": 3,
            "endFrameExclusive": 134,
            "sourceSha256": "0726726b47b0e314d9db4673181d8ead7e60ea2da3a46746c31ef5e4dd8a6a17"
          }
        },
        {
          "id": "mobile-02",
          "helpStep": 2,
          "stepTitle": "Create and edit tasks",
          "text": "Tap New task to open the same editor on a narrow screen.",
          "narrationText": "Tap New task to open the same editor on a narrow screen.",
          "startFrame": 139,
          "endFrameExclusive": 258,
          "startSeconds": 4.633333333333334,
          "endSeconds": 8.6,
          "actions": [
            {
              "action": "click",
              "target": "#new-task"
            }
          ],
          "originalStartFrame": 136,
          "originalEndFrameExclusive": 255,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/mobile-02.mp3",
            "taskId": "a487ae95-bbae-4327-b4a1-2f92a3a614c5",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 227200,
            "endSampleExclusive": 385467,
            "startSeconds": 4.733333333333333,
            "endSeconds": 8.0305625,
            "startFrame": 142,
            "endFrameExclusive": 241,
            "sourceSha256": "796efb6320835b92fdae3793f0e514f938e031bcbe55999b388b9f7940a4569e"
          }
        },
        {
          "id": "mobile-03",
          "helpStep": 2,
          "stepTitle": "Create and edit tasks",
          "text": "Enter a task name and notes. Scroll the dialog if you need to reach its buttons.",
          "narrationText": "Enter a task name and notes. Scroll the dialog if you need to reach its buttons.",
          "startFrame": 258,
          "endFrameExclusive": 414,
          "startSeconds": 8.6,
          "endSeconds": 13.8,
          "actions": [
            {
              "action": "type",
              "target": "#task-title",
              "value": "Sketch a balcony garden"
            },
            {
              "action": "type",
              "target": "#task-notes",
              "value": "Try herbs near the window."
            },
            {
              "action": "scroll",
              "target": "#save-task"
            }
          ],
          "originalStartFrame": 255,
          "originalEndFrameExclusive": 411,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/mobile-03.mp3",
            "taskId": "98c9cd44-0326-4aa6-a9d1-c87acd3de362",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 417600,
            "endSampleExclusive": 642741,
            "startSeconds": 8.7,
            "endSeconds": 13.3904375,
            "startFrame": 261,
            "endFrameExclusive": 402,
            "sourceSha256": "5dbcf8846d25d133ef55e077352dbea02c51e1d918668c9ce20a2d8f5b6e287a"
          }
        },
        {
          "id": "mobile-04",
          "helpStep": 2,
          "stepTitle": "Create and edit tasks",
          "text": "Tap Create task to save it in the selected list.",
          "narrationText": "Tap Create task to save it in the selected list.",
          "startFrame": 414,
          "endFrameExclusive": 528,
          "startSeconds": 13.8,
          "endSeconds": 17.6,
          "actions": [
            {
              "action": "click",
              "target": "#save-task"
            }
          ],
          "originalStartFrame": 411,
          "originalEndFrameExclusive": 525,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/mobile-04.mp3",
            "taskId": "e390998a-f853-4392-a969-b2e784595906",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 667200,
            "endSampleExclusive": 803176,
            "startSeconds": 13.9,
            "endSeconds": 16.732833333333332,
            "startFrame": 417,
            "endFrameExclusive": 502,
            "sourceSha256": "29e1c44cae8237120f21eadf761177237a6f6afc04088e556d48fe4e4dc21add"
          }
        },
        {
          "id": "mobile-05",
          "helpStep": 3,
          "stepTitle": "Find backup controls",
          "text": "Below the tasks, find Export backup and Import backup.",
          "narrationText": "Below the tasks, find Export backup and Import backup.",
          "startFrame": 528,
          "endFrameExclusive": 644,
          "startSeconds": 17.6,
          "endSeconds": 21.466666666666665,
          "actions": [
            {
              "action": "scroll",
              "target": ".mobile-backup"
            },
            {
              "action": "highlight",
              "target": ".mobile-backup"
            }
          ],
          "originalStartFrame": 525,
          "originalEndFrameExclusive": 641,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/mobile-05.mp3",
            "taskId": "2e0c3ead-ccf9-4af8-9b9d-80a4c68f0319",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 849600,
            "endSampleExclusive": 1021242,
            "startSeconds": 17.7,
            "endSeconds": 21.275875,
            "startFrame": 531,
            "endFrameExclusive": 639,
            "sourceSha256": "7c54d764108ab07ca8b5a611d96e22b41b9b45e575e1746e5cf655b934c3ccdc"
          }
        },
        {
          "id": "mobile-06",
          "helpStep": 4,
          "stepTitle": "Return to Help",
          "text": "Return to the top bar and tap Help to open the guide in a separate tab.",
          "narrationText": "Return to the top bar and tap Help to open the guide in a separate tab.",
          "startFrame": 644,
          "endFrameExclusive": 786,
          "startSeconds": 21.466666666666665,
          "endSeconds": 26.2,
          "actions": [
            {
              "action": "scroll",
              "target": ".topbar"
            },
            {
              "action": "highlight",
              "target": ".help-link"
            }
          ],
          "originalStartFrame": 641,
          "originalEndFrameExclusive": 783,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/mobile-06.mp3",
            "taskId": "658d4164-8d1f-43eb-a55f-7e2c84463aa8",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1035200,
            "endSampleExclusive": 1222446,
            "startSeconds": 21.566666666666666,
            "endSeconds": 25.467625,
            "startFrame": 647,
            "endFrameExclusive": 765,
            "sourceSha256": "945c124bc8a76a1b070316e0ad673217480de7113ef1e8f715a463381ade0565"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "2853213d1f348bf93e87fe2b8b9fe0cf9a07b40f09200d34ccd1fe45dd0a41d2",
      "masterSha256": "81e2a3bcade7eb2b3345b0bb6eeeb9a320eed274ff3c41def8f0cf8bc7ddf3c7",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/mobile.mp4",
      "originalMasterSha256": "59299fef625ae1908704ff4af20fcd75361ea36743a409ace9c68365d9b86d89",
      "originalFrameCount": 783,
      "addedNarrationHoldFrames": 3,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "mobile-narration.m4a",
        "trackMaster": "output/narration/tracks/mobile.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "keyboard",
      "title": "Use the keyboard and accessible controls",
      "video": "keyboard.mp4",
      "poster": "keyboard-poster.jpg",
      "captions": "keyboard.vtt",
      "srt": "keyboard.srt",
      "subtitleLog": "keyboard.json",
      "sourceMaster": "output/video-masters-narrated/keyboard.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 927,
      "durationSeconds": 30.9,
      "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": "keyboard-01",
          "helpStep": 1,
          "stepTitle": "Move between controls",
          "text": "Tab moves focus forward; Shift+Tab moves it backward. The outline shows your position.",
          "narrationText": "Tab moves focus forward; Shift+Tab moves it backward. The outline shows your position.",
          "startFrame": 0,
          "endFrameExclusive": 188,
          "startSeconds": 0.0,
          "endSeconds": 6.266666666666667,
          "actions": [
            {
              "action": "keyboard",
              "key": "Tab"
            },
            {
              "action": "keyboard",
              "key": "Tab"
            },
            {
              "action": "keyboard",
              "key": "Shift+Tab"
            }
          ],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 166,
          "addedHoldFrames": 22,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/keyboard-01.mp3",
            "taskId": "045fa112-9ce1-4455-a42e-717e08b0b5e7",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 292356,
            "startSeconds": 0.1,
            "endSeconds": 6.09075,
            "startFrame": 3,
            "endFrameExclusive": 183,
            "sourceSha256": "c853c666629eca46c03de74dbacb9d7195cf9956b58e940ac26612a0f01f3376"
          }
        },
        {
          "id": "keyboard-02",
          "helpStep": 2,
          "stepTitle": "Open New task quickly",
          "text": "Press N outside text fields to open New task. The name field receives focus.",
          "narrationText": "Press N outside text fields to open New task. The name field receives focus.",
          "startFrame": 188,
          "endFrameExclusive": 344,
          "startSeconds": 6.266666666666667,
          "endSeconds": 11.466666666666667,
          "actions": [
            {
              "action": "keyboard",
              "key": "n"
            }
          ],
          "originalStartFrame": 166,
          "originalEndFrameExclusive": 316,
          "addedHoldFrames": 6,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/keyboard-02.mp3",
            "taskId": "191e2145-6a98-43cf-a9b4-460ca02a551e",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 305600,
            "endSampleExclusive": 541887,
            "startSeconds": 6.366666666666666,
            "endSeconds": 11.2893125,
            "startFrame": 191,
            "endFrameExclusive": 339,
            "sourceSha256": "875b22e6e283a60e3081d33b2e144ec1fda0e3a013e27e9adea2e32848b98f5b"
          }
        },
        {
          "id": "keyboard-03",
          "helpStep": 3,
          "stepTitle": "Work inside the dialog",
          "text": "Type a name, then Tab to Notes. Enter creates a new line in Notes.",
          "narrationText": "Type a name, then Tab to Notes. Enter creates a new line in Notes.",
          "startFrame": 344,
          "endFrameExclusive": 486,
          "startSeconds": 11.466666666666667,
          "endSeconds": 16.2,
          "actions": [
            {
              "action": "type",
              "target": "#task-title",
              "value": "Prepare keyboard demo"
            },
            {
              "action": "keyboard",
              "key": "Tab"
            },
            {
              "action": "keyboard",
              "key": "Enter"
            }
          ],
          "originalStartFrame": 316,
          "originalEndFrameExclusive": 451,
          "addedHoldFrames": 7,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/keyboard-03.mp3",
            "taskId": "31517150-0c18-42be-8481-2118a1703e04",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 555200,
            "endSampleExclusive": 769195,
            "startSeconds": 11.566666666666666,
            "endSeconds": 16.024895833333332,
            "startFrame": 347,
            "endFrameExclusive": 481,
            "sourceSha256": "4715ec70258522483c55b0f80d78eab48acad30f75e0a262d80f8d9ce2c777db"
          }
        },
        {
          "id": "keyboard-04",
          "helpStep": 3,
          "stepTitle": "Work inside the dialog",
          "text": "Tab through List, Priority, Due date, and the dialog actions.",
          "narrationText": "Tab through List, Priority, Due date, and the dialog actions.",
          "startFrame": 486,
          "endFrameExclusive": 614,
          "startSeconds": 16.2,
          "endSeconds": 20.466666666666665,
          "actions": [
            {
              "action": "keyboard",
              "key": "Tab"
            },
            {
              "action": "keyboard",
              "key": "Tab"
            },
            {
              "action": "keyboard",
              "key": "Tab"
            }
          ],
          "originalStartFrame": 451,
          "originalEndFrameExclusive": 577,
          "addedHoldFrames": 2,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/keyboard-04.mp3",
            "taskId": "c997afe2-357c-4318-8b6b-42ec1802a388",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 782400,
            "endSampleExclusive": 974104,
            "startSeconds": 16.3,
            "endSeconds": 20.293833333333332,
            "startFrame": 489,
            "endFrameExclusive": 609,
            "sourceSha256": "378774ba4824ad7f95dc38f678508a6e58adeada93eec2bf5610fc8d970fc2b6"
          }
        },
        {
          "id": "keyboard-05",
          "helpStep": 4,
          "stepTitle": "Submit or dismiss deliberately",
          "text": "Focus Create task and press Enter to save. Escape would dismiss an unsaved editor.",
          "narrationText": "Focus Create task and press Enter to save. Escape would dismiss an unsaved editor.",
          "startFrame": 614,
          "endFrameExclusive": 779,
          "startSeconds": 20.466666666666665,
          "endSeconds": 25.966666666666665,
          "actions": [
            {
              "action": "keyboard",
              "key": "Enter"
            },
            {
              "action": "keyboard",
              "key": "n"
            },
            {
              "action": "keyboard",
              "key": "Escape"
            }
          ],
          "originalStartFrame": 577,
          "originalEndFrameExclusive": 737,
          "addedHoldFrames": 5,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/keyboard-05.mp3",
            "taskId": "67f19261-54a0-4dd5-b12c-3f648a17af91",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 987200,
            "endSampleExclusive": 1239090,
            "startSeconds": 20.566666666666666,
            "endSeconds": 25.814375,
            "startFrame": 617,
            "endFrameExclusive": 775,
            "sourceSha256": "0daa7f7a25bcc6afe0e5800204035050e2c0b3168f3b312c484b10c33a78cbe2"
          }
        },
        {
          "id": "keyboard-06",
          "helpStep": 5,
          "stepTitle": "Use accessible names",
          "text": "Task controls have accessible names. A focused checkbox toggles with Space.",
          "narrationText": "Task controls have accessible names. A focused checkbox toggles with Space.",
          "startFrame": 779,
          "endFrameExclusive": 927,
          "startSeconds": 25.966666666666665,
          "endSeconds": 30.9,
          "actions": [
            {
              "action": "keyboard",
              "key": "Space"
            },
            {
              "action": "click",
              "target": "[data-view=\"completed\"]"
            },
            {
              "action": "highlight",
              "target": "[data-id=\"demo-1\"]"
            }
          ],
          "originalStartFrame": 737,
          "originalEndFrameExclusive": 885,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/keyboard-06.mp3",
            "taskId": "92b8148a-da7a-41a6-9c97-d9b89fbaaf78",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1251200,
            "endSampleExclusive": 1471883,
            "startSeconds": 26.066666666666666,
            "endSeconds": 30.664229166666665,
            "startFrame": 782,
            "endFrameExclusive": 920,
            "sourceSha256": "c36e46b58282f7aa942509594ab7e3444aeecabc2d2ca1fbce25a1d039ba305a"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "54c70a484add7691cb7770bf95830bada957191326bb5cca9989013db5df2e5f",
      "masterSha256": "5a4991d7ac52d58900a78baa90f3892744e39d089191e74ee13ffafe1584c772",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/keyboard.mp4",
      "originalMasterSha256": "1bd09dec6ced6c21869810e5c713eb75597e2d8412b4192e235512bc58be3b2f",
      "originalFrameCount": 885,
      "addedNarrationHoldFrames": 42,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "keyboard-narration.m4a",
        "trackMaster": "output/narration/tracks/keyboard.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."
      }
    },
    {
      "schemaVersion": 2,
      "id": "assistant",
      "title": "Optional browser assistant tools",
      "video": "assistant.mp4",
      "poster": "assistant-poster.jpg",
      "captions": "assistant.vtt",
      "srt": "assistant.srt",
      "subtitleLog": "assistant.json",
      "sourceMaster": "output/video-masters-narrated/assistant.mp4",
      "fps": 30,
      "frameIndexConvention": "zero-based; start inclusive, end exclusive",
      "width": 1280,
      "height": 1040,
      "screenHeight": 800,
      "frameCount": 1192,
      "durationSeconds": 39.733333333333334,
      "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": "Recording of an explicitly labeled integration harness calling the actual app handlers; not a native browser-assistant interface.",
      "cues": [
        {
          "id": "assistant-01",
          "helpStep": 1,
          "stepTitle": "Use a compatible browser assistant",
          "text": "Integration demo: this labeled test panel calls the real app handlers, not a native assistant UI.",
          "narrationText": "Integration demo: this labeled test panel calls the real app handlers, not a native assistant UI.",
          "startFrame": 0,
          "endFrameExclusive": 188,
          "startSeconds": 0.0,
          "endSeconds": 6.266666666666667,
          "actions": [],
          "originalStartFrame": 0,
          "originalEndFrameExclusive": 184,
          "addedHoldFrames": 4,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/assistant-01.mp3",
            "taskId": "3045ef62-eb8f-4ca0-bd80-aa078b724324",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 4800,
            "endSampleExclusive": 292356,
            "startSeconds": 0.1,
            "endSeconds": 6.09075,
            "startFrame": 3,
            "endFrameExclusive": 183,
            "sourceSha256": "57681507d1511153845101c795a0a57d110a088a8cdd90f9b5014f62172fe68c"
          }
        },
        {
          "id": "assistant-02",
          "helpStep": 1,
          "stepTitle": "Use a compatible browser assistant",
          "text": "In normal use, a compatible browser assistant must expose these optional tools.",
          "narrationText": "In normal use, a compatible browser assistant must expose these optional tools.",
          "startFrame": 188,
          "endFrameExclusive": 343,
          "startSeconds": 6.266666666666667,
          "endSeconds": 11.433333333333334,
          "actions": [
            {
              "action": "highlight",
              "target": "#demo-label"
            }
          ],
          "originalStartFrame": 184,
          "originalEndFrameExclusive": 339,
          "addedHoldFrames": 0,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/assistant-02.mp3",
            "taskId": "714048d5-4e65-45ee-9192-4aa78ac19e96",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 305600,
            "endSampleExclusive": 537428,
            "startSeconds": 6.366666666666666,
            "endSeconds": 11.196416666666666,
            "startFrame": 191,
            "endFrameExclusive": 336,
            "sourceSha256": "f67bc3f918cc4bf84c10dacdd5831fb29b9803f8edeca56f4d23c24590271273"
          }
        },
        {
          "id": "assistant-03",
          "helpStep": 2,
          "stepTitle": "Read tasks with list_tasks",
          "text": "list_tasks reads saved task details and IDs without changing them.",
          "narrationText": "list_tasks reads saved task details and IDs without changing them.",
          "startFrame": 343,
          "endFrameExclusive": 494,
          "startSeconds": 11.433333333333334,
          "endSeconds": 16.466666666666665,
          "actions": [
            {
              "action": "click",
              "target": "#list-tool"
            },
            {
              "action": "highlight",
              "target": "#result"
            }
          ],
          "originalStartFrame": 339,
          "originalEndFrameExclusive": 473,
          "addedHoldFrames": 17,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/assistant-03.mp3",
            "taskId": "ef96cd95-e458-4fa9-8992-8708b3277bf9",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 553600,
            "endSampleExclusive": 783199,
            "startSeconds": 11.533333333333333,
            "endSeconds": 16.316645833333332,
            "startFrame": 346,
            "endFrameExclusive": 490,
            "sourceSha256": "6356c3b913d43c5cd11718905e3eed624bf58ac8a737c8595f33ff94b23c0a2f"
          }
        },
        {
          "id": "assistant-04",
          "helpStep": 3,
          "stepTitle": "Create a task with create_task",
          "text": "create_task accepts a title plus optional notes, list, priority, and due date.",
          "narrationText": "create_task accepts a title plus optional notes, list, priority, and due date.",
          "startFrame": 494,
          "endFrameExclusive": 668,
          "startSeconds": 16.466666666666665,
          "endSeconds": 22.266666666666666,
          "actions": [
            {
              "action": "highlight",
              "target": "#create-input"
            }
          ],
          "originalStartFrame": 473,
          "originalEndFrameExclusive": 626,
          "addedHoldFrames": 21,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/assistant-04.mp3",
            "taskId": "26f313e7-ad60-4f6b-89a3-8700e88d9081",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 795200,
            "endSampleExclusive": 1060465,
            "startSeconds": 16.566666666666666,
            "endSeconds": 22.093020833333334,
            "startFrame": 497,
            "endFrameExclusive": 663,
            "sourceSha256": "885097883761cc0f64843e17a0943034137b94c18c34576dc0617e35944ba594"
          }
        },
        {
          "id": "assistant-05",
          "helpStep": 3,
          "stepTitle": "Create a task with create_task",
          "text": "Run create_task. The actual app saves the new task and shows All tasks.",
          "narrationText": "Run create_task. The actual app saves the new task and shows All tasks.",
          "startFrame": 668,
          "endFrameExclusive": 826,
          "startSeconds": 22.266666666666666,
          "endSeconds": 27.533333333333335,
          "actions": [
            {
              "action": "click",
              "target": "#create-tool"
            },
            {
              "action": "highlight",
              "target": "#result"
            }
          ],
          "originalStartFrame": 626,
          "originalEndFrameExclusive": 768,
          "addedHoldFrames": 16,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/assistant-05.mp3",
            "taskId": "4ea4c168-380b-4645-be66-14926011a2fb",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1073600,
            "endSampleExclusive": 1314345,
            "startSeconds": 22.366666666666667,
            "endSeconds": 27.3821875,
            "startFrame": 671,
            "endFrameExclusive": 822,
            "sourceSha256": "1bc23082bc3be887e7b7a598c68d58ddc090c44f7e70531e448383202d36d364"
          }
        },
        {
          "id": "assistant-06",
          "helpStep": 4,
          "stepTitle": "Change status with set_task_completed",
          "text": "set_task_completed uses a task ID and true or false to complete or reopen it.",
          "narrationText": "set_task_completed uses a task ID and true or false to complete or reopen it.",
          "startFrame": 826,
          "endFrameExclusive": 1015,
          "startSeconds": 27.533333333333335,
          "endSeconds": 33.833333333333336,
          "actions": [
            {
              "action": "click",
              "target": "#complete-tool"
            },
            {
              "action": "highlight",
              "target": "#result"
            }
          ],
          "originalStartFrame": 768,
          "originalEndFrameExclusive": 920,
          "addedHoldFrames": 37,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/assistant-06.mp3",
            "taskId": "c2b1b1a5-3bbf-4ed1-a714-d954a03722cb",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1326400,
            "endSampleExclusive": 1616185,
            "startSeconds": 27.633333333333333,
            "endSeconds": 33.670520833333335,
            "startFrame": 829,
            "endFrameExclusive": 1011,
            "sourceSha256": "93c3413b0c13ce43b440922cf2145a97a281e04e18a6c2c0a9dc92e0386d8cd7"
          }
        },
        {
          "id": "assistant-07",
          "helpStep": 5,
          "stepTitle": "Verify the result in the app",
          "text": "Verify the checked task in the app. Without tool support, use the normal task interface.",
          "narrationText": "Verify the checked task in the app. Without tool support, use the normal task interface.",
          "startFrame": 1015,
          "endFrameExclusive": 1192,
          "startSeconds": 33.833333333333336,
          "endSeconds": 39.733333333333334,
          "actions": [
            {
              "action": "highlight",
              "target": "iframe"
            }
          ],
          "originalStartFrame": 920,
          "originalEndFrameExclusive": 1089,
          "addedHoldFrames": 8,
          "narration": {
            "voice": "Niki",
            "sourceClip": "output/narration/clips/assistant-07.mp3",
            "taskId": "350d0ade-95c8-441c-8611-51df771bfbe7",
            "generationSpeed": 1.05,
            "playbackSpeed": 1.0,
            "sampleRate": 48000,
            "startSample": 1628800,
            "endSampleExclusive": 1898523,
            "startSeconds": 33.93333333333333,
            "endSeconds": 39.5525625,
            "startFrame": 1018,
            "endFrameExclusive": 1187,
            "sourceSha256": "363e8171b05e601309d276f923768e224da93d18b7ff9df66023a0f1e62cc597"
          }
        }
      ],
      "subtitleBoundaryEncoding": "ASS cue boundaries quantized down to centiseconds to align exactly with the logged 30 fps frames.",
      "videoSha256": "8506b902371a02e4f3d5890a2adf7a88274cb94c3c4bc80177b0678f3d976f21",
      "masterSha256": "7f1c0b44210d464112cbaf068b065951343bdcbd1294c8d984bc33bfa9f4854a",
      "controlsClearancePixels": 128,
      "originalSourceMaster": "output/video-masters/assistant.mp4",
      "originalMasterSha256": "7e149290a4a1c7d0f72aa2b46b6a540428ab8d5275adf2730e806c53f744c0e4",
      "originalFrameCount": 1089,
      "addedNarrationHoldFrames": 103,
      "narration": {
        "voice": "Niki",
        "language": "en",
        "description": "Friendly American narration",
        "generatedSpeech": true,
        "model": "eleven_multilingual_v2",
        "generationSpeed": 1.05,
        "sampleRate": 48000,
        "codec": "AAC",
        "audioFile": "assistant-narration.m4a",
        "trackMaster": "output/narration/tracks/assistant.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."
      }
    }
  ]
}
