Software-Doku automatisieren: Wenn die KI Regie führt

Ich sitze vorm Rechner, das Mikrofon ist perfekt ausgerichtet, und ich drücke zum fünften Mal auf „Record“. Wieder versprochen. Wieder im falschen Menü geklickt. Wieder viel zu weit ausgeholt, statt einfach nur den verdammten neuen Button zu erklären. Wenn man Software baut, muss man sie auch erklären. Aber ganz ehrlich? Ich hasse es, How-To-Videos aufzunehmen.

Ein technisches Flussdiagramm im Stil einer weißen Whiteboard-Skizze auf dunkelblauem Hintergrund, das die "AUTOMATISIERTE VIDEOGENERIERUNG – DER LIZARD FLOW (BPMN Diagramm / Whiteboard-Skizze)" zeigt. Es illustriert den Prozess von einem "Feature Release / Source Code Update" bis zum "Fertigen How-To Video (MP4)". Eine rechte Info-Box erklärt "DER SKILL – EINFACH ERKLÄRT" als einen KI-Helfer für Lizard-Code und Dokumentation, der das manuelle Eintippen von YAML-Szenarien durch automatische Generierung ersetzt. Der Fluss umfasst: KI liest Code & Doku (Skill, Claude Code), schreibt ein YAML Szenario, Playwright fernsteuert den Browser für Klicks, ElevenLabs generiert das Voiceover, ein Recorder übernimmt den Rest, und ffmpeg rendert das MP4 Video. Hashtag: #MacherAutomatisierung. Wer Software verkauft, braucht Dokumentationen. Früher nannte man das staubig „Handbuch“, heute heißt es „Doku“. Das Problem ist nur: Der Ersteller ist genervt, und der Nutzer liest es am Ende sowieso nicht.

Den reinen Text-Teil habe ich für mein Lizard-Doku schon lange geknackt. Meine KI versteht den Code, formatiert alles sauber in Markdown und pusht die Updates vollautomatisiert direkt ins Git. Das ist nett für Entwickler. Aber die Realität draußen auf der Baustelle oder in der Werkstatt sieht anders aus: Ein Prüfer oder Handwerker wälzt kein 20-seitiges Wiki. Er will ein kurzes, knackiges Video sehen, das ihm in 60 Sekunden zeigt, wie er sein Problem löst.

Also saß ich da, habe den Screen aufgenommen und losgequatscht. Das Ergebnis? Absolut nicht standardisiert, völlig abhängig von meiner Tagesform und oft viel zu langatmig. Ein klassischer Scheißprozess, der durch mich als Flaschenhals blockiert wurde. Ein klassischer Fall vom Herr-Müller-Prinzip: Wenn nur ich gute Videos machen kann (an guten Tagen), skaliert mein System nicht.

KI Videoerstellung: Der Weg vom Mikrofon zum Code

Ich dachte mir: Das muss doch eleganter gehen. Wenn der Mensch vor dem Mikrofon das Problem ist, muss ich ihn aus der Gleichung nehmen. Also habe ich das Tüftler-Gen angeworfen und verschiedene Werkzeuge zusammengeflanscht, um einen automatisierten „HowTo-Lizard“ zu bauen.

Mein Plan war simpel: Ich spreche nicht mehr in eine Kamera, und ich bewege auch keine Maus mehr. Stattdessen schreibe ich das Drehbuch als Code. In einer simplen YAML-Datei beschreibe ich den gesamten Flow. Ganz nüchtern: Klick hier, warte auf das Event, öffne dieses Dropdown und erzähl parallel dazu diesen Satz.

Playwright und ElevenLabs: Wenn der Browser zum Geisterfahrer wird

Die wirkliche Magie passiert dann in meiner Pipeline. Mein Tool schnappt sich das geschriebene YAML-Szenario und wirft Playwright an. Für alle Nicht-Entwickler: Playwright ist ein Werkzeug, das einen Webbrowser fernsteuert. Wie von Geisterhand klickt es sich exakt nach Plan durch meine App. Kein Zittern mit der Maus, kein nervöses Suchen nach dem richtigen Tab, immer die exakt gleiche, flüssige Geschwindigkeit.

