{
  "status": "rendered and verified",
  "output_file": "08-explainer-video.mp4",
  "output_sha256": "22f5003ee5e7656c5c27dc93fe3340b1a46767ccd4d4eb00c19e751d4e1ea725",
  "output_bytes": 17082397,
  "output_duration_seconds": 318.4,
  "native_resolution": [
    1920,
    1080
  ],
  "upscaled": false,
  "frame_rate": "30/1",
  "frame_count": 9552,
  "video_stream": {
    "index": 0,
    "codec_name": "h264",
    "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
    "profile": "High",
    "codec_type": "video",
    "codec_tag_string": "avc1",
    "codec_tag": "0x31637661",
    "width": 1920,
    "height": 1080,
    "coded_width": 1920,
    "coded_height": 1080,
    "has_b_frames": 0,
    "sample_aspect_ratio": "1:1",
    "display_aspect_ratio": "16:9",
    "pix_fmt": "yuv420p",
    "level": 50,
    "color_range": "tv",
    "color_space": "bt709",
    "color_transfer": "bt709",
    "color_primaries": "bt709",
    "chroma_location": "left",
    "field_order": "progressive",
    "refs": 1,
    "is_avc": "true",
    "nal_length_size": "4",
    "id": "0x1",
    "r_frame_rate": "30/1",
    "avg_frame_rate": "30/1",
    "time_base": "1/15360",
    "start_pts": 0,
    "start_time": "0.000000",
    "duration_ts": 4890624,
    "duration": "318.400000",
    "bit_rate": "230518",
    "bits_per_raw_sample": "8",
    "nb_frames": "9552",
    "extradata_size": 50,
    "disposition": {
      "default": 1,
      "dub": 0,
      "original": 0,
      "comment": 0,
      "lyrics": 0,
      "karaoke": 0,
      "forced": 0,
      "hearing_impaired": 0,
      "visual_impaired": 0,
      "clean_effects": 0,
      "attached_pic": 0,
      "timed_thumbnails": 0,
      "non_diegetic": 0,
      "captions": 0,
      "descriptions": 0,
      "metadata": 0,
      "dependent": 0,
      "still_image": 0,
      "multilayer": 0
    },
    "tags": {
      "language": "und",
      "handler_name": "VideoHandler",
      "vendor_id": "[0][0][0][0]",
      "encoder": "Lavc62.11.100 libx264"
    }
  },
  "audio_stream": {
    "index": 1,
    "codec_name": "aac",
    "codec_long_name": "AAC (Advanced Audio Coding)",
    "profile": "LC",
    "codec_type": "audio",
    "codec_tag_string": "mp4a",
    "codec_tag": "0x6134706d",
    "sample_fmt": "fltp",
    "sample_rate": "48000",
    "channels": 2,
    "channel_layout": "stereo",
    "bits_per_sample": 0,
    "initial_padding": 0,
    "id": "0x2",
    "r_frame_rate": "0/0",
    "avg_frame_rate": "0/0",
    "time_base": "1/48000",
    "start_pts": 0,
    "start_time": "0.000000",
    "duration_ts": 15283200,
    "duration": "318.400000",
    "bit_rate": "191726",
    "nb_frames": "14926",
    "extradata_size": 2,
    "disposition": {
      "default": 1,
      "dub": 0,
      "original": 0,
      "comment": 0,
      "lyrics": 0,
      "karaoke": 0,
      "forced": 0,
      "hearing_impaired": 0,
      "visual_impaired": 0,
      "clean_effects": 0,
      "attached_pic": 0,
      "timed_thumbnails": 0,
      "non_diegetic": 0,
      "captions": 0,
      "descriptions": 0,
      "metadata": 0,
      "dependent": 0,
      "still_image": 0,
      "multilayer": 0
    },
    "tags": {
      "language": "und",
      "handler_name": "SoundHandler",
      "vendor_id": "[0][0][0][0]"
    }
  },
  "production_start_utc": "2026-10-27T15:05:12.601466+00:00",
  "verification_end_utc": "2026-10-27T15:35:29.552800+00:00",
  "production_elapsed_seconds": 1816.951334,
  "elapsed_definition": "Project assets and narration preparation through final render verification; excludes earlier research and skill inspection. Excludes later collection packaging.",
  "render": {
    "started_at_utc": "2026-10-27T15:28:51.779447+00:00",
    "finished_at_utc": "2026-10-27T15:33:13.955013+00:00",
    "wall_seconds": 262.17556514699754,
    "exit_code": 0,
    "command": [
      "node",
      "/home/albert/.npm/_npx/d5029dd092d313d5/node_modules/hyperframes/bin/hyperframes.mjs",
      "render",
      "--quality",
      "delivery",
      "--fps",
      "30",
      "--workers",
      "2",
      "--no-browser-gpu",
      "--output",
      "renders/roguelike-explainer.mp4"
    ],
    "definition": "Full local HyperFrames render process, including validation, browser setup, capture, encoding and audio mux. Not pure GPU compute time.",
    "render_jobs_completed": 1,
    "render_jobs_failed": 0,
    "render_jobs_retried": 0,
    "browser_gpu": false,
    "workers_requested": 2
  },
  "render_pipeline_seconds": 260.633,
  "render_phase_seconds": {
    "compile": 0.232,
    "browser_probe": 0.077,
    "video_extract": 0.001,
    "audio_process": 2.183,
    "file_server": 0.004,
    "capture_disk": 239.896,
    "encode": 17.729,
    "assemble": 0.466
  },
  "summed_render_processing_seconds": 262.17556514699754,
  "scene_times": [
    {
      "scene": 1,
      "title": "Progress can hide danger",
      "start_seconds": 0,
      "end_seconds": 37.936,
      "output_seconds": 37.936,
      "voice_generation_seconds": 4.565224885940552,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    },
    {
      "scene": 2,
      "title": "Retreat while it is easy",
      "start_seconds": 37.936,
      "end_seconds": 75.384,
      "output_seconds": 37.448,
      "voice_generation_seconds": 4.439856052398682,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    },
    {
      "scene": 3,
      "title": "What spare capacity buys",
      "start_seconds": 75.384,
      "end_seconds": 116.01333,
      "output_seconds": 40.629329999999996,
      "voice_generation_seconds": 5.041794776916504,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    },
    {
      "scene": 4,
      "title": "Find the assumption that can break",
      "start_seconds": 116.01333,
      "end_seconds": 158.89867,
      "output_seconds": 42.885340000000014,
      "voice_generation_seconds": 5.21081805229187,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    },
    {
      "scene": 5,
      "title": "Choose a trigger before the pressure",
      "start_seconds": 158.89867,
      "end_seconds": 202.21067,
      "output_seconds": 43.31199999999998,
      "voice_generation_seconds": 5.162496328353882,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    },
    {
      "scene": 6,
      "title": "Use a plan you can actually run",
      "start_seconds": 202.21067,
      "end_seconds": 241.04533,
      "output_seconds": 38.834660000000014,
      "voice_generation_seconds": 4.602893114089966,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    },
    {
      "scene": 7,
      "title": "Decide what success means",
      "start_seconds": 241.04533,
      "end_seconds": 279.00533,
      "output_seconds": 37.96000000000001,
      "voice_generation_seconds": 4.557706832885742,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    },
    {
      "scene": 8,
      "title": "Keep uncertainty in the picture",
      "start_seconds": 279.00533,
      "end_seconds": 318.392,
      "output_seconds": 39.38666999999998,
      "voice_generation_seconds": 4.829516649246216,
      "separate_render_time_seconds": null,
      "render_note": "One continuous two-worker render; scene processing time not exposed."
    }
  ],
  "voice": {
    "provider": "local Kokoro ONNX",
    "model": "Kokoro v1.0 82M",
    "model_sha256": "7d5df8ecf7d4b1878015a32686053fd0eebe2bc377234608764cc0ef3636a6c5",
    "model_bytes": 325532387,
    "voice": "bm_george",
    "speed": 1.0,
    "language": "en-gb",
    "device": "CPUExecutionProvider",
    "threads": 4,
    "sample_rate": 24000,
    "format": "WAV PCM signed 16-bit mono",
    "wall_seconds": 39.131778955459595,
    "sum_paragraph_generation_seconds": 38.41030669212341,
    "completed_jobs": 30,
    "failed_jobs": 0,
    "retried_jobs": 0,
    "clips": [
      {
        "scene": 1,
        "paragraph": 1,
        "text": "You can be making progress and getting closer to failure at the same time.",
        "start": 0.6,
        "end": 5.42133,
        "duration": 4.8213333333333335,
        "generation_seconds": 0.704420804977417,
        "path": "assets/voice/01-01.wav"
      },
      {
        "scene": 1,
        "paragraph": 2,
        "text": "Imagine a game character facing twelve enemies. You use your strongest attacks and kill four. Your health is almost full. Everything looks under control.",
        "start": 5.78133,
        "end": 15.63733,
        "duration": 9.856,
        "generation_seconds": 1.3610517978668213,
        "path": "assets/voice/01-02.wav"
      },
      {
        "scene": 1,
        "paragraph": 3,
        "text": "But your shield has broken. Your speed boost is fading. Your healing is already used. The numbers look better, while your ability to handle the next surprise has got worse.",
        "start": 15.99733,
        "end": 26.70667,
        "duration": 10.709333333333333,
        "generation_seconds": 1.4929122924804688,
        "path": "assets/voice/01-03.wav"
      },
      {
        "scene": 1,
        "paragraph": 4,
        "text": "This is a scenario from Sebastian Marshall\u2019s Roguelike. It asks a useful question: what options do you still have?",
        "start": 27.06667,
        "end": 34.576,
        "duration": 7.509333333333333,
        "generation_seconds": 1.0068399906158447,
        "path": "assets/voice/01-04.wav"
      },
      {
        "scene": 2,
        "paragraph": 1,
        "text": "There\u2019s a staircase one move away. Marshall\u2019s answer is to go upstairs, recover your abilities, and return to fewer enemies.",
        "start": 38.536,
        "end": 47.112,
        "duration": 8.576,
        "generation_seconds": 1.1279051303863525,
        "path": "assets/voice/02-01.wav"
      },
      {
        "scene": 2,
        "paragraph": 2,
        "text": "Why leave while you\u2019re doing well? Because the next stage of the fight depends on the resources you have left, not the success you\u2019ve already had.",
        "start": 47.472,
        "end": 56.06933,
        "duration": 8.597333333333333,
        "generation_seconds": 1.1389753818511963,
        "path": "assets/voice/02-02.wav"
      },
      {
        "scene": 2,
        "paragraph": 3,
        "text": "In this example, retreat is available and recovery is cheap. That matters. This isn\u2019t a rule to abandon every difficult situation. It\u2019s a reminder to examine your remaining responses before the visible score tells you something is wrong.",
        "start": 56.42933,
        "end": 72.024,
        "duration": 15.594666666666667,
        "generation_seconds": 2.172975540161133,
        "path": "assets/voice/02-03.wav"
      },
      {
        "scene": 3,
        "paragraph": 1,
        "text": "Here\u2019s a workplace analogy of our own. A small team accepts several exciting projects. Every hour is booked. Then one task runs late, and there\u2019s no room to absorb it. The busy calendar was hiding a fragile plan.",
        "start": 75.984,
        "end": 90.46933,
        "duration": 14.485333333333333,
        "generation_seconds": 1.9790310859680176,
        "path": "assets/voice/03-01.wav"
      },
      {
        "scene": 3,
        "paragraph": 2,
        "text": "Marshall tells a related story about his friend Kai. During a visit to London, Kai skips a board game to finish consulting work several days early. Later, unexpected conversations and events fill the trip, and he can join in.",
        "start": 90.82933,
        "end": 105.48533,
        "duration": 14.656,
        "generation_seconds": 2.0430004596710205,
        "path": "assets/voice/03-02.wav"
      },
      {
        "scene": 3,
        "paragraph": 3,
        "text": "The point isn\u2019t to work every spare minute. It\u2019s that resolving one obligation can buy freedom to respond later.",
        "start": 105.84533,
        "end": 113.65333,
        "duration": 7.808,
        "generation_seconds": 1.0197632312774658,
        "path": "assets/voice/03-03.wav"
      },
      {
        "scene": 4,
        "paragraph": 1,
        "text": "A second example shows why the most impressive upgrade may be the wrong one.",
        "start": 116.61333,
        "end": 121.60533,
        "duration": 4.992,
        "generation_seconds": 0.6590042114257812,
        "path": "assets/voice/04-01.wav"
      },
      {
        "scene": 4,
        "paragraph": 2,
        "text": "Marshall imagines equipment built around a powerful chain: daze an enemy, land critical hits, trigger extra attacks. The pieces reinforce each other.",
        "start": 121.96533,
        "end": 132.312,
        "duration": 10.346666666666666,
        "generation_seconds": 1.3839213848114014,
        "path": "assets/voice/04-02.wav"
      },
      {
        "scene": 4,
        "paragraph": 3,
        "text": "Then a ghost dragon appears. It can\u2019t be critically hit. The condition that makes the combination work has disappeared.",
        "start": 132.672,
        "end": 140.13867,
        "duration": 7.466666666666667,
        "generation_seconds": 1.1071839332580566,
        "path": "assets/voice/04-03.wav"
      },
      {
        "scene": 4,
        "paragraph": 4,
        "text": "A cloak that adds more power to the usual combination doesn\u2019t solve that problem. A modest light-damage attack can help against the ghost. It doesn\u2019t guarantee victory. It gives the character a response where the main strategy breaks down.",
        "start": 140.49867,
        "end": 155.53867,
        "duration": 15.04,
        "generation_seconds": 2.060708522796631,
        "path": "assets/voice/04-04.wav"
      },
      {
        "scene": 5,
        "paragraph": 1,
        "text": "Recognising danger is easier than acting on it while you feel successful. That\u2019s why Marshall recommends defensive policies.",
        "start": 159.49867,
        "end": 167.84,
        "duration": 8.341333333333333,
        "generation_seconds": 1.1308739185333252,
        "path": "assets/voice/05-01.wav"
      },
      {
        "scene": 5,
        "paragraph": 2,
        "text": "Imagine you have three major heals. Instead of waiting until all three are gone, decide to retreat after the first or second. Which one depends on how dangerous it will be to get away.",
        "start": 168.2,
        "end": 180.59467,
        "duration": 12.394666666666666,
        "generation_seconds": 1.6948659420013428,
        "path": "assets/voice/05-02.wav"
      },
      {
        "scene": 5,
        "paragraph": 3,
        "text": "The structure is simple: notice a specific event, take a specific action, and keep enough reserve to carry it out.",
        "start": 180.95467,
        "end": 188.4,
        "duration": 7.445333333333333,
        "generation_seconds": 0.9738752841949463,
        "path": "assets/voice/05-03.wav"
      },
      {
        "scene": 5,
        "paragraph": 4,
        "text": "For our imaginary team, that could mean reviewing new commitments when the agreed schedule buffer disappears. The right threshold depends on the situation.",
        "start": 188.76,
        "end": 198.85067,
        "duration": 10.090666666666667,
        "generation_seconds": 1.3628811836242676,
        "path": "assets/voice/05-04.wav"
      },
      {
        "scene": 6,
        "paragraph": 1,
        "text": "A plan also has to fit the person using it. Marshall calls this piloting.",
        "start": 202.81067,
        "end": 208.05867,
        "duration": 5.248,
        "generation_seconds": 0.669102668762207,
        "path": "assets/voice/06-01.wav"
      },
      {
        "scene": 6,
        "paragraph": 2,
        "text": "A dozen powerful abilities may be better in experienced hands. For a beginner under pressure, a simple sequence can be easier to use well.",
        "start": 208.41867,
        "end": 217.61333,
        "duration": 9.194666666666667,
        "generation_seconds": 1.2379345893859863,
        "path": "assets/voice/06-02.wav"
      },
      {
        "scene": 6,
        "paragraph": 3,
        "text": "That doesn\u2019t make complicated strategies bad. It means a plan\u2019s demands on attention and judgment are part of its cost.",
        "start": 217.97333,
        "end": 225.99467,
        "duration": 8.021333333333333,
        "generation_seconds": 1.0419061183929443,
        "path": "assets/voice/06-03.wav"
      },
      {
        "scene": 6,
        "paragraph": 4,
        "text": "Policies can reduce that burden. They also need room for deliberate exceptions when circumstances change. The aim is reliable action, not obedience to a rule that no longer fits.",
        "start": 226.35467,
        "end": 238.68533,
        "duration": 12.330666666666668,
        "generation_seconds": 1.6539497375488281,
        "path": "assets/voice/06-04.wav"
      },
      {
        "scene": 7,
        "paragraph": 1,
        "text": "But life gives us choices a game may leave out. We can negotiate, cooperate, ask for help or work to change the rules.",
        "start": 241.64533,
        "end": 249.56,
        "duration": 7.914666666666666,
        "generation_seconds": 1.053851842880249,
        "path": "assets/voice/07-01.wav"
      },
      {
        "scene": 7,
        "paragraph": 2,
        "text": "And understanding an advantage doesn\u2019t mean you have to take it. Marshall explicitly allows refusing something on ethical grounds, accepting the cost or choosing another environment.",
        "start": 249.92,
        "end": 262.10133,
        "duration": 12.181333333333333,
        "generation_seconds": 1.674020767211914,
        "path": "assets/voice/07-02.wav"
      },
      {
        "scene": 7,
        "paragraph": 3,
        "text": "His inventor doesn\u2019t have to build a successful company. They could learn the business side, work with others, or invent for the pleasure of it.",
        "start": 262.46133,
        "end": 270.99467,
        "duration": 8.533333333333333,
        "generation_seconds": 1.127927541732788,
        "path": "assets/voice/07-03.wav"
      },
      {
        "scene": 7,
        "paragraph": 4,
        "text": "Before you make a strategy more effective, decide what you actually want it to achieve.",
        "start": 271.35467,
        "end": 276.64533,
        "duration": 5.290666666666667,
        "generation_seconds": 0.701906681060791,
        "path": "assets/voice/07-04.wav"
      },
      {
        "scene": 8,
        "paragraph": 1,
        "text": "One last limit: good decisions can still lose. Marshall says that even excellent play can be defeated by chance. Preparation changes some risks; it doesn\u2019t make every outcome controllable.",
        "start": 279.60533,
        "end": 292.23467,
        "duration": 12.629333333333333,
        "generation_seconds": 1.751047134399414,
        "path": "assets/voice/08-01.wav"
      },
      {
        "scene": 8,
        "paragraph": 2,
        "text": "So these stories are useful prompts, not proof that people cause every setback they experience.",
        "start": 292.59467,
        "end": 298.73867,
        "duration": 6.144,
        "generation_seconds": 0.7897660732269287,
        "path": "assets/voice/08-02.wav"
      },
      {
        "scene": 8,
        "paragraph": 3,
        "text": "Our synthesis is three questions: What is the goal? What could break the plan? And what options would remain?",
        "start": 299.09867,
        "end": 306.05333,
        "duration": 6.954666666666666,
        "generation_seconds": 0.9329922199249268,
        "path": "assets/voice/08-03.wav"
      },
      {
        "scene": 8,
        "paragraph": 4,
        "text": "Sometimes the answer is to keep going. Sometimes it\u2019s to cover a weakness. Sometimes it\u2019s to take the stairs while you still can.",
        "start": 306.41333,
        "end": 315.032,
        "duration": 8.618666666666666,
        "generation_seconds": 1.3557112216949463,
        "path": "assets/voice/08-04.wav"
      }
    ],
    "peak_vram": "not applicable, CPU inference",
    "energy": "not recorded",
    "adapters": "none",
    "seed": "not exposed by API",
    "diffusion_settings": "not applicable"
  },
  "sound": {
    "source": "Original procedural score and sound cues; no external music or sampled effects",
    "seed": 27102026,
    "sample_rate": 48000,
    "stereo": true,
    "score_rhythm": "one three-note chord every 5 seconds with sparse delayed upper notes",
    "score_frequencies_hz": [
      [
        146.832,
        220,
        293.665
      ],
      [
        130.813,
        195.998,
        261.626
      ],
      [
        164.814,
        220,
        329.628
      ],
      [
        146.832,
        195.998,
        293.665
      ]
    ],
    "score_target_lufs": -36,
    "voice_target_lufs": -18,
    "speech_carve": "1200 Hz parametric cut, -12 dB, Q 0.65; lowpass 1800 Hz; highpass 90 Hz",
    "voice_processing": "65 Hz highpass; loudness normalization -18 LUFS, -2 dBTP, LRA9",
    "sfx_events": 34,
    "wall_seconds": 9.000421524047852,
    "completed": true,
    "generated_models": "None for score/SFX (deterministic DSP)",
    "audio_listened_to": false
  },
  "voice_quantization": "not independently verified; local model file hash and bytes recorded",
  "render_model": "No generative video model; authored vector animation",
  "software": {
    "hyperframes": "0.8.200",
    "gsap": "3.15.0",
    "node": "24.20.0",
    "ffmpeg_verification": "8.0.1-3ubuntu2",
    "kokoro_onnx": "0.4.7",
    "onnxruntime": "1.30.0"
  },
  "audio_preparation_attempts": {
    "completed": 1,
    "failed": 1,
    "retried": 1,
    "failure": "Initial loudnorm true-peak setting was outside FFmpeg range; corrected before final processing. Failed-attempt duration not recorded."
  },
  "peak_vram": "not recorded; GPU acceleration disabled",
  "energy": "not recorded",
  "steps_sampler_scheduler_guidance_denoise": "not applicable; no diffusion generation",
  "captions": "Measured paragraph boundaries; sentence positions proportional and approximate",
  "verification": {
    "decode": "pass, all audio and video frames decoded without errors",
    "metadata_assertions": "pass",
    "loudness": {
      "input_i": "-15.02",
      "input_tp": "-1.54",
      "input_lra": "2.10",
      "input_thresh": "-25.67",
      "output_i": "-17.98",
      "output_tp": "-4.21",
      "output_lra": "2.20",
      "output_thresh": "-28.61",
      "normalization_type": "dynamic",
      "target_offset": "-0.02"
    },
    "audio_listened_to": false,
    "wall_seconds": 8.806680358997255,
    "sampled_decoded_frames": 9,
    "frame_review": "pass; nine decoded frames visually inspected",
    "out_of_order_seek": "185 s compared after out-of-order seek: pixel-identical (mean RGB difference 0.0)",
    "hyperframes_audio": {
      "file": "renders/roguelike-explainer.mp4",
      "ref": null,
      "element": null,
      "placement": null,
      "timebase": "file",
      "window": {
        "from": 0,
        "to": 318.4
      },
      "duration": 318.4,
      "sampleRate": 48000,
      "channels": 2,
      "provenance": {
        "loudness": "signal",
        "silence": "signal"
      },
      "warnings": [],
      "loudness": {
        "lufsIntegrated": -15,
        "lufsShortTermMax": -13.9,
        "samplePeakDb": -1.5,
        "truePeakDb": -1.5,
        "clipping": {
          "count": 0,
          "firstAt": null
        }
      },
      "silence": [
        {
          "start": 0,
          "end": 0.46
        },
        {
          "start": 316.225,
          "end": 318.4
        }
      ]
    }
  },
  "readable_stats": [
    [
      "Output",
      "318.400 s \u00b7 1920 \u00d7 1080 native \u00b7 30 fps \u00b7 9,552 frames \u00b7 no upscaling"
    ],
    [
      "File",
      "MP4 \u00b7 H.264 High \u00b7 yuv420p \u00b7 AAC 48000 Hz, 2 channels \u00b7 17,082,397 bytes (16.29 MiB)"
    ],
    [
      "Elapsed",
      "1816.951 s from 2026-10-27T15:05:12.601466+00:00 to 2026-10-27T15:35:29.552800+00:00; asset/narration preparation through final render verification, including authoring and review; excludes earlier research and later packaging."
    ],
    [
      "Render processing",
      "One completed render: 262.176 s process wall time; internal pipeline 260.633 s. Capture 239.896 s, encoding 17.729 s, assembly 0.466 s. Not pure GPU time."
    ],
    [
      "Animation",
      "Authored SVG/GSAP 3.15.0 \u00b7 HyperFrames 0.8.200 \u00b7 local screenshot capture \u00b7 2 software browser workers \u00b7 no generative image/video model or GPU encoder"
    ],
    [
      "Narration",
      "Kokoro v1.0 82M ONNX \u00b7 bm_george \u00b7 en-gb \u00b7 speed 1.0 \u00b7 CPUExecutionProvider, 4 threads \u00b7 kokoro-onnx 0.4.7 / ONNX Runtime 1.30.0 \u00b7 original 24 kHz mono PCM16 WAV; quantization unverified; no adapters; seed not exposed"
    ],
    [
      "Voice generation",
      "30 completed paragraph jobs \u00b7 0 failed \u00b7 0 retried \u00b7 39.132 s total wall time \u00b7 38.410 s summed inference-call time"
    ],
    [
      "Score and effects",
      "Original deterministic DSP \u00b7 seed 27102026 \u00b7 34 cues \u00b7 48 kHz stereo stems \u00b7 9.000 s successful generation/mix preparation; one earlier normalization attempt failed and was corrected; its elapsed time was not recorded"
    ],
    [
      "Audio measurements",
      "Finished mix: -15.02 LUFS integrated, -1.54 dBTP true peak, 2.10 LU range. Voice target \u221218 LUFS; score target \u221236 LUFS. Audio measured, not listened to."
    ],
    [
      "Settings",
      "Delivery quality; 30 fps; software capture; no upscaling or frame interpolation. Diffusion steps, sampler, scheduler, guidance and denoise are not applicable. Motion has no random seed; procedural audio seed is recorded above."
    ],
    [
      "Jobs and resources",
      "Video: 1 completed, 0 failed, 0 retried. Voice: 30 completed, 0 failed, 0 retried. Audio preparation: 1 failed attempt, 1 successful retry. No ComfyUI jobs. GPU not used for this render/voice route. Peak VRAM and energy not recorded."
    ],
    [
      "Verification",
      "Zero layout/runtime/contrast/lint errors; full video and audio decode passed; nine final decoded frames visually inspected. Out-of-order seek at 185 s was pixel-identical. Short deliberate hold warnings retained. Optional sentence caption timing is approximate."
    ]
  ],
  "editable_project": "/home/albert/Documents/ChatGPT/Codex/videos/roguelike-options",
  "local_only": true,
  "reader_verification": {
    "reader_url": "http://127.0.0.1:8874/08-explainer-video.html",
    "playback": "verified in actual browser",
    "chapter_seek": "1:56 scene successfully reached; currentTime 120.336 s and seekable range 0\u2013318.4 s",
    "local_server": "Byte-range support added on existing loopback port 8874; HTTP 206 verified",
    "menu": "Explainer video entry verified; compact two-line button retained",
    "reader_screenshot": "/home/albert/Documents/ChatGPT/Codex/videos/roguelike-options/qa/reader-proof.png"
  }
}
