Zum Inhalt
lern-es.jetztby twisted pair
Rechner
Weg
Agent

FigurBeispiel (l3hr3r) ✎ eigene beschreiben

Der erste Clip

Am Ende spricht deine Figur deinen Text, an einem Ort und in Kleidung, die du in einem Satz beschreibst. Oben in der Leiste wählst du, wo gerechnet wird, ob du mit einem Agenten arbeitest oder von Hand, und mit welchem Agenten. Der ganze Kurs stellt sich darauf ein.

Du brauchst
Linux (oder Windows mit WSL2), NVIDIA-Grafikkarte mit 24 GB und Treiber 580+, rund 150 GB Platz
Du brauchst
ein Konto bei einem GPU-Anbieter und ein Terminal mit SSH, egal welches Betriebssystem
Rechenzeit
einmalig rund 4 Stunden, vor allem für das LoRA; danach rund 20 Minuten je Clip
Kosten
grob 5–10 $ für den ganzen Kurs, wenn du ihn an einem Wochenende machst und das Volume danach löschst

So arbeitet dieser Kurs

  • Mit Agent oder von Hand
  • Jeder Befehl sichtbar
  • Ein Prüfpunkt nach jedem Schritt
  • Eigener Rechner oder Cloud
Abb. 1Die Szene in einem Satz: am Nordseestrand im gelben Friesennerz. Er spricht den ersten Satz dieser Seite. KI-generiert, Bild und Stimme.

Wen baust du?

Bleibt in deinem Browser. Alle Prompts und Befehle passen sich sofort an. Beschreibungen auf Englisch, weil die Bild- und Stimmmodelle damit erprobt sind.

Einmal vorher

Eine Grafikkarte mieten. Zum Beispiel bei RunPod oder Vast.ai, abgerechnet nach Stunden. Beim Anlegen des Pods:

  1. GrafikkarteRTX A6000 (48 GB) oder RTX 4090 (24 GB), je rund 0,35–0,70 $ pro Stunde
  2. CUDA13.0 als erlaubte Version wählen, sonst fehlt der Treiber 580 für PyTorch
  3. Vorlageein PyTorch-Image mit Ubuntu; JupyterLab darin zeigt später Bilder und Videos
  4. Volume200 GB, eingebunden unter /workspace – nur dort bleibt etwas erhalten
  5. KostenPod stoppen, sobald nichts rechnet. Das Volume kostet weiter (rund 0,10–0,20 $ je GB und Monat): nach dem Kurs löschen.

Verbinden

# Auf deinem Rechner: Schlüssel erzeugen (falls noch keiner da ist) und den öffentlichen Teil im Konto hinterlegen
ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub

# Nach dem Start des Pods: den SSH-Befehl aus „Connect“ kopieren, er sieht so aus
ssh root@<adresse> -p <port> -i ~/.ssh/id_ed25519

# Im Pod: alles Dauerhafte liegt im Volume
cd /workspace
nvidia-smi

Danach läuft alles im Pod, auch der Kursordner: /workspace/avatar-kurs. Der Rest des Kurses ist gleich.

Claude Code installieren und prüfen, dann den Kursordner anlegen und den Agenten darin starten.

Im Terminal, einmal

curl -fsSL https://claude.ai/install.sh | bash
claude doctor

mkdir -p ~/avatar-kurs && cd ~/avatar-kurs && claude

Im Pod: Grundwerkzeuge und Claude Code. Die Anmeldung läuft über einen Link im Browser deines Rechners.

Im Pod, einmal

apt-get update && apt-get install -y git ffmpeg python3-venv
pip install -U huggingface_hub   # liefert den Befehl hf
curl -fsSL https://claude.ai/install.sh | bash
mkdir -p /workspace/avatar-kurs && cd /workspace/avatar-kurs
claude   # zeigt beim ersten Start einen Link zur Anmeldung – im Browser auf deinem Rechner öffnen

