DNA
Wie sie entsteht, und was in ihr steht
Der Kloner beantwortet eine Frage: was genau macht aus einem fremden Video unsere DNA?
Er sieht sich einen bewiesenen Kanal an und schreibt auf, was ihn ausmacht: welche Hooks, welcher Skript-Bogen, welche Titel, welche Bildarten, welcher Schnitt. Das Ergebnis ist eine JSON-Datei, keine Beschreibung. Alles läuft über den eigenen Plan, also kostenlos.
| # | Schritt | Stand | Skripte |
|---|---|---|---|
| K1 | Kanal messen Median-Views der letzten 10 chronologischen Uploads, Verhältnis zu den Abos, Frische. Ein Bestwert aus einer Suchliste ist eine Hypothese, der Median ist ein Beleg | läuft | niche_probe.py1 Skripte
|
| K2 | Die besten Videos ziehen Top-Videos mit View-Zahlen plus die letzten Uploads als Friedhofstest. Dieselben Videos liefern später die Referenz-Frames zum Messen | läuft | channel_dossier.py, fetch_channel_videos.py2 Skripte
|
| K3 | Zuhören: Transkripte Was gesagt wird, Wort für Wort. Daraus kommen Hooks, Skript-Bogen und Sprechtempo | läuft | yt_subs.py, algrow_rest.py2 Skripte
|
| K4 | Hinsehen: echte Frames Frames über die ganze Laufzeit als Kontaktbogen. Ohne diesen Schritt ist eine DNA optikblind und kann Schnitt-Tempo und Look nur raten | läuft | frame_vision.py1 Skripte
|
| K5 | Formel schreiben Aus Transkripten, Titeln und Frames wird ein festes JSON-Schema: Hooks, Titel-Formeln, Retention, Format, Bildstil, Thumbnail. Jedes Feld mit open_gaps, wo etwas unklar blieb | läuft | extract_dna.py1 Skripte
|
| K6 | Maßstab messen Seit 28.07.: aus denselben Videos gemessene Zielwerte statt Prosa. Materialmix, Kartengröße, Licht | läuft | dna_massstab.py, material_mix.py2 Skripte
|
| K7 | In einen Kanal gießen DNA wird zu Rezept-Werten und in die Pipeline geschrieben. Heute noch als Fork je Kanal, deshalb nur teilweise | halb | derive_format.py, apply_recipe.py, fork_channel.py3 Skripte
|
Was der Kloner nicht kann: entscheiden, welcher Kanal das Vorbild sein soll. Messen kann er jede Nische, ranken muss ein Mensch. Und die letzte Stufe schreibt heute in einen geforkten Workflow statt in eine Straße, die zur Laufzeit liest.
Das Zielbild zeigt, wie eine DNA entsteht – hier steht, was in ihr drin ist, abgelegt als dna/<kanal>.json.
Die Liste führt drei verschiedene Dinge:
- Wert – steht in der DNA, die Pipeline liest ihn (Bildquellen, Bildmenge, Übergänge, Font, Länge, Stimme). Ändern heißt: Zahl oder Name ändern.
- Regel – keine Zahl, sondern eine Vorschrift, wie etwas entsteht: welche Formel das Skript baut, wie der Hook gemacht wird. Kommt aus dem Vorbild, nicht aus einer Liste.
- System – Werkzeug der Fabrik selbst, damit DNA und Pipeline zusammenarbeiten.
⚠️ „Läuft" heißt nicht „gut"
Das ist der wichtigste Satz auf dieser Seite. Ein Baustein gilt hier als verdrahtet, wenn er existiert und in einen Workflow geschrieben wurde. Über das Ergebnis sagt das nichts. Zwei Dinge, die gleichzeitig wahr sind:
- 25 Bausteine laufen
- und trotzdem trifft keine gemessene Folge ihren eigenen Maßstab
Gemessen am 28.07.: history ist zu dunkel (typisches Frame 46 statt 105), hat halb so viel Licht-Dynamik wie das Vorbild und wiederholt 55 % seiner Bilder. alvaro zeigt 2 % Lesekarten statt 87 % – es klont das Format seines Vorbilds schlicht nicht.
Wer wissen will, wie gut ein Kanal wirklich ist, schaut nicht in diese Tabelle, sondern auf den Maßstab in seiner DNA und das Ergebnis von dna_pruefen.py. Diese Liste sagt nur, welche Schrauben es überhaupt gibt.
Und selbst „verdrahtet" ist schwächer, als es klingt: heute schreibt ein patch_*.py den Wert einmalig in einen geforkten Workflow, danach ist er eingefroren. Die Pipeline wählt ihn nicht zur Laufzeit aus einem Katalog. Wie groß der Unterschied ist, steht als Zahl im Kapitel Stand und Weg (26 %). Ein echter Laufzeit-Katalog ist HZ-203.
| # | Art | Baustein | Stand | Womit es gebaut wird |
|---|---|---|---|---|
| 1 | Regel | Formel (DNA) | läuft | P1-Nodes „Claude für Skript"/„…Hooks"/„…Title Optimizer" via inject_p1.py --full-p1 (PUT + Reactivate). Seit HZ-528 …ganzer Eintrag
|
| 2 | Wert | Bild-Look | läuft | apply_recipe --with-style: recipe.style → Preset aus style_presets.json als Marker-Block [APPLY_STYLE] im …ganzer Eintrag
|
| 3 | Wert | Quellen-Mix (ai/pexels/pixabay/wikimedia/unsplash/getty/archive/openverse/coverr/reuse) | läuft | P2 Stock-Kette (Pexels→Pixabay→Wikimedia→Unsplash, LIVE) + Router-Prompt + harvest-gw:8013 (ALLOWED_SOURCES: …ganzer Eintrag
|
| 4 | Wert | Motion (zoom/kb/out) | läuft | build_payload.py MOTIONSganzer Eintrag
|
| 4b | Wert | Motion pan/tilt/pulse | läuft | StaticScene-Cases (pan live seit je, tilt/pulse NEU) – payload-gatedganzer Eintrag
|
| 4c | Wert | Motion-Tempo | läuft | scene.motion_speed (build_payload aus Recipe) x zoomSpan in StaticSceneganzer Eintrag
|
| 5 | Wert | Übergänge (hart) | läuft | heutiger Beat-Cutganzer Eintrag
|
| 5b | Wert | Übergänge (11 weitere) + Dauer | läuft | TransitionWrapper +9 Cases + scene.transition_seconds; Recipe-Rotation + Director pro Beatganzer Eintrag
|
| 6 | Wert | Schnitt-Tempo | halb | TARGET_SHOT_SECONDS env (CS-Fork live; Psych-Fork prüfen)ganzer Eintrag
|
| 7 | Wert | Captions karaoke_yellow | läuft | Captions.tsxganzer Eintrag
|
| 7b | Wert | Captions white/static/boxed | läuft | Captions.tsx variant-Prop (scene.caption_variant aus Recipe)ganzer Eintrag
|
| 7c | Wert | Caption-Font (6 Fonts) | läuft | Captions.tsx font-Prop + @font-face (ttf in public/fonts) – Wiring-Proof: Bangers LIVE in MainVideo-Stillganzer Eintrag
|
| 8 | Wert | Karten chapter_v7 | läuft | OnScreenText.tsx + CHAPTER_CARDS=v7 envganzer Eintrag
|
| 8b | Wert | Karten year/name, popup | läuft | gleiche Komponente + POPUP_CARDS envganzer Eintrag
|
| 8c | Wert | Karten quote/stat | halb | gleiche Komponente, nur P1-title_cards-Content („KICKER\ganzer Eintrag
|
| 9 | Wert | Thumbnail tupac | läuft | P4 Thumbnail-Kette (Rollout 14.07., 8 Kanäle)ganzer Eintrag
|
| 9b | Wert | Thumbnail hook_band/clean | halb | P4-Prompt-Umschalterganzer Eintrag
|
| 10 | Wert | Subscribe-Overlay | läuft | SUBSCRIBE_OVERLAY_AT/DUR envganzer Eintrag
|
| 10b | Wert | Maskottchen-Intro | fehlt | neue Remotion-Komponente + Look-Entscheidganzer Eintrag
|
| 11 | Wert | eBook Beschreibung+Pinned | läuft | P1 „Funnel Copy" + P4 (HZ-180)ganzer Eintrag
|
| 11b | Wert | eBook QR-Outro | läuft | OutroCard + Buch aus recipes/<kanal>.json → recipe.book (HZ-267; OUTRO_*-env nur noch Notfall-Override)ganzer Eintrag
|
| 11c | Wert | eBook Mid-Plug | läuft | MidPlugOverlay + payload.book_plugs (LISTE): 2 Einblendungen/Video auf Kapitelgrenzen, nie erste 60 s / letzte 45 s. Buch …ganzer Eintrag
|
| 12 | Wert | Video-Länge | läuft | apply_recipe --with-p1: recipe.length-Bucket → Wortziel im P1-Skript-Prompt (LEN_WORDS)ganzer Eintrag
|
| 13 | Wert | Sprache | läuft | apply_recipe --with-p1: recipe.lang → Sprach-Direktive [APPLY_LANG] im P1-Promptganzer Eintrag
|
| 14 | Wert | SFX-Set | halb | build_payload.py SFX-Logik + WHOOSH_SFX; „pops_sparse" = Logik-Patchganzer Eintrag
|
| 15 | Wert | BGM-Pool-Auswahl | halb | pick_bgm() rotiert HEUTE über ALLE bgm*.mp3; Subset = BGM_POOL env-Patchganzer Eintrag
|
| 16 | Wert | Stimme | läuft | Kette zu (HZ-254, 21.07.): voices.json (4.771 Stimmen + Akzent-Regeln) → voice_pick.py wählt automatisch aus DNA → …ganzer Eintrag
|
| 17 | Wert | Kadenz | halb | HQ-Studio-Tagesplaner/Kalender-APIganzer Eintrag
|
| 18 | Regel | AI-Director (Beat-Advisor) | läuft | LIVE: P2-Node „AI Director (HZ-212)" (Aggregate→Director→Coverage; Upload-map trägt director – Whitelist-Falle behoben) …ganzer Eintrag
|
| 19 | Wert | Material-Mix Stills/Bewegt (Jonas: 69 % Bewegt, 3 % KI = DER Look-Unterschied; wir 100 % KI-Stills) | halb | HeroScene.tsx rendert Videos LIVE + Wikimedia-Videos in Stock-Kette + fertiger Patch …ganzer Eintrag
|
| 20 | Regel | Hook = bewegter Clip (Jonas: Sekunde 0 bewegt, wir statisch) | halb | P2-Router-Regel „Beat 1 = video" + erste Szene HeroSceneganzer Eintrag
|
| 21 | Wert | Schnitt-Dichte-Benchmark (Jonas ~10 Shots/Min · Apex 12-18 · wir 2,4 = 4-10× zu langsam) | halb | CS-Shot-Expansion (TARGET_SHOT_SECONDS + Bild-Reuse) auf Psych aktivierenganzer Eintrag
|
| 22 | System | NEXUS-Parität: Template-Bibliothek=Recipes · Runs-Monitor=HQ-Übersicht · Clips-DRILLDOWN / Clip-AUSTAUSCH · CSV-Nischen-Import | läuft | HQ builder/übersichtganzer Eintrag
|
| 23 | System | Vision-Anker (echte Frames des Zielkanals in der DNA als Stil-Referenz) + image_prompt_dna (EIN deterministischer Stil-Prompt) | läuft | Clone: Anker aus Video-Thumbs (Algrow-Scrape) · p1_block traegt VISUAL-STYLE-PROMPT + THUMBNAIL-DNA → fliesst via inject_p1 …ganzer Eintrag
|
| 24 | System | Self-Optimizer (Leon: „System muss schlau sein") – AVD/CTR je Folge → schlaegt Recipe-/DNA-Aenderungen VOR (nie auto-aendern, Leon-Gate) | fehlt | Nightly-Skript: yt_analytics je Folge + aktives Recipe/DNA → Claude-Diagnose → Ticket-Note/TG-Vorschlagganzer Eintrag
|
Was im Katalog fehlt
Bausteine, die es geben müsste, aber nicht gibt – sie stehen noch nicht in der Matrix.
| Baustein | Stand | Warum er fehlt | Ticket |
|---|---|---|---|
| Presenter / sprechende Person (HeyGen) | fehlt | Kein Baustein für einen Avatar oder Menschen, der in die Kamera spricht: alle unsere Kanäle sind faceless. Die Materialklasse `presenter_person` ist im Maßstab bereits vorgesehen, aber es gibt nichts, was sie erzeugt. | noch keins |
Quelle im Repo: channel_clone/APPLY_MATRIX.md