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
Wen baust du?
Einmal vorher
Eine Grafikkarte mieten. Zum Beispiel bei RunPod oder Vast.ai, abgerechnet nach Stunden. Beim Anlegen des Pods:
- GrafikkarteRTX A6000 (48 GB) oder RTX 4090 (24 GB), je rund 0,35–0,70 $ pro Stunde
- CUDA13.0 als erlaubte Version wählen, sonst fehlt der Treiber 580 für PyTorch
- Vorlageein PyTorch-Image mit Ubuntu; JupyterLab darin zeigt später Bilder und Videos
- Volume200 GB, eingebunden unter
/workspace– nur dort bleibt etwas erhalten - 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-smiDanach 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 && claudeIm 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 öffnenOllama 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 && hermesIm 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 && hermesBekannt: 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 hfSieben Schritte, ein Clip.
0
Einrichten
Du bekommstEin Kursordner, in dem jeder Schritt seinen festen Platz hat, und deine Figur in figur.json.
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 A01
Das Gesicht finden
Du bekommstEin Porträt deiner Figur, das du für alles Weitere verwendest.
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 A12
Ein Datensatz aus einem Porträt
Du bekommst23 Bilder derselben Person: Blickwinkel, Ausdrücke, Kleidung, Orte.
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 A23
Ein LoRA, das nur ihn kennt
Du bekommstEine Datei von 170 MB, mit der jedes Bild auf ein Stichwort hin deine Figur zeigt.
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.yaml4
Ort und Kleidung
Du bekommstDeine Figur an jedem Ort und in jeder Kleidung, die du in einem Satz beschreibst.
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 A45
Eine Stimme entwerfen
Du bekommstEine eigene Stimme, die jeden deutschen Text spricht.
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 A56
Bild und Ton werden ein Clip
Du bekommstEin Standbild, das deinen Text lippensynchron spricht.
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 A67
Alles in einem Befehl
Du bekommstEin fertiger Clip aus einem Satz Text und einer Szene, in rund 20 Minuten.
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.