Während Playwright unermüdlich klickt, schicke ich die Texte für die Tonspur per API an ElevenLabs. Da kommt ein sauberes, professionelles KI-Voiceover zurück, das auf die Millisekunde genau zu den Aktionen auf dem Bildschirm passt. Keine Versprecher, kein Räuspern.

Am Ende jage ich das Ganze durch ffmpeg – quasi das Schweizer Taschenmesser für Videobearbeitung im Terminal. Ich lege einen geschmeidig animierten Mauszeiger über das Video, bastle schicke Titelkarten im „Frosted Glass“-Look dazu und packe ein kleines HUD mit Status-Infos in die Ecke. Zack – aus einer langweiligen Textdatei ist ein perfekt produziertes MP4-Video geworden.

Software Dokumentation automatisieren: Der Moment, in dem es Klick macht

Das sah schon mega cool aus. Ich hatte standardisierte Videos auf Knopfdruck. Aber nach dem fünften Video dachte ich mir: Ganz ehrlich, YAML-Szenarien per Hand zu tippen ist immer noch lästig. Es ist zwar weniger peinlich als mich selbst aufzunehmen, aber es ist am Ende immer noch mühsame Handarbeit.

Ich brauchte also noch die Kirsche auf der Sahne. Warum soll ich der KI sagen, was sie klicken soll, wenn sie doch ohnehin weiß, wie die Software funktioniert?

Also habe ich der KI einen eigenen Claude Code Skill verpasst. Dieser Skill kennt meinen Source Code in- und auswendig und hat direkten Zugriff auf die interne Doku. Wenn ich jetzt ein neues Feature release, liest die KI den Code, versteht den Ablauf und baut die YAML-Szenarien direkt selbst. Der Recorder übernimmt den Rest. Das System ist in sich geschlossen: KI liest Code → KI schreibt Drehbuch → Playwright filmt → ElevenLabs spricht → ffmpeg rendert.

Hier sind die wichtigsten Punkte, die ich beim Software Dokumentation automatisieren gelernt habe:

Für mich ist das echte Digitalisierung. Ich habe nicht versucht, mein Mikrofon zu verbessern oder mir einen Teleprompter hinzustellen. Ich habe den Prozess komplett auf Null gesetzt und so umgebaut, dass der Mensch sich nicht mehr damit rumärgern muss. Das ist exakt das gleiche Mindset, mit dem ich auch die digitale Betriebsmittelverwaltung angehe: Mach, dass es geht – und zwar automatisch.

Wie dokumentiert ihr eure Prozesse und Features? Sitzt ihr noch mit dem Headset vorm Bildschirm und schneidet euch in Premiere die Nächte um die Ohren? Schreibt mir mal, ich zeige euch gerne, wie mein HowTo-Lizard in Action aussieht.

hier mal meine Readme dazu:

Lizard Recorder

Automatische Demo-Videos und How-To-Tutorials für die Lizard App
Deklarative YAML-Szenarien • Playwright • ElevenLabs Voiceover • ffmpeg

Was ist das?

Der Lizard Recorder nimmt automatisierte Screen-Recordings der Lizard Filament-App auf. Du beschreibst den Flow als YAML, der Recorder spielt ihn mit animiertem Cursor ab und produziert ein Video.

Zwei Modi:

Demo-Flow How-To Tutorial
Zweck Stiller Screen-Durchlauf Erklärvideo mit Sprachkommentar
Output .webm .mp4 (H.264 + AAC)
Login Sichtbar Hinter Frosted-Glass-Titelkarte
Audio Keins ElevenLabs TTS + Hintergrundmusik
Aktivierung Kein title-Feld title-Feld gesetzt

Schnellstart

# Setup
npm install && npm run install-browsers
cp .env.example .env   # Credentials eintragen

# Ein Video aufnehmen
npm run record -- howto-create-partner

# Alle Tutorials auf einmal
npm run record -- all-howtos

