Realistischer 3D-Kurzfilm (Blender + Python)
Jeder Frame ist ein echter Blender-Render einer Szene, die Claude in Python erstellt. Kein KI-Bild- oder Videomodell.
Endausgabe: 1080x1920, 30 fps, H.264, begrenzt auf 30 Mbps. Pfade: <skill> = dieser Ordner. Episoden leben in
<project>/blender-shorts/<slug>/, heruntergeladene Assets in <project>/blender-shorts/assets/, Kanaleinstellungen in
<project>/blender-shorts/brand.json. Skripte ausführen mit python <skill>/scripts/<name>.py.
Zuerst lesen: references/style.md (die Regeln), references/traps.md (bevor irgendeine Lösung erfunden wird).
Einrichtung (einmal pro PC)
- Blender 5.x (wird automatisch unter „Programme“ gefunden; sonst
BLENDER=<pfad-zu-blender.exe>setzen). python -m pip install numpy opencv-python-headless pillow; ffmpeg im PATH.- Pipeline testen: Kopiere
examples/test-cell/nachblender-shorts/test-cell/, dann build, still, frames, finish. Auf einem RTX 3080 Laptop rendert EEVEE schnell seine 90 Frames mit 1080x1920 in etwa 2 Minuten.
Schritt 0: Auftaktfragen (immer vor der Arbeit)
Stelle die Fragen mit dem AskUserQuestion-Tool in zwei Runden mit bis zu vier Fragen, dann eine dritte Runde, die von der
Antwort zur Stimme abhängt. Wenn blender-shorts/brand.json existiert, frage zuerst eine Frage: „Dieselben Einstellungen wie beim letzten Mal?“
(zeige sie in einer Zeile) mit „Ja“ / „Etwas ändern“. Bei „Ja“ springe zu den themenspezifischen Teilen von Runde 3.
Empfohlene Option zuerst. Speichere jede Antwort in brand.json (kanalweit) und im Episoden-episode.json.
Runde 1: Worum es geht und wie es spricht
- Thema: „Schlage mir 3 vor“ / „Ich habe eines“ (sie geben es unter „Sonstiges“ ein). Vorschläge: Fragen zum Körper oder zur Funktionsweise, die bildhaft sind, auf YouTube auf Originalität des Winkels geprüft.
- Stimme:
- ElevenLabs-Stimme (empfohlen): eine Standardstimme, aus dem Skript mit exakten Wortzeitangaben generiert.
- Meine Stimme klonen (ElevenLabs): Sie laden 1-3 Minuten saubere Sprache einmal hoch; jede Episode spricht dann in ihrer Stimme. Nur ihre eigene Stimme oder eine, für die sie eine schriftliche Einwilligung haben.
- Ich nehme es selbst auf: Sie nehmen das Skript auf; Claude bereinigt es, findet die Wortzeitangaben und baut das Bild dazu.
- Keine Stimme, nur Untertitel: Das Skript wird mit einer gleichmäßigen Geschwindigkeit von 2,8 Wörtern/s getaktet, Untertitel werden
eingebrannt und eine
captions.srtermöglicht es ihnen, später in ihrem Editor eine Stimme mit genau diesem Timing aufzunehmen oder hinzuzufügen.
- Länge: 30 s (für den ersten empfohlen) / 45 s / 60 s. Bei 2,8 Wörtern/s sind das ~80 / 120 / 165 Wörter.
- Referenzvideos: „Nein, nutze die integrierten Stilregeln“ (empfohlen) / „Ja, ich gebe Dateien oder Links“ (werden mit
measure.pyvermessen, nur für private Studien).
Runde 2: Das Aussehen
- Look: Studio-Hintergrund (empfohlen: eine Signaturfarbe hinter allem, der Look des Genres) / Echte Foto-Hintergrundplatten (Stadion, Straße, Himmel hinter dem 3D) / Mix (Hintergrund mit echten Orten für „Wo“-Schläge).
- Hintergrundfarbe (überspringen, wenn kein Hintergrund verwendet wird): Pfirsich
#F2D7C9(bisher unser) / Mint#CFE8DF/ Tiefes Navy#1F2A44/ Benutzerdefiniert (hex). Niemals die Farbe des Referenzkanals. - Hauptfigur: „Gibt es eine Hauptfigur?“ (
references/characters.md)- Ich stelle eine rigged Figur zur Verfügung: ihre .blend / .fbx / .glb-Datei (Mixamo, Character Creator, ein Shop).
- Erstelle eine für mich (empfohlen, falls sie keine haben): in Blender mit MPFB erstellt, keine Konten, unser Logo auf dem Shirt.
- Lade eine kostenlose rigged Figur herunter: Claude schlägt 2-3 Kandidaten vor (Quelle, Lizenz, Aussehen); auf Seiten, die ein Konto benötigen (Mixamo, Renderpeople, Sketchfab) lädt der Benutzer sie herunter und gibt den Pfad an.
- Keine Figur: nur Objekte, Körperteile und Orte.
Sobald eine Hauptfigur existiert (
assets/host/host.blend), wird diese Frage zu „ erneut verwenden?“.
- Render-Engine:
- Auto (empfohlen): EEVEE schnell überall, Cycles schnell nur für Aufnahmen, die beim Richter bei Haut-Nahaufnahmen, Wolken, Glas oder Haaren durchfallen.
- Nur EEVEE schnell: die schnellste, ~1 s pro Frame.
- Nur Cycles schnell: etwa 2x langsamer, weicheres und natürlicheres Licht.
- Hohe Qualität: die
high-Voreinstellungen, etwa 2-3x langsamer als schnell.
Runde 3: hängt von der Antwort zur Stimme ab
- ElevenLabs oder Klon: der Schlüssel. Prüfe auf
ELEVENLABS_API_KEY=in einer.envim Projekt oder darüber (niemals ausgeben). Falls vorhanden, sage „Deinen ElevenLabs-Schlüssel gefunden“ und frage nicht. Falls nicht, frage: „Füge deinen Schlüssel hinzu: füge ihn hier ein und ich speichere ihn in.env, oder füge die ZeileELEVENLABS_API_KEY=...selbst in.envein (hält ihn aus dem Chat heraus)“. Speichere einen eingefügten Schlüssel nur in<project>/.env, gib ihn niemals aus, lege ihn in keine andere Datei, keinen Commit und kein Log. - ElevenLabs: Stimme: Ruhiger Erzähler (Standard-ID in
sound.py) / „Wähle aus meiner ElevenLabs-Bibliothek“ (liste mitGET /v1/voices, zeige nur Namen) / Stimm-ID (sie geben sie ein). Stimm-Modell: eleven_multilingual_v2 (empfohlen: stabil, beste Wortzeitangaben) / eleven_v3 (ausdrucksstärker, weniger vorhersagbar). - Klon: Frage nach den Beispieldateien (Pfade), dann
sound.py <ep> clone <dateien> --name „<ihr name> Stimme“; die Stimm-ID wird gespeichert und von jeder späteren Episode wiederverwendet. - Eigene Aufnahme: Sage ihnen, sie sollen warten, bis das Skript genehmigt ist, dann nehmen sie es in einem Durchgang auf, Telefon auf Armlänge, ruhiger Raum, und geben den Dateipfad an. (Die Aufnahme zum genehmigten Skript hält Bild und Stimme synchron.)
- Hauptfigur, je nach Antwort von Runde 2:
- Bereitstellen: Frage nach dem Dateipfad (und dem Texturordner, falls getrennt).
- Erstellen: Frage nach Altersbereich, Statur sowie Haar- und Kleidungsstil (einfache Wörter); dann frage nach der Installation von MPFB.
- Herunterladen: Zeige die 2-3 Kandidaten als Optionen (Name, Aussehen, Lizenz, benötigtes Konto) und lass sie wählen.
- Jede Stimmenoption: Untertitel eingebrannt? Ja / Nein (ohne Stimme gibt es immer Untertitel).
- Jede Option: Musik: Keine, nur Effekte und Raumton (für den ersten empfohlen) / Eigener Track (Dateipfad, sie bestätigen, dass sie die Rechte haben) / YouTube Audio Library Track (sie laden ihn herunter und geben den Pfad).
Frage nichts anderes; alles unten hat einen Standardwert. „Spezifische Modell“-Fragen: Es gibt kein KI-Bild- oder Videomodell in dieser Pipeline. Die Entscheidungen, die wie eines wirken, sind die Render-Engine (Runde 2), das ElevenLabs-Stimm-Modell (Runde 3) und das Claude-Modell, das das Skill ausführt: Opus mit hohem Aufwand funktioniert am besten.
Engine-Voreinstellungen (die gewählten Einstellungen des Benutzers, behalte sie bei)
- EEVEE schnell (Standard,
b3d.EEVEE_PRESETS['fast']): 16 Samples, Raytracing und GI mit halber Auflösung, 1 Schattenstrahl. ~0,9-1,2 s pro Frame bei 1080p auf der 3080, 99-99,9 % ähnlich zuhigh. - Cycles schnell (
b3d.CYCLES_PRESETS['fast']): 32 Samples, 1 s Zeitlimit, OptiX-Denoiser, 2-3 Bounces, Fast GI Approximation, Persistente Daten. ~1,7 s pro Frame. Falls der Denoiser-Schmierer bei einer Nahaufnahme sichtbar wird, gib dieser Aufnahme ein Limit von 2 s. --quality draft | fast | highzur Renderzeit, kein Neubau. Engine pro Szene:setup_render(engine=...), oderB3D_ENGINE=CYCLES python render.py <ep> buildzum Vergleichen ohne Bearbeitung. Gemischte Engines in einem Kurzfilm sind in Ordnung (rendere den Frame-Bereich jeder Aufnahme aus ihrer eigenen .blend-Datei), wenn Hintergrund und Abstimmung übereinstimmen.
Pipeline (nach jedem Schritt speichern; zeige dem Benutzer Standbilder, keine Textwände)
- Thema und Fakten. Arbeite jede Zahl aus und schreibe sie mit ihrer Quelle in
episode.jsonunterscience. Wackelige berühmte Zahlen erhalten den Zusatz „Wissenschaftler schätzen“. Dasselbe Thema wie ein großer Kanal ist in Ordnung, deren Worte sind es nicht. - Referenz vermessen (nur wenn Runde 1 mit Ja geantwortet hat):
measure.py <ordner> --out <ep>/reference.json. Ansonsten die Standardwerte in style.md. - Skript in
episode.json(examples/episode.template.json): zweite Person, ~2,8 Wörter/s, die gewählte Länge, die Schlagform in style.md. Zeige es und warte auf ein OK. Nach dem OK „mach es einfach“ bis zu den Standbildern. - Stimme und Timing, je nach Antwort von Runde 1:
- ElevenLabs / Klon:
sound.py <ep> voice->audio/voice.wav,words.json,captions.srt. - Eigene Aufnahme: Warte auf ihre Datei, dann
sound.py <ep> own <datei>(Wortzeiten: faster-whisper falls installiert, sonst ElevenLabs Speech-to-Text, falls ein Schlüssel vorhanden ist, sonst aus Stille geschätzt; bietepip install faster-whisperan, falls die Schätzung abweicht). - Keine Stimme:
sound.py <ep> captions->words.json+captions.srtmit„wps“(2,8). Dann schreibeshots.md: pro Schlag der Frame-Bereich (aus den Wortzeiten), die Kamerabewegung (Einfahrt / Halten+schleichen / Ausfahrt / Durchflug) und was sich während jedes Haltens bewegt. Maximal ein harter Schnitt pro ~7 Übergängen.
- ElevenLabs / Klon:
- Zuerst der 9-Sekunden-Test. Ein Schlag mit der gesamten Pipeline vor dem gesamten Kurzfilm:
scene.pymitb3d-Helfern. Rendern, fertigstellen,measure.pyundcompare.py reference.json ours.json, falls es eine Referenz gibt. Die Differenz ist die To-Do-Liste. Korrigiere die Kamera, bis Ruckeln und seitliches Abweichen übereinstimmen (eine Achse, erleichterte Keyframes). - Welt und Figur. Figur zuerst, gemäß ihrem Pfad in
references/characters.md, immer überb3d.import_character(pfad, höhe=1.75): Es skaliert sie auf echte Größe mit den Füßen auf dem Boden, entfernt fremde Kameras und Lichter, bindet gewichtete Teile an das Rig und gibt einen Bericht aus (Rig-Typ, Teile, die dem Rig nicht folgen, Gesichtsformen x/52, fehlende Texturen). Behebe jeden Punkt des Berichts, dann ein Dreh-Standbild, dann speichereassets/host/host.blend. Welt ausreferences/assets.md(Downloads auflisten, Quelle + Lizenz + Größe, einmal fragen). Regel: Wenn es eine echte gibt, lade sie herunter, modelliere sie nie. - Standbilder und der Richter.
render.py <ep> still <frames...> --pct 50für jeden Schlag. Erzeuge dann einen separaten Agenten (Agent-Tool) mit den Standbildern undreferences/realism.md; er bewertet mit einer Punktzahl von 10 und nennt die drei schlechtesten Durchschauer. Korrigieren, neu rendern, neu bewerten. Rendere nur bei 8,5+. Zeige dem Benutzer die Standbilder und die Punktzahl. Bei „Auto“ -Engine wechselt eine Aufnahme, die an einer EEVEE-Abkürzung scheitert, hier zu Cycles schnell. - Rendern. Führe
render.py <ep> framesim Terminal-Bereich des Benutzers aus (run_in_terminal), damit sie die Live-Anzeige sehen (Frames erledigt, s pro Frame, ETA); lese<ep>/progress.json, um „Wie weit ist es?“ zu beantworten. Fortsetzbar. Dannrender.py <ep> times; falls zu langsam, arbeite dich bei den langsamsten Frames durchreferences/render-speed.md. - Ton.
beds(ein Raumton pro Welt) undsfx(jeweils auf ihrem Wort: „Knochenklopfen“ auf „Knochen“) inepisode.json, dannsound.py <ep> sfx(benötigt einen Schlüssel; ohne diesen überspringe Effekte oder verwende Dateien, die der Benutzer inaudio/sfx/<name>.mp3bereitstellt) undsound.py <ep> mix. Mischregel: Musik +3 dB, Effekte bei der Hälfte, Stimme unverändert. - Fertigstellen.
finish.py <ep> --audio <ep>/audio/mix.wav [--captions]->out/<slug>-final.mp4. Betrachte es in Telefongröße. Bei Episoden ohne Stimme: übergebe auchcaptions.srtund sage, dass die Stimme zu diesen Zeiten eingefügt wird. - Bericht: der endgültige Pfad, die letzte Punktzahl des Richters, Render-Minuten, ElevenLabs-Guthaben (
costs.json) und der Quellenangabentext für die Beschreibung (Assets.md-Lizenzen). Gib niemals an, dass der Referenzkanal ein bestimmtes Tool verwendet.
Skripte
| Skript | Läuft in | Tut |
|---|---|---|
b3d.py | Blender | Render-Setup + Voreinstellungen (EEVEE/Cycles, GPU, Look), Hintergrund + HDRI, Schattenfänger (echt bei Cycles, vorgetäuscht bei EEVEE), Lichter, eindimensionale erleichterte Dolly-Kamera, Materialien, import_character (jedes geriggte .blend/.fbx/.glb, skaliert, gebunden, berichtet), parent_to_bone, Shape Keys, Compositor, Stoppuhr |
render.py | Shell | build, still, frames (Live-Fortschrittsbalken, progress.json, fortsetzbar), times; --quality |
sound.py | Shell | voice (ElevenLabs), clone (Klon), own (Benutzeraufnahme), captions (keine Stimme), sfx (Effekte), mix (Mischung); jeder Stimmenmodus schreibt captions.srt |
finish.py | Shell | Frames + Mischung -> 1080x1920 mp4, Echtkamera-Ebene, --captions Einbrennen |
measure.py / compare.py | Shell | Frame-genaue Metriken jedes Videos; Referenz vs. unsere mit einer TO-DO-Liste |
scene.py wird aufgerufen als blender -b --factory-startup --python scene.py -- <skill>/scripts <ep>/scene.blend;
beginne mit examples/test-cell/scene.py (rufe shadow_catcher nach den Lichtern auf).