{
  "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."
  }
}
