{
 "project": "nothing-but-datacenters",
 "generated_at": "2026-09-15T22:52:22-07:00",
 "generated_by": "scripts/export_project_site.py",
 "source": "&lt;withheld&gt;",
 "project_json": {
  "project": "nothing-but-datacenters",
  "purpose": "Pass 2 of 'Nothing But Datacenters': a 43,200-frame SDXL img2img feedback render at the v3 recipe, two channels, on the Gaffer mesh. The piece is the load; the goal is to prove a Gaffer project can carry a multi-day render and leave a traceable record behind.",
  "created_at": "2026-09-09T02:15:31-07:00",
  "created_by": "the render node",
  "plan": "docs/NBD-PASS2.md (Gaffer repo)",
  "config_hash": "sha256:7859a7f006e28645ff1a738a90d2870921e143d0a5157328e469cc40d714d476",
  "channels": [
   {
    "name": "image",
    "directory": "frames",
    "width": 768,
    "height": 1344
   },
   {
    "name": "text",
    "directory": "text",
    "width": 768,
    "height": 1344
   }
  ],
  "channel_note": "Two independent stacks: separate sequences, directories, hashes, manifests and video files. Never composited, never re-timed. Rendered by one driver iteration, which is what frame-locks them.",
  "passes": {
   "pass-01": {
    "status": "rendering",
    "target_frames": 7200,
    "recipe": "datacenter-clean-v3",
    "note": "migrated once complete; never resumed into Pass 2"
   },
   "pass-02": {
    "status": "complete",
    "recipe": "datacenter-clean-v3",
    "frames": 43200,
    "covers": "1",
    "config_hash": "sha256:7859a7f006e28645ff1a738a90d2870921e143d0a5157328e469cc40d714d476",
    "runs": 3,
    "pass_record": "passes/pass-02/pass.json",
    "summary_source": "derived from pass.json by passes.write_pass_json; do not hand-edit -- it drifts"
   },
   "pass-03-rehearsal": {
    "status": "complete",
    "frames": 3600,
    "covers": [
     1,
     3600
    ],
    "config_hash": "sha256:717ce4250c1f9ac88f1eb6481b0e87c98daeed725aaa5eca436b817fe5c89213",
    "runs": 1,
    "pass_record": "passes/pass-03-rehearsal/pass.json",
    "summary_source": "derived from pass.json by passes.write_pass_json; do not hand-edit -- it drifts"
   },
   "pass-07-rehearsal": {
    "status": "complete",
    "frames": 3600,
    "covers": [
     1,
     3600
    ],
    "config_hash": "sha256:9468b49134d4ed246f9132bc2e42bbeb54cb5f3a20b1db9dfcd46cb577ccb5e0",
    "runs": 1,
    "pass_record": "passes/pass-07-rehearsal/pass.json",
    "summary_source": "derived from pass.json by passes.write_pass_json; do not hand-edit -- it drifts"
   }
  },
  "recipe_dir": "&lt;withheld&gt;",
  "provenance": "&lt;withheld&gt;",
  "report": "REPORT.md",
  "transcript": "index.html",
  "previews": {
   "directory": "passes/<pass>/previews",
   "note": "Review encodes of the published prefix of a pass. Disposable and regenerable from frames; NOT the deliverable encode. The frame range is in every filename so a partial preview can never be mistaken for the whole pass.",
   "codec": "ProRes 4444 (yuv444p10le), intra-only",
   "why_intra_only": "Every frame of a feedback loop is substantially new, so inter-frame prediction buys almost nothing. A delivery codec on defaults measured PSNR 21 dB against source; ProRes 4444 measures 51 dB.",
   "generator": "Gaffer scripts/preview_pass.py"
  },
  "housekeeping": {
   "thumbs_db": "Windows Explorer writes Thumbs.db into image folders it browses, and it lands on the share. Manifests glob frame_??????.png so counts are unaffected, but a naive listing will see it. Same hazard as .DS_Store on the Macs."
  },
  "passes_updated_at": "2026-09-15T01:19:02-07:00"
 },
 "provenance_summary": {
  "present": true,
  "files_recorded": 16,
  "keys": [
   "config_hash",
   "config_hash_inputs",
   "config_hash_method",
   "deferred",
   "files",
   "gaffer_commit",
   "generated_at",
   "generated_by",
   "model",
   "pass-01",
   "piece",
   "plan",
   "project",
   "source_repos"
  ]
 },
 "passes": [
  {
   "pass": "pass-01",
   "record_present": true,
   "status": "stopped",
   "config_hash": null,
   "frames": null,
   "channels": {},
   "frames_on_disk": {
    "frames": 6319,
    "text": 6319
   },
   "runs": null,
   "driver": null,
   "note": null,
   "log": {
    "present": true,
    "frames_logged": 6319,
    "frame_range": [
     1,
     6319
    ],
    "eras": {
     "aerial": 1296,
     "front": 1296,
     "side": 816,
     "aerial-to-front": 648,
     "front-to-side": 631,
     "side-to-3q": 612,
     "3q-to-aerial": 612,
     "3q": 408
    },
    "denoise": {
     "min": 0.35,
     "max": 1.0
    },
    "chain_breaks": [
     1
    ],
    "seconds_of_gpu": 38628.3,
    "mean_s_per_frame": 6.113,
    "luminance": {
     "min": 37.0,
     "max": 165.3
    },
    "seeds_withheld": "Every frame's sampler seed is in this log and is NOT exported. It is a complete reproduction recipe; available on request."
   }
  },
  {
   "pass": "pass-02",
   "record_present": true,
   "status": "complete",
   "config_hash": "sha256:7859a7f006e28645ff1a738a90d2870921e143d0a5157328e469cc40d714d476",
   "frames": {
    "image": 43200,
    "text": 43200,
    "covers": "1"
   },
   "channels": {
    "image": {
     "files": 43200,
     "bytes": 58323915124,
     "covers": [
      1,
      43200
     ],
     "contiguous": true,
     "spans_whole_pass": true,
     "source": "rebuilt by hashing the published channel on the share; the rendering runs' checkpoint rows were lost with their processes"
    },
    "text": {
     "files": 43200,
     "bytes": 1477207332,
     "covers": [
      1,
      43200
     ],
     "contiguous": true,
     "spans_whole_pass": true,
     "source": "rebuilt by hashing the published channel on the share; the rendering runs' checkpoint rows were lost with their processes"
    }
   },
   "frames_on_disk": {
    "frames": 43200,
    "text": 43200
   },
   "runs": [
    {
     "task": "664ba8527900",
     "frames": [
      1,
      2651
     ],
     "requested": [
      1,
      43200
     ],
     "started_at": "2026-09-09T03:04:52-07:00",
     "finished_at": "2026-09-09T07:14:08-07:00",
     "outcome": "failed",
     "cause": "driver exited 1073807364 (DBG_TERMINATE_PROCESS) at frame 2,651 - Windows Update restarted the machine at 07:14",
     "published_by_checkpoint": 2640,
     "rescued_from_staging": [
      2641,
      2651
     ],
     "driver_sha256": null,
     "driver_sha256_reconstructed": "30bee52fad0fcb21296e350eaf0a7b0124075344eb61b2d78df04ee5464c63e3",
     "driver_declared_commit": "5047c0c726f0feb3e3dd2393763e9d368319785c",
     "driver_note": "Not observed: this run predates per-run driver hashing. The driver at the time was commit 5047c0c; the reconstructed value is that commit's content with CRLF line endings, which is how it sat on the share. It is a reconstruction, not a measurement, and is recorded separately from driver_sha256 for that reason."
    },
    {
     "task": "542b74c6887f",
     "frames": [
      2652,
      10636
     ],
     "requested": [
      2652,
      43200
     ],
     "started_at": "2026-09-09T08:59:35-07:00",
     "finished_at": "2026-09-09T21:35:21-07:00",
     "outcome": "failed",
     "cause": "WinError 10055 (WSAENOBUFS) at frame 10,636 - the driver opened a socket per ComfyUI API call, ~23 per frame, polling /history every 0.25s",
     "published_by_checkpoint": 10571,
     "rescued_from_staging": [
      10572,
      10636
     ],
     "driver_sha256": null,
     "driver_sha256_reconstructed": "30bee52fad0fcb21296e350eaf0a7b0124075344eb61b2d78df04ee5464c63e3",
     "driver_declared_commit": "5047c0c726f0feb3e3dd2393763e9d368319785c",
     "driver_note": "Same pre-fix driver as the previous run. Not observed; reconstructed as above."
    },
    {
     "task": "826a790f994e",
     "frames": [
      10637,
      43200
     ],
     "requested": [
      10637,
      43200
     ],
     "started_at": "2026-09-10T15:48:59-07:00",
     "finished_at": "2026-09-12T21:30:36-07:00",
     "outcome": "completed",
     "checkpoints": 271,
     "s_per_frame": 5.936,
     "note": "Ran after the driver moved to a ComfyUI websocket plus one keep-alive HTTP connection, which removed the socket churn that ended the previous run.",
     "driver_sha256": "4f3406d1abea0bd18284d31783240dac4009c989d7dd3338c8da7785db047516",
     "driver_declared_commit": "5047c0c726f0feb3e3dd2393763e9d368319785c",
     "driver_note": "MEASURED on 2026-09-13 from the driver still on the share, which is byte-identical to comfy-batcher commit 8853843 (the websocket + keep-alive fix) as checked out with CRLF. The recipe declares 5047c0c; this run did not use it. 32,564 of the pass's 43,200 frames were rendered by 8853843.",
     "interpreter": "%USERPROFILE%/anaconda3/python.exe"
    }
   ],
   "driver": {
    "observed_sha256": [
     "4f3406d1abea0bd18284d31783240dac4009c989d7dd3338c8da7785db047516"
    ],
    "declared_commit": [
     "5047c0c726f0feb3e3dd2393763e9d368319785c"
    ],
    "per_run": [
     {
      "frames": [
       1,
       2651
      ],
      "task": "664ba8527900",
      "driver_sha256": "30bee52fad0fcb21296e350eaf0a7b0124075344eb61b2d78df04ee5464c63e3",
      "measured": false
     },
     {
      "frames": [
       2652,
       10636
      ],
      "task": "542b74c6887f",
      "driver_sha256": "30bee52fad0fcb21296e350eaf0a7b0124075344eb61b2d78df04ee5464c63e3",
      "measured": false
     },
     {
      "frames": [
       10637,
       43200
      ],
      "task": "826a790f994e",
      "driver_sha256": "4f3406d1abea0bd18284d31783240dac4009c989d7dd3338c8da7785db047516",
      "measured": true
     }
    ],
    "distinct_drivers": 2,
    "consistent_across_runs": false,
    "note": "observed_sha256 is the driver file each run actually launched, hashed at launch. declared_commit is what the pinned recipe SAYS the driver is -- a declaration, in a different identifier space, which nothing verifies. When they disagree, or when runs disagree with each other, the observed hashes are the fact.",
    "warning": "THE DRIVER CHANGED MID-PASS: 2 distinct driver files rendered this pass -- 1-2,651 by 30bee52fad0f (reconstructed), 2,652-10,636 by 30bee52fad0f (reconstructed), 10,637-43,200 by 4f3406d1abea. The recipe hash is unaffected by design (the driver is deliberately outside CONFIG_HASH_INPUTS so a harness fix does not split a pass's recipe identity), which is exactly why this has to be stated here instead."
   },
   "note": "Assembled from three rendering runs and two staging rescues. Frames 1-2,640 and 2,652-10,571 reached the share by checkpoint; 2,641-2,651 and 10,572-10,636 were recovered from the renderer's local staging after each crash, decoded first to prove they were not torn, and published through the same verify-on-read path. A fourth task (29f7fbddc0ff) never rendered at all: it was declined before the lease because 'python' resolved to Gaffer's own venv, which deliberately has no PIL. These manifests and this pass.json were REBUILT on 2026-09-13 by hashing the published channels on the share, because the original run wrote a manifest covering only its final 44 frames (43,157-43,200) and the per-checkpoint rows were lost with the process that held them. The frames themselves were never at risk; only the record was.",
   "log": {
    "present": true,
    "frames_logged": 43158,
    "frame_range": [
     2,
     43159
    ],
    "eras": {
     "front": 8640,
     "aerial": 8639,
     "side": 5760,
     "aerial-to-front": 4320,
     "front-to-side": 4320,
     "side-to-3q": 4320,
     "3q-to-aerial": 4284,
     "3q": 2875
    },
    "denoise": {
     "min": 0.35,
     "max": 0.72
    },
    "chain_breaks": [],
    "seconds_of_gpu": 253325.9,
    "mean_s_per_frame": 5.87,
    "luminance": {
     "min": 28.1,
     "max": 167.6
    },
    "seeds_withheld": "Every frame's sampler seed is in this log and is NOT exported. It is a complete reproduction recipe; available on request."
   }
  },
  {
   "pass": "pass-03-rehearsal",
   "record_present": true,
   "status": "complete",
   "config_hash": "sha256:717ce4250c1f9ac88f1eb6481b0e87c98daeed725aaa5eca436b817fe5c89213",
   "frames": {
    "image": 3600,
    "text": 3600,
    "covers": [
     1,
     3600
    ]
   },
   "channels": {
    "image": {
     "files": 3600,
     "bytes": 4854058031,
     "covers": [
      1,
      3600
     ],
     "contiguous": true,
     "spans_whole_pass": true,
     "source": "accumulated across 6 checkpoints plus the final publish, by the run that rendered it"
    },
    "text": {
     "files": 3600,
     "bytes": 160404017,
     "covers": [
      1,
      3600
     ],
     "contiguous": true,
     "spans_whole_pass": true,
     "source": "accumulated across 6 checkpoints plus the final publish, by the run that rendered it"
    }
   },
   "frames_on_disk": {
    "frames": 3600,
    "text": 3600
   },
   "runs": [
    {
     "task": "e3326fd8ca04",
     "frames": [
      1,
      3600
     ],
     "checkpoints": 6,
     "seconds": 20013.3,
     "s_per_frame": 5.559,
     "driver_sha256": "4f3406d1abea0bd18284d31783240dac4009c989d7dd3338c8da7785db047516",
     "driver_declared_commit": "8853843",
     "gaffer_commit": [
      "27522a7",
      true
     ],
     "interpreter": "%USERPROFILE%/anaconda3\\python.exe",
     "outcome": "completed"
    }
   ],
   "driver": {
    "observed_sha256": [
     "4f3406d1abea0bd18284d31783240dac4009c989d7dd3338c8da7785db047516"
    ],
    "declared_commit": [
     "8853843"
    ],
    "per_run": [
     {
      "frames": [
       1,
       3600
      ],
      "task": "e3326fd8ca04",
      "driver_sha256": "4f3406d1abea0bd18284d31783240dac4009c989d7dd3338c8da7785db047516",
      "measured": true
     }
    ],
    "distinct_drivers": 1,
    "consistent_across_runs": true,
    "note": "observed_sha256 is the driver file each run actually launched, hashed at launch. declared_commit is what the pinned recipe SAYS the driver is -- a declaration, in a different identifier space, which nothing verifies. When they disagree, or when runs disagree with each other, the observed hashes are the fact."
   },
   "note": null,
   "log": {
    "present": true,
    "frames_logged": 3599,
    "frame_range": [
     2,
     3600
    ],
    "eras": {
     "front": 720,
     "aerial": 719,
     "side": 480,
     "aerial-to-front": 360,
     "front-to-side": 360,
     "side-to-3q": 360,
     "3q-to-aerial": 360,
     "3q": 240
    },
    "denoise": {
     "min": 0.35,
     "max": 0.72
    },
    "chain_breaks": [],
    "seconds_of_gpu": 19913.0,
    "mean_s_per_frame": 5.533,
    "luminance": {
     "min": 39.0,
     "max": 166.4
    },
    "seeds_withheld": "Every frame's sampler seed is in this log and is NOT exported. It is a complete reproduction recipe; available on request."
   }
  },
  {
   "pass": "pass-04-rehearsal",
   "record_present": false,
   "status": null,
   "config_hash": null,
   "frames": null,
   "channels": {},
   "frames_on_disk": {
    "frames": 2400,
    "text": 2400
   },
   "runs": null,
   "driver": null,
   "note": null,
   "log": {
    "present": true,
    "frames_logged": 2416,
    "frame_range": [
     2,
     2417
    ],
    "eras": {
     "front": 504,
     "aerial": 503,
     "side": 329,
     "aerial-to-front": 252,
     "front-to-side": 252,
     "side-to-3q": 216,
     "3q-to-aerial": 216,
     "3q": 144
    },
    "denoise": {
     "min": 0.3811,
     "max": 0.8016
    },
    "chain_breaks": [],
    "seconds_of_gpu": 13180.6,
    "mean_s_per_frame": 5.456,
    "luminance": {
     "min": 27.6,
     "max": 179.6
    },
    "seeds_withheld": "Every frame's sampler seed is in this log and is NOT exported. It is a complete reproduction recipe; available on request."
   },
   "caveat": "No pass.json. This pass is either in flight or predates the completion record; frames_on_disk is a directory listing, not a verified manifest, and must not be read as one."
  },
  {
   "pass": "pass-05-rehearsal",
   "record_present": false,
   "status": null,
   "config_hash": null,
   "frames": null,
   "channels": {},
   "frames_on_disk": {
    "frames": 600,
    "text": 600
   },
   "runs": null,
   "driver": null,
   "note": null,
   "log": {
    "present": true,
    "frames_logged": 615,
    "frame_range": [
     2,
     616
    ],
    "eras": {
     "front": 144,
     "aerial": 143,
     "side": 88,
     "aerial-to-front": 72,
     "front-to-side": 72,
     "side-to-3q": 36,
     "3q-to-aerial": 36,
     "3q": 24
    },
    "denoise": {
     "min": 0.3811,
     "max": 0.99
    },
    "chain_breaks": [
     46,
     332,
     559
    ],
    "seconds_of_gpu": 3458.2,
    "mean_s_per_frame": 5.623,
    "luminance": {
     "min": 39.7,
     "max": 164.1
    },
    "seeds_withheld": "Every frame's sampler seed is in this log and is NOT exported. It is a complete reproduction recipe; available on request."
   },
   "caveat": "No pass.json. This pass is either in flight or predates the completion record; frames_on_disk is a directory listing, not a verified manifest, and must not be read as one."
  },
  {
   "pass": "pass-06-rehearsal",
   "record_present": false,
   "status": null,
   "config_hash": null,
   "frames": null,
   "channels": {},
   "frames_on_disk": {
    "frames": 1,
    "text": 1
   },
   "runs": null,
   "driver": null,
   "note": null,
   "log": {
    "present": false
   },
   "caveat": "No pass.json. This pass is either in flight or predates the completion record; frames_on_disk is a directory listing, not a verified manifest, and must not be read as one."
  },
  {
   "pass": "pass-07-rehearsal",
   "record_present": true,
   "status": "complete",
   "config_hash": "sha256:9468b49134d4ed246f9132bc2e42bbeb54cb5f3a20b1db9dfcd46cb577ccb5e0",
   "frames": {
    "image": 3600,
    "text": 3600,
    "covers": [
     1,
     3600
    ]
   },
   "channels": {
    "image": {
     "files": 3600,
     "bytes": 4990950065,
     "covers": [
      1,
      3600
     ],
     "contiguous": true,
     "spans_whole_pass": true,
     "source": "accumulated across 6 checkpoints plus the final publish, by the run that rendered it"
    },
    "text": {
     "files": 3600,
     "bytes": 196514885,
     "covers": [
      1,
      3600
     ],
     "contiguous": true,
     "spans_whole_pass": true,
     "source": "accumulated across 6 checkpoints plus the final publish, by the run that rendered it"
    }
   },
   "frames_on_disk": {
    "frames": 3600,
    "text": 3600
   },
   "runs": [
    {
     "task": "9ad964808196",
     "frames": [
      1,
      3600
     ],
     "checkpoints": 6,
     "seconds": 19709.8,
     "s_per_frame": 5.475,
     "driver_sha256": "cb10835f0713a136a320ec7dbe4e3dcf7cd0d6d4f6ca72645096ac29afde2939",
     "driver_declared_commit": "8853843",
     "gaffer_commit": [
      "27522a7",
      true
     ],
     "interpreter": "%USERPROFILE%/anaconda3\\python.exe",
     "outcome": "completed"
    }
   ],
   "driver": {
    "observed_sha256": [
     "cb10835f0713a136a320ec7dbe4e3dcf7cd0d6d4f6ca72645096ac29afde2939"
    ],
    "declared_commit": [
     "8853843"
    ],
    "per_run": [
     {
      "frames": [
       1,
       3600
      ],
      "task": "9ad964808196",
      "driver_sha256": "cb10835f0713a136a320ec7dbe4e3dcf7cd0d6d4f6ca72645096ac29afde2939",
      "measured": true
     }
    ],
    "distinct_drivers": 1,
    "consistent_across_runs": true,
    "note": "observed_sha256 is the driver file each run actually launched, hashed at launch. declared_commit is what the pinned recipe SAYS the driver is -- a declaration, in a different identifier space, which nothing verifies. When they disagree, or when runs disagree with each other, the observed hashes are the fact."
   },
   "note": null,
   "log": {
    "present": true,
    "frames_logged": 3599,
    "frame_range": [
     2,
     3600
    ],
    "eras": {
     "front": 720,
     "aerial": 719,
     "side": 480,
     "aerial-to-front": 360,
     "front-to-side": 360,
     "side-to-3q": 360,
     "3q-to-aerial": 360,
     "3q": 240
    },
    "denoise": {
     "min": 0.3639,
     "max": 0.99
    },
    "chain_breaks": [
     46,
     332,
     559,
     839,
     1168,
     1545,
     1969,
     2439
    ],
    "seconds_of_gpu": 19606.9,
    "mean_s_per_frame": 5.448,
    "luminance": {
     "min": 23.8,
     "max": 171.7
    },
    "seeds_withheld": "Every frame's sampler seed is in this log and is NOT exported. It is a complete reproduction recipe; available on request."
   }
  },
  {
   "pass": "pass-08",
   "record_present": false,
   "status": null,
   "config_hash": null,
   "frames": null,
   "channels": {},
   "frames_on_disk": {
    "frames": 10468,
    "text": 10468
   },
   "runs": null,
   "driver": null,
   "note": null,
   "log": {
    "present": true,
    "frames_logged": 10512,
    "frame_range": [
     2,
     10485
    ],
    "eras": {
     "aerial": 2160,
     "front": 2088,
     "side": 1392,
     "aerial-to-front": 1044,
     "front-to-side": 1044,
     "side-to-3q": 1044,
     "3q-to-aerial": 1044,
     "3q": 696
    },
    "denoise": {
     "min": 0.3654,
     "max": 0.99
    },
    "chain_breaks": [
     409,
     3002,
     5064,
     7597
    ],
    "seconds_of_gpu": 60328.2,
    "mean_s_per_frame": 5.739,
    "luminance": {
     "min": 30.0,
     "max": 160.3
    },
    "seeds_withheld": "Every frame's sampler seed is in this log and is NOT exported. It is a complete reproduction recipe; available on request."
   },
   "caveat": "No pass.json. This pass is either in flight or predates the completion record; frames_on_disk is a directory listing, not a verified manifest, and must not be read as one."
  }
 ],
 "treatments": [
  {
   "treatment": "glitch-01",
   "record_present": true,
   "status": "displacement rendered; HUD held pending a decision",
   "what": "comfyglitch displacement + machine-vision HUD applied to Pass 2's published frames. Derived work: it consumes a pass, it is not one.",
   "departs_from_baseline": null,
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     1440
    ],
    "note": "Pass 2 is still rendering. This treatment is pinned to the 1,440-frame prefix that was published and verified when it ran; a later treatment covers a longer prefix and does not replace this one.",
    "source": "passes/pass-02/previews/pass-02.sbs.f000001-001440.mov",
    "source_sha256": "f11ed0d68751ebbe1c88fa1f3f0f7e60b1503d337f3b27aa47adc65d1be5a6a9",
    "source_geometry": "1536x1344, image left / text right, 24fps",
    "why_side_by_side": "The look was dialled in against a 1536x1344 side-by-side, so a treatment fed the two channels separately would be working on different material than it was tuned on. The channels remain separate stacks on disk; this composite exists for the treatment and for viewing, and nothing writes back to the pass."
   },
   "render": null,
   "outputs": [
    {
     "file": "previews/glitch-01.displacement.f000001-001440.mp4",
     "what": "displacement layers only, no machine-vision overlay",
     "frames": [
      1,
      1440
     ],
     "geometry": "1536x1344",
     "seconds": 60.0,
     "bytes": 292009795,
     "sha256": "db36ade05b5fcd9fefe6433097d83caea8047e7c6b28ba51a3508baf1c5037d4",
     "render_seconds": 327.823,
     "comfyglitch_params": "comfyglitch-params.json",
     "offsets_applied": {
      "min": -25,
      "max": 57
     }
    }
   ],
   "frames": null,
   "cv": {
    "model": null,
    "confidence": null,
    "detections": null,
    "density_per_frame": null,
    "labels": null
   },
   "produced_by": null,
   "note": null
  },
  {
   "treatment": "glitch-02",
   "record_present": true,
   "status": "test pass",
   "what": "The CV layer composited onto the source FIRST, then torn by the glitch matrix. comfyglitch order 'under': HUD drawn before displacement, so it tears with the image rather than sitting cleanly on top of it.",
   "departs_from_baseline": "The kept dial-in used order 'reproject' (HUD read through the image's offset map). This is a deliberate departure, not a correction of it - glitch-01 and the kept baseline are untouched.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     1440
    ],
    "source": "passes/pass-02/previews/pass-02.sbs.f000001-001440.mov",
    "source_sha256": "f11ed0d68751ebbe1c88fa1f3f0f7e60b1503d337f3b27aa47adc65d1be5a6a9"
   },
   "render": {
    "composite": "under",
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 1440,
     "count": 1440
    },
    "seconds": 421.673
   },
   "outputs": [
    {
     "file": "previews/glitch-02.hud-under.f000001-001440.mp4",
     "sha256": "be9ba4340173df1549f97de04516b64c25036da7b7923376740ca303c0e8435f",
     "bytes": 294229466,
     "frames": [
      1,
      1440
     ],
     "geometry": "1536x1344",
     "seconds": 60.0
    }
   ],
   "frames": {
    "directory": "frames/",
    "files": 1440,
    "bytes": 2013119130,
    "geometry": "1536x1344",
    "lossless": true,
    "manifest": "frames-manifest.json",
    "why": "The treatment's record, the same way a pass's frames are its record. preview.mp4 is derived from these, not the other way round -- extracting frames back out of it returns the codec's opinion of the pixels."
   },
   "cv": {
    "model": "yolo11n-seg.pt",
    "confidence": 0.15,
    "detections": 675,
    "density_per_frame": 0.469,
    "labels": {
     "bench": 150,
     "train": 62,
     "person": 62,
     "refrigerator": 37,
     "umbrella": 32,
     "airplane": 32,
     "car": 31,
     "suitcase": 25,
     "boat": 24,
     "kite": 23
    }
   },
   "produced_by": null,
   "note": null
  },
  {
   "treatment": "glitch-03",
   "record_present": true,
   "status": "test pass",
   "what": "The same CV layer and glitch matrix as glitch-02, composited the other way round: order 'over' draws the HUD onto the already-displaced plate, so contours and id boxes sit cleanly on top instead of tearing with the image.",
   "departs_from_baseline": "Differs from glitch-02 by exactly one parameter - composite 'over' rather than 'under'. Source hash, detections, displacement layers and overlay sizes are identical, which is what makes the pair a controlled comparison rather than two different renders.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     1440
    ],
    "source": "passes/pass-02/previews/pass-02.sbs.f000001-001440.mov",
    "source_sha256": "f11ed0d68751ebbe1c88fa1f3f0f7e60b1503d337f3b27aa47adc65d1be5a6a9",
    "source_regenerable": null
   },
   "render": {
    "composite": "over",
    "overlay": {
     "hold_frames": 1,
     "draw_box": true,
     "draw_mask": true,
     "draw_skeleton": false,
     "draw_face_mesh": false,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 1440,
     "count": 1440
    },
    "seconds": 60.0,
    "chunked": {
     "chunk_frames": 160,
     "windows": 9,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 1050.082
   },
   "outputs": [
    {
     "file": "previews/glitch-03.hud-over.f000001-001440.mp4",
     "sha256": "4c6b85516f517617e6a2f5bcd902d682c14bf69b72def2ee17076dba118fbf87",
     "bytes": 294420995,
     "frames": [
      1,
      1440
     ],
     "geometry": "1536x1344",
     "seconds": 60.0
    }
   ],
   "frames": {
    "directory": "frames/",
    "files": 1440,
    "bytes": 2013568531,
    "geometry": "1536x1344",
    "lossless": true,
    "manifest": "frames-manifest.json",
    "why": "The treatment's record, the same way a pass's frames are its record. preview.mp4 is derived from these, not the other way round -- extracting frames back out of it returns the codec's opinion of the pixels."
   },
   "cv": {
    "model": "yolo11n-seg.pt",
    "confidence": 0.15,
    "detections": 675,
    "density_per_frame": 0.469,
    "labels": {
     "bench": 150,
     "train": 62,
     "person": 62,
     "refrigerator": 37,
     "umbrella": 32,
     "airplane": 32,
     "car": 31,
     "suitcase": 25,
     "boat": 24,
     "kite": 23
    }
   },
   "produced_by": null,
   "note": "Judged against glitch-02 and NOT preferred: the flat overlay reads as an annotation laid over the piece rather than something inside it. Kept because the comparison is the evidence for that, and a rejected variant with no artifact is an opinion."
  },
  {
   "treatment": "glitch-04",
   "record_present": true,
   "status": "test pass",
   "what": "Pose skeletons and face mesh instead of segmentation contours, on the most recent 1,440 frames. The prompts say 'empty, unmanned, deserted', and the detector finds people anyway: 108 of 1,440 frames, 92 separate apparitions averaging 1.2 frames, mostly at 0.15-0.20 confidence. overlay hold 6 makes each one linger about a quarter second instead of a single frame.",
   "departs_from_baseline": "No segmentation contours at all - a pose detections file carries keypoints but no masks, so --draw-mask has nothing to draw. This is the skeleton half of the look on its own, not a replacement for the contour baseline.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     4692,
     6131
    ],
    "source": "regenerable: hstack of passes/pass-02/{frames,text} 4692-6131 (image left, text right)",
    "source_sha256": "cc24db21d5d0cf9b24f17675bf52c22e415b5916f258024854c1eba907f49f31",
    "source_regenerable": "ffmpeg -framerate 24 -start_number 4692 -i frames/frame_%06d.png -framerate 24 -start_number 4692 -i text/frame_%06d.png -frames:v 1440 -filter_complex '[0:v][1:v]hstack=inputs=2' -c:v prores_ks -profile:v 4 -pix_fmt yuv444p10le source.mov"
   },
   "render": {
    "composite": "over",
    "overlay": {
     "hold_frames": 6,
     "draw_box": true,
     "draw_mask": false,
     "draw_skeleton": true,
     "draw_face_mesh": true,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 1440,
     "count": 1440
    },
    "seconds": 60.0,
    "chunked": {
     "chunk_frames": 160,
     "windows": 9,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 1255.905
   },
   "outputs": [
    {
     "file": "previews/glitch-04.skeleton-pops.f004692-006131.mp4",
     "sha256": "93cf81345a9ef8a9562a3d2b5474f56d48f35a9ac32b214e0b1ccbe849561c01",
     "bytes": 297237281,
     "frames": [
      4692,
      6131
     ],
     "geometry": "1536x1344",
     "seconds": 60.0
    }
   ],
   "frames": {
    "directory": "frames/",
    "files": 1440,
    "bytes": 2004629525,
    "geometry": "1536x1344",
    "lossless": true,
    "manifest": "frames-manifest.json",
    "why": "The treatment's record, the same way a pass's frames are its record. preview.mp4 is derived from these, not the other way round -- extracting frames back out of it returns the codec's opinion of the pixels."
   },
   "cv": {
    "model": "yolo11n-pose.pt",
    "confidence": 0.15,
    "detections": 114,
    "density_per_frame": 0.079,
    "labels": {
     "person": 114
    }
   },
   "produced_by": null,
   "note": null
  },
  {
   "treatment": "glitch-06",
   "record_present": true,
   "status": "preferred",
   "what": "The whole published pass so far - 6,251 frames, 4.3 minutes - with BOTH readings in one overlay: all-COCO segmentation contours and id boxes, plus pose skeletons and face mesh on the figures the prompts say should not be there. Composited 'under', so the HUD is drawn onto the plate before displacement and the blockouts cut and carry it.",
   "departs_from_baseline": "Two detections files merged into one overlay, which no single detect.py run produces: --draw-mask needs masks and --draw-skeleton needs keypoints, and one model gives one or the other. The merge is a union with pose ids namespaced 'p<id>' because the two runs use independent trackers - see cv.merged_from.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     6251
    ],
    "source": "regenerable: hstack of passes/pass-02/{frames,text} 1-6251 (image left, text right)",
    "source_sha256": "41d8807682ce6e27094e26ed661b699689e749da81d6d0af05f11b5f96812886",
    "source_regenerable": "ffmpeg -framerate 24 -start_number 1 -i frames/frame_%06d.png -framerate 24 -start_number 1 -i text/frame_%06d.png -frames:v 6251 -filter_complex '[0:v][1:v]hstack=inputs=2' -c:v prores_ks -profile:v 4 -pix_fmt yuv444p10le source.mov"
   },
   "render": {
    "composite": "under",
    "overlay": {
     "hold_frames": 1,
     "draw_box": true,
     "draw_mask": true,
     "draw_skeleton": true,
     "draw_face_mesh": true,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 6251,
     "count": 6251
    },
    "seconds": 260.46,
    "chunked": {
     "chunk_frames": 160,
     "windows": 40,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 2540.696
   },
   "outputs": [
    {
     "file": "previews/glitch-06.under-contours-skeletons.f000001-006251.mp4",
     "sha256": "8060d8ab14d566924db60e22185d575c5a214ad26d1d0977c58785fdb676aaf7",
     "bytes": 1300598280,
     "frames": [
      1,
      6251
     ],
     "geometry": "1536x1344",
     "seconds": 260.46
    }
   ],
   "frames": null,
   "cv": {
    "model": "yolo11n-seg.pt + yolo11n-pose.pt",
    "confidence": 0.15,
    "detections": 2738,
    "density_per_frame": 0.438,
    "labels": {
     "person": 748,
     "train": 321,
     "bench": 288,
     "clock": 171,
     "refrigerator": 137,
     "suitcase": 102,
     "truck": 102,
     "car": 96,
     "airplane": 60,
     "kite": 49
    }
   },
   "produced_by": null,
   "note": "No frame sequence on this run, deliberately: writing 6,251 full-resolution PNGs measured 2.3 frames/s, ~45 minutes on top of a ~42 minute gather, for an output a look is not judged on. This is look development and the video is the deliverable. Re-render with --frames-dir once the look is locked; the source and detections are recorded, so it reproduces exactly."
  },
  {
   "treatment": "glitch-07",
   "record_present": true,
   "status": "preferred",
   "what": "The preferred look applied to the most recent 1,440 published frames: segmentation contours and id boxes merged with pose skeletons, composited 'under' so the blockouts cut and carry the HUD.",
   "departs_from_baseline": "Same recipe as glitch-06, different window. Nothing about the treatment changed - this exists because glitch-06 stopped at frame 6,251 and the pass did not.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     9132,
     10571
    ],
    "source": "regenerable: hstack of passes/pass-02/{frames,text} 9132-10571 (image left, text right)",
    "source_sha256": "dde16d6b2eb75cc9f07c1fb2dcdf807e85e9e13563e4a2ddc106eb7614b894f8",
    "source_regenerable": "ffmpeg -framerate 24 -start_number 9132 -i frames/frame_%06d.png -framerate 24 -start_number 9132 -i text/frame_%06d.png -frames:v 1440 -filter_complex '[0:v][1:v]hstack=inputs=2' -c:v prores_ks -profile:v 4 -pix_fmt yuv444p10le source.mov"
   },
   "render": {
    "composite": "under",
    "overlay": {
     "hold_frames": 1,
     "draw_box": true,
     "draw_mask": true,
     "draw_skeleton": true,
     "draw_face_mesh": true,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 1440,
     "count": 1440
    },
    "seconds": 60.0,
    "chunked": {
     "chunk_frames": 160,
     "windows": 9,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 882.596
   },
   "outputs": [
    {
     "file": "previews/glitch-07.under-contours-skeletons.f009132-010571.mp4",
     "sha256": "46acd0aec1219f8940c9725421cdc916fa2954de38abbb682963a0d3734cfc9d",
     "bytes": 299530052,
     "frames": [
      9132,
      10571
     ],
     "geometry": "1536x1344",
     "seconds": 60.0
    }
   ],
   "frames": {
    "directory": "frames/",
    "files": 1440,
    "bytes": 2023950222,
    "geometry": "1536x1344",
    "lossless": true,
    "manifest": "frames-manifest.json",
    "why": "The treatment's record, the same way a pass's frames are its record. preview.mp4 is derived from these, not the other way round -- extracting frames back out of it returns the codec's opinion of the pixels."
   },
   "cv": {
    "model": "yolo11n-seg.pt + yolo11n-pose.pt",
    "confidence": 0.15,
    "detections": 483,
    "density_per_frame": 0.335,
    "labels": {
     "person": 147,
     "bench": 53,
     "car": 38,
     "train": 23,
     "refrigerator": 22,
     "traffic light": 22,
     "clock": 18,
     "truck": 14,
     "boat": 14,
     "tie": 12
    }
   },
   "produced_by": null,
   "note": null
  },
  {
   "treatment": "glitch-08",
   "record_present": true,
   "status": "preferred",
   "what": "The preferred look over pass frames 6,252-9,131 - the window between glitch-06 and glitch-07. With this, every frame Pass 2 has published is treated.",
   "departs_from_baseline": "Nothing. Same recipe as glitch-06 and glitch-07; this exists purely to close a coverage gap that opened because treatments were being run on the newest frames while the pass kept moving.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     6252,
     9131
    ],
    "source": "regenerable: hstack of passes/pass-02/{frames,text} 6252-9131 (image left, text right)",
    "source_sha256": "4115045d1be279eabfe19824dce57aa48fa8f60b803839951a973a4d0caf37e2",
    "source_regenerable": "ffmpeg -framerate 24 -start_number 6252 -i frames/frame_%06d.png -framerate 24 -start_number 6252 -i text/frame_%06d.png -frames:v 2880 -filter_complex '[0:v][1:v]hstack=inputs=2' -c:v prores_ks -profile:v 4 -pix_fmt yuv444p10le source.mov"
   },
   "render": {
    "composite": "under",
    "overlay": {
     "hold_frames": 1,
     "draw_box": true,
     "draw_mask": true,
     "draw_skeleton": true,
     "draw_face_mesh": true,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 2880,
     "count": 2880
    },
    "seconds": 120.0,
    "chunked": {
     "chunk_frames": 160,
     "windows": 18,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 1878.734
   },
   "outputs": [
    {
     "file": "previews/glitch-08.under-contours-skeletons.f006252-009131.mp4",
     "sha256": "beae935821aecf0ea73e70dec51de30c0537f2e34d2ce56b96da58686d2f0de8",
     "bytes": 598866821,
     "frames": [
      6252,
      9131
     ],
     "geometry": "1536x1344",
     "seconds": 120.0
    }
   ],
   "frames": {
    "directory": "frames/",
    "files": 2880,
    "bytes": 3980914116,
    "geometry": "1536x1344",
    "lossless": true,
    "manifest": "frames-manifest.json",
    "why": "The treatment's record, the same way a pass's frames are its record. preview.mp4 is derived from these, not the other way round -- extracting frames back out of it returns the codec's opinion of the pixels."
   },
   "cv": {
    "model": "yolo11n-seg.pt + yolo11n-pose.pt",
    "confidence": 0.15,
    "detections": 1047,
    "density_per_frame": 0.364,
    "labels": {
     "person": 347,
     "train": 101,
     "bench": 74,
     "refrigerator": 58,
     "traffic light": 57,
     "bird": 41,
     "truck": 32,
     "suitcase": 30,
     "vase": 26,
     "clock": 24
    }
   },
   "produced_by": null,
   "note": null
  },
  {
   "treatment": "glitch-09",
   "record_present": true,
   "status": "preferred, full length",
   "what": "The whole published pass as ONE continuous render: 10,571 frames, 7.3 minutes, 67 windows. Segmentation contours and id boxes merged with pose skeletons, composited 'under' so the blockouts cut and carry the HUD.",
   "departs_from_baseline": "Supersedes glitch-06 + glitch-08 + glitch-07, which tile the same range in three pieces. They are NOT equivalent to this: render_chunked's block offsets count from frame 0 of the clip it is given, and each of those three is a separate clip. Within a run, window seams are hidden by rendering a 124-frame lead-in and discarding it; across runs there is no lead-in, so the displacement schedules reset at pass frames 6,252 and 9,132. Concatenating them would restart the glitch rhythm twice. This has one continuous schedule end to end.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     10571
    ],
    "source": "regenerable: hstack of passes/pass-02/{frames,text} 1-10571 (image left, text right)",
    "source_sha256": "e06ce9cd4a09746a23fe1b4e9262f67d3efa6a2a8dc7662863903dcb44b46075",
    "source_regenerable": "ffmpeg -framerate 24 -start_number 1 -i frames/frame_%06d.png -framerate 24 -start_number 1 -i text/frame_%06d.png -frames:v 10571 -filter_complex '[0:v][1:v]hstack=inputs=2' -c:v prores_ks -profile:v 4 -pix_fmt yuv444p10le source.mov"
   },
   "render": {
    "composite": "under",
    "overlay": {
     "hold_frames": 1,
     "draw_box": true,
     "draw_mask": true,
     "draw_skeleton": true,
     "draw_face_mesh": true,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "none",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 10571,
     "count": 10571
    },
    "seconds": 440.46,
    "chunked": {
     "chunk_frames": 160,
     "windows": 67,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 9378.266
   },
   "outputs": [
    {
     "file": "previews/glitch-09.under-contours-skeletons.f000001-010571.mp4",
     "sha256": "e5a3b44361857ca99bd2d17af2c597a480468930c2e919c024fba6bf6a4ac028",
     "bytes": 2199897400,
     "frames": [
      1,
      10571
     ],
     "geometry": "1536x1344",
     "seconds": 440.46
    }
   ],
   "frames": {
    "directory": "frames/",
    "files": 10571,
    "bytes": 14768951557,
    "geometry": "1536x1344",
    "lossless": true,
    "manifest": "frames-manifest.json",
    "why": "The treatment's record, the same way a pass's frames are its record. preview.mp4 is derived from these, not the other way round -- extracting frames back out of it returns the codec's opinion of the pixels."
   },
   "cv": {
    "model": "yolo11n-seg.pt + yolo11n-pose.pt",
    "confidence": 0.15,
    "detections": 4268,
    "density_per_frame": 0.404,
    "labels": {
     "person": 1242,
     "train": 445,
     "bench": 415,
     "refrigerator": 217,
     "clock": 213,
     "car": 152,
     "truck": 148,
     "suitcase": 139,
     "traffic light": 124,
     "airplane": 91
    }
   },
   "produced_by": null,
   "note": "Rendered as a local process, before glitch_treatment existed as a capability. It therefore has no task id, lease or event trail -- unlike glitch-10, which was dispatched through the mesh. Kept as-is rather than re-rendered: three hours of correct work is not worth discarding for a provenance field."
  },
  {
   "treatment": "glitch-10",
   "record_present": true,
   "status": "rendered",
   "what": "Segmentation contours and id boxes merged with pose skeletons over pass frames 10,332-10,571, composited 'under'.",
   "departs_from_baseline": null,
   "upstream": {
    "pass": "pass-02",
    "frames": [
     10332,
     10571
    ],
    "source": "regenerable: hstack of passes/pass-02/{frames,text} 10332-10571 (image left, text right)"
   },
   "render": {
    "composite": "under",
    "layers": [
     "cols=4,rows=3,angle=90,offset=32,jitter=0.8,sparsity=0.5,hold=8,stagger=0.6,seed=5",
     "cols=8,rows=7,offset=22,jitter=0.8,sparsity=0.8,hold=6,stagger=0.5,seed=9",
     "cols=20,rows=18,offset=14,jitter=0.8,sparsity=0.93,hold=4,stagger=0.8,seed=13"
    ],
    "chunk_frames": 160,
    "seconds": 161.2
   },
   "outputs": [
    {
     "file": "previews/glitch-10.under-contours-skeletons.f010332-010571.mp4",
     "sha256": "1485dc9c551a74d4b6fee2b4f85af888626aaa42f5faca11650d80243da5ed28",
     "bytes": 47488604,
     "frames": [
      10332,
      10571
     ],
     "geometry": "1536x1344",
     "seconds": 10.0
    }
   ],
   "frames": null,
   "cv": {
    "model": null,
    "confidence": null,
    "detections": null,
    "density_per_frame": null,
    "labels": null
   },
   "produced_by": {
    "capability": "glitch_treatment",
    "task": "e507b863300a",
    "note": "Dispatched through the mesh, so this treatment has a task id, a lease and an event trail. The earlier glitch-NN treatments were run as local processes and have none."
   },
   "note": null
  },
  {
   "treatment": "glitch-12",
   "record_present": true,
   "status": "rendered",
   "what": "Segmentation contours and id boxes merged with pose skeletons over pass frames 1-30,556, composited 'under'.",
   "departs_from_baseline": null,
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     30556
    ],
    "source": "regenerable: hstack of passes/pass-02/{frames,text} 1-30556 (image left, text right)"
   },
   "render": {
    "composite": "under",
    "layers": [
     "cols=4,rows=3,angle=90,offset=32,jitter=0.8,sparsity=0.5,hold=8,stagger=0.6,seed=5",
     "cols=8,rows=7,offset=22,jitter=0.8,sparsity=0.8,hold=6,stagger=0.5,seed=9",
     "cols=20,rows=18,offset=14,jitter=0.8,sparsity=0.93,hold=4,stagger=0.8,seed=13"
    ],
    "chunk_frames": 160,
    "seconds": 51581.7
   },
   "outputs": [
    {
     "file": "previews/glitch-12.under-contours-skeletons.f000001-030556.mp4",
     "sha256": "5be28b5165a77655e525ed14e3da29aaf0301b15baa258dd57263e841e86c8f9",
     "bytes": 6365656995,
     "frames": [
      1,
      30556
     ],
     "geometry": "1536x1344",
     "seconds": 1273.17
    }
   ],
   "frames": {
    "directory": "frames/",
    "files": 30556,
    "bytes": 42363594483,
    "manifest": "frames-manifest.json"
   },
   "cv": {
    "model": null,
    "confidence": null,
    "detections": null,
    "density_per_frame": null,
    "labels": null
   },
   "produced_by": {
    "capability": "glitch_treatment",
    "task": "b636bf223bb8",
    "note": "Dispatched through the mesh, so this treatment has a task id, a lease and an event trail. The earlier glitch-NN treatments were run as local processes and have none."
   },
   "note": null
  },
  {
   "treatment": "glitch-envelope-01",
   "record_present": true,
   "status": "test pass",
   "what": "The first treatment whose intensity VARIES over time. All three displacement layers run envelope=cut, so max_offset is scaled per frame by proximity to a cut and settles to a 0.06 floor inside a shot -- long stretches carry the CV overlay (contours, skeletons, id boxes) over an essentially clean image, and bursts of full displacement rise and decay over about 1.5s (cut-half-life 30).",
   "departs_from_baseline": "Every earlier glitch treatment applied one constant effect for its whole runtime. The cuts here are not a metronome: pass-07's chain breaks -- frames rendered at denoise 1.0, where the feedback chain is severed -- register as frame-diff spikes of 36.9 to 75.6 against a median of 15.1, so threshold 32 puts the bursts on the compositional breaks. 96 cuts were found; shot lengths run 350 frames early and 3-7 frames late, which gives a natural intensity ramp matching the render's own arc.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     3600
    ],
    "source": "regenerable: hstack of passes/pass-07-rehearsal/{frames,text} 1-3600 (image left, text right)",
    "source_sha256": "be311e6eb26b04f128e6721ee6d560b26a70b6441db93cef85d10137a17f8ec3",
    "source_regenerable": "ffmpeg -framerate 24 -start_number 1 -i frames/frame_%06d.png -framerate 24 -start_number 1 -i text/frame_%06d.png -frames:v 3600 -filter_complex '[0:v][1:v]hstack=inputs=2' -c:v prores_ks -profile:v 4 -pix_fmt yuv444p10le source.mov"
   },
   "render": {
    "composite": "under",
    "overlay": {
     "hold_frames": 1,
     "draw_box": true,
     "draw_mask": true,
     "draw_skeleton": true,
     "draw_face_mesh": true,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "cut",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "cut",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "cut",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 3600,
     "count": 3600
    },
    "seconds": 150.0,
    "chunked": {
     "chunk_frames": 160,
     "windows": 23,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 1346.381
   },
   "outputs": [
    {
     "file": "previews/glitch-envelope-01.envelope-cut.f000001-003600.mp4",
     "sha256": "4f0eafdff4bac4e79eb53bfbe83d78bf4e9ac39976db4b57b7319e79234a319d",
     "bytes": 741875022,
     "frames": [
      1,
      3600
     ],
     "geometry": "1536x1344",
     "seconds": 150.0
    }
   ],
   "frames": null,
   "cv": {
    "model": "yolo11n-seg.pt + yolo11n-pose.pt",
    "confidence": 0.15,
    "detections": 5361,
    "density_per_frame": 1.489,
    "labels": {
     "person": 3524,
     "train": 485,
     "refrigerator": 367,
     "car": 168,
     "bench": 149,
     "suitcase": 90,
     "clock": 65,
     "potted plant": 65,
     "oven": 57,
     "tv": 48
    }
   },
   "produced_by": null,
   "note": "Rendered LOCALLY, not through glitch_treatment, and deliberately: the render node was hours into the 53-hour pass-08 and the capability does not expose envelope flags, so adding them would have needed a node restart that killed the render. It therefore has no task id or lease. The capability should grow --cut-* and env= support before the next one."
  },
  {
   "treatment": "glitch-envelope-02",
   "record_present": true,
   "status": "preferred",
   "what": "Time-varying glitch with an AUTHORED cut list. Long stretches carry the CV overlay -- contours, skeletons, id boxes -- over an essentially clean image at a 0.04 displacement floor, and bursts rise and decay over about 1.5s (cut-half-life 26).",
   "departs_from_baseline": "glitch-envelope-01 detected its cuts automatically, which followed the render's OWN churn: at peak saturation the source sits at denoise 0.77 with a high frame diff, so it fired 52 cuts after frame 2,400 with a median shot of 8 frames and 76 of 97 shots under a second. The envelope never decayed and the densest passage was torn apart entirely -- the one place the image most needs to be legible. Here the 14 cuts are placed: the eight chain breaks stay, because they are real discontinuities in the material, and through peak saturation the spacing is WIDER not narrower, ~220 frames (9.2s). The longest calm in the piece, 470 frames / 19.6s, sits at 1,969-2,439 as saturation arrives, so the dense frame gets an uninterrupted look before chaos punctuates it.",
   "upstream": {
    "pass": "pass-02",
    "frames": [
     1,
     3600
    ],
    "source": "regenerable: hstack of passes/pass-07-rehearsal/{frames,text} 1-3600 (image left, text right)",
    "source_sha256": "be311e6eb26b04f128e6721ee6d560b26a70b6441db93cef85d10137a17f8ec3",
    "source_regenerable": "ffmpeg -framerate 24 -start_number 1 -i frames/frame_%06d.png -framerate 24 -start_number 1 -i text/frame_%06d.png -frames:v 3600 -filter_complex '[0:v][1:v]hstack=inputs=2' -c:v prores_ks -profile:v 4 -pix_fmt yuv444p10le source.mov"
   },
   "render": {
    "composite": "under",
    "overlay": {
     "hold_frames": 1,
     "draw_box": true,
     "draw_mask": true,
     "draw_skeleton": true,
     "draw_face_mesh": true,
     "stroke": 5,
     "bracket_len": 56,
     "font_scale": 1.1,
     "min_label_area": 4800
    },
    "layers": [
     {
      "grid_cols": 4,
      "grid_rows": 3,
      "angle": 90.0,
      "max_offset": 32,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.5,
      "hold_frames": 8,
      "hold_stagger": 0.6,
      "seed": 5,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "cut",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 8,
      "grid_rows": 7,
      "angle": 0.0,
      "max_offset": 22,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.8,
      "hold_frames": 6,
      "hold_stagger": 0.5,
      "seed": 9,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "cut",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     },
     {
      "grid_cols": 20,
      "grid_rows": 18,
      "angle": 0.0,
      "max_offset": 14,
      "jitter": 0.8,
      "jitter_mode": "signed",
      "sparsity": 0.93,
      "hold_frames": 4,
      "hold_stagger": 0.8,
      "seed": 13,
      "cut_coupled": false,
      "compose": "over",
      "type": "grid",
      "envelope": "cut",
      "n_buckets": 6,
      "continuous": false,
      "curve": 1.0,
      "invert": false,
      "empty": "exclude",
      "bucket_mode": "quantile"
     }
    ],
    "device": "cpu",
    "frame_range": {
     "start": 0,
     "stop": 3600,
     "count": 3600
    },
    "seconds": 150.0,
    "chunked": {
     "chunk_frames": 160,
     "windows": 23,
     "lead_back": 124,
     "lead_forward": 56
    },
    "timing_s": 1275.263
   },
   "outputs": [
    {
     "file": "previews/glitch-envelope-02.envelope-authored.f000001-003600.mp4",
     "sha256": "9646f9df2bd65dffc61c745d2835410182eac526fce4e18a8aec823746996664",
     "bytes": 740719269,
     "frames": [
      1,
      3600
     ],
     "geometry": "1536x1344",
     "seconds": 150.0
    }
   ],
   "frames": null,
   "cv": {
    "model": "yolo11n-seg.pt + yolo11n-pose.pt",
    "confidence": 0.15,
    "detections": 5361,
    "density_per_frame": 1.489,
    "labels": {
     "person": 3524,
     "train": 485,
     "refrigerator": 367,
     "car": 168,
     "bench": 149,
     "suitcase": 90,
     "clock": 65,
     "potted plant": 65,
     "oven": 57,
     "tv": 48
    }
   },
   "produced_by": null,
   "note": "Rendered locally, not through glitch_treatment: the render node was mid pass-08 and the capability exposes no envelope flags, so adding them would have needed a node restart that killed a 53-hour render. No task id or lease. The cut list was written by hand into the cache path ensure_cuts() reads, which is why it survived instead of being re-detected."
  }
 ],
 "recipes": {
  "recipe": {
   "present": true,
   "prompt_lines": 43200,
   "distinct_lines": 102,
   "max_repetition": 720,
   "eras": {
    "aerial": 120,
    "aerial-to-front": 120,
    "front": 120,
    "front-to-side": 120,
    "side": 120,
    "side-to-3q": 120,
    "3q": 120,
    "3q-to-aerial": 120
   },
   "lines_without_depopulation": 43200,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass03": {
   "present": true,
   "prompt_lines": 43200,
   "distinct_lines": 1702,
   "max_repetition": 65,
   "eras": {
    "aerial": 120,
    "aerial-to-front": 120,
    "front": 120,
    "front-to-side": 120,
    "side": 120,
    "side-to-3q": 120,
    "3q": 120,
    "3q-to-aerial": 120
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass03-rehearsal": {
   "present": true,
   "prompt_lines": 3600,
   "distinct_lines": 1361,
   "max_repetition": 45,
   "eras": {
    "aerial": 10,
    "aerial-to-front": 10,
    "front": 10,
    "front-to-side": 10,
    "side": 10,
    "side-to-3q": 10,
    "3q": 10,
    "3q-to-aerial": 10
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass04-rehearsal": {
   "present": true,
   "prompt_lines": 3600,
   "distinct_lines": 1437,
   "max_repetition": 45,
   "eras": {
    "aerial": 10,
    "aerial-to-front": 10,
    "front": 10,
    "front-to-side": 10,
    "side": 10,
    "side-to-3q": 10,
    "3q": 10,
    "3q-to-aerial": 10
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass05-rehearsal": {
   "present": true,
   "prompt_lines": 3600,
   "distinct_lines": 1437,
   "max_repetition": 45,
   "eras": {
    "aerial": 10,
    "aerial-to-front": 10,
    "front": 10,
    "front-to-side": 10,
    "side": 10,
    "side-to-3q": 10,
    "3q": 10,
    "3q-to-aerial": 10
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass06-rehearsal": {
   "present": true,
   "prompt_lines": 3600,
   "distinct_lines": 1346,
   "max_repetition": 45,
   "eras": {
    "aerial": 10,
    "aerial-to-front": 10,
    "front": 10,
    "front-to-side": 10,
    "side": 10,
    "side-to-3q": 10,
    "3q": 10,
    "3q-to-aerial": 10
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass07-rehearsal": {
   "present": true,
   "prompt_lines": 3600,
   "distinct_lines": 1554,
   "max_repetition": 45,
   "eras": {
    "aerial": 10,
    "aerial-to-front": 10,
    "front": 10,
    "front-to-side": 10,
    "side": 10,
    "side-to-3q": 10,
    "3q": 10,
    "3q-to-aerial": 10
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass08": {
   "present": true,
   "prompt_lines": 43200,
   "distinct_lines": 2216,
   "max_repetition": 101,
   "eras": {
    "aerial": 120,
    "aerial-to-front": 120,
    "front": 120,
    "front-to-side": 120,
    "side": 120,
    "side-to-3q": 120,
    "3q": 120,
    "3q-to-aerial": 120
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  },
  "recipe-pass08b": {
   "present": true,
   "prompt_lines": 43200,
   "distinct_lines": 2641,
   "max_repetition": 63,
   "eras": {
    "aerial": 120,
    "aerial-to-front": 120,
    "front": 120,
    "front-to-side": 120,
    "side": 120,
    "side-to-3q": 120,
    "3q": 120,
    "3q-to-aerial": 120
   },
   "lines_without_depopulation": 240,
   "depopulation_note": "Every line carries the depopulation descriptors except the crowd windows. The count above should equal the intended crowd frames exactly; it is checked at build time, not assumed."
  }
 },
 "withheld": {
  "per_frame_seeds": "see passes[].log.seeds_withheld",
  "masters": "Frames and ProRes masters are named and sized here, never copied. The project is 244 GB."
 },
 "_omitted": {
  "keys": [
   "environment"
  ],
  "why": "Withheld from the published record. Present in the project's own copy; not published here."
 }
}