Ollama mit einem lokalen Qwen und Hermes als Agent. Der Agent braucht einen großen Kontext; und weil sich Sprachmodell und Bild- und Videomodelle die Grafikkarte teilen, wird das Sprachmodell nach jeder Antwort entladen. Die hermes config set-Zeilen ändern nur diese Einträge, eine vorhandene Konfiguration bleibt sonst erhalten.

Im Terminal, einmal

# Ollama und ein Qwen mit Werkzeugnutzung (rund 18 GB)
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3.8:27b

# Für den Kurs: großer Kontext für den Agenten; Modell nach jeder Antwort entladen,
# damit Bildmodelle, Training und Video den Grafikspeicher bekommen
sudo mkdir -p /etc/systemd/system/ollama.service.d
printf '[Service]\nEnvironment="OLLAMA_CONTEXT_LENGTH=65536"\nEnvironment="OLLAMA_KEEP_ALIVE=0"\n' | sudo tee /etc/systemd/system/ollama.service.d/kurs.conf
sudo systemctl daemon-reload && sudo systemctl restart ollama

# Hermes als Agent, angebunden an Ollama, mit den Skills aus dem Kursordner
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.bashrc
hermes config set model.provider custom
hermes config set model.base_url http://localhost:11434/v1
hermes config set model.default qwen3.8:27b
hermes config set model.context_length 65536
hermes config set skills.external_dirs ~/avatar-kurs/.claude/skills

mkdir -p ~/avatar-kurs && cd ~/avatar-kurs && hermes

Im Pod: Ollama mit Qwen und Hermes. Ohne systemd startest du Ollama selbst; nach einem Neustart des Pods die Zeilen mit export und nohup wiederholen. Mit 48 GB passt Qwen neben die Bildmodelle.

Im Pod, einmal

apt-get update && apt-get install -y git ffmpeg python3-venv
pip install -U huggingface_hub   # liefert den Befehl hf
curl -fsSL https://ollama.com/install.sh | sh
# Kein systemd im Pod: Ollama selbst starten – Modelle auf dem Volume, großer Kontext, nach jeder Antwort entladen
export OLLAMA_MODELS=/workspace/ollama OLLAMA_CONTEXT_LENGTH=65536 OLLAMA_KEEP_ALIVE=0
nohup ollama serve > /workspace/ollama.log 2>&1 &
ollama pull qwen3.8:27b

# Hermes als Agent, angebunden an Ollama, mit den Skills aus dem Kursordner
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.bashrc
hermes config set model.provider custom
hermes config set model.base_url http://localhost:11434/v1
hermes config set model.default qwen3.8:27b
hermes config set model.context_length 65536
hermes config set skills.external_dirs /workspace/avatar-kurs/.claude/skills

mkdir -p /workspace/avatar-kurs && cd /workspace/avatar-kurs && hermes

Bekannt: Bei Qwen 3.8 über Ollama hängen Werkzeugaufrufe gelegentlich. Dann die Anfrage wiederholen. Hermes liest AGENTS.md aus dem Kursordner und die Skills über skills.external_dirs. Statt Hermes geht auch OpenCode; es findet die Skills im Kursordner von selbst.

Grundwerkzeuge installieren und die Grafikkarte prüfen.

Im Terminal, einmal

# Ubuntu/Debian; unter Windows dasselbe in WSL2
sudo apt install git ffmpeg python3 python3-venv pipx
pipx install huggingface_hub   # liefert den Befehl hf
nvidia-smi                     # Treiber 580 oder neuer? Grafikkarte mit 24 GB?

Im Pod: Grundwerkzeuge. Python und die Grafikkarte bringt das PyTorch-Image mit.

Im Pod, einmal

apt-get update && apt-get install -y git ffmpeg python3-venv
pip install -U huggingface_hub   # liefert den Befehl hf