# Debug: sichtbarer Browser
HEADED=1 npm run record -- howto-create-partner

Konfiguration

.env

LIZARD_BASE_URL=https://app.go-lizard.com
LIZARD_EMAIL=...
LIZARD_PASSWORD=...

# Nur für How-To Videos:
ELEVENLABS_API_KEY=...
ELEVENLABS_VOICE_ID=...

lizard.config.yaml

Pfade zum Filament-Projekt und zur Feature-Doku (für die Claude-Skills):

app:
  repo: /pfad/zum/lizardpro
  filament_path: app/Filament/Owner
docu:
  path: /pfad/zur/doku

Szenario-Typen

Demo-Flow

Einfaches Screen-Recording ohne Audio.

name: dashboard-flow
description: Login, Filter setzen, Items öffnen

steps:
  - login
  - wait: 1000
  - select.open: Partner
  - select.pick: Betriebswert GmbH
  - wait: 4000
  - stat.click: Betriebsmittel
  - wait.url: /items
  - wait: 2000

Ausgabe: videos/dashboard-flow.webm

How-To Tutorial

Video mit Titelkarte, Voiceover und Musik. Aktiviert durch das title-Feld.

name: howto-create-partner
title: "Wie erstelle ich einen Partner?"
music: Tech-Noir.mp3
fadeOut: 1.5

steps:
  - login
  - wait.dashboard

  - narrate: |
      In Lizard ist ein Partner jede externe Partei,
      mit der du Geschäftsbeziehungen pflegst.

  - click.text: Partner
    narrate: Wir öffnen die Partnerliste.
  - wait.url: /partners

  - fill:
      Firma: Demo Partner GmbH
    narrate: |
      Der Firmenname erscheint später auf den Prüfberichten.

  - click.button: Erstellen
    narrate: Mit einem Klick ist der Partner angelegt.
  - wait.livewire

Ausgabe: videos/howto-create-partner.mp4

Master-Szenario (Batch)

Führt mehrere Szenarien sequentiell aus, jedes mit eigener Browser-Session.

name: all-howtos
scenarios:
  - howto-create-partner
  - howto-zusammenarbeit
  - howto-dashboard
npm run record -- all-howtos

═══ [1/3] howto-create-partner ═══
Done in 108.5s → videos/howto-create-partner.mp4

═══ Summary ═══
  ✓ howto-create-partner (108.5s)
  ✓ howto-zusammenarbeit (95.2s)
  ✓ howto-dashboard (42.1s)
3 succeeded, 0 failed, total 245.8s

Titelkarte

Frosted-Glass-Overlay über der Login-Seite mit:

  • Lizard-Logo oben links
  • Titel in Oxanium SemiBold, Lizard-Grün #7cc400
  • Schwarze Box mit abgerundeten Ecken
  • Fadet aus beim ersten sichtbaren Step
  • Login dahinter unsichtbar (schnelle Eingabe)
┌──────────────────────────────┐
│ 🦎                           │
│                              │
│   ┌──────────────────────┐   │
│   │ Wie erstelle ich     │   │
│   │ einen Partner?       │   │
│   └──────────────────────┘   │
│                              │
│     ░░░ login blur ░░░       │
└──────────────────────────────┘

Action-Katalog

Navigation

Action Argument Beschreibung
login -- Login mit .env-Credentials
goto URL Navigiert (relativ oder absolut)
wait ms Harte Pause
wait.dashboard -- Wartet auf Topbar + Livewire idle
wait.livewire -- Wartet bis Livewire-Loading weg
wait.url Substring Wartet bis URL matcht
wait.selector CSS Wartet bis Element sichtbar

Filament-Komponenten

Action Argument Beschreibung
select.open Label Öffnet Dropdown per Feldlabel
select.pick Text Wählt Option im offenen Dropdown
select.clear Label Leert die Auswahl
treeselect.open -- Öffnet TreeSelect
treeselect.select Text Wählt TreeSelect-Item
treeselect.clear -- Leert TreeSelect
stat.click Label Klickt StatsOverview-Kachel

