changelog
// how it got built, and what each round of it fixed
the whole thing is three weeks of evenings in July 2026, read back out of the repository's own history. it is here because [about] says the transcripts are made by machine and no one proofreads them, and that is true but not the whole story: most of the work since has been about finding the machine's mistakes without a human reading two hundred hours of German.
[the story]
- 11 jul
one script, and two decisions that outlived it
speech to text with faster-whisper, who-is-speaking with pyannote, in a single file. two things settled that first evening still hold. a failure to work out who is speaking never throws the transcript away β it costs six to twelve minutes of GPU and is written without speaker names instead. and the raw speech-to-text is kept on disk, so everything after it can be redone in seconds without going near the audio again. every correction on this page is affordable because of that second one.
- 25β26 jul
the dictionary
many episodes in one run, and the first accuracy tool: a hand-kept list of paragliding terms, glider names and pilots. it is used twice β as a hint to faster-whisper before the run, and to repair near-misses after it, matched on a German sound-fold, so that
PotzglitzfindsPodz-Glidz. the guards came with it, and each one is there because of a real mistake it made: German inflection is never rewritten, a match that begins on a different sound needs near-certainty, and every single substitution is written to a report per episode so it can be read back.underneath, the same week: the script became a proper package, and two CUDA versions that quietly disagreed were pinned apart. that one mattered β the symptom was transcripts with no speaker names at all, and a run that reported success.
- 26 jul
the feed, and its own spelling
episodes are fetched from the RSS feed and named by number, title and guest, with the publisher's own metadata kept beside each one: the date, the link to the original, the show notes. that last part is what the accuracy work later stood on. the feed's spelling of a guest's name is a string known to be correct, and it was sitting there unused.
- 26 jul
english and french
translation by a local model β Gemma 4 12B through llama.cpp, on the same desktop GPU β one utterance at a time against a glossary that pins the jargon. timestamps and speaker names are copied across untouched, which is the whole reason a translated page still follows the German audio to the second.
each translated segment is remembered under a key that includes the glossary lines it was shown, so correcting one glossary entry re-translates only the segments that mention it: 36 of 169 on one episode, not all 169. the show notes are translated too, with their links masked out and put back afterwards β a line that comes back with a link missing is kept in German rather than published broken.
- 27 jul
one document per episode, one command for all of it
transcripts filed one directory per episode; a PDF per episode holding every language it has; and one command running the four passes in order, four episodes at a time. it stops the translation model to make room for the transcription model and starts it again afterwards, because both want the same 16 GB, and it deletes each audio file once its transcript is finished. that is what made the next entry fit on one disk.
- 28 jul
this site
the transcript that follows the audio. because every word carries its own timestamp from the first pass, the highlighting needs no alignment step β it is reading what the pipeline already wrote. the waveforms are computed ahead of time so the player can start without downloading the hour first, and the show notes are read in the language of the page you are on.
- 28 jul
the whole back catalogue
189 episodes in one pass, 44 hours on one desktop machine, about five hours of podcast per hour of machine. the interesting part is what having all 192 on disk made possible: the corpus turned into a measuring instrument. a real German word turns up in dozens of episodes; a mis-hearing turns up in one. almost every check below is built on that one observation.
- 29 jul
everything the corpus could now be asked
one long day, all of it accuracy. the two episodes released as halves of one conversation had fallen out of the numbering entirely and were sitting below episode 1 with no guest. four episodes of 192 broke the show's usual shape β two of them have two guests, one is the anniversary episode where the host is the guest, two open on the host rather than on a teaser clip β so those four now declare their speakers by hand, names and count as one fact.
three hallucinated foreign letters were removed from the German corpus: a stray CJK character dropped into a pause in one episode, an Arabic fragment welded onto a garbled word in another. invisible while reading, unprintable in the PDF. and 10,916 German compounds that faster-whisper had split across a hyphen were closed back up β
Gleitschirm -Blog,44 -jΓ€hrigeβ more than every other repair in the pipeline put together, and not a spelling question at all: the letters were already right.the rest of that day built the loop in the next section, which is the part that keeps working after the day it was written.
- 30 jul
the corrections reach the translations, and the dictionary is corrected
two rounds of correcting the German had left the English and French translated from the text as it was before β the model had been faithfully carrying every mis-heard word across, so
Agrocame out asagrovolandagropilote, andFlamasFLAM. redoing it turned out to be a top-up rather than a rebuild: 14,825 of 67,180 translated segments had actually changed, and the rest were reused untouched.the show's own contact address is read out at the end of 28 episodes and speech-to-text never once got it right: 30 attempts across eleven spellings. that one is fixable precisely because it is a long lowercase word with nothing German in it β nothing else in the corpus can come near it.
and the repair itself was caught making mistakes.
Gleitschirmpilotis ordinary German, and it was being rewritten toGleitschirm-Blogin 41 places across 29 episodes: it sounds close enough to clear the threshold, and it is a different compound rather than an inflection, which is the case the guard covers. naming the word in the dictionary anchors it to itself. it is the argument for the report each run writes listing every substitution it made β a correction pass nobody can read back is just a second source of mistakes.
[how a mistake gets found]
nobody is going to read 200 hours of German to check it. so the pipeline has to bring the suspicious spots to a person, and be right often enough that looking at them is worth it. four steps, and the numbers are what each filter was worth:
- propose, from the feed
- each transcript is compared against the guest's name as the publisher spells it. a guest appears in exactly one episode, so a word that sounds like their name and is not it is wrong in exactly one place. the naive version returned 519 proposals across the corpus and was useless; four filters β the candidate must be capitalised, a word in four or more episodes is ordinary German, sound-fold or resemblance, and never a German inflection β take it to 78.
- propose, from the corpus
- glider models, places and systems have no correct spelling on file anywhere, so for those the corpus is compared against itself. asking "is this word odd?" is unanswerable in German and returned 1,660 candidates. asking "does the corpus spell this word two ways, one of them rarely?" returns about 200 β which is the shape every correction so far has actually had.
- decide, against the audio
- each candidate carries a link to the second it is spoken, and the deciding happens with the audio playing. it has to: frequency cannot settle it.
FlamoutnumberedFlarm49 to 15 and was still the wrong one. the questions are also grouped per word rather than per episode, because they arrive per episode and per proposed spelling β 263 rows turned out to be 144 actual judgements, so 45% of the work was answering something already answered. - record, including the noes
- an accepted correction leaves a rule behind and speaks for itself. a rejection leaves nothing β so without a record of it, the same wrong proposal comes back on every future scan, and two hundred candidates that never shrink are worth the same as none. every verdict is written down, in both directions, and every check reads that file before it opens its mouth.
- then it re-renders itself
- a correction makes that one episode unfinished, and nothing else. it re-renders from the cached speech-to-text in seconds without touching the GPU, and only the translated segments whose German actually changed are sent to the model again β one corrected sentence re-translated 1 of 135 segments per language. that is the property that makes correcting a single word worth doing at all.
[the rules that don't bend]
every one of these was learned by breaking it first, and they are why the corrections are worth something rather than being a second source of mistakes:
- never rewrite correct German
- a repair that touches inflection can invent errors faster than it fixes them.
WettbewerbenstaysWettbewerben, andKatrinsis never "corrected" toKatrin. this is a hard rule and not a threshold. - neither spelling is assumed right
- not the frequent one, not the one in the dictionary. the machine's job ends at "these two spellings cannot both be right"; the audio decides, which is why every proposal comes with a link into the recording rather than with a recommendation.
- fix it in the narrowest place that is true
- a term the show uses constantly belongs in the global dictionary; a single mangled sentence belongs to its own episode and nowhere else. one line had been rewriting a phrase in all 192 episodes to repair one sentence of one of them.
- nothing applies itself
- the checks propose and never write. about a third of what survives the filters is still wrong,and some of what is right needs narrowing β
Laut => Lauthwould rewrite a common adverb, so the rule that belongs in the file isStefan Laut => Stefan Lauth. - never lose the expensive thing
- a failure anywhere downstream is a warning, not a lost transcript. the same rule covers a failed translation, a failed speaker split and a failed episode in a batch of 192.
[where it stands]
counted off the correction files themselves, so this moves whenever another round is worked:
- 211
- corrections aimed at a single episode, across 116 of them
- 385
- spellings judged against the audio β 80 corrected, the rest confirmed as already right
- 125
- terms in the show-wide dictionary, 75 of them forced rewrites
- 51
- terms pinned to a fixed English and French rendering
[what is still wrong]
plenty. the checks above only find the mistakes that look like mistakes β a word spelled two ways, a name that nearly matches. a confidently wrong sentence that reads as perfectly good German goes straight past all of them, and the translations get the same treatment one step further from the audio. when a line matters, listen to it: it is one click away, which is the only real answer this site has.