Faceless Shorts
Du erstellst aus einem Thema ein fertiges vertikales Kurzvideo: Drehbuch, Stimme, wortgenaue Untertitel, animierte Szenen, Sound und Musik, gerendert als MP4. Alles ist Code: Canvas-Zeichnung, Headless Chrome Capture, ffmpeg, eine lokale Kokoro-Stimme, lokales Whisper für Wort-Timing, numpy für Sound. Keine KI-Bilder oder -Videos, keine API-Keys, keine Guthaben.
SKILL = der Ordner, in dem sich diese Datei befindet. Projekte liegen in ~/faceless-shorts/<Kurzname>/.
| Stil | Was erstellt wird | Länge · Seitenverhältnis |
|---|---|---|
Deep Dive 3D deep-dive | Das Flaggschiff, Zack D. Films-ähnlich: skulptierte 3D-Figuren in sonnenbeschienenen Sets, leuchtende Röntgenkörper, Kamerafahrten durch Blutgefäße, geringe Schärfentiefe. „Was passiert, wenn…?“ – Körper und Wissenschaft | 30–45 s · 9:16 |
Night File 3D night-file | Ungelöste Mysterien / True Crime: dunkle 3D-Orte mit einem Licht, gesichtslose Personen (das Subjekt leuchtet rot), Schreibmaschinen-Daten, Fallakte-Einblendungen | 30–45 s · 9:16 |
Inside Out inside-out | Flacher 2D-Erklärer „Was passiert, wenn…“: ein einfacher Held, Röntgen-Schnitte, fette 1-3-Wort-Untertitel, knallige Schnitte | 25–40 s · 9:16 |
Stick Story stick-story | „Was würdest du tun, wenn…?“ – Überlebensschritte: Strichmännchen mit sprechenden Augen, flache Räume Tag/Nacht, goldene Schrittkarten | 30–45 s · 9:16 |
Paper Atlas paper-atlas | Geschichte in Papierschnitt: Pergamentkarten, purpurrote Routen, goldene Datenbänder, historische Figuren | 30–45 s · 9:16 |
Tall Tale 3D tall-tale | Lustige wahre Geschichten: flache 2D-Cartoon-Figuren (große runde Köpfe, Tuscheumrisse) in einer sonnigen 3D-Kleinstadtwelt, Kamera immer in Bewegung, Ein-Wort-Untertitel | 40–60 s · 9:16 |
Welcher Stil: Körper / Gesundheit / Wissenschaft „Was passiert, wenn“ → Deep Dive 3D (oder Inside Out für einen leichteren, schnelleren 2D-Look) · Gruselig, ungeklärt, True Crime, „das geschah 1971“ → Night File 3D · Überleben, Lifehacks, „so machst du es“ → Stick Story · ein historisches Ereignis, „wie X geschah“ → Paper Atlas · eine lustige oder clevere wahre Geschichte, ein Betrug, eine Gesetzeslücke, „dieser Typ hat X getan“ → Tall Tale 3D. Wenn es nicht offensichtlich ist, frage einmal nach.
Jeder Stil = styles/<Stil>/style-sheet.png (der Look in einem Bild, gezeichnet vom eigenen Code des Stils) + STYLE.md (die Regeln + das Engine-Handbuch) + example/ (ein vollständiges Projekt, das ohne Änderungen gerendert wird). Lies die STYLE.md des Stils vollständig, bevor du planst.
0. Erste Verwendung auf einem Computer
bash SKILL/scripts/setup.sh ausführen, bis All set ausgegeben wird (prüft Node 22+, ffmpeg, Chrome; erstellt ~/.faceless-shorts/venv; lädt die Kokoro-Stimme ~340 MB und Whisper small.en ~0,5 GB herunter). Installiere alles Fehlende auf dem kostenlosen, offiziellen Weg und frage nach, bevor etwas ein Passwort benötigt. Dann muss bash SKILL/scripts/selftest.sh SELFTEST PASSED ausgeben: Öffne das Kontaktblatt und nenne die Namen und sieh sie dir an.
1. Aufnahme (EINE Nachricht, Standardwerte ausgefüllt)
Frage nur, was unbekannt ist, auf einmal: Thema (oder „such 3 Ideen aus“), ein Link zu einem Kurzvideo, dessen Format ihnen gefällt (optional), Länge (Standard ~30 s), Stimme (SKILL/scripts/py SKILL/scripts/voice.py --list; Standard am_michael), Voiceover-Modus: KI-Stimme (Standard) · eigene Aufnahme (sie nehmen auf, nachdem sie das Skript gesehen haben; words.py --audio) · Nur Untertitel (noch keine Stimme; estimate.py), Musik (eingebaute Hintergrundmusik · keine · eigene lizenzfreie Datei), Endzeile / Handle. „Einfach los“ = die Standardeinstellungen.
2. Der Plan (EIN Bildschirm, dann warten)
Zeige: Titel · die vollständige Erzählung, eine Zeile pro Schnitt, mit den Untertitel-Blöcken (WAS WÄRE WENN *DU | KAUGUMMI *VERSCHLUCKST?) · die Szenenliste, eine Zeile pro Szene (was wir sehen, was sich bewegt, auf welches Wort es fällt) · neue Komponenten, die du zum Baukasten hinzufügst, falls vorhanden · Fakten und ihre Quellen. Frage „Bauen?“ und warte.
Skriptregeln. Schreibe es so, wie eine Person tatsächlich mit einem Freund spricht: vollständige, fließende Sätze mit verbindenden Wörtern („Nun,“, „wo“, „aber“, „also“, „was bedeutet“), keine Liste von kurzen, untertitelartigen Aussagen. ~90–110 Wörter für 35 s. Eine Zeile ist ein SCHNITT, kein Satz: Teile jeden Satz in 1–3 Zeilen an natürlichen Pausen (Kommas, „und“, „wo“), damit sich das Bild alle 1,5–3,5 s ändert, während die Stimme weiterfließt (voice.py spricht jeden ganzen Satz in einem Durchgang). Form: Haken-Frage, dann Steigerung, ein Mythos oder eine Überraschung, eine Wendung („aber wenn du…“), eine prägnante letzte Zeile, die sich wiederholt. Schreibe Zahlen so, wie sie gesprochen werden („sieben“). Lies es laut in deinem Kopf: Wenn es sich wie Untertitel anhört, schreibe es um. Nur originäre Texte: Nimm ein Format, das dir gefällt, aber niemals das Skript oder die Szenen eines anderen Creators. Jeder Fakt wird mit einer zuverlässigen Quelle überprüft (list sie in script.json unter „sources“ auf). Gesundheitsthemen: genau, kein Blut, keine beängstigenden Fehlinformationen.
3. Bauen
bash SKILL/scripts/new_video.sh <Stil> <Kurzname>kopiert das Beispiel in~/faceless-shorts/<Kurzname>/.- Schreibe
script.json(Zeilen + Untertitel + Lücken; siehe STYLE.md). - Timing:
SKILL/scripts/py SKILL/scripts/voice.py <Projekt>dannSKILL/scripts/py SKILL/scripts/words.py <Projekt>(eigene Aufnahme:words.py <Projekt> --audio ihre.m4a; Nur Untertitel:estimate.py <Projekt>). - Schreibe
src/shots.jsum: ein Shot pro Zeile (oder zwei für lange Zeilen), jeder platziert mitcut(i)und seinen Schlüsselmomenten auf Wörtern mitWd('Wort', zeile). Verwende den Baukasten (src/core/kit.js); füge neue Komponenten dort hinzu, im Look des Stils. - Im Projekt:
node tools/capture.mjs check(muss CHECK OK ausgeben) →node tools/capture.mjs cues→SKILL/scripts/py tools/mix.py .→ QA (Abschnitt 4) →node tools/capture.mjs video renders/<Name>.mp4. Um einen einzelnen Shot zu iterieren:node tools/capture.mjs frames review/f "4.2,4.6"und ansehen.
4. QA: Zeige niemals ein Bild, das du nicht angesehen hast
node tools/capture.mjs sheet review/all.jpg 0.5 10 (ein Bild alle 0,5 s, mit Zeitstempel) und lies das gesamte Blatt, dann Schlüsselbilder in voller Größe. Frage bei jedem Bild:
- Ergibt es Sinn? Ein visueller Modus pro Shot: Wenn der Körper geröntgt ist, ist ALLES geröntgt (keine Hemdsärmel an einem Röntgenkörper). Requisiten bewegen sich mit dem, was sie hält (Kaugummi bleibt in der Hand, bis die Hand den Mund erreicht). Nichts erscheint vor seiner Ursache.
- Passt es zur Erzählung in diesem Moment? Das Bild ändert sich kurz vor seiner Zeile; Enthüllungen landen auf ihrem Wort.
- Kollidiert etwas? Bewegte Objekte kreuzen niemals unbeabsichtigt Beschriftungen, Pillen, die Untertitelzone (y 1250–1550) oder einander.
- Untertitel: 1–3 Wörter, genau ein gelbes Wort, richtig geschrieben, auf dem gesprochenen Wort, auf einem Telefon lesbar.
- Stilblatt: nur die Palette, flache Formen, Röntgenansichten in Zyan, Gefahr in Rot.
- Sound: Stimme klar über der Musik; Effekte leise (keine harten Klicks oder Pieptöne). Korrigiere, rendere das Blatt neu, überprüfe erneut. Teile dem Benutzer mit, was du gefunden und behoben hast.
5. Ausliefern
Öffne das MP4 für den Benutzer. Gib auch: eine Teilen-Kopie, wenn > 35 MB (ffmpeg -i in.mp4 -c:v libx264 -crf 21 -preset slow -c:a aac -b:a 160k -movflags +faststart share.mp4), das beste Cover-Bild (capture.mjs frames), einen Titel, eine Bildunterschrift und 5–8 Hashtags. Für den Modus mit eigener Aufnahme gib ihnen auch das Skript mit dem Timing jeder Zeile, um es vorzulesen. Biete eine Runde präziser Änderungen an und rendere nur das Geänderte neu.
5b. Auf YouTube via Zapier veröffentlichen (nur wenn der Benutzer nach dem Hochladen fragt)
Alle Aufrufe sind Code-Mode-Tools: Führe sie innerhalb von execute als tools.zapier.* aus (rufe sie nicht als normale Tools auf). Einmal in einem echten Upload validiert; die Werte unten sind exakt.
- Verbinden. Wenn
list_zapier_skillseinen gespeicherten Skill zum Hochladen hat, verwende ihn. Stelle andernfalls sicher, dass die YouTube-App aktiviert ist:discover_zapier_actions({ app: "YouTube" })→enable_zapier_action({ selected_api: "YouTubeV4CLIAPI", app_display_name: "YouTube", action: "upload_video" }). Wenn noch keine Verbindung besteht, gibtmanage_zapier_connections({ selected_api: "YouTubeV4CLIAPI" })eine Verbindungs-URL für den Benutzer zurück. - Datei hosten. Die
video/thumbnail-Parameter der Aktion benötigen eine URL, die Zapiers Server abrufen können; ein lokaler Pfad wird stillschweigend ignoriert. Lege das MP4 auf einem temporären Host ab, in dieser Reihenfolge (alle am 03.11.2026 getestet; unter Windowscurl.exeverwenden):- a. litterbox (1 h bis 72 h Ablauf, bis zu 1 GB):
curl -F "reqtype=fileupload" -F "time=1h" -F "fileToUpload=@renders/<Name>.mp4" https://litterbox.catbox.moe/resources/internals/api.php→ gibt die direkte URL als Klartext zurück. - b. uguu.se (ca. 3 h Ablauf, gut für Shorts unter 35 MB):
curl -F "files[]=@renders/<Name>.mp4" https://uguu.se/upload→ gibt JSON zurück; verwendefiles[0].url(dend.uguu.se/...-Link). - c. catbox (permanent, kein Ablauf): gleicher Aufruf wie (a) ohne
-F "time=1h". Für immer öffentlich, daher nur mit Zustimmung des Benutzers. - Überspringe diese (am 03.11.2026 als defekt bestätigt, keine Wiederholungsversuche verschwenden): 0x0.st (Uploads deaktiviert), tmpfiles.org (Link ist eine Betrachterseite, nicht die Rohdatei), gofile.io (Rohdownload erfordert ein Account-Token), file.io (curl-API leitet zur Web-App weiter), bashupload.com, temp.sh (tot).
- Überprüfe die URL immer, bevor du sie verwendest:
curl -sSI <URL>muss 200/206 mit einem Video-Content-Type zurückgeben. Vertraue niemals dem JSON eines Hosts ohne Überprüfung. - Teile dem Benutzer mit, dass dies sein Video auf einen öffentlichen temporären Host legt, der von selbst abläuft.
- a. litterbox (1 h bis 72 h Ablauf, bis zu 1 GB):
- Zuerst bestätigen. Dies schreibt auf den echten Kanal des Benutzers, also bestätige vor der Ausführung: Titel, Sichtbarkeit (privat / nicht gelistet / öffentlich) und Kategorie. Löse
category_idmitinspect_zapier_actions({ tool_name: "youtube_upload_video", enum_property: "category_id" })auf, falls nötig. Komödie = 23 (Standardvorschlag für Tall Tale und Deep Dive), Bildung = 27, Haustiere & Tiere = 15. - Hochladen.
execute_zapier_write_action({ selected_api: "YouTubeV4CLIAPI", action: "upload_video", tool_name: "youtube_upload_video", params: { video: "<temp URL>", title, description (beende mit #shorts), tags: [5-8 Hashtags ohne #], category_id: "23", privacy_status, made_for_kids: false, embeddable: true, notify_subscribers: true, default_language: "en", license: "youtube" } }) - Bericht. Das Ergebnis enthält
id; der Link isthttps://www.youtube.com/watch?v=<id>. Ein vertikales Video von 60 s oder weniger wird automatisch zu einem Short (kein zusätzliches Feld). Öffne die lokale Datei für den Benutzer (tools.browser.preview({ path: "renders/<Name>.mp4" })) und gib die YouTube-URL als Text an. Der In-App-Browser kann youtube.com oft nicht laden (ERR_ABORTED); das ist kein fehlgeschlagener Upload. - Thumbnails. Nicht gelistete Uploads akzeptieren über diese Aktion kein benutzerdefiniertes Thumbnail; biete das gespeicherte Cover-Bild an, falls der Benutzer das Video später öffentlich macht.
Hinzufügen eines neuen Stils (wenn der Benutzer danach fragt)
Erstelle styles/<NeuerStil>/ mit style-sheet.png, STYLE.md (gleiche Abschnitte wie Inside Out: Look-Regeln, Palette, Format, Engine/Baukasten-Zuordnung, Komponenten, Schussanatomie, Stichwortarten, QA-Fallstricke) und einem vollständigen example/. Kopiere die tools/, index.html, src/main.js, src/core/{lib,timing,captions}.js von Inside Out und erstelle dann den Baukasten und die Szenen des neuen Looks. Die gemeinsamen Skripte (voice, words, estimate, new_video, selftest) funktionieren unverändert. Füge eine Zeile zur obigen Tabelle hinzu und führe selftest.sh aus, bis jeder Stil bestanden ist.
3D-Stile (Deep Dive, Night File, Tall Tale)
Sie rendern echte 3D mit three.js in Headless Chrome. Mit einer Grafikkarte ist es schnell und in voller Qualität. Ohne eine (Laptop ohne GPU-Beschleunigung, Cloud-Sandbox) rendere mit SOFTWARE_GL=1 QS='&res=0.6&aa=0&shadow=1024' FPS=24 vor node tools/capture.mjs ... (≈2 s pro Bild; teile dem Benutzer die Renderzeit im Voraus mit, führe es im Hintergrund aus und mache QA zuerst mit sheet review/all.jpg 1 10). Ihre STYLE.md-Dateien listen die 3D-API auf.
Niemals
Generiere Bilder oder Videos mit KI; gib das Geld oder Guthaben des Benutzers aus; lade auf YouTube oder einen anderen Host hoch, ohne dass der Benutzer darum bittet und bestätigt; kopiere das Skript, die Szenen oder Bilder eines anderen Creators; überschreibe ein Projekt des Benutzers ohne zu fragen; liefere ein Bild aus, das du dir nicht angesehen hast.