CommunityCodierung & Entwicklunggithub.com

make-ai-short

Baue einen generativen KI-Videoclip im Hochformat (1080×1920, ~35-40s) — von der Charakterfestlegung über die Videomodell-Animation bis zur Remotion-Komposition mit wortgenauen Untertiteln und SFX-Audition.

Was ist make-ai-short?

Dieses Skill ermöglicht es, einen kompletten generativen Kurzfilm zu erstellen, bei dem die Pixel von einem Videomodell (Standard: Seedance 1.5 Pro auf fal) stammen und Remotion nur für die Komposition und Untertitel zuständig ist. Der Workflow folgt drei harten Regeln: (1) Einmal festgelegte Charaktere werden nie aus Text neu generiert — stattdessen wird immer die gesperrte Referenz (character.json + character.png) verwendet. (2) Vor jeder Generierung werden die Kosten explizit genannt. (3) Die Endlosschleife wird durch `end_image_url`-Steuerung des letzten Shots erzwungen, nicht durch Glück. Das Skill unterstützt die Plattformen fal (Standard) und kie.ai, wobei die Modellauswahl in ai-shorts/IDEAS.md festgelegt wird. Der Ablauf umfasst Skripterstellung, Sprachgenerierung (ElevenLabs), Bildgenerierung pro Shot, Clip-Erzeugung mit Loop-Constraint, QA jedes Frames, Remotion-Komposition mit nahtlosen Überblendungen, Mund-Synchronisation für Dialoge und SFX-Audition nach dem suggest-sfx-Workflow. Das Endergebnis ist ein charakteristisch konsistenter, loopbarer Kurzfilm mit Echtzeit-Untertiteln und ohne CTA-Outro.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/gbax316/shorts-director/tree/main/.claude/skills/make-ai-short

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

make-ai-short — Generative Kurzfilme, Ende-zu-Ende

Die Pixel stammen von einem Videomodell; Remotion komponiert nur Clips + Untertitel. Bewährt auf Blau-Mann #1 "Die Tür". Geschwister von /make-short (100 % TSX) — gleiche Disziplin, plus drei Tore, die TSX nie brauchte: Kosten vor der Generierung genannt, Charakter über character.json gesperrt, Loop über Endbild-Steuerung festgelegt.

Alles vom Repository-Stammverzeichnis ausführen. Benötigt FAL_KEY (Clips + Bilder) und ELEVENLABS_API_KEY (Stimme) in .env.

Die drei eisernen Regeln

  1. Generiere einen Charakter NIEMALS zweimal aus Text. ai-shorts/<char>/character.json + character.png ist die gesperrte Referenz. Jedes Standbild, das den Charakter benötigt, wird mit gen_image.py --ref character.png erstellt; jeder Clip ist Bild-zu-Video von einem Frame, der ihn bereits enthält. Falls ein Charakterblatt noch nicht existiert, ist das Erstellen EINES (und die Sichtprüfung durch den Benutzer) ein eigener Schritt vor allem anderen.
  2. NENNE DIE KOSTEN, BEVOR SIE AUSGEGEBEN WERDEN. Abgeleitet, nicht zitiert: Seedance 1080p ohne Audio = h×w×24×dur/1024 Tokens × 1,2 $/1 M ≈ 0,0583 $/s (fal-Preise-API validiert am 14.07.2026 — siehe ai-shorts/IDEAS.md für die vollständige Tabelle + die Wan/Veo-Lite-Fallen). Immer generate_audio:false — Stimme kommt von ElevenLabs, Sound aus unserer SFX-Pipeline.
  3. Loop durch Einschränkung, nicht durch Glück. Der echte Frame 0 von Shot 1 (aus dem Clip extrahiert, nicht aus dem Prompt-Bild) ist das Loop-Ziel. Der letzte Shot übergibt ihn als end_image_url (Seedance/Kling), und die Komposition endet auf genau diesem Standbild über die letzten ~10 Frames (LoopSettle-Muster in remotion/src/shots/ai-1/Ai1Door.tsx).

Artefakt-Vertrag

ai-shorts/<name>/
  script.md · beats.json            — Gleicher Vertrag wie bei /make-short (vo[] mit echten Wortzeiten)
  character.json                    — DIE GESPERRTE REFERENZ (+ video_model-Block = das gewählte Modell)
  shots/NN-slug.png                 — START-Frame pro Shot (gen_image.py --ref character.png [--ref scene])
  shots/NN-slug.json                — gen_clip-Seitenwagen (Modell, Nutzlast, Anfrage-ID)
  shots/upload-urls.json            — fal-Speicher-URLs (Uploads sind über Neuversuche hinweg wiederverwendbar)
  voice/ · sfx-plan.json · output/                                          [voice/output gitignored]
