Apotheosis — Bedienungsanleitung
Die letzte Erhebung — ein Lookahead-True-Peak-Brickwall-Limiter für den Master.
Was es ist
Apotheosis ist ein Lookahead-True-Peak-Brickwall-Limiter mit Oversampling für den Master-Bus. Er ist der letzte Prozessor vor Export/Streaming, kein Allzweck-Kompressor: Seine einzige Aufgabe ist es, zu garantieren, dass der True Peak (Inter-Sample, aus dem zeitkontinuierlichen Signal rekonstruiert) des Ausgangs eine von dir gesetzte Ceiling nie überschreitet — bei möglichst geringem sonstigem Einfluss auf den Klang. Stellst du zusätzlich etwas Clip Mix ein, bekommst du obendrauf einen zweiten, aggressiveren „Clipper"-Charakter, ohne dass diese Garantie verloren geht.
Wo es in einer intensiven Produktionskette sitzt
Apotheosis gehört ganz ans Ende des Master-Bus, nachdem jeder andere Prozessor seine Arbeit getan hat:
Mix bus -> EQ / bus compression / saturation -> Apotheosis (true-peak limiter) -> export / streaming platform
Er ist nicht für einzelne Spuren gedacht (Gitarren, Drums, Vocals) — setze ihn einmal, auf dem Master, als finales Sicherheitsnetz und Loudness-Stufe vor dem Bounce ein. Da er im True-Peak-Bereich (mit Oversampling) statt nur im Sample-Bereich arbeitet, schützt er dich außerdem vor Inter-Sample-Overshoot, den ein reiner Sample-Peak-Limiter übersehen würde — der Art von Overshoot, die nach der Transkodierung eines Tracks in ein verlustbehaftetes Format (MP3/AAC) fürs Streaming als Clipping/Verzerrung auftaucht, obwohl die Originaldatei auf einem normalen Peak-Meter „sicher" aussah.
Signalfluss
Input -> Input Gain -> [4x/8x/16x oversampled] true-peak detect (Stereo Link-weighted) -> lookahead min-gain envelope
-> Style: FIR attack smoother -> dual-stage Release (Auto Release-modulated)
(Classic: Attack classifier -> single Release, as in v0.2.0)
|
ceiling clamp <-- Clip Mix blend <-- apply gain to lookahead-delayed signal <-+
|
Output <-- Delta / Unity Gain <-- Dither (Legacy/Weighted) <-- True Peak Guard <-- [downsample]
Input Gain, True-Peak-Erkennung, die Lookahead-Gain-Reduction-Hüllkurve, der Style-Attack-Glätter und die Release-Stufen, die Clip-Mix-Blende und die finale Ceiling-Begrenzung passieren allesamt innerhalb derselben oversampleten Domäne (4x per Default; 8x oder 16x, wenn du willst), bevor wieder auf die Samplerate deines Projekts heruntergerechnet wird. Der True Peak Guard, das Dither und die beiden Audition-Modi laufen nach dem Heruntersampeln, bei der Samplerate deines Projekts, weil das das Signal ist, das ein Delivery-Meter tatsächlich sieht. Genau das sorgt dafür, dass die Nie-über-die-Ceiling-Garantie strukturell gilt statt nur der Ableitung nach: Der Limiter erkennt einen Peak nie in hoher Auflösung, um ihn danach zu korrigieren, nachdem diese Auflösung schon verworfen wurde. Die vollständige technische Aufschlüsselung, einschließlich des Latenzmodells und der Begründung für die interne Headroom-Marge, findest du in docs/architecture.md.
v0.4.0 ergänzt sieben weitere Regler — Style, Oversampling, OS Filter, True Peak Guard, Noise Shaping, Delta und Unity Gain. Die Schlagzeile ist Style: Die vier Nicht-Classic-Styles ersetzen die rechteckige Gain-Hüllkurve durch eine FIR-geglättete, was null Überschwingen zu einer strukturellen Eigenschaft des Algorithmus macht statt zu etwas, das eine Begrenzung nachträglich abfängt, und die scharfen Ecken der Hüllkurve bei transientendichtem Material glättet. (Bei getragenem tieffrequentem Material und großzügigen Lookahead-Einstellungen war Classic ohnehin schon sauber — siehe den Messhinweis in docs/architecture.md.) True Peak Guard macht aus dem Ceiling eine gemessene Garantie statt einer Marge, und das Loudness-Metering wurde konform genug, um ein eigenständiges Meter zu ersetzen. Wie schon bei v0.2.0 reproduziert jeder der sieben Defaults den Output von v0.2.0 Bit für Bit — eine bestehende Session zu laden ändert nichts daran, wie sie klingt. Die eine Ausnahme ist eine reine, konstante Verzögerung von 6 Samples unterhalb von 176,4 kHz (siehe die Latenztabelle), die den Output zeitlich verschiebt, ohne einen einzigen Sample-Wert zu verändern.
v0.2.0 fügt vier neue Regler hinzu — Attack, Auto Release, Stereo Link, Dither Shape — beschrieben in der Parameter-Tabelle unten. Alle vier sind recherchebasiert: Sie stützen sich auf die eigene veröffentlichte Hilfe-Dokumentation eines Mitbewerbers (FabFilter Pro-L 2), die eigene veröffentlichte Handbuchseite eines Mitbewerbers (iZotope Ozone Maximizer), allgemeine Audio-DSP-Dithering-Literatur sowie das dokumentierte Verhalten der True-Peak-Spezifikation ITU-R BS.1770 — hier ausschließlich als Quelle für die zugrunde liegenden Designprinzipien und Terminologie zitiert (die zweistufige Attack/Release-Architektur, programmabhängiges Release, noise-shaped Dither) — ohne dass dies Befürwortung, Sponsoring, Zugehörigkeit oder DSP-Gleichwertigkeit impliziert, und ohne gegen die tatsächliche Binärdatei/DSP eines Mitbewerbers gemessen, gebenchmarkt oder reverse-engineered worden zu sein. Die vollständige Quellenangabe findest du in docs/design-brief.md und docs/research-notes.md. Der Standardwert jedes neuen Reglers reproduziert exakt das bisherige Verhalten von v1, Bit für Bit — keiner von ihnen verändert, wie Apotheosis klingt, solange du sie nicht bewusst veränderst.
Parameter-Referenz
| Parameter | Range | Default | Unit | Was es bewirkt |
|---|---|---|---|---|
| Input Gain | -12 – +24 | 0 | dB | Trim, der vor der True-Peak-Erkennung angewendet wird — „wie hart triffst du die Ceiling". Erhöhe ihn, um den Limiter härter anzutreiben (mehr Gain Reduction, lauteres/stärker komprimiertes Ergebnis); senke ihn, wenn der eingehende Mix schon nah an der Ceiling liegt und du Apotheosis nur als transparentes Sicherheitsnetz willst. |
| Ceiling | -12 – 0 | -1.0 | dBTP | Das Nie-überschreiten-True-Peak-Ziel. Der True Peak (Inter-Sample) des Ausgangs überschreitet diesen Wert nicht, unabhängig von jeder anderen Einstellung. -1.0 dBTP ist eine übliche Mastering-Sicherheitsmarge, die Raum für nachgelagerten Lossy-Encoding-Overshoot lässt; nutze -1.0 bis -2.0 dBTP für die meisten Streaming-Plattform-Ziele, oder gehe nur dann näher an 0 dBTP heran, wenn du das finale Auslieferungsformat selbst kontrollierst und weißt, dass es nicht neu enkodiert wird. |
| Release | 5 – 1000 | 50 | ms | Wie schnell sich die Gain Reduction wieder Richtung Unity entspannt, sobald das Programmmaterial sie nicht mehr braucht. Es gibt keinen separaten Attack-Regler — der Attack ist immer instantan und knackfrei, ermöglicht durch das Lookahead-Delay (siehe unten), nicht durch eine Zeitkonstante. Ein schnellerer Release (kurze Werte) folgt Transienten enger und kann druckvoller, aber riskanter klingen (mehr hörbares Pumpen bei anhaltendem Material); ein langsamerer Release glättet die Gain Reduction, hält sie dafür länger nach einem Peak. |
| Lookahead | 0.1 – 20 | 5 | ms | Wie weit der Limiter in die Zukunft „sehen" kann, um einen kommenden True Peak zu erkennen, bevor er den Ausgang erreicht — das ist der Mechanismus, der den instantanen, clipfreien Attack überhaupt erst ermöglicht. Das ist ein „Setup"-Parameter, kein live automatisierbarer: Er dimensioniert direkt Echtzeit-Buffer und ändert die vom Plugin gemeldete Latenz, daher wird eine Änderung erst beim nächsten Re-Initialisieren des Plugins durch deinen Host wirksam (Samplerate-Wechsel, Transport-Stop/Start in den meisten Hosts oder erneutes Öffnen des Projekts) — nicht sofort, während Audio läuft. Größere Werte fangen schnellere/steilere Transienten zuverlässiger ab, auf Kosten höherer gemeldeter Latenz (die deine DAW auf jeder Spur automatisch kompensiert, du musst sie also nicht manuell korrigieren). |
| Release Curve | Exponential / Linear / Smooth | Exponential | – | Formt nur die Release-Phase (die Erholung) — der Attack ist unabhängig von dieser Wahl immer instantan. Exponential ist die klassische One-Pole-Rampe: schnelle initiale Erholung, die ausläuft — meist die transparenteste und „musikalischste" Standardeinstellung. Linear erholt sich stattdessen mit konstanter Rate statt auszulaufen, was mechanischer/offensichtlicher klingen kann, dafür aber sehr vorhersagbar ist. Smooth ist eine zweistufige Kaskade, die dem Einsetzen des Release einen weicheren, überschwingfreien Verlauf gibt — nützlich, wenn die anfängliche Erholungsgeschwindigkeit von Exponential hörbares Pumpen bei anhaltendem Material verursacht — auf Kosten eines insgesamt langsamer wahrgenommenen Release bei gleicher Release-Zeit. Der Wechsel der Release Curve ist eine diskrete Änderung (wie ein Stompbox-Schalter), kein sanft automatisierbarer Regler. |
| Clip Mix | 0 – 100 | 0 | % | Blendet den transparenten Gain-Reduction-Limiter-Pfad (0 %, Standard) mit einem alternativen tanh-Soft-Clip-„Clipper"-Charakter (100 %), der direkt auf das Signal angewendet wird statt über Gain Reduction. Bei 0 % verhält sich Apotheosis exakt wie ein reiner Lookahead-Limiter. Ein höherer Clip Mix fügt allem, was die Ceiling erreicht, zunehmend präsentere, aggressivere/gesättigtere Höhen hinzu — eine gängige moderne Loudness-Maximizer-Technik, die etwas Transparenz gegen zusätzliche wahrgenommene Lautheit und einen „verklebteren"/aggressiveren Charakter eintauscht, passend zu den dichten, energiegeladenen Mastern von Heavy Music. Jede Mischung durchläuft weiterhin dieselbe finale harte Ceiling-Begrenzung, sodass die Nie-über-die-Ceiling-Garantie bei jeder Clip-Mix-Einstellung gilt. |
| Dither | Off / 16-bit / 24-bit | Off | – | Fügt ganz am Ende der Kette, bei der Ausgangswortbreite, TPDF-Dither-Rauschen (Triangular Probability Density Function) hinzu — Standardpraxis, wenn dein finales Export-/Bit-Tiefen-Reduktionsziel 16-bit oder 24-bit ist, da es den Quantisierungsfehler in Rauschen statt harmonische Verzerrung dekorreliert. Lass es Off, wenn eine nachgelagerte Stufe (z. B. der eigene geditherte Bounce deiner DAW oder eine 32-bit-Float-Auslieferungspipeline) das Dithering bereits übernimmt — gestapeltes Dither hilft nicht und hebt den Rauschteppich unnötig zweimal an. Seine Amplitude ist winzig (höchstens 1 LSB bei der gewählten Bit-Tiefe, etwa -90 dBFS bei 16-bit und -138 dBFS bei 24-bit) und beeinflusst die True-Peak-Ceiling-Garantie nicht nennenswert. |
| Attack (v0.2.0) | 0 – 50 | 0 | ms | Ein Transient/Sustain-Klassifikator, keine Gain-Reduction-Rampe — der Attack selbst ist unabhängig von dieser Einstellung immer instantan (siehe Release, oben). Attack legt die Dauer fest, unterhalb derer ein Gain-Reduction-Ereignis als kurzer Transient behandelt wird, dessen Erholung dann nahezu sofort (unabhängig von Release/Release Curve/Auto Release) statt über den normalen Release-gesteuerten Pfad erfolgt. Bei 0 ms (Standard) wird jedes Ereignis als anhaltend behandelt und Apotheosis verhält sich exakt wie v1. Erhöhe Attack, damit kurze Transientenspitzen ihre Gain schneller zurückerhalten als anhaltendes, dichtes Material — das in der Referenzklasse dokumentierte Rezept „kurzes Lookahead + langer Attack + schneller Release" zur Maximierung der wahrgenommenen Lautheit bei erhaltenem Punch (siehe das Werkspreset Punchy Master). Recherchebasiert aus der dokumentierten zweistufigen Transient/Sustain-Architektur eines Mitbewerbers — der Bereich 0–50 ms und der Standardwert 0 ms sind eigene, begründete Entscheidungen dieses Projekts (aus den gesichteten Quellen war kein Standardwert eines Mitbewerbers zu ermitteln), nicht von irgendeinem Datenblatt übernommen. |
| Auto Release (v0.2.0) | 0 – 100 | 0 | % | Mischt eine programmabhängige Modulation der effektiven Release-Zeit hinzu: Ein langsam laufender (mehrere Sekunden), gleitender Durchschnitt darüber, wie tief/anhaltend die jüngste Gain Reduction war, verlängert die effektive Release-Zeit bei dichtem, anhaltendem Material (um Pumpen zu vermeiden) und verkürzt sie bei vereinzelten, isolierten Peaks (schnelle Erholung dazwischen) — als zusätzliche Schicht über der jeweils gewählten Release Curve, nicht als deren Ersatz. Bei 0 % (Standard) ist dies ein vollständiger No-op und Release verhält sich exakt wie in v1. Dies ist eine von Grund auf neu entwickelte, begründete Umsetzung des qualitativen Prinzips, das in der programmabhängigen-Release-Tradition der Referenzklasse dokumentiert ist — es ist ausdrücklich keine reverse-engineerte Kopie des spezifischen, proprietären Algorithmus irgendeines Herstellers, dessen Innenleben nicht öffentlich dokumentiert ist. Standardmäßig deaktiviert, weil für diesen Regler bei keinem Referenzprodukt eine belastbare Standardintensität ermittelbar war; probiere ihn bei dichten, energiegeladenen Mastern aus (siehe die Werkspresets Dense/Loud Modern und Adaptive Riding), wenn du möchtest, dass Apotheosis anhaltende Passagen sanfter „reitet", ohne dabei auch die Reaktion auf isolierte Peaks zu verlangsamen. |
| Stereo Link (v0.2.0) | 0 – 100 | 100 | % | Wie eng die True-Peak-Erkennung der beiden Kanäle gekoppelt ist. Bei 100 % (Standard) teilen sich beide Kanäle einen einzigen, max-gekoppelten Detektor — das einzige Verhalten von v1 und für die meiste Mastering-Arbeit die sicherste Wahl, da sich das Stereobild unter Gain Reduction nie verschiebt. Senkst du den Wert, erkennen und begrenzen beide Kanäle zunehmend unabhängiger, bis hin zu vollständig unabhängiger Erkennung bei 0 % — nützlich, wenn ein hart gepannter Peak in einem Kanal sonst die Gain des gegenüberliegenden Kanals mit nach unten ziehen würde (siehe das Werkspreset Wide Image Preserve). Mono- und Dual-Mono-Host-Layouts sind davon nicht betroffen (es gibt keinen zweiten Kanal, mit dem gekoppelt werden könnte). |
| Dither Shape (v0.2.0) | Flat / Shaped | Flat | – | Wirkt sich nur hörbar aus, wenn Dither (oben) nicht Off ist. Flat (Standard) ist das bisherige, unveränderte reine TPDF-Dither von v1. Shaped schickt das Dither-Rauschen durch einen einfachen, fest eingestellten Noise-Shaping-Filter, der Quantisierungsrausch-Energie Richtung oberes Ende des Hörbereichs schiebt, wo das Gehör weniger empfindlich ist — eine allgemeine Technik aus der Dithering-Literatur, keine Kopie der spezifischen Shaping-Kurve irgendeines Herstellers (die Referenzklasse dokumentiert eine Vierweg-Noise-Shaping-Auswahl; dies hier ist eine bewusst einfachere Zweiweg-Variante). Auch hier gilt der eigene Hinweis zu Dither: Das ist tatsächlich eine der folgenlosesten Entscheidungen im Mastering, in jedem Fall auf die niedrigstwertigen Bits begrenzt — greife zu Clean Export (Dithered) als Ausgangspunkt, wenn du Shaped ausprobieren willst (ein finaler Bounce mit fester Bit-Tiefe). Wird überschrieben, wenn Noise Shaping auf Weighted steht — siehe diesen Regler unten. |
| Style (v0.4.0) | Classic / Transparent / Punchy / Bus / Safe | Classic | – | Der folgenreichste v0.4.0-Regler: Er wählt, wie die Gain-Hüllkurve geformt wird. Classic (Default) ist das wörtliche Verhalten von v0.2.0, unverändert — ein rechteckiges gleitendes Minimum als Attack plus der Attack-Transienten-Klassifikator. Die vier neuen Styles ersetzen beides: Der Attack wird zu einem kaskadierten Box-FIR-Glätter, der die scharfen Ecken in der Gain-Hüllkurve entfernt, die bei bassstarkem Material tieffrequente Intermodulationsverzerrung verursachen, und der Transienten-Klassifikator wird zu zwei parallel laufenden Release-Followern (ein schneller, in der Tiefe auf die obersten paar dB der Gain Reduction begrenzt, der die Transientenspitzen übernimmt; ein langsamer, der die anhaltende Programm-Gain-Reduction trägt). Der FIR-Glätter ist der Grund, warum die Styles auch in der Tiefe transparent sind: Da ein Mittelwert aus Werten, die jeweils mindestens dem Fensterminimum entsprechen, selbst mindestens diesem Minimum entspricht, kann eine geglättete Hüllkurve nicht überschwingen — die Garantie ist strukturell, keine Begrenzung. Siehe die Style-Tabelle unten. |
| Oversampling (v0.4.0) | 4x / 8x / 16x | 4x | – | Wie weit die Detektions- und Limiting-Domäne oversampelt wird. 4x (Default) ist exakt die Kette aus v0.2.0. 8x und 16x drücken Aliasing aus dem Clipper-Pfad und aus den scharfen Kanten der Gain-Hüllkurve selbst weiter herunter (messbar: siehe die Alias-Teppiche unter „Oversampling: was die Faktoren bringen" unten), zu realen CPU- und Latenzkosten. Das ist ein „Setup"-Parameter, genau wie Lookahead — siehe den Prepare-Latch-Hinweis unter der Latenztabelle. Bei hohen Projekt-Sampleraten begrenzt die Engine den effektiven Faktor intern (maximal 8x ab 96 kHz, maximal 4x ab 176,4 kHz); der Regler behält, was du eingestellt hast, sodass die Einstellung korrekt in eine 48-kHz-Session zurückreist. |
| OS Filter (v0.4.0) | Minimum Phase / Linear Phase | Minimum Phase | – | Die vom Oversampler genutzte Filterklasse. Minimum Phase (Default) ist das Polyphase-Allpass-IIR-Halfband aus v0.2.0: die niedrigste Latenz, kein Pre-Ringing, aber nichtlineare Phase. Linear Phase nutzt FIR-Equiripple-Halfbands: perfekt erhaltene Phasenbeziehungen und besseres Null-Test-Verhalten in einem Mastering-Stack, zum Preis von rund 50–70 Samples zusätzlicher Latenz und etwas Pre-Ringing an harten Transienten. Gleicher Prepare-Latch-Vertrag wie bei Oversampling. |
| True Peak Guard (v0.4.0) | Off / On | Off | – | Macht aus dem Ceiling ein gemessenes statt eines margenbasierten Versprechens. Mit eingeschaltetem Guard läuft ein BS.1770-4-konformer, 4x-interpolierender True-Peak-Detektor auf dem finalen Output nach dem Heruntersampeln — dieselbe Messung, die ein konformes Delivery-Meter vornimmt — und wann immer er über deinem Ceiling liest, wird der Output um exakt den Überschuss und für exakt dessen Dauer abgesenkt (Attack unter 0,1 ms, Release 5 ms). Es ist eine Mikrokorrektur, kein zweiter Limiter: Bei Material, das das Ceiling nie überschreitet, tut es überhaupt nichts. Schalte es für alles ein, was du an eine Plattform mit veröffentlichter True-Peak-Spezifikation lieferst. Seine Ausrichtungsverzögerung liegt immer im Signalweg, egal ob der Guard an oder aus ist, sodass ein Umschalten oder Automatisieren die gemeldete Latenz des Plugins mitten in der Session nie ändern kann. |
| Noise Shaping (v0.4.0) | Legacy / Weighted | Legacy | – | Wirkt sich nur hörbar aus, wenn Dither nicht Off ist. Legacy (Default) leitet durch den unangetasteten Dither-Code von v0.2.0, inklusive der Dither-Shape-Wahl — bit-identisch zu v0.2.0. Weighted ersetzt ihn durch einen psychoakustisch geformten Requantisierer: TPDF pro Kanal plus ein Error-Feedback-Noise-Shaper 9. Ordnung, angepasst an eine inverse Hörbarkeitskurve, der Quantisierungsrauschen in die Frequenzbereiche schiebt, in denen das Gehör am unempfindlichsten ist. Gegen flaches TPDF gemessen bringt das bei 16 Bit mindestens 15 dB F-gewichtete Verbesserung des wahrgenommenen Rauschteppichs (die geprüfte Untergrenze; die ausgelieferte Koeffiziententabelle misst 20,05 dB bei 48 kHz). Vorrang: Steht Noise Shaping auf Weighted, überschreibt es Dither Shape vollständig — die Flat/Shaped-Wahl tut dann nichts mehr. Die Kurve ist für 44,1-/48-kHz-Delivery optimiert; bei höheren Raten wird sie unverändert weiterverwendet. |
| Delta (v0.4.0) | Off / On | Off | – | Ein Monitormodus: Der Output wird zu dem, was der Limiter entfernt hat (das bearbeitete Signal minus dem sample-ausgerichteten Dry-Signal) statt zum bearbeiteten Signal. Es ist der schnellste Weg zu hören, ob dein Limiting transparent ist — ist Delta nahezu still, wird kaum etwas weggenommen; kannst du darin Instrumente identifizieren, limitierst du härter, als du denkst. Das Umschalten ist über 10 ms überblendet und damit automationssicher. Delta umgeht das Dither (du hörst ab, du renderst nicht), durchläuft aber weiterhin die finale Sicherheitsbegrenzung. Kein Render-Modus — schalte es aus, bevor du bouncest. |
| Unity Gain (v0.4.0) | Off / On | Off | – | Ein Monitormodus: Trimmt den Output um exakt minus deinen Input Gain, sodass du unterschiedliche Drive-Mengen bei angeglichener Lautheit A/B-en kannst, statt dich davon täuschen zu lassen, dass lauter immer besser klingt. Bewege Input Gain mit eingeschaltetem Unity Gain und du hörst den Charakter von mehr Limiting ohne den Pegelunterschied. Sind Delta und Unity Gain beide an, gewinnt Delta (es ist bereits ein Monitormodus). |
Style: wofür jeder einzelne gedacht ist
Alle vier Nicht-Classic-Styles nutzen den FIR-Attack-Glätter und die beiden Release-Follower; sie unterscheiden sich darin, wie breit der Glätter ist und wie die beiden Follower abgestimmt sind. Der Attack-Regler bekommt in diesen Styles eine zweite Bedeutung: Er setzt die Spanne des Glätters (Attack ms, begrenzt auf das Lookahead), und Attack auf 0 ms bedeutet „nutze das volle Lookahead" — die empfohlene Einstellung für alle vier.
| Style | Attack-Glätter | Schnelles / langsames Release | Tiefenbegrenzung der schnellen Stufe | Wofür |
|---|---|---|---|---|
| Classic | keiner — das rechteckige gleitende Minimum aus v0.2.0 | das einzelne, klassifikatorgetriebene Release aus v0.2.0 | – | Bestehende Sessions, und alle, die den exakten Klang von v0.2.0 wollen. Das ist der Default und bit-identisch zu v0.2.0. |
| Transparent | 2 Boxen, volles Lookahead | 50 ms / 800 ms | 2 dB | Der empfohlene Mastering-Default. Die beste Transparenz pro dB im Set; auf diesen Style zielte die Arbeit an der tieffrequenten Intermodulation. |
| Punchy | 1 Box, 0,4x Lookahead | 30 ms / 400 ms | 4 dB | Loudness-orientierte Arbeit. Der schmalere Glätter und die höhere Begrenzung der schnellen Stufe lassen Transientenspitzen bewusst härter durch, zu einem gewissen Preis an Transparenz. |
| Bus | 2 Boxen, volles Lookahead | 80 ms / 1200 ms | 2 dB | Langsames, verklebendes Verhalten auf einem Mixbus statt auf einem Delivery-Master. |
| Safe | 3 Boxen, je N/3, volles Lookahead | 60 ms / 1500 ms | 1 dB | Maximale Glätte: klassisches, akustisches und Archivmaterial, wo jede hörbare Gain-Bewegung schlimmer ist als etwas weniger Lautheit. |
Oversampling: was die Faktoren bringen
Einen höheren Faktor zu wählen bewirkt eine messbare Sache: Es drückt die Alias-Produkte, die innerhalb der oversampelten Domäne entstehen — durch den Tanh-Pfad von Clip Mix, und durch die scharfen Kanten der Gain-Hüllkurve selbst — weiter unter das Signal. Die Zahlen unten sind die Grenzen, die bei jedem CI-Push geprüft werden, gemessen an einem 10-kHz-Sinus bei 100 % Clip Mix (der schlechteste Fall, den dieses Plugin erzeugen kann), relativ zur Grundfrequenz.
| Konfiguration | Alias-Boden (geprüft) | Durchgangs-Flachheit bis 20 kHz |
|---|---|---|
| 4x Minimum Phase (Default) | -70 dBc | flach innerhalb von ±0,1 dB |
| 8x Minimum Phase | -90 dBc | flach innerhalb von ±0,1 dB |
| 16x Linear Phase | -100 dBc | flach innerhalb von ±0,1 dB |
Die Flachheits-Grenze gilt für alle sechs Faktor-/Phasen-Kombinationen, nicht nur die drei Stufen oben; die gemessene Worst-Case-Abweichung über alle sechs liegt bei 0,0004 dB, drei Größenordnungen innerhalb der Grenze. Mit anderen Worten: Keines dieser Settings verändert deinen Ton — sie verändern, wie viel Alias-Energie überlebt, wenn der Limiter hart arbeitet.
Zwei praktische Konsequenzen:
- Bei 0 % Clip Mix auf Material, das die Ceiling kaum berührt, ist der Faktor nahezu unhörbar. Die Alias-Energie, die die höheren Faktoren entfernen, entsteht durch harte Nichtlinearität; erzeugst du nicht viel davon, gibt es nicht viel zu entfernen. 4x Minimum Phase ist ein wirklich guter Default.
- Die Kosten sind CPU und (bei Linear Phase) Latenz, nicht Klang. Greife zu 16x Linear Phase für Archiv- und Mastering-für-Transcode-Arbeit, bei der der Clipper aktiv ist, nicht routinemäßig.
Beachte auch, dass 4x Minimum Phase bewusst andere Filterkoeffizienten nutzt als die anderen fünf Kombinationen: Es behält exakt die Standardfilter, die v0.2.0 auslieferte, weil genau das den Default bit-identisch zu bestehenden Sessions macht. Die eigens entworfenen, steileren Filter-Specs (die ihr Dämpfungsbudget im Dezimator ausgeben, wo hörbare Aliase zurückfalten) gelten für 8x, 16x und jede Linear-Phase-Konfiguration — Settings, die keine Session von vor v0.4.0 bereits genutzt haben kann. Das Detail der Stage-Specs steht in docs/architecture.md.
Latenz
Apotheosis meldet seine Latenz an deinen Host, der sie auf jeder Spur automatisch kompensiert — du musst sie nie manuell korrigieren. Die Tabelle zeigt die ehrliche Summe beim Default-Lookahead von 5 ms: Lookahead + Roundtrip des Oversamplers + die konstante 6-Sample-Ausrichtungsverzögerung des True Peak Guard. Lookahead zu ändern verschiebt jede Zahl um denselben Betrag.
| Projektrate | 4x Min | 8x Min | 16x Min | 4x Linear | 8x Linear | 16x Linear |
|---|---|---|---|---|---|---|
| 44,1 kHz | 232 | 232 | 232 | 283 | 286 | 286 |
| 48 kHz | 252 | 252 | 252 | 303 | 306 | 306 |
| 96 kHz | 492 | 492 | 492 | 543 | 546 | 546 |
| 192 kHz | 966 | 966 | 966 | 1017 | 1017 | 1017 |
Alle Werte in Samples bei der Projektrate. Drei Dinge sind wissenswert:
- Minimum Phase kostet mit steigendem Faktor nichts zusätzlich. Die Latenz der IIR-Allpass-Halfband-Kette ist bei jedem Faktor praktisch null, die gesamte Minimum-Phase-Spalte ist also schlicht Lookahead + 6. Bei Linear Phase schlägt der Faktor durch, und selbst dort beträgt der Schritt von 4x auf 8x 3 Samples.
- Die 6-Sample-Verzögerung des True Peak Guard ist unterhalb von 176,4 kHz immer vorhanden, ob der Guard an oder aus ist, und sie ist ab 176,4 kHz 0. Das ist Absicht: Eine Verzögerung, die mit dem Schalter erschiene und verschwände, würde die Delay-Kompensation deines Hosts bei jeder Automation dieses Parameters aus dem Tritt bringen. Es ist eine reine Verzögerung, sie ändert also nichts am Audioinhalt.
- Bei 192 kHz entsprechen die 8x- und 16x-Zeilen der 4x-Zeile, weil die Engine den effektiven Faktor bei hohen Projektraten herabsetzt (siehe Oversampling oben).
Prepare-Latch: Oversampling und OS Filter verhalten sich exakt wie Lookahead. Alle drei werden nur gelesen, wenn der Host das Plugin initialisiert, eine Änderung wird also beim nächsten prepareToPlay() wirksam — Projekt erneut öffnen, Samplerate oder Puffergröße ändern, oder in den meisten Hosts den Transport stoppen und neu starten — nicht sofort bei laufendem Audio. Stelle sie vorab ein, statt mitten im Mix danach zu greifen, und automatisiere sie nicht. (Live-Umschalten ohne Klicks ist geplant und braucht Maschinerie, die sich nicht sicher anflanschen lässt: Den Oversampler bei laufendem Audio neu zu allokieren ist ein Echtzeit-Risiko, also wird es ordentlich statt schnell gemacht.)
Zwei weitere Dinge, die wissenswert sind, wenn du selbst einen Nulltest fährst oder Latenz misst:
- Vergleichst du einen v0.4.0-Render mit einem v0.2.0-Render? Verschiebe um exakt 6 Samples (unterhalb von 176,4 kHz; 0 ab dieser Rate). Die Ausrichtungsverzögerung des Guards ist eine reine Ganzzahl-Verzögerung — sie ändert wann der Output ankommt, nie einen einzelnen Sample-Wert —, mit dieser Verschiebung nullt ein v0.4.0-Render bei Default-Settings also vollständig gegen einen v0.2.0-Render. Das ist verifiziert, nicht nur behauptet: Die Regressionstests des Projekts vergleichen gegen committete v0.2.0-Renders mit exakt dieser Kompensation und prüfen Bit-Exaktheit.
- Bei 8x und 16x Minimum Phase landet das Energiemaximum eines Impulses ein Sample nach der gemeldeten Latenz. JUCE leitet die Latenz einer IIR-Kette aus ihrer Phasenverzögerung nahe DC ab — genau die Konvention, gegen die Hosts kompensieren —, während die Phasendispersion der eigens entworfenen Allpass-Kaskade den Impuls-Peak fraktional später schiebt. Die gemeldete Zahl ist die korrekte für die Delay-Kompensation deines Hosts, und die anderen vier Faktor-/Phasen-Kombinationen landen exakt darauf. Das spielt nur eine Rolle, wenn du die Ausrichtung selbst über die Lokalisierung eines Impuls-Peaks misst; es ist in
tests/TruePeakVerificationTests.cppgemessen und begrenzt, kein Unbekanntes.
Metering (engine-seitig; GUI-Anzeige folgt in einem späteren Milestone)
Die DSP-Engine von Apotheosis berechnet fortlaufend die aktuelle Gain Reduction, den True Peak des Ausgangs sowie die Momentary- (400 ms), Short-Term- (3 s) und Integrated-LUFS-Loudness-Werte und stellt sie bereit. Ein visuelles Meter, das diese Werte in der Plugin-UI zeigt, ist für den Custom-GUI-Milestone (M3) geplant; bis dahin stehen diese Daten jedem Host oder Test-Harness zur Verfügung, der den Prozessor direkt abfragt.
v0.4.0 macht das Metering delivery-tauglich, was verändert, was die Zahlen aussagen (das Audio verändert es in keiner Weise):
- Integrated LUFS ist jetzt vollständig nach ITU-R BS.1770-4 gegated. 400-ms-Blöcke mit 75 % Überlappung, das absolute Gate bei -70 LUFS und das relative Gate bei -10 LU, berechnet auf die spezifizierte Zwei-Pass-Weise. v0.2.0 lieferte eine dokumentierte Näherung davon; der Wert, den du jetzt bekommst, ist der Wert, den ein konformes eigenständiges Loudness-Meter liefert, verifiziert gegen die Testfälle von EBU Tech 3341 auf 0,1 LU genau. Erwarte, dass Integrated-Werte bei gleichem Material von denen aus v0.2.0 abweichen — die neuen sind die korrekten.
- Loudness Range (LRA) ist neu, nach EBU Tech 3342, verifiziert gegen die Tech-3342-Vektoren auf 1 LU genau (
getLoudnessRangeLu()). - Der True-Peak-Wert des Ausgangs ist jetzt eine Messung, keine Schätzung. Er wird vom selben BS.1770-4-Detektor mit 48 Taps und 4 Phasen erzeugt, den auch der True Peak Guard nutzt, angewendet bei der Projekt-Samplerate nach dem Heruntersampeln — der dBTP-Wert, den Apotheosis zeigt, ist also der, den ein konformes externes Meter zeigen wird, statt einer Näherung aus der oversampleten Domäne.
- True-Peak-Max-Hold (
getTruePeakMaxHoldDb(), zurücksetzbar) und maximale Gain Reduction (getMaxGainReductionDb()) sind neue sitzungslaufende Anzeigen.
Die Implementierungsdetails zu K-Weighting, Histogramm-Gating und Interpolator findest du in docs/architecture.md.
Was verifiziert ist, und in welchem Rahmen
Jede zentrale Behauptung in diesem Handbuch hat einen Test dahinter, der bei jedem CI-Push läuft (macOS und Windows). Diese Tabelle ist die Kurzfassung — die Grenze ist das, was der committete Test prüft, die gemessene Spalte ist das, was der Release-Messlauf tatsächlich produziert hat.
| Behauptung | Geprüfte Grenze | Gemessen |
|---|---|---|
| Die Gain-Hüllkurve der Nicht-Classic-Styles schwingt nie über | Null Verletzungen über 10.080 randomisierte Signale (4 Styles × 3 Lookahead-Settings), bei umgangenem finalem Sicherheits-Clamp | 0 Verletzungen |
| Mit aktiviertem True Peak Guard liest ein konformes BS.1770-4-4x-Meter auf oder unter deiner Ceiling | ≤ Ceiling + 0,05 dB bei jedem Corpus-Element, einschließlich eines Inter-Sample-Peak-Falls nahe Nyquist | Bei einer Ceiling von −1,0 dBTP: −1,128 / −1,287 / −1,293 / −1,733 dBTP |
| Die Ausrichtungsverzögerung des True Peak Guard ist konstant | Exakt 6 Samples bei 44,1 / 48 / 96 kHz, 0 bei 192 kHz — nie mit der Samplerate skaliert | 6 / 6 / 6 / 0 |
| Weighted Noise Shaping schlägt flaches TPDF | ≥ 15 dB F-gewichtete Verbesserung bei 16 Bit | 20,05 dB |
| Alias-Produkte bleiben unter dem Boden pro Faktor | −70 dBc bei 4x, −90 dBc bei 8x, −100 dBc bei 16x Linear | innerhalb der Grenzen |
| Oversampling ist tonal transparent | Durchgang flach innerhalb von ±0,1 dB bis 20 kHz, alle sechs Faktor-/Phasen-Kombinationen | 0,0004 dB Worst Case |
| Auto Release hängt nicht von deiner Puffergröße ab (Nicht-Classic-Styles) | Ein 64-Sample-Render nullt gegen ein 2048-Sample-Render auf mindestens 80 dB | Null Differenz — identische Renders |
| Delta ist wirklich das, was der Limiter entfernt hat | Ein Signal 6 dB unter der Ceiling ergibt ein Delta unter −100 dBFS RMS | innerhalb der Grenze |
| Unity Gain hält den Pegel | Output innerhalb von 0,05 dB der 0-dB-Drive-Referenz | innerhalb der Grenze |
| Integrated LUFS ist spezifikationskonform | EBU-Tech-3341-Testset auf 0,1 LU genau | innerhalb der Grenze |
| Loudness Range ist spezifikationskonform | EBU-Tech-3342-Vektoren auf 1 LU genau | innerhalb der Grenze |
| Jeder v0.4.0-Default reproduziert v0.2.0 | Bit-exakt gegen committete v0.2.0-Golden-Renders (nach der 6-Sample-Guard-Verschiebung) | 0 Abweichungen |
| Nichts alloziert auf dem Audio-Thread | 0 Allokationen unter einem ersetzten globalen Allocator, mit 16x Linear Phase, True Peak Guard, Weighted Dither, dem Style Safe, Delta und Unity Gain gleichzeitig aktiviert | 0 |
Zwei ehrliche Vorbehalte gehören neben diese Tabelle:
- Die gemessene Ceiling-Garantie ist eine 4x-Meter-Garantie. Ein konformes BS.1770-4-4x-Meter kann den True Peak bei Material nahe 0,45 × Nyquist um bis zu 0,554 dB unterlesen, und der Guard korrigiert, bis sein eigener konformer Detektor auf oder unter deiner Ceiling liest. Ein höherauflösendes Referenz-Meter kann bei solchem Material also legitim etwas oberhalb der Ceiling lesen. Das ist eine Eigenschaft des Mess-Standards, nicht dieses Plugins, und die Tests sagen das explizit, statt es zu verstecken.
- Das Loudness-Metering ist gegen die veröffentlichten EBU-Testvektoren verifiziert, nicht von einer Compliance-Stelle zertifiziert. Verifiziert ist eine starke Aussage; zertifiziert ist eine andere, und dieses Plugin macht nur die erste.
Es gibt außerdem ein Messergebnis, das kleiner ausfiel als beabsichtigt, und das dokumentiert statt still fallengelassen wird: Der FIR-Attack-Glätter zielte teilweise auf tieffrequente Intermodulationsverzerrung, und bei gehaltenem 50-Hz-Material, das 3 dB über der Ceiling angesteuert wird, bei 10 ms Lookahead, misst Classic genauso sauber wie Transparent (beide weit unter der 1-%-Grenze). Der Grund: Das gleitende Minimum-Fenster dieser Engine war schon immer nach Lookahead bemessen statt nach einer Attack-Zeit, bei 10 ms überspannt es also bereits die 50-Hz-Halbperiode. Verkürzt man das Lookahead auf 3 ms — unterhalb dieser Halbperiode — verzerrt derselbe Render messbar, was zeigt, dass das Fenster tatsächlich die Arbeit leistet. Der echte Beitrag des Glätters ist die strukturelle Null-Überschwingen-Garantie und eine glattere Hüllkurve bei transientendichtem Material, kein Gewinn bei tieffrequenter Verzerrung gegenüber Classic bei großzügigen Lookahead-Settings. Die vollständige Notiz steht in docs/architecture.md.
Presets
Am oberen Rand des Editors sitzt eine Preset-Leiste ([<] [Preset-Name] [>] [Save] [Save As...] [Delete] [Import...] [Export...]). Apotheosis bringt elf Werkspresets mit, die den v1-kompatiblen Standard sowie Ausgangspunkte für jeden neuen v0.2.0- und v0.4.0-Regler abdecken — die vollständige Liste mit der Absicht hinter jedem Preset findest du in docs/presets.md. Deine eigenen Presets speichert Apotheosis unter ~/Library/Audio/Presets/Yves Vogl/Apotheosis/ auf macOS (%APPDATA%/Yves Vogl/Apotheosis/Presets/ unter Windows); „Set current as default" im Preset-Menü macht ein beliebiges Preset (Werks- oder eigenes) zu dem, das beim nächsten Öffnen einer frischen Instanz automatisch geladen wird. Import/Export funktioniert mit einzelnen .basilicapreset-Dateien und .zip-Preset-Bänken.
Sprache
Die eigenen Interface-Texte der Preset-Leiste (Button-Beschriftungen, Menüeinträge, Dialogmeldungen) erscheinen automatisch auf Deutsch, wenn deine Systemsprache Deutsch ist; sonst bleiben sie auf Englisch. Einen manuellen Sprachumschalter gibt es noch nicht. Parameternamen und Einheiten (Attack, Release, dB, %, ...) bleiben unabhängig von der Systemsprache immer auf Englisch, da es sich um technische Fachbegriffe handelt, nicht um übersetzbare UI-Texte.
Tipps
- Nutze Input Gain, um zu bestimmen, wie hart du den Limiter antreibst — nicht den Fader deines Mix-Bus. Deinen Mix vor dem Limiter auf einem sinnvollen Pegel zu halten und Input Gain für die Menge an Limiting zu nutzen, hält dein Gain-Staging bewusst und über Sessions hinweg reproduzierbar.
- -1.0 dBTP ist eine sichere Allzweck-Ceiling für die meisten Streaming-Ziele. Kennst du deine genaue Auslieferungspipeline (z. B. eine Plattform mit veröffentlichter Loudness-/True-Peak-Spezifikation), passe die Ceiling an diese Spezifikation an, statt zu raten.
- Starte mit Release Curve auf Exponential. Greife nur zu Linear oder Smooth, wenn dir etwas Konkretes auffällt, das du ändern willst (mechanisch klingende Erholung oder hörbares Pumpen) — sie sind Alternativen, keine Upgrades.
- Halte Clip Mix bei 0 % für Mastering-taugliche Transparenz, und erhöhe ihn nur bewusst, wenn du den härteren, stärker gesättigten „modernen Loudness"-Charakter willst — das ist ein bewusster Trade-off, kein kostenloser Loudness-Bonus.
- Lass Dither aus, außer Apotheosis ist die allerletzte Stufe vor einem Bounce mit fester Bit-Tiefe. Dithert der Export-/Bounce-Schritt deiner DAW bereits selbst, fügt das Aktivieren hier nur unnötiges zusätzliches Rauschen hinzu.
- Jage nicht 0 dBTP hinterher. Die Ceiling ganz bis auf 0 dBTP zu schieben, entfernt deine Sicherheitsmarge gegen nachgelagerten Lossy-Encoding-Overshoot; -1.0 bis -2.0 dBTP ist nicht ohne Grund der übliche Bereich.
- Behalte dein Lookahead-/Latenz-Budget im Auge, wenn du Takes über mehrere Plugins hinweg vergleichst. Da Lookahead erst beim nächsten
prepareToPlay()wirksam wird, ist es irreführend, es mitten in der Session zu ändern und einen sofortigen hörbaren Unterschied zu erwarten — stopp und starte die Wiedergabe neu (oder öffne das Plugin neu), nachdem du es geändert hast. - Lass Attack, Auto Release und Stereo Link auf ihren Standardwerten (0 ms, 0 %, 100 %), bis du einen konkreten Grund hast, einen davon zu ändern. Jeder ist ein echter Charakter-Regler, keine „bessere" Einstellung — Apotheosis klingt und verhält sich mit den v0.2.0-Standardwerten exakt wie v1.
- Probiere die Kombination „kurzes Lookahead + langer Attack + schneller Release" für zusätzliche wahrgenommene Lautheit bei erhaltenem Punch (siehe das Werkspreset Punchy Master) — das ist der eigene, dokumentierte Trade-off der Referenzklasse zur Maximierung der Lautheit bei intakten Transienten, jetzt in Apotheosis über Attack erreichbar.
- Wenn du ein neues Master beginnst, starte auf Style: Transparent statt Classic. Classic ist nur deshalb der Default, weil es das sein muss — es schützt bestehende Sessions. Transparent ist der bessere Limiter.
- Nutze Delta, um zu entscheiden, wie hart du limitierst. Schiebe Input Gain hoch, bis du im Delta-Signal Instrumente zu erkennen beginnst, und nimm dann zurück. Das ist weit verlässlicher, als bei zwei unterschiedlichen Lautheiten nach Gehör zu entscheiden.
- Nutze Unity Gain immer dann, wenn du zwei Input-Gain-Einstellungen vergleichst. Lauter klingt immer besser; angeglichene Lautheit ist der einzige Weg zu hören, ob es tatsächlich besser ist.
- Schalte True Peak Guard für alles mit Delivery-Spezifikation ein und lass das Ceiling dort, wo die Spezifikation es vorgibt. Der Guard ist das, was aus der Zahl eine wahre statt einer wahrscheinlichen macht.
- Stelle Oversampling und OS Filter am Anfang einer Session ein, nicht mittendrin. Sie werden erst wirksam, wenn der Host das Plugin neu initialisiert, mitten im Mix einen davon zu ändern und auf einen Unterschied zu hören führt dich also in die Irre. 4x Minimum Phase ist ein völlig guter Default; greife für Archivarbeit zu 16x Linear Phase, nicht routinemäßig.
- Greife nur dann zu Stereo Link unter 100 %, wenn ein hart gepanntes Element sichtbar die Gain Reduction des gegenüberliegenden Kanals mit nach unten zieht (das Werkspreset Wide Image Preserve als Ausgangspunkt prüfen) — volle Kopplung ist für die meiste Mastering-Arbeit die sicherere, konventionellere Wahl.
Bekannte Einschränkungen
- Die sieben v0.4.0-Regler haben noch keine eigens gestalteten Editor-Regler. Style, Oversampling, OS Filter, True Peak Guard, Noise Shaping, Delta und Unity Gain sind alle host-sichtbar und über das Parameter-Layout des Plugins automatisierbar, jeder Host zeigt sie also in seiner generischen Parameteransicht — aber sie in einen dedizierten Editor zu verdrahten, und das visuelle Meter für die oben beschriebenen Gain-Reduction-/True-Peak-/Loudness-Anzeigen, sind beides GUI-Arbeit für einen späteren Milestone (M3). Das zugrunde liegende DSP und die Readout-API sind bereits vollständig.
- Dither wird bei der Basisrate nicht erneut auf die Ceiling geklemmt. Ein diskretes Output-Sample kann bis zu etwa 1 LSB über der nominellen Ceiling liegen (rund −90 dBFS bei 16 Bit, −138 dBFS bei 24 Bit) — Standardverhalten für gedithertes Output, wie erwartet, und weit innerhalb der Toleranz, die die True-Peak-Tests nutzen.
- Die Weighted-Noise-Shaping-Kurve ist für 44,1-/48-kHz-Delivery gefittet und wird bei höheren Projektraten unverändert genutzt, wo ihr Fit an die Hörbarkeitskurve nicht mehr so präzise gilt.
- Fünf Styles, eine Architektur, ehrlich beschrieben. Classic behält das exakte Verhalten von v0.2.0; die vier Nicht-Classic-Styles teilen sich eine FIR-Smoother-/Dual-Release-Architektur mit unterschiedlichen Konstanten pro Style, statt vier unabhängig entwickelte Algorithmen zu sein.
- Release Curve bleibt bei Classic eine einzelne, nutzergewählte Form. Die Fast-/Slow-Release-Zeitkonstanten der Nicht-Classic-Styles sind pro Style fixiert (siehe die Style-Tabelle oben), nicht separat nutzerseitig zugänglich.
- Die gemessene Ceiling-Garantie ist eine 4x-Meter-Garantie (siehe die Vorbehalte unter „Was verifiziert ist, und in welchem Rahmen" oben) — ein höherauflösendes Referenz-Meter kann bei bestimmtem Material nahe 0,45× Nyquist legitim etwas oberhalb der Ceiling lesen. Das ist eine Eigenschaft des BS.1770-4-Standards selbst, nicht dieses Plugins.
- Lookahead, Oversampling und OS Filter sind Prepare-Latch-„Setup"-Parameter, nicht live automatisierbar (siehe Latenz oben). Live, klickfreies Umschalten braucht echtzeitsichere Re-Prepare-Maschinerie, die noch nicht gebaut ist — den Oversampler bei laufendem Audio neu zu allozieren ist ein Echtzeit-Risiko.
- Das Voicing ist durchgehend recherchebasiert, entnommen aus veröffentlichter Dokumentation und allgemeiner DSP-/Dithering-Literatur zu dieser Referenzklasse — nicht gegen die Binärdatei irgendeines Mitbewerbers gemessen, gebenchmarkt oder daraus reverse-engineered. Die belegten Erkenntnisse stehen in
docs/research-notes.md.