← runs · all docs · view source on github

Showcase: Plain Bob Minor

Generated 2026-05-01 · combined 8.53/10 · meta mode with crossbreed + adversarial + active panel

A 1950s vicar (Arthur Pendelton) is locked in a damp church vestry with the bell-ringer (Thomas Crump) when they realise the parish register has been carefully altered for fifty years.

Stats — every dimension

Layer Score Notes
Combined (gate) 8.53/10 0.6 × text + 0.4 × audio
Text autorater 8.45/10 22/26 rules pass; rules composite 0.86
Audio judge 8.65/10 character_distinctness 9, prosody 9, consistency 9, delivery 8, pacing 8
Audio analyzers mixed pacing 129 wpm whole-ep ✓; distinctness 194 Hz separation ✓; 10 audible chunk seams (TTS quality issue); STT WER 0.18
Adversarial critic 4 revisions integrated tightened the Mrs. Higgins reveal; trusted listener to do pregnancy timeline math
Listener panel (4 personas) 18 in-voice notes radio_4_devotee, podcast_listener, audio_engineer, comedy_writer all flagged the Somme reveal needed more silence
Beat verifications 3/3 plant→payoff at 10/10 linseed-oil, tail-splice, parish-gossip — all land

Per-axis text autorater (judge, 0–10)

Axis Score
long_fuse_plotting 10
form_as_finite_generator 9
status_as_live_wire 9
tonal_duality 9
structural_reveal 9
politeness_as_masking 9
genre_register_collision 8
re_listenability 8
surprise_at_specificity 7
cultural_anchoring 7
voice_violations 4 (lowest — quirks declared in cast metadata don't surface in performance)

WPM windowed plot (the new thing you asked for)

WPM per 30-second window — 'Plain Bob Minor' (28.0 min)

Corpus reference  p25=170  p50=210  p75=260

  time   wpm  0    100   200   300   400   500
              +-----+-----+-----+-----+-----+-----+
 00:15    74  |███████                                           |
 00:45   130  |█████████████                                     |
 01:15   124  |████████████                                      |
 01:45    94  |█████████                                         |
 02:15    78  |███████                                           |
 02:45   152  |███████████████                                   |
 03:15    92  |█████████                                         |
 03:45    84  |████████                                          |
 04:15    92  |█████████                                         |
 04:45    60  |██████                                            |
 05:15    84  |████████                                          |
 05:45    76  |███████                                           |
 06:15    62  |██████                                            |
 06:45   100  |██████████                                        |
 07:15   130  |█████████████                                     |
 07:45   142  |██████████████                                    |
 08:15   114  |███████████                                       |
 08:45   120  |████████████                                      |
 09:15   110  |███████████                                       |
 09:45    90  |█████████                                         |
 10:15    86  |████████                                          |
 10:45    66  |██████                                            |
 11:15    92  |█████████                                         |
 11:45    96  |█████████                                         |
 12:15   108  |██████████                                        |
 12:45   122  |████████████                                      |
 13:15   100  |██████████                                        |
 13:45    76  |███████                                           |
 14:15   170  |█████████████████                                 |
 14:45   154  |███████████████                                   |
 15:15    94  |█████████                                         |
 15:45   110  |███████████                                       |
 16:15   116  |███████████                                       |
 16:45   122  |████████████                                      |
 17:15    44  |████                                              |
 17:45    80  |████████                                          |
 18:15   120  |████████████                                      |
 18:45    82  |████████                                          |
 19:15   104  |██████████                                        |
 19:45   114  |███████████                                       |
 20:15    72  |███████                                           |
 20:45   102  |██████████                                        |
 21:15   104  |██████████                                        |
 21:45    64  |██████                                            |
 22:15    76  |███████                                           |
 22:45    52  |█████                                             |
 23:15    56  |█████                                             |
 23:45   128  |████████████                                      |
 24:15   124  |████████████                                      |
 24:45    90  |█████████                                         |
 25:15   104  |██████████                                        |
 25:45    94  |█████████                                         |
 26:15    84  |████████                                          |
 26:45    50  |█████                                             |
 27:15    52  |█████                                             |
 27:45    60  |██████                                            |
 28:15     0  |·                                                 |

Reading the chart: corpus median (per 30s window) is ~210 wpm. This episode runs at ~94 wpm/window — meaning there's significant gap time within each window (silence, music, pauses). Whole-episode WPM is 129 (on corpus target of 130–140), but the windowed view shows the dialogue is lower-density-per-window than the corpus average. Likely room to tighten silences between lines.

What the rules said

22 of 26 rules passed, including the new ones:

4 rules flagged — and we just fixed the 3 that were over-eager:

Rule Status before fix Status after fix
finite_isolation_trap failed (only checked premise.machine) now also checks scenes — would PASS for this ep
tonal_shift_present failed (no parseable timestamps in standout_moments) now also accepts a final-third tonal-tagged beat — would PASS for this ep
no_explain_the_joke_meta false-positive on bare word "explain" tightened to phrases like "explain the joke" / "as if to explain" — would PASS
period_register_strictness failed (vocabulary_register was "ecclesiastical", not "1950s ecclesiastical") rule kept as-is; concept prompt updated to require the era be named literally

After re-running with the rule fixes, this episode's expected pass count would be 25 of 26, with only period_register_strictness legitimately firing (the model wrote vocabulary_register: "ecclesiastical" instead of "period 1950s ecclesiastical" — a real generation issue, now addressed by an explicit prompt instruction).

Files

The artifacts live under data/generations/2026-05-01/2026-05-01T12-14-32__90263f93/01/ (gitignored — operational outputs):

Artifact Path (relative to repo root) Size
Final mixed audio data/generations/2026-05-01/.../01/audio/final_mixed__2026-05-_iter01_20260501T122541.wav local
Episode JSON .../01/episode.json local
Concept JSON .../01/concept.json local
Full report card .../01/report_card.md local
Iteration record .../01/record.json local

To listen on this machine:

open data/generations/2026-05-01/2026-05-01T12-14-32__90263f93/01/audio/final_mixed__*.wav

To re-render from the same seed (~23 min, ~$1.04 spend):

uv run generate --mode=meta --iterations=1 \
  --seed="A 1950s vicar and his bell-ringer realise the church's register has been carefully altered for fifty years." \
  --n_candidates=2 --crossbreed --adversarial --active_panel \
  --budget_usd=3.0