remotion/src/shots/ai-N/            — Komposition + vo.gen.ts
media/projects/<name>/              — DIE Clip-Kopien für staticFile() (committed — Pixel sind
                                     nicht reproduzierbar; shots/*.mp4-Arbeitskopien sind gitignored)

Arbeitsablauf (Stimme vor Pixeln)

  1. Skript — script.md + beats.json. Hook auf Frame 0 komponiert; These sollte den Loop WOLLEN (Blau-Mann #1: "Ankunft ist ein Mythos" → Ende = auf die gleiche Tür zugehen). ~80–100 Wörter, 2,5–2,7 Wörter pro Sekunde Fenster. Kein Engagement-CTA-Outro, jemals — Ende auf dem Höhepunkt, der Loop ist das Ende.
  2. Stimme ZUERST — python tools/gen_voice.py --beats ... --emit-ts remotion/src/shots/ai-N/vo.gen.ts (Stimme und Modell aus .env, oder ein "voice"-Block in beats.json, wenn eine Serie einen Erzähler wie George JBFqnCBsd6RMkjVDRZzb mit eleven_v3-Tags verwenden soll; auf die LINE CHECK-Flags reagieren wie in make-short Stufe 4, bevor ein Clip generiert wird). Echte Wortzeiten bestimmen die Shot-Fenster; Seedance benötigt ganze 4–12 s Dauern, also Shot-Längen AUFRUNDEN von Fenstern. Dialog (zwei oder mehr Charaktere): beats.json "cast" ordnet jedem Sprecher seine character.json zu (deren "voice"-Block verwendet wird), jede VO-Zeile nennt ihren Sprecher in "who", und --pack 0.3 legt die Zeilen Ende-an-Ende von ihren echten Längen, anstatt sie in geschätzte Fenster zu quetschen. Eine Stimme pro Charakter lebt in seiner character.json, nirgendwo sonst.
  3. Start-Frames — einer pro Shot, python tools/gen_image.py --model pro --aspect 9:16 --ref character.png (+ das Szene-Standbild von Shot-1 als 2. Referenz, wenn ein Ort/Requisit shots-übergreifend übereinstimmen muss). QA jedes PNG vor jedem Video-Aufruf — hier ist Drift günstig zu beheben.
    • Achte auf Hände, Kleidungsdetails, Proportionen — benenne sie explizit im Prompt bei Neuversuchen.
  4. Clips — Nenne die abgeleiteten Gesamtkosten, dann python tools/gen_clip.py pro Shot parallel (--set image_url=<fal storage url> --set 'duration="N"' --set resolution=1080p --set generate_audio=false, letzter Shot --set end_image_url=<frame0 url>). Referenzen einmal hochladen via bakeoff_clip.upload_ref; URLs in shots/upload-urls.json behalten.
  5. Clip-QA, Frame für Frame — Start/Mitte/Ende-Streifen pro Clip + ein Side-by-Side des letzten Frames des letzten Clips mit dem Loop-Ziel. Fehlschläge neu versuchen (Nenne die Neuversuchskosten); ein 5 s 1080p-Neuversuch kostet ~0,29 $ — billig im Vergleich zum Ausliefern eines Klons.
  6. Komposition — Sequenzen von OffthreadVideo über EINE Timeline, ~8-Frame-Überblendungen (Clips sind ~1 s länger als ihre Fenster — das ist der Spielraum), Captions + ProgressBar auf der Wurzel, LoopSettle-Auflösung am Ende. Kopiere finale Clips nach media/projects/<name>/. npm run gen, frames.mjs an Grenzen + Helden, JEDES PNG lesen, dann render-all --scale=1 und voice.wav muxen.
  7. SFX — /suggest-sfx-Ablauf. Gappy-VO-Kalibrierung (Blau-Mann #1): Cues in VO-Lücken erhalten keine Maskierung und kein Duck — sie benötigen ~7–8 dB WENIGER als der Tabelle für dichte Erzählung (Lücken- Whooshes -9..-13, nicht -3..-5). Verifiziere mit volumedetect RMS gegen eine Sprach-Referenz; Helden-Layer darf einmal das Sprachniveau berühren. Misch-Audition wartet auf das Ohr des Benutzers (hartes Tor).
  8. Zurückspeichern — catalog used_in, beats.json echte Zeitangaben (gen_voice schreibt sie), Seitenwagen committed, Kostenbuch im Abschlussbericht.

Fertig =

Charakter konsistent in jedem Frame jedes Clips (Frame-für-Frame-QA) · Loop verifiziert (Letzter Frame vs. Frame 0 Side-by-Side) · Untertitel auf echten Wortzeiten · Kosten vor jeder Ausgabe genannt und danach summiert · SFX-Audition gerendert, wartet auf das Ohr des Benutzers · kein CTA-Outro. · tools/check_text.py sauber für gesprochenen und Bildschirm-Text · Telefon-Kopie erstellt mit tools/export_phone.py · ein datierter Eintrag in LESSONS.md (und das Skill aktualisiert, in allgemeinen Begriffen, falls die Lektion seine Funktionsweise ändert).

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

gbax316/shorts-director

Directs a faceless vertical short from idea to finished, mastered file, and gets better with every run. Picks a format, writes the episode in a writers' room (three premises judged as the buyer), voices it, gates on an animatic, then decides beat by beat how each moment is made: drawn in code in Remotion, a cut-out from a generated still, a generated clip, or one of the engine tracks. Modes: series, writers-room, produce, sound, finish, bakeoff, effects (/effects), improve (the learning loop after every short). Formats so far: character skit with dialogue and synced mouths, photoreal mini documentary with sourced figures. Triggers on "make a short", "next episode", "make a video about X", "faceless video", "reel for this offer". Do NOT trigger for editing an existing video file, for a pure code-drawn explainer with no writers' room (make-short), or for collage (make-vox).

gbax316/vidtsx-2d-generator

Generate production-ready 2D TSX video files for VidTSX (Remotion-based) from a shot, scene, or video description. Use whenever the user wants to create or generate a VidTSX video, a 2D TSX shot or scene, an animated clip, title card, or rendered motion graphic — including when they describe a visual animation they want built, or say "make a shot", "build this scene", "generate the TSX", or "turn this into a video". Covers the mandatory file structure and composition config, dimension presets (horizontal/vertical/square), six style presets (minimalist, memphis, neo-brutalism, glassmorphism, neon, corporate), and the hard rules that keep renders from crashing, covering frame-based animation only (no useState/useEffect/setTimeout), strictly monotonic interpolate ranges, Easing.bezier not wrapper syntax, and the chroma-js and @remotion/paths import gotchas. Not for 3D/three.js compositions, general React work, or editing video files.

Verwandte Skills