{
  "schemaVersion": "article-audio-1.0",
  "slug": "a-better-learner",
  "sourceBodyPath": "articles/a-better-learner/body.md",
  "sourceBodySha256": "693fbc4721300c46b2061a17343895670e9bd0ead3c05dcaa28612cf0b410cac",
  "transcriptPath": "assets/audio/a-better-learner.txt",
  "transcriptSha256": "2d47ac1da777ceb362fd6dc5a898338975e0f27a276ccfc43683061aad4e3365",
  "transcriptCharacters": 14603,
  "inputSha256": "894d6e271b85887f1b164722a570fbe891984319f4de6e5a7d0f2ad84bafa153",
  "inputNormalization": "Trim leading and trailing whitespace per chunk; inputSha256 joins those inputs with two newlines.",
  "inputRangeUnit": "UTF-16 code units in the exact UTF-8 transcript decoded as a JavaScript string",
  "maximumChunkCharacters": 3000,
  "provider": "openai",
  "endpoint": "https://api.openai.com/v1/audio/speech",
  "model": "gpt-4o-mini-tts",
  "voice": "fable",
  "responseFormat": "mp3",
  "speed": 1,
  "instructions": "Calm, clear, unhurried British science-briefing narration, in the style of a public-radio science presenter. Measured pace, warm but neutral tone. Pronounce mathematical names carefully.",
  "audioPath": "assets/audio/a-better-learner.mp3",
  "limitations": [
    "bundled CLI does not expose API request IDs",
    "The receipt binds prepared inputs, configured provider profile and observed output bytes; it is not an independent attestation of provider execution or spoken-word completeness.",
    "Offline checking verifies the final MP3 hash and recorded segment metadata, not deleted or unavailable private segment files."
  ],
  "assembledAt": "2026-10-03T08:42:03.283Z",
  "generator": "bundled speech skill text_to_speech.py speak-batch",
  "requestId": null,
  "chunks": [
    {
      "index": 1,
      "start": 0,
      "end": 2788,
      "sourceTextSha256": "c539a1bee8d271d0469543d70efc528d05d1870b1544375a70e764a3314db256",
      "inputSha256": "41d5bcedc2d6d571c58ee7fc91b5bbf67477d7fb904f20a46e61576b20fdf2e8",
      "inputCharacters": 2786,
      "requestId": null,
      "audioSha256": "953b2b508aea5fbda762f4a0b2dafc3543e90f6a2cfb9dd87a0f09a64d48d030",
      "audioBytes": 2882688,
      "durationSeconds": 180.168
    },
    {
      "index": 2,
      "start": 2788,
      "end": 5755,
      "sourceTextSha256": "0ec1c6a59bb9e37cc2f3d453c302d7ed0ab52e0b64262ee665958754157fa944",
      "inputSha256": "aa4c278520031e26b0bcba14bc63a9479983e848040bc637b78fcc78cce4b007",
      "inputCharacters": 2965,
      "requestId": null,
      "audioSha256": "74947173c75489233d0ba5d3c32c6b7e23ff745f45ed2a0f1a9938f1e53aaa9f",
      "audioBytes": 2873088,
      "durationSeconds": 179.568
    },
    {
      "index": 3,
      "start": 5755,
      "end": 8487,
      "sourceTextSha256": "63b8da1304e80e5b2a91a2d4b09771c88b8fccf2662efaf2660e3046b5c2b909",
      "inputSha256": "d1cddf53e238ddd44b333eafda118e3e6de8bc302d6be76c2dbafb5ac11bc563",
      "inputCharacters": 2730,
      "requestId": null,
      "audioSha256": "dafe4550d332b7f7c3a31058415b1979c8d68744744ab2daf82f0a29c9c6d7cd",
      "audioBytes": 2628864,
      "durationSeconds": 164.304
    },
    {
      "index": 4,
      "start": 8487,
      "end": 11455,
      "sourceTextSha256": "57773b61db27527584cd3f325499657cef6f97815e55f159fc4d1dd280c994be",
      "inputSha256": "1c3972c762abec4bfb9aff6e91d0812ee5255a14a8b2d7719d423cc6227eae29",
      "inputCharacters": 2966,
      "requestId": null,
      "audioSha256": "8a578b9d037c814618bbca592e34b031299b226954783c6be2e4b03b297bb759",
      "audioBytes": 2961792,
      "durationSeconds": 185.112
    },
    {
      "index": 5,
      "start": 11455,
      "end": 14123,
      "sourceTextSha256": "ccdc28a81a8389ad16d35f18ada8c8e4c8bb31437415ca505cad024160d2291e",
      "inputSha256": "851e0d42d5e1a1122f7ce983573df5dc625c69b85f1ba4b1e586b658adf41aba",
      "inputCharacters": 2666,
      "requestId": null,
      "audioSha256": "05cfef6f50d3c444d9da73dda84cdb49bce741664f755ff9ea04163169be77c5",
      "audioBytes": 2688000,
      "durationSeconds": 168
    },
    {
      "index": 6,
      "start": 14123,
      "end": 14603,
      "sourceTextSha256": "6fdf8ef64a96557afcc44bcdf5aee4ac00ce70a578d03e36cf4e4dfdb6fde396",
      "inputSha256": "732f75f2631dd4e969bc8b7d6949f0b61cffa97e377d5a81c5359c1642cbdecc",
      "inputCharacters": 479,
      "requestId": null,
      "audioSha256": "9e199fb2213238c9db0496b8d76bd0d5e56a5e5247a5a358d0686f86c52bfb7f",
      "audioBytes": 504960,
      "durationSeconds": 31.56
    }
  ],
  "transform": {
    "tool": "ffmpeg",
    "method": "concat-demuxer then re-encode",
    "codec": "libmp3lame",
    "bitrate": "64k",
    "channels": 1,
    "sampleRate": 24000,
    "maximumBytesExclusive": 26214400
  },
  "audioSha256": "abe92f1139e47f9f15d831e67de49a154c6edc0135b5b2c2c8fd3862c515ac08",
  "audioBytes": 7270316,
  "durationSeconds": 908.712
}