Interaktion

Action Argument Beschreibung
click CSS-Selektor Klickt Element mit Cursor-Animation
click.text Text Klickt erstes sichtbares Element mit Text
click.button Label Klickt <button> oder <a> (Filament-Actions)
fill { Label: Wert } Tippt in Formularfeld per Label

Video-Overlays

Action Argument Beschreibung
narrate Text Sprech-Pause ohne UI-Aktion
hud Text / { text, ms } Keystroke-HUD-Einblendung
screenshot Pfad PNG speichern

Jeder Step kann optional narrate: tragen -- die Narration feuert vor der Aktion und der Runner wartet auf das Clip-Ende.


Howto-Felder

Feld Typ Beschreibung
title string Titelkarten-Text. Aktiviert die Howto-Pipeline.
narrate string (pro Step) Per-Step-Narration. Synchron zum Flow.
narration string (global) Einzelner Clip ab t=0. Mutex mit narrate.
music string MP3 aus assets/. Default: Tech-Noir.mp3
fadeOut true | number Fade-to-black. true = 1.5s

Architektur

                    ┌─────────────┐
                    │  YAML File  │
                    └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              │            │            │
         Demo-Flow    How-To       Master
         (no title)   (title)    (scenarios)
              │            │            │
              │     ┌──────┴──────┐     │
              │     │  ElevenLabs │     │
              │     │  TTS v3    │     │
              │     └──────┬──────┘    loops
              │            │            │
        ┌─────┴────────────┴─────┐      │
        │   Playwright Browser   │◄─────┘
        │  + Cursor Animation    │
        │  + Title Card Overlay  │
        │  + HUD Overlay         │
        └──────────┬─────────────┘
                   │
              raw.webm
                   │
         ┌─────────┴─────────┐
         │  ffmpeg pipeline   │
         │  - tpad (freeze)   │
         │  - adelay + amix   │
         │  - fade to black   │
         │  - H.264 + AAC     │
         └─────────┬──────────┘
                   │
            ┌──────┴──────┐
            │  .webm/.mp4 │
            └─────────────┘

Projektstruktur

lizard-recorder/
├── assets/                   Musik, Fonts, Logo
│   ├── Tech-Noir.mp3
│   ├── Oxanium-*.ttf
│   └── lizard.svg
├── scenarios/                YAML-Szenarien
│   ├── all-howtos.yaml       Master (Batch)
│   ├── howto-*.yaml          How-To Tutorials
│   └── *-flow.yaml           Demo-Flows
├── src/
│   ├── cli.ts                Entry-Point
│   ├── recorder.ts           Recording + Howto-Pipeline
│   ├── yaml-scenario.ts      YAML-Parser + Step-Runner
│   ├── actions.ts            Action-Registry
│   ├── audio/
│   │   ├── elevenlabs.ts     TTS-Synthese
│   │   └── mix.ts            ffmpeg Audio/Video-Mux
│   ├── overlays/
│   │   ├── titleCard.ts      Frosted-Glass-Titelkarte
│   │   ├── cursor.ts         Animierter Mauszeiger
│   │   └── hud.ts            HUD-Overlay
│   └── lizard/               Filament-spezifische Helfer
├── videos/                   Output
├── .claude/skills/           Claude Code Skills
│   └── lizard-recorder/
└── lizard.config.yaml        Pfade zu App-Repo + Doku

Debugging

Problem Lösung
Step schlägt fehl Step-Index im Log, Label prüfen, wait.livewire davor
Video nach Fehler Liegt unter videos/.tmp/
Browser sehen HEADED=1 npm run record -- <name>
Narration-Timing Text kürzen oder wait: einfügen
Audio zu leise normalize=0 in src/audio/mix.ts
Button nicht gefunden click.button matcht <button> und <a>

TypeScript-Fallback

Für komplexe Flows: scenarios/<name>.ts mit export default async (page: Page) => void.


Built with ❤️ by Wolf+Strauss Solutions

→ Vollständigen Artikel lesen