Polish-Plan
Was Marvin im Studio gesehen hat: das Video wirkt abgehackt — lange Talking-Head-Strecken ohne visuelle Variation, Drift-Stellen drin, Display-Whiteboard ohne Detail-Zooms, Brand noch auf altem Forest-Green-Cream-System.
Plan in sechs Phasen, jede mit klarem Output. Marvin nickt ab → ich arbeite Phase fuer Phase ab. Hinterher destilliere ich das in einen Skill.
Befund (warum es abgehackt wirkt)
- Sub-Cut B2-3 ist 53 Sek Talking-Head ohne Schnitt — nichts passiert visuell, Aufmerksamkeit kippt. Klassischer Drop-Spot in YouTube-Retention-Daten.
- Drift-Stellen drin — „so so so”, „Pfeile machen”, „Schach spielen waehrend Claude denkt”. Im Schnittplan markiert, aber Sub-Cuts sind grob — drinnen ist alles, nicht selektiv.
- Display-Recording wird einfach abgespielt — keine Zooms auf Whiteboard-Detail, keine Cursor-Highlights. Profi-ScreenStudio-Output (Auto-Zoom-on-Click) wird gar nicht emuliert.
- Talking-Head ist statisch — kein Ken-Burns, kein Zoom-Punch beim Sub-Cut-Start. Wirkt wie Webcam-Aufnahme.
- Uebergaenge sind Hard Cut zwischen Pickup-Cards / Sub-Cuts / Atmosphere — funktional, aber nichts „sitzt”.
- Brand veraltet — Forest-Green-Cream-Theme. Webseiten-Brand seit 2026-04-25 ist Bone-Weiss + Ink-fast-Schwarz + Forest als RARE Akzent + sharper Borders.
Strategische Quellen die wir nutzen
agentic-ventures-website/DESIGN.md(v alpha, 2026-04-25) — neueste Brand-Tokens. Source of Truth.intern/firma/brand.md§Schnitt-Regeln — definiert bereits Hard Cut / Zoom-Punch (1.025 / 6 Frames) / Cut+Text-Overlay / Cutaway-Interlude. Wir nutzen genau diese Patterns. Nicht neu erfinden.- Remotion
<Video>aus@remotion/media—trimBefore/trimAfterals Frame-Werte, plusplaybackRatefuer Pause-Speedup. - Remotion’s eingebauter
silencedetectFilter — automatische Filler-Identifikation. Skill-Doku in/remotion-dev/skillssilence-detection.md. mouseclicks-0.jsonim ScreenStudio-Bundle — exakte Klick-Zeitpunkte und Position fuer Auto-Zoom-on-Click-Emulation.@remotion/media-utilsuseAudioData()— fuer Audio-Waveform-getriebene Zoom-Trigger an Lautstaerke-Peaks.- 0042.json (WhisperX-Output) — Word-Level-Timestamps. Damit kann ich Filler-Words wie „digga”, „alter”, „so so”, „okay so” frame-genau loeschen.
Phasen
Phase 1 — Brand-Migration auf Webseiten-Tokens (~15 Min)
Output: remotion/src/theme.ts matcht agentic-ventures-website/DESIGN.md exakt.
Was geaendert wird:
colors.background:#F5F4ED→#FFFFFFcolors.surface:#E5E2D6→#FFFFFFcolors.muted:#8B8779→#737373colors.text:#1D1D1A→#0A0A0A(Webseite hat hoeheren Kontrast)- Neu:
colors.hairline:#E5E5E5,colors.forestDark:#243B32 motion.easeOut: bestehender Wert ueberprueft; Webseite hatcubic-bezier(0.16, 1, 0.3, 1)als--ease-editorial, nehme ich uebernehmen- Border-Radius: lg von
12px→4px, md von8px→2px
Was NICHT geaendert wird:
- Forest-Green
#2D4A3Eals Akzent — nur seltener eingesetzt - Lora-Italic-Pairing
- Component-API von Cards (PlaceholderCard, HeyJuliaCard, Highlight-Overlays)
Side-Effekt: alle anderen Compositions (vlog-intro-test, editorial-showcase etc.) ziehen die neuen Farben — wenn sie kaputt aussehen, ist’s nur der Brand-Drift, nicht meine Migration.
Phase 2 — Filler-Cuts via Silence-Detection (~30 Min)
Output: Liste der Drift-Stellen in 0042-Audio + automatische Sub-Cut-Speedup an Pausen.
Workflow:
npx remotion ffmpeg -i 0042-audio.wav -af loudnorm=print_format=json -f null /dev/null→ input_threshnpx remotion ffmpeg -i 0042-audio.wav -af silencedetect=noise=THRESH dB:d=0.4 -f null /dev/null→ Liste aller Stille-Bereiche >0.4s- Liste-Output parsen, JSON ablegen unter
intern/projekte/vlog-mai-2026/ressourcen/silence-map-0042.json - Strategie: Pausen <0.6s → playbackRate 1.5x (Audio leicht gespeedet, klingt natuerlich); Pausen >0.6s → komplett rauscutten (Sub-Cut splitten an dieser Stelle).
- Plus: aus 0042.json (WhisperX-Word-Timestamps) Filler-Words finden: „digga”, „alter”, „so so so”, „okay so”, „weisst du was”. Diese Word-Spans (typisch 0.3-0.8s) bewusst rauscutten.
Risiko-Mitigation: ich generiere die Cut-Liste, nicht den finalen Schnitt. Marvin sieht Vorschlag-Liste, sagt „das stimmt” oder „lass diese 3 drin”. Erst dann automatisch in Composition.
Phase 3 — Zoom-Punch + Ken-Burns auf Talking-Head (~20 Min)
Output: Talking-Head-Sub-Cuts wirken „lebendig” statt statisch.
Patterns (aus brand.md §Schnitt-Regeln):
- Zoom-Punch beim Sub-Cut-Start: Scale 1.0 → 1.025 ueber 6 Frames mit Ease-Out. Default fuer JEDEN Sub-Cut. Nicht spuerbar — aber das Auge merkt’s. Standard, nicht Highlight.
- Ken-Burns auf Master-Cuts: Scale slow 1.0 → 1.04 ueber die ganze Cut-Dauer. Subtil. Nur fuer Sub-Cuts >15 Sek.
- Stronger Zoom-Punch (1.0 → 1.05) an Punchline-Cuts: „Der Mensch”, „75 Euro pro Stunde”, „Mitarbeiter komplett ersetzen” — bewusste Akzent-Bewegung.
- Micro-Shift +/- 4px pro Cut: kompensiert Jump-Cut-Drift, gibt Variation.
Implementation: TalkingHeadFull bekommt Props zoomPunch, kenBurns, microShift — analog zur bestehenden TalkingHeadClip-Component.
Phase 4 — Display-Auto-Zoom-on-Click (~40 Min)
Output: Display-Recording bekommt smooth Zoom-Animationen auf Cursor-Klicks — wie ein cleanes ScreenStudio-Output.
Workflow:
mouseclicks-0.jsonparsen → Liste[{timeMs, x, y}]- Pro Klick im aktuellen Sub-Cut-Range: Zoom-Animation generieren
- Animation-Pattern:
- Trigger 200ms vor Klick (anticipation)
- Scale 1.0 → 1.4 ueber 600ms (Ease-Out, editorial-easing)
- Hold auf 1.4 fuer 800ms
- Smooth Out 1.4 → 1.0 ueber 500ms
- Transform-Origin: Cursor-Position
- Cap: max 1 Zoom pro 4 Sekunden (sonst hektisch)
- Skip-Logik: wenn Marvin nur Pfeile zeichnet (Klicks ohne Tool-Wechsel) → kein Zoom
Component: neue DisplayWithSmartZoom als Wrapper um <Video src={DJI_0042_DISPLAY}>. Liest mouseclicks-0.json (in public/screenstudio/), berechnet pro Frame Zoom-Transform.
Phase 5 — Uebergaenge (~15 Min)
Output: Block-Wechsel und Atmosphere-Interludes wirken „smooth”, nicht hart.
Patterns:
- BlurCut zwischen Bloecken: Gaussian-Blur Peak 3.5px ueber 14 Frames bei Block-Wechsel (Block 1 → I1 → Block 2 → I2 → Block 3 → Outro). Vox-Style-Klassiker.
- Cut + KineticText-Overlay an den Highlight-Stellen wo eh schon eine Card kommt (Bottleneck, 75€, Block-3-Punchline) — bestehende Overlays bleiben, ergaenzt um BlurCut-Anfang.
- Atmosphere-Interludes in neuer Brand: warmer Bone-Background statt warmer Gradient. Plus Section-Number ohne Forest-Akzent (nur Muted), reduzierter visueller Stress.
Implementation: BlurCutTransition-Component — wraps die Sequence-Boundary mit Frame-spezifischem filter: blur(...).
Phase 6 — Studio-Iteration mit Marvin (open-ended)
Output: Marvin sieht das Resultat, gibt Feedback, ich justiere.
- Sub-Cut-fuer-Sub-Cut durchgehen
- B2-2 „produzierendes Gewerbe” individuell justieren (das Display-Sync-Issue)
- Hartcut-Stellen evaluieren (Sub-Cut 8→9 in Block 1)
- Display-Zooms je nach Wirkung dimmen oder verstaerken
Phase 7 — Skill destillieren
Output: agentic-ventures:vlog-cut Skill in ~/.claude/plugins/.../skills/
Inhalt:
- Trigger: „cutte vlog”, „make vlog cut”, „polish vlog footage”, „bau composition fuer take X”
- Knowledge:
- Brand-Tokens (Bone, Ink, Forest, Lora-Italic, Hairlines, Border-Radii)
- Schnitt-Patterns (Hard Cut Default 60%, Zoom-Punch 25%, Cut+Overlay 10%, Cutaway 5%)
- Silence-Detection-Workflow (loudnorm → silencedetect → JSON-Map)
- Filler-Word-Liste fuer deutsche Vlogs („digga”, „alter”, „okay so”, „weisst du was”)
- Display-Auto-Zoom-Pattern (Trigger 200ms vor Klick, Scale 1.4, 600/800/500ms)
- BlurCut-Easing-Werte
- Hook-Promise-Stakes-Pickup-Pattern (aus 03-pickup-liste)
- Workflow:
- Transcripts vorhanden? Ja → schauen welche Sub-Cuts. Nein → WhisperX laufen lassen.
- Roter Faden + Hook + Promise + Stakes definieren (Faden-Check 4 Kriterien)
- Schnittplan pro Block mit Zeilen-rein/raus
- Trim-Werte rechnen + Composition aufbauen
- Silence-Detection + Filler-Cut
- Brand-Cards + Highlight-Overlays
- Zoom-Patterns
- Display-Insert mit Auto-Zoom (falls ScreenStudio-Bundle vorhanden)
- Studio-Iteration
Reihenfolge + Estimate
Total: 2-3 Std Implementation plus Marvin’s Studio-Iteration zwischen Phase 5 und 7.
| # | Phase | Dauer | Marvin-Block? |
|---|---|---|---|
| 1 | Brand-Migration | 15 Min | nein |
| 2 | Silence-Detection + Filler-Cut-Liste | 30 Min | ja (Marvin sieht Liste, nickt ab) |
| 3 | Zoom-Punch + Ken-Burns | 20 Min | nein (per Default an, Marvin pickt ggf. raus) |
| 4 | Display-Auto-Zoom | 40 Min | nein |
| 5 | Uebergaenge | 15 Min | nein |
| 6 | Studio-Iteration | open | kontinuierlich |
| 7 | Skill | 30 Min | nein |
Risken
- Auto-Zoom kann hektisch wirken falls zu viele Klicks dicht aufeinander liegen. Mitigation: 4-Sek-Cap.
- Silence-Detection kann zu aggressiv und Marvin’s Atemluft mitschneiden. Mitigation: Threshold konservativ, Marvin reviewt Liste.
- Brand-Migration koennte andere Compositions optisch brechen (Editorial-Showcases nutzen alte Bone-Farbe). Mitigation: theme.ts ist Source of Truth, andere Compositions laufen weiter, sehen nur „aktualisiert” aus. Kein API-Break.
- 0042-Proxy ist 1080p, nicht 4K — bei Display-Zoom auf 1.4x sieht man Pixel. Mitigation: Display ist
0042-display.mp4(separat, nativ 1080p oder hoeher von ScreenStudio), nicht der DJI-Proxy. Talking-Head-PiP ist klein genug, dass 1080p reicht.
Was Marvin abnicken muss
- ✅ / ❌ pro Phase
- Falls eine Phase „nein”: Begruendung, dann passe ich den Plan an
- Plus: Reihenfolge ok? Ich faenge mit Phase 1 an, Phase 2-5 in Reihenfolge.