podz-glidz-transcripts// transcripts with a synced player[about]

changelog

// how it got built, and what each round of it fixed

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 nobody proofreads them β€” true, but not the whole story: most of the work since has gone into finding the machine's mistakes without a person reading two hundred hours of German.

[where it stands]

counted off the correction files themselves, so it moves whenever another round is worked. worth reading against what it is aimed at β€” 193 episodes, 223 hours, 2.1 million words of German β€” since the whole point of what follows is that almost none of that has to be looked at:

317
corrections aimed at a single episode, across 144 of them
491
spellings judged against the audio β€” 153 corrected, the rest confirmed as already right
128
terms in the show-wide dictionary, 78 of them forced rewrites
64
terms pinned to a fixed English and French rendering

[the story]

one evening, 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 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.

–

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 Potzglitz findsPodz-Glidz. the guards came with it, each one there because of a real mistake it had made, 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.

the feed, and two more languages

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. the feed's spelling of a guest's name is a string known to be correct, and it was sitting there unused β€” that is what the accuracy work later stood on.

then English and French, 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.

–

one command, and a site to read it on

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.

then 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 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.

everything the corpus could now be asked

one long day, all of it accuracy, and most of it is the loop in the next section rather than anything that belongs in a diary. the flat repairs were done that day too: three hallucinated foreign letters removed, and the four episodes of 192 that break the show's usual shape β€” two guests, or the anniversary episode where the host is the guest β€” set to declare their speakers by hand.

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 corrections reach the translations, and the repair is repaired

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 Agro came out as agrovol and agropilote. 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, read out at the end of 28 episodes, had been got wrong all 30 times it was said, across eleven spellings.

then the repair itself was caught making mistakes β€” 19 damaging changes across the corpus, and much the largest group was the women: Gleitschirmpilotin quietly collapsing into the masculine in nine episodes. each was answered with a rule rather than with another name. the feminine endings joined the list of things never rewritten into one another, and the repair now scores the part where two compounds differ rather than the ending they share, which suppressed 61 further changes. none of the three cost a real repair: each was measured across all 192 episodes, every substitution before against every substitution after. the corpus re-renders in 55 seconds now, down from 15 minutes 50, output identical to the byte β€” the same bet as the first evening, that the cheaper it is to redo everything, the more willing anyone is to correct one word.

anyone can point at a mistake

until now every proposal came from the machine looking at its own output. now a reader can select the wrong words on a German transcript and a [fix] button appears β€” and what it sends is the same record the checks below produce, with the episode and the timecode already on it. it changes where proposals come from and nothing about where they land: it stores and notifies, it decides nothing, and no transcript is written by it.

the popover moves in whole words, one at a time, because a correction has to be at least three characters and at most four words to be expressible at all and neither limit says anything out loud when it is broken β€” a reader given a free hand quotes a sentence, which is exactly the rule that can never match. German only at first, and not as a policy: a correction was applied before anything was translated, so there was nowhere for one aimed at the English or the French to go.

what arrives now goes into the same queue as the checks below, at the front of it, and is settled the same way β€” by opening the episode at the second the word is said and listening. it is shown next to how often the proposed spelling already appears in that episode, which is the quickest test of a stranger's suggestion and earned its place on the first one: a reader wrote Natalie for a guest the podcast spells Nathalie, 57 times, in that same episode.

what the site keeps

[privacy] is written from the code rather than from a template β€” every claim on it is checkable against something that runs β€” and writing it corrected one. [about] said "no tracking", and page views are in fact counted: cookieless, injected by the host at the edge, and nowhere in the built site, which is how the copy never caught up with it. the claim is now the narrower one that holds. anything submitted is deleted from the store after 30 days.

the check that could not hear a name

every episode has one guest, and the podcast spells that guest's name in its own title β€” so a word that sounds like the name but is not it is almost certainly a mishearing, and the check built on that had gone quiet: nothing to report, on any of the 192 episodes. it was blind twice over. for 14 guests it had silently lost the surname, which is the half a mishearing almost always lands on. and it would only offer a correction when the two spellingslooked alike, which is the one thing this kind of mistake does not do: the name is misheard outright, not misspelt. Vici for a guest called Witschi shares almost no letters with it.