Sieben Schritte, ein Clip.

  1. 0

    Einrichten

    Du bekommstEin Kursordner, in dem jeder Schritt seinen festen Platz hat, und deine Figur in figur.json.

    Lektion A0 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A0: Richte den Kurs ein. Klone https://github.com/twisted-pair/ki-schauspieler-kit in diesen leeren Ordner (git clone https://github.com/twisted-pair/ki-schauspieler-kit .), lies AGENTS.md und halte dich ab jetzt daran. Trage in figur.json ein: Stichwort l3hr3r, Klasse man, Beschreibung „a man in his early thirties, short dark ash-blond hair with the first grey strands, light stubble, grey-blue eyes“, Stimme „A deep, low-pitched male voice of a man in his early thirties, slightly husky and raspy, warm, calm and charismatic. Clear standard German pronunciation with a very slight northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher explaining something to a class.“. Installiere noch nichts. Führe danach python3 skripte/pruefen.py A0 aus und zeig mir, was fehlt.

    Im Terminal, im Kursordner

    mkdir -p ~/avatar-kurs && cd ~/avatar-kurs
    git clone https://github.com/twisted-pair/ki-schauspieler-kit .
    cat > figur.json <<'EOF'
    {
      "stichwort": "l3hr3r",
      "klasse": "man",
      "beschreibung": "a man in his early thirties, short dark ash-blond hair with the first grey strands, light stubble, grey-blue eyes",
      "stimme": "A deep, low-pitched male voice of a man in his early thirties, slightly husky and raspy, warm, calm and charismatic. Clear standard German pronunciation with a very slight northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher explaining something to a class."
    }
    EOF
    python3 skripte/pruefen.py A0
  2. 1

    Das Gesicht finden

    Du bekommstEin Porträt deiner Figur, das du für alles Weitere verwendest.

    Lektion A1 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A1: Richte mit skripte/einrichten/comfyui.py ComfyUI ein und erzeuge mit skripte/gesichter.py zwölf Kandidaten aus der Beschreibung in figur.json („a man in his early thirties, short dark ash-blond hair with the first grey strands, light stubble, grey-blue eyes“). Zeig mir den Kontaktbogen und warte auf meine Wahl; übernimm sie dann als figur/gesicht/referenz.png, trage sie in entscheidungen.md ein und führe pruefen.py A1 aus.

    Im Terminal, im Kursordner

    python3 skripte/einrichten/comfyui.py -v
    python3 skripte/gesichter.py -v
    xdg-open figur/gesicht/kontaktbogen.jpg
    
    # Deine Wahl übernehmen (hier Seed 1007) und festhalten
    cp figur/gesicht/kandidaten/seed_1007.png figur/gesicht/referenz.png
    echo "| A1 | $(date +%F) | Gesicht: Seed 1007 | … |" >> entscheidungen.md
    python3 skripte/pruefen.py A1
  3. 2

    Ein Datensatz aus einem Porträt

    Du bekommst23 Bilder derselben Person: Blickwinkel, Ausdrücke, Kleidung, Orte.

    Lektion A2 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A2: Erzeuge mit python3 skripte/datensatz.py -v den Datensatz aus figur/gesicht/referenz.png. Sieh dir danach jedes Bild und den Kontaktbogen figur/datensatz_arbeit/kontaktbogen.jpg an, nenne mir Bilder, auf denen es nicht eindeutig dieselbe Person ist oder die Bildbeschreibung nicht passt, und schlag Ersatz mit anderem Seed vor. Ich entscheide, was bleibt.

    Im Terminal, im Kursordner

    python3 skripte/datensatz.py -v
    xdg-open figur/datensatz_arbeit/kontaktbogen.jpg
    python3 skripte/pruefen.py A2
  4. 3

    Ein LoRA, das nur ihn kennt

    Du bekommstEine Datei von 170 MB, mit der jedes Bild auf ein Stichwort hin deine Figur zeigt.

    Lektion A3 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A3: Trainiere mit ai-toolkit und figur/lora/training.yaml ein LoRA für Z-Image Turbo aus figur/datensatz/, Stichwort l3hr3r, Klasse man, mit Schutz gegen das Durchsickern. Zeig mir alle 250 Schritte einen Kontaktabzug und lass mich den Stand wählen.

    Im Terminal, im Kursordner

    # ai-toolkit nach werkzeuge/ (Linux, Python 3.10–3.12)
    git clone https://github.com/ostris/ai-toolkit.git werkzeuge/ai-toolkit
    cd werkzeuge/ai-toolkit
    python3 -m venv venv
    venv/bin/pip install --no-cache-dir torch==2.13.0 torchvision==0.28.0 torchaudio==2.11.0 --index-url https://download.pytorch.org/whl/cu130
    venv/bin/pip install -r requirements.txt
    cd ../..
    
    # Modelle nach modelle/
    hf download Comfy-Org/z_image_turbo split_files/diffusion_models/z_image_turbo_bf16.safetensors --local-dir modelle/Comfy-Org/z_image_turbo
    hf download Tongyi-MAI/Z-Image-Turbo --exclude "transformer/diffusion_pytorch_model-*" --exclude "assets/*" --local-dir modelle/Tongyi-MAI/Z-Image-Turbo
    hf download ostris/zimage_turbo_training_adapter zimage_turbo_training_adapter_v2.safetensors --local-dir modelle/ostris/zimage_turbo_training_adapter
    
    # Stichwort und Klasse in die Konfiguration, dann trainieren (rund 3,5 Stunden)
    sed -i 's/l3hr3r/l3hr3r/g; s/a man/a man/g; s/"man"/"man"/' figur/lora/training.yaml
    cd werkzeuge/ai-toolkit && venv/bin/python run.py ../../figur/lora/training.yaml
  5. 4

    Ort und Kleidung

    Du bekommstDeine Figur an jedem Ort und in jeder Kleidung, die du in einem Satz beschreibst.

    Lektion A4 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A4: Erzeuge mit skripte/szene.py vier Kandidaten von l3hr3r im Clip-Format (--seeds 37,41,64,77 --format clip): sitting behind the teacher's desk at the front of a bright modern classroom, a large green chalkboard on the wall directly behind him, hands resting on the desk, wearing a navy V-neck sweater over a light blue collared shirt. Prüf die Bilder auf Schrift und fremde Gesichter und zeig mir den Kontaktbogen; übernimm danach meine Wahl als szenen/pult.png.

    Im Terminal, im Kursordner

    python3 skripte/szene.py -v --name pult --seeds 37,41,64,77 --format clip --szene "sitting behind the teacher's desk at the front of a bright modern classroom, a large green chalkboard on the wall directly behind him, hands resting on the desk, wearing a navy V-neck sweater over a light blue collared shirt"
    xdg-open szenen/pult/kontaktbogen.jpg
    
    # Deine Wahl übernehmen (hier Seed 64)
    cp szenen/pult/seed_64.png szenen/pult.png
    python3 skripte/pruefen.py A4
  6. 5

    Eine Stimme entwerfen

    Du bekommstEine eigene Stimme, die jeden deutschen Text spricht.

    Lektion A5 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A5: Entwirf mit Qwen3-TTS VoiceDesign acht Stimmen nach figur/stimme/entwuerfe/: A deep, low-pitched male voice of a man in his early thirties, slightly husky and raspy, warm, calm and charismatic. Clear standard German pronunciation with a very slight northern German tone, no dialect. Relaxed, natural pace, like an engaging teacher explaining something to a class.. Miss bei jeder die Tonhöhe und leg mir alle acht zum Anhören hin.

    Im Terminal, im Kursordner

    python3 skripte/einrichten/tts.py -v
    python3 skripte/stimme_entwerfen.py -v
    cat figur/stimme/entwuerfe/tonhoehe.txt
    mpv figur/stimme/entwuerfe/stimme_*.wav
    
    # Deine Wahl übernehmen (hier Stimme 7) und festhalten
    cp figur/stimme/entwuerfe/stimme_7.wav figur/stimme/referenz.wav
    cp figur/stimme/entwuerfe/text.txt figur/stimme/referenz.txt
    echo "| A5 | $(date +%F) | Stimme 7 | … |" >> entscheidungen.md
    
    # Probe: dein Text in der neuen Stimme, mit 1 s Stille vorn und hinten
    python3 skripte/sprechen.py "Deine Figur. Deine Stimme. Dein Text. In sieben Schritten zum ersten Clip, auf deinem Rechner. Mit einem KI-Agenten oder von Hand: Du triffst die Entscheidungen." --aus clips/probe/stimme.wav
    python3 skripte/pruefen.py A5
  7. 6

    Bild und Ton werden ein Clip

    Du bekommstEin Standbild, das deinen Text lippensynchron spricht.

    Lektion A6 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A6: Richte mit skripte/einrichten/sprechclip.py InfiniteTalk ein und mach mit skripte/sprechclip.py aus szenen/pult.png und clips/probe/stimme.wav einen Sprech-Clip (--name probe). Zeig mir danach fünf Einzelbilder daraus und führe python3 skripte/pruefen.py A6 aus.

    Im Terminal, im Kursordner

    # Einmalig: die Modelle für InfiniteTalk (rund 28 GB)
    python3 skripte/einrichten/sprechclip.py -v
    
    # Startbild aus A4 und Tonspur aus A5 werden ein Clip (gut 1 min Rechenzeit je Sekunde)
    python3 skripte/sprechclip.py szenen/pult.png clips/probe/stimme.wav --name probe -v
    python3 skripte/pruefen.py A6
  8. 7

    Alles in einem Befehl

    Du bekommstEin fertiger Clip aus einem Satz Text und einer Szene, in rund 20 Minuten.

    Lektion A7 lesen ▸▸

    In Claude Code eingebenIn Hermes mit lokalem Qwen eingeben

    Lektion A7: Mach mit skripte/clip.py einen Clip von l3hr3r: sitting behind the teacher's desk at the front of a bright modern classroom, a large green chalkboard on the wall directly behind him, hands resting on the desk, wearing a navy V-neck sweater over a light blue collared shirt. Text: „Deine Figur. Deine Stimme. Dein Text. In sieben Schritten zum ersten Clip, auf deinem Rechner. Mit einem KI-Agenten oder von Hand: Du triffst die Entscheidungen.“. Zeig mir zuerst vier Startbilder (--kandidaten 4) und warte auf meine Wahl; danach Stimme und Video mit dem gewählten Seed, dann pruefen.py A7.

    Im Terminal, im Kursordner

    # Vier Startbilder und ein Kontaktbogen
    python3 skripte/clip.py --name erster --szene "sitting behind the teacher's desk at the front of a bright modern classroom, a large green chalkboard on the wall directly behind him, hands resting on the desk, wearing a navy V-neck sweater over a light blue collared shirt" --text "Deine Figur. Deine Stimme. Dein Text. In sieben Schritten zum ersten Clip, auf deinem Rechner. Mit einem KI-Agenten oder von Hand: Du triffst die Entscheidungen." --kandidaten 4
    
    # Kontaktbogen ansehen, Seed wählen (hier 64), dann der ganze Clip
    python3 skripte/clip.py --name erster --szene "sitting behind the teacher's desk at the front of a bright modern classroom, a large green chalkboard on the wall directly behind him, hands resting on the desk, wearing a navy V-neck sweater over a light blue collared shirt" --text "Deine Figur. Deine Stimme. Dein Text. In sieben Schritten zum ersten Clip, auf deinem Rechner. Mit einem KI-Agenten oder von Hand: Du triffst die Entscheidungen." --seed 64 -v
    python3 skripte/pruefen.py A7

Ohne Skill fragt der Agent öfter nach und probiert mehr aus. Die Skills zu jedem Schritt sind in Vorbereitung. Nach jedem Schritt prüft python3 skripte/pruefen.py A1 (usw.), ob alles am richtigen Ort liegt.

Nach jedem Schritt prüft python3 skripte/pruefen.py A1 (usw.), ob alles am richtigen Ort liegt.