{
  "entry": {
    "id": "lyric-caption-swap-with-hopping-beat-dot",
    "title": "Swap the lyric caption on the beat and walk a colour-cycling dot across the new line",
    "kind": "Interface sequences",
    "status": "Rendered draft",
    "verification": "rendered-draft",
    "source": {
      "title": "No Limits on Text Chats with ChatGPT",
      "id": "9MIkJHcMtVA",
      "url": "https://www.youtube.com/watch?v=9MIkJHcMtVA",
      "start": 39.956583333333334,
      "end": 42.500791666666665
    },
    "preview": "/videos/examples/rebuilds/lyric-caption-swap-with-hopping-beat-dot/remake.mp4",
    "sourcePreview": "/videos/examples/rebuilds/lyric-caption-swap-with-hopping-beat-dot/source.mp4",
    "adaptationPreview": "/videos/examples/rebuilds/lyric-caption-swap-with-hopping-beat-dot/adaptation.mp4",
    "download": "/videos/examples/rebuilds/lyric-caption-swap-with-hopping-beat-dot/package.zip",
    "svg": "/videos/examples/rebuilds/lyric-caption-swap-with-hopping-beat-dot/editable.svg",
    "resolve": null,
    "limitations": [
      "Visual fidelity is an authored draft judgement from sampled source frames; no independent blind review or native Resolve execution.",
      "Both variants rerendered from the packaged text renderer to repair a prior code/preview mismatch."
    ],
    "bindingLevel": "full-render-manifest",
    "bytes": 147293,
    "packageSha256": "806abaa542a5ff2c7e1a43d62b440cdadfa5efe7335dc9c2e001c17f97643914",
    "poster": "/videos/examples/posters/lyric-caption-swap-with-hopping-beat-dot.jpg",
    "render": {
      "width": 1920,
      "height": 1080,
      "fps": "24000/1001",
      "frames": 61,
      "audioStreams": 0
    },
    "originalRecord": "/videos/examples/rebuilds/lyric-caption-swap-with-hopping-beat-dot/item.json",
    "observation": "Over a saturated music-video shot, a bold white lyric caption sits low in frame (text centre ~y=800). Frames 0-18 hold the outgoing line; a small lilac dot blinks above its last word around local 10-13 (master 968-971). At local 19 (master 977) the caption hard-swaps to the next line and a 28 px dot appears above its first word, stepping colour every ~3 frames (orange, lilac, green) and hopping right in steps: to ~x=528 at f28 (black), ~x=552 at f32 (orange, lilac, green again), then ~x=688 from f41 where it turns green, yellow, blue and finally pink and holds. The caption stays until the shot cuts at master 1019.",
    "mechanism": "Karaoke-style caption: a hard line swap timed to the lyric, with a step-keyed marker dot that changes colour on each beat and hops word to word along the line.",
    "phases": [
      {
        "frame": 0,
        "label": "Outgoing lyric line holds"
      },
      {
        "frame": 10,
        "label": "Lilac dot blinks above the last word"
      },
      {
        "frame": 19,
        "label": "Hard swap to next line; dot appears on word one"
      },
      {
        "frame": 28,
        "label": "Dot hops right, colour steps every ~3 frames"
      },
      {
        "frame": 41,
        "label": "Dot on final position, settles pink"
      }
    ]
  },
  "repair": {
    "id": "lyric-caption-swap-with-hopping-beat-dot",
    "reason": "Packaged Scene.tsx filters unrevealed characters before laying out the caret; prior preview used the earlier runtime.",
    "originalPackageSha256": "64f4e6ca844d8b430d70633f5e034f1faa5ace861f0458fd0d51df5b4df1b27f"
  },
  "original": {
    "id": "lyric-caption-swap-with-hopping-beat-dot",
    "title": "Swap the lyric caption on the beat and walk a colour-cycling dot across the new line",
    "family": "lower-third",
    "status": "rendered-draft",
    "edition": "studies-300",
    "gaps": [
      "Visual fidelity is an authored draft judgement from sampled source frames; no independent blind review or native Resolve execution."
    ],
    "intervalKey": [
      "9MIkJHcMtVA",
      "479479/12000",
      "1020019/24000"
    ],
    "source": {
      "filmId": "9MIkJHcMtVA",
      "film": "No Limits on Text Chats with ChatGPT",
      "url": "https://www.youtube.com/watch?v=9MIkJHcMtVA",
      "frames": [
        958,
        1019
      ],
      "fps": {
        "numerator": 24000,
        "denominator": 1001
      },
      "startSeconds": 39.956583333333334,
      "endSeconds": 42.500791666666665,
      "publicationDate": "2026-08-25",
      "masterSha256": "6963be1f69bfa747ef4fb5409d1b93e3df5544c76c56bc5aeae9b22447553810",
      "clockBasis": "Downloaded 1920x1080 rendition at 24000/1001 fps; excerpt frame i = master frame 958+i, re-encoded to 960x540 without omitted positions."
    },
    "sourceHash": "94725d15ac2cadff6d8333c4b58bcc70d5907eae453f9336918fe6fdbb27c31e",
    "classification": "vector-code-approximation",
    "bindingLevel": "full-render-manifest",
    "observation": "Over a saturated music-video shot, a bold white lyric caption sits low in frame (text centre ~y=800). Frames 0-18 hold the outgoing line; a small lilac dot blinks above its last word around local 10-13 (master 968-971). At local 19 (master 977) the caption hard-swaps to the next line and a 28 px dot appears above its first word, stepping colour every ~3 frames (orange, lilac, green) and hopping right in steps: to ~x=528 at f28 (black), ~x=552 at f32 (orange, lilac, green again), then ~x=688 from f41 where it turns green, yellow, blue and finally pink and holds. The caption stays until the shot cuts at master 1019.",
    "mechanism": "Karaoke-style caption: a hard line swap timed to the lyric, with a step-keyed marker dot that changes colour on each beat and hops word to word along the line.",
    "phases": [
      {
        "frame": 0,
        "label": "Outgoing lyric line holds"
      },
      {
        "frame": 10,
        "label": "Lilac dot blinks above the last word"
      },
      {
        "frame": 19,
        "label": "Hard swap to next line; dot appears on word one"
      },
      {
        "frame": 28,
        "label": "Dot hops right, colour steps every ~3 frames"
      },
      {
        "frame": 41,
        "label": "Dot on final position, settles pink"
      }
    ],
    "checks": {
      "recipeSha256": "46024202762f58c56b8634d50b9a73654695be43367617e6c8a0926000d9b6b3",
      "renderManifestSha256": "2b413d139a83d9abce699fa9cc5266cfe8a559b1e2a12000cd2590b2c7bc0237",
      "adaptationManifestSha256": "0bd30acd0aea78844a7c1b7f28074fdff2e0a5bab801ec9341d50d0339c82665",
      "implementationFiles": 15,
      "movies": {
        "source": {
          "sha256": "94725d15ac2cadff6d8333c4b58bcc70d5907eae453f9336918fe6fdbb27c31e",
          "bytes": 1108557,
          "width": 960,
          "height": 540,
          "fps": "24000/1001",
          "frames": 61,
          "duration": 2.544208,
          "codec": "h264",
          "pixelFormat": "yuv420p",
          "audioStreams": 0
        },
        "original": {
          "sha256": "89cf083ae224e9bb1803a0abdd0b53042257c972ab2e89a1629bd6a2fdd2c420",
          "bytes": 55212,
          "width": 1920,
          "height": 1080,
          "fps": "24000/1001",
          "frames": 61,
          "duration": 2.5442,
          "codec": "h264",
          "pixelFormat": "yuv420p",
          "audioStreams": 0
        },
        "adaptation": {
          "sha256": "5fa8946a7e1d422b9e3cd2cdc002c16cc23b4f097b26eceb0df058a90821a4e6",
          "bytes": 59223,
          "width": 1920,
          "height": 1080,
          "fps": "24000/1001",
          "frames": 61,
          "duration": 2.5442,
          "codec": "h264",
          "pixelFormat": "yuv420p",
          "audioStreams": 0
        }
      },
      "preparedArchive": {
        "sha256": "64f4e6ca844d8b430d70633f5e034f1faa5ace861f0458fd0d51df5b4df1b27f",
        "bytes": 147392,
        "members": 20,
        "crc": "pass"
      },
      "selectedSvg": {
        "sha256": "8028d27d28aab574064a8e2a96dd923b0e8b0b07dfff8d2cfa612ced857f6bc4",
        "bytes": 1647,
        "drawableElements": 9,
        "rasterEmbedded": false,
        "frame": 45,
        "meaningful": true
      },
      "contentDiffers": true,
      "renderSeconds": 29.0
    },
    "assets": {
      "source.mp4": {
        "path": "items/lyric-caption-swap-with-hopping-beat-dot/source.mp4",
        "sha256": "94725d15ac2cadff6d8333c4b58bcc70d5907eae453f9336918fe6fdbb27c31e",
        "bytes": 1108557
      },
      "remake.mp4": {
        "path": "items/lyric-caption-swap-with-hopping-beat-dot/remake.mp4",
        "sha256": "89cf083ae224e9bb1803a0abdd0b53042257c972ab2e89a1629bd6a2fdd2c420",
        "bytes": 55212
      },
      "adaptation.mp4": {
        "path": "items/lyric-caption-swap-with-hopping-beat-dot/adaptation.mp4",
        "sha256": "5fa8946a7e1d422b9e3cd2cdc002c16cc23b4f097b26eceb0df058a90821a4e6",
        "bytes": 59223
      },
      "editable.svg": {
        "path": "items/lyric-caption-swap-with-hopping-beat-dot/editable.svg",
        "sha256": "8028d27d28aab574064a8e2a96dd923b0e8b0b07dfff8d2cfa612ced857f6bc4",
        "bytes": 1647
      },
      "resolve.txt": {
        "path": "items/lyric-caption-swap-with-hopping-beat-dot/resolve.txt",
        "sha256": "d2e1d80affbfb8d10471e049ec7e4c85f9247faad82ffd264cd72c6f7f66f10e",
        "bytes": 4894
      },
      "package.zip": {
        "path": "items/lyric-caption-swap-with-hopping-beat-dot/package.zip",
        "sha256": "64f4e6ca844d8b430d70633f5e034f1faa5ace861f0458fd0d51df5b4df1b27f",
        "bytes": 147392
      },
      "recipe.json": {
        "path": "items/lyric-caption-swap-with-hopping-beat-dot/recipe.json",
        "sha256": "46024202762f58c56b8634d50b9a73654695be43367617e6c8a0926000d9b6b3",
        "bytes": 5938
      }
    },
    "builtAt": "2026-09-18T05:09:21Z"
  }
}