what it does share is a position β€” the first name, right beside it, came out correctly. so a word standing next to the rest of the guest's name is now judged on where it stood rather than on how it is spelled, and that alone has to be enough on its own: allowed to also override how common a word is, it proposed replacing und 430 times. 23 corrections came out of it β€” DΓΆrriat was Theurillat, Leutl was Loidl, Littemate was Letmathe β€” and three of them repair a name mangled while somebody else was being interviewed, which nothing had ever been looking for.

then the same names again, from the other end. an episode's file name is the podcast's title with the umlauts written out β€” froetscher for FrΓΆtscher β€” and the transcripts had been reading the guest off it, so 18 episodes headed every turn Andy Froetscher:while the show notes at the top of the same page said FrΓΆtscher: more than 2,800 times over the three languages. the notes are where the podcast writes the name properly, being prose about the guest rather than a file name, and they carry it for every affected episode where the title manages 16 of 36. taking it from there fixed all of them, made seventeen hand-written exceptions unnecessary, and turned up one nobody had noticed β€” the guest of episode 95 is Lex RobΓ©, and the accent had been going missing the same way.

the translations can be corrected too

a correction used to have exactly one place to go: the German, before the translation runs. that is the right place for a misheard name, and it is why the English and the French take a name fix for free. but it is no place at all for a sentence that came out of the translator wrong, and those pages carry two thirds of the words on this site β€” so the [fix] button was on one page in three, and the two thirds a reader was most likely to be reading had no way to say anything.

so there is now a second place. a rule written against a translation is applied to the finished text on its way to the files, after the model has spoken, and it reaches that one language. the ordering is what makes it cheap: the translator's own output is already stored, so a correction rewrites the page without asking the model anything β€” not one sentence, not one word β€” and deleting the rule again restores exactly what it had said.

which of the two a report lands in is decided by the page it came from, and it is worth knowing which. a name wrong in all three languages is one correction on the German; a French sentence that means the wrong thing is one correction on the French. the queue where these are judged now says which language it is asking about, and offers the global dictionary only where a dictionary can reach β€” it spells what was heard, and nothing was heard in English.

[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. 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.
propose, from a reader
both checks above only find what they were built to look for, and a confidently wrong sentence trips neither. someone reading does not have that limit β€” so selecting the words on any page, in any of the three languages, proposes a correction in the same shape, and it is judged in exactly the same way as the machine's own. nothing that arrives from outside applies itself.
decide, against the audio

deciding happens with the audio playing, and it has to: frequency cannot settle it. Flam outnumbered Flarm 49 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.

that is the slow half, so it got its own screen: a queue built into this site, running on my machine only, one card per word, the space bar playing the episode from just before the word is said and one key filing the verdict. the right spelling is typed rather than picked from the proposals, because sometimes neither of them is it β€” a Treik is a Trike, and no check ever paired those two.

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. a correction to the German 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. a correction to a translation is cheaper still: it is applied to the finished text, so the model is not asked anything at all. that is what makes correcting a single word worth doing, and it is why the same screen carries the button that does it: decide a word, apply it, scan again, without going back to a terminal in between.

[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. Wettbewerben stays Wettbewerben, and Katrins is never "corrected" to Katrin. this is a hard rule and not a threshold, and it covers the endings that tell people apart as well as the ones that tell cases apart: a Gleitschirmpilotin is not a Gleitschirmpilot.
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 => Lauth would rewrite a common adverb, so the rule that belongs in the file is Stefan 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.

[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.

one line is knowably wrong and left that way: a passage of dialect in episode 68 defeats the translator outright β€” a minute of work for nothing usable, twice β€” so its French keeps the German it was spoken in rather than being filled with a guess and forgotten about.

about Β· all episodes