sections[].dropouts¶
Per-section dropout simulation. Optional — omit the block entirely to disable dropouts.
Keys¶
| Key | Type | Required | Description |
|---|---|---|---|
random |
map | No | Poisson random dropouts (below) |
scratch |
map | No | Persistent radial scratch defects (below) |
At least one must be present and non-zero. No other key is accepted.
random¶
Surface and media degradation, modelled as a Poisson process — short losses scattered across the picture, independent frame to frame.
| Key | Type | Required | Range | Description |
|---|---|---|---|---|
scale |
int | No | 0–20 | Severity, default 0. 0 disables, equivalent to omitting the block |
seed |
int | No (required with anchor: disc) |
any int64 | Fixed RNG seed. Omit for a run-specific seed |
flagged |
bool | No | true, false |
Default true. false applies the dropouts but leaves them out of the sidecar; see flagged |
anchor |
string | No | section, disc |
Default section. What the dropouts are keyed to; see anchor |
scratch¶
A persistent physical defect: it appears, grows to a peak severity and fades away over a run of frames — a triangular amplitude envelope — so it spans many consecutive frames rather than flickering.
| Key | Type | Required | Range | Description |
|---|---|---|---|---|
scale |
int | No | 0–20 | Severity, default 0. 0 disables |
seed |
int | No (required with anchor: disc) |
any int64 | Fixed RNG seed |
flagged |
bool | No | true, false |
Default true. As for random |
anchor |
string | No | section, disc |
Default section. As for random |
flagged¶
A real player flags most dropouts, but not all: a defect the RF detector misses still damages the picture. flagged: false models those.
- The dropouts are applied to the signal exactly as with
flagged: true. The flag changes no random draw, so the same project withflagged: truereproduces the same events, and their rows. - No sidecar row is written for them, so the sidecar holds no record of them at all.
- The sidecar is still created whenever any section has dropouts, so the set of output files does not change when the flag is toggled.
randomandscratchare flagged independently. In a section with one of each flagged, the sidecar records only that type's runs.
anchor¶
anchor sets whether the dropouts belong to one capture or to the disc.
| Value | Keyed by | Models |
|---|---|---|
section (default) |
The section and the frame's output position | Dropouts of one playback: a different section, or a later start, draws different ones |
disc |
The disc frame (picture number − 1 on CAV) and the seed | A defect of the pressing: every capture with the same seed carries it on the same picture, whichever section and output position the picture lands on |
With anchor: disc:
- Random dropouts on a frame depend only on
seedand the frame's disc position, so a capture that starts later, skips or replays a range shows the same dropouts on the same pictures. - Scratch events depend on
seedand the disc frame the section starts on (itspicture_numberstart_value− 1 on CAV), and each event's lifespan is counted from that frame. A replay section with the samestart_valuetherefore repeats the first play's scratches, while a section starting elsewhere on the disc draws its own. seedis required, since every capture must draw the same events.
On a disc without picture numbers, the disc frame is the output position plus the project's first-picture offset.
Severity scale¶
scale is a severity level, not a physical unit. The mapping is exponential in t = (scale − 1) / 19:
| Parameter | Formula | Scale 1 | Scale 10 | Scale 20 |
|---|---|---|---|---|
| Random events per frame (Poisson mean) | 0.5 × 400^t | 0.5 | ~8.5 | 200 |
| Random minimum duration (samples) | 5 × 10^t | 5 | ~15 | 50 |
| Random maximum duration (samples) | 50 × 8^t | 50 | ~134 | 400 |
| Scratch count | 2 × 20^t, at least 2 | 2 | 8 | 40 |
| Scratch maximum lifespan (frames) | 2 × 250^t | 2 | ~27 | 500 |
| Scratch maximum peak width (samples) | 5 × 400^t | 5 | ~85 | 2000 |
Values are rounded to whole numbers except the event rate. A random dropout's duration is drawn uniformly between its minimum and maximum.
Rules¶
| Rule | Severity |
|---|---|
scale outside 0–20 |
Error |
anchor: disc without a seed |
Error |
anchor other than section or disc, or flagged not a boolean |
Parse error |
A dropouts: block that enables nothing — dropouts: {}, or both scales 0 or absent |
Error — omit the block instead |
Derived maximum scratch lifespan longer than an integer duration_frames |
Warning: the scratch envelope is truncated |
Dropout validation error in section 'Programme': dropouts block has no active
type (both random.scale and scratch.scale are 0). Remove the dropouts block or
set at least one scale to 1–20.
The "disable by omission, not by zeroing" rule exists so that a block that looks like it configures something always does.
The dropout sidecar¶
When any section has dropouts enabled, the pipeline writes a companion SQLite database:
with a single table:
severity is 25 for runs entirely within the non-visible VBI and 75 for runs intersecting the active picture.
This is ground truth for every flagged dropout videosynth introduced, with its exact extent, so a dropout detector or concealer can be scored directly against it. Dropouts with flagged: false are absent from it.