Communitygithub.com

Handmade Stage Film

Verwandelt Marken-Kampagnenfotos in einen animierten Kurzfilm im Stil eines Stop-Motion-Bühnenspiels – mit ausgeschnittenen Papierpuppen, handgeschriebenen Bildunterschriften und präziser Produktdarstellung.

Was ist Handmade Stage Film?

Diese Skill generiert aus 4–8 statischen Markenfotos einen atmosphärischen 15–20 sekündigen Kurzfilm im 9:16-Format, der an eine Stop-Motion-Bühnenshow erinnert. Jedes Foto wird mit minimaler, bewusst ruckelnder Bewegung (12 fps) zum Leben erweckt: ausgeschnittene Requisiten schweben wie Papierpuppen, handgeschriebene Textfragmente auf zerrissenem Papier erzählen eine kleine Geschichte, und das Video endet auf einem individuellen Schlussbild mit Wortmarke, Produkt und Call-to-Action. Die Erweiterung nicht quadratischer Bilder auf 9:16 erfolgt mit Nano Banana 2, die Animation der Clips mit Kling 2.5 Turbo – über die Modell-API von fal.ai. Dabei bleiben Gesichter, Produkte und bedruckte Etiketten pixelgenau erhalten; unscharfe Stellen werden nachträglich durch die Originalpixel ersetzt. Der gesamte Workflow – von der Drehbucherstellung über die Generierung der Clips, Requisiten, Soundkulisse (Musikbox-Walzer und Soundeffekte) bis zur finalen MP4-Ausgabe – wird lokal mit Puppeteer und FFmpeg ausgeführt. Die Nutzung erfordert einen eigenen API-Key für die KI-Modelle sowie eine lokale Chrome-Instanz. Der Anwender wird vorab transparent über die anfallenden Kosten informiert (etwa 2,30 US-Dollar für ein Beispielprojekt mit sieben Stills und fünf Clips).

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DarthManly/handmade-stage-film-skill/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht Handmade Stage Film?

Halloween-Nacht, nichts im Fernsehen: Ein Mädchen mit schwarzem Bob sitzt in einem bemalten Pappkarton-Sofa, pinkes Getränk in der Hand, und klickt auf die Pappkarton-Fernbedienung. Der Pappkarton-Fernseher schaltet sich ein, zeigt Rauschen, ein kleiner Geist tanzt auf dem Bildschirm, löst sich dann davon und schwebt davon. Er schwebt neben ihrem Becher („Wollte einen Schluck.“), landet auf dem karierten Tisch, wo eine riesige Gabel auf einen Teller mit bemalten Beeren sticht („Gardenia. Beeren. Joghurt.“), und einen Schluck später sitzt sie auf einem riesigen Hexenhut, während um sie herum Sterne aufleuchten („…volle Magie.“). Der Becher bekommt seine Nahaufnahme mit einem gekritzelten „Magic Pretty Water“ und einem Pfeil, und die letzte Karte zeigt das Wortmarke, den Becher, den Geist, „Halloween limited“ und den Verkaufsort. Jedes Bild stammt aus den eigenen sieben Kampagnenfotos der Marke.

Es wird aus vier Teilen erstellt:

  • scripts/generate.mjs verwandelt Standbilder in die Bestandteile: 9:16-Keyframes (Nano Banana 2 malt die zusätzliche Fläche, die originalen Pixel werden darübergelegt), Kling-Clips, ausgeschnittene Requisiten, neu aufgelegte Etiketten und das Wortmarke.
  • scripts/reel.mjs schneidet die Clips zu einem einzigen Film auf der Taktung des Films zusammen.
  • scripts/sfx.mjs synthetisiert den Ton: einen original Musikbox-Walzer und ein Geräusch für jedes Ereignis.
  • scripts/render.mjs spielt alles als Bühnenshow ab: abgestufte Bewegung mit 12 Bildern pro Sekunde, Handkamera-Wackeln, bewegliches Korn, Puppen, zerrissene Papier-Bildunterschriften, Tags mit Pfeilen, einen Fernsehbildschirm, der sich einschaltet, und die letzte Karte. Es rendert lokal mit headless Chrome und FFmpeg.

Einrichtung (einmal pro Rechner)

Im Ordner dieser Skill ausführen:

npm install

Dies installiert puppeteer-core und ffmpeg-static. Google Chrome muss installiert sein, oder setzen Sie CHROME_PATH auf eine Chrome/Chromium-ausführbare Datei (npx @puppeteer/browsers install chrome-headless-shell@stable gibt eine aus).

Das Filmmaterial benötigt einen API-Key für Nano Banana 2 und Kling 2.5 Turbo; die Skripte rufen sie über ein Modell-API-Gateway auf, wo der Key erstellt wird (https://fal.ai/dashboard/keys). Der Benutzer setzt ihn in seinem eigenen Terminal als FAL_KEY (z. B. in seinem Shell-Profil). Bitten Sie ihn niemals, den Key in den Chat einzufügen, und drucken Sie ihn niemals aus.

Kosten

Modellnutzung, abgerechnet über Ihren eigenen API-Key: 0,08 $ für jedes auf 9:16 erweiterte Standbild (und jedes edit), 0,35 $ für jeden 5-Sekunden-Clip und ein Bruchteil eines Cents für jeden Ausschnitt (Oktober 2026 Preise). Ein Film mit sieben Standbildern und fünf Clips kostet etwa 2,30 $. Der Film, die Puppen, die Bildunterschriften, der Ton und die finale MP4 werden lokal auf Ihrem Rechner kostenlos erstellt. Teilen Sie dem Benutzer die Kosten vor der Generierung mit.

Was es zum Funktionieren bringt

  • Ihre eigenen Fotos, unberührt, wo es zählt. Die Erweiterung und jeder Clip beginnen mit den echten Standbildern der Marke; extend legt die originalen Pixel wieder über die KI-Version, und relabel legt ein scharfes Etikett über jedes Bild, in dem der Clip es unscharf gemacht hat.
  • Eine Geschichte, keine Diashow. Planen Sie eine kleine Handlung über die Aufnahmen hinweg, mit einer Sache, die zwischen ihnen reist (hier ein Geisterpuppe, die aus einem Fernseher entkommt). Bildunterschriften sind kurze Handlungsstränge, keine Slogans.
  • Absichtlich unbeholfen. Alles bewegt sich in Schritten von 1/12 s mit einem winzigen Wackeln, Puppen wackeln auf ihren Schlüsseln, Bildunterschriften erscheinen in drei Schritten und Pfeile zeichnen sich in drei Strichen. Glätten Sie es nicht.
  • Halb Produkt, halb Marke. Das Produkt ist in den meisten Aufnahmen zu sehen und bekommt eine Nahaufnahme mit einem Tag; die letzte Karte zeigt das Wortmarke, das Produkt, den Namen und wo man es kauft.

Arbeitsablauf

  1. Sammeln Sie 4–8 Standbilder aus einem Shooting (3:4, 4:5 oder 9:16), den Produktnamen, eine Zeile (Geschmacksrichtungen, Materialien), einen Hinweis („Halloween limited“) und den CTA. Fragen Sie, ob die Standbilder ein aufgedrucktes Wortmarke oder ein Abzeichen unten tragen (es wird aus den Bildern entfernt und für die letzte Karte ausgeblendet).
  2. Drehbuch (vor der Generierung zeigen): die Reihenfolge der Aufnahmen, die Handlung, was sich in jedem Clip bewegt (ein oder zwei kleine Aktionen, das Produkt bleibt still), welche Requisiten als Puppen ausgeschnitten werden und was sie tun, die Bildunterschriften und die Tags, und die Kosten. Halten Sie es bei 15–20 s.
  3. Keyframes: node scripts/generate.mjs extend --in still.jpg --out keys/<shot>.png --cover <rows> für jedes Standbild, das nicht 9:16 ist (--cover = die Höhe in Pixeln des aufgedruckten Wortmarke-Bandes unten am Original, falls vorhanden). Betrachten Sie jedes in voller Größe: Wenn das Modell ein gespiegeltes oder verdoppeltes Objekt in den neuen Bändern hinterlassen hat, bedecken Sie es mit einfacher Textur aus demselben Foto.
  4. Test: ein Clip, die Aufnahme mit dem Aufhänger der Handlung: node scripts/generate.mjs clip --start keys/<shot>.png --prompt "…" --out clips/<shot>.mp4. Der Prompt benennt nur, was sich bewegt („sie drückt mit dem Daumen eine Taste auf der Fernbedienung; der Becher bleibt aufrecht und still“); ein fester Suffix hält die Kamera fixiert und das Set, Gesicht und Produkt unverändert. Zeigen Sie ihn, dann machen Sie die restlichen.
  5. Clips für die anderen bewegten Aufnahmen. Betrachten Sie jeden Clip Bild für Bild: notieren Sie, wo die Aktion endet (um den Ton und die Puppen darauf zu setzen) und wo kleine Texte auf dem Produkt unscharf werden. Beheben Sie Etiketten mit relabel --clip … --key keys/<shot>.png --box x,y,w,h (das Etikettenfeld im Keyframe), oder verwenden Sie nur die Bilder vor der Bewegung des Produkts. Ein Clip wird nicht für jede Aufnahme benötigt: eine Nahaufnahme mit langsamem Zoom (still, box, boxTo) ist für das Produkt oft besser.
  6. Requisiten: cutout --in keys/<shot>.png --box x,y,w,h --out props/<name>.png für jede Puppe (eine Figur, Sterne, eine Blume, eine Beere, das Produkt in einer Hand); edit für einen Teller, von dem etwas entfernt wurde (ein Fernsehbildschirm ohne seinen Geist). Das Wortmarke: wordmark --in still.jpg --box x,y,w,h --out props/wordmark.png. Der Hintergrund der letzten Karte ist ein Ausschnitt einer bemalten Wand aus einem der Keyframes.
  7. Erstellen Sie effect.json aus examples/example.json (siehe Aufnahmen und die letzte Karte), dann node scripts/reel.mjs effect.json --out reel.mp4 und setzen Sie "reel": "reel.mp4".
  8. Ton: node scripts/sfx.mjs effect.json --out stage.m4a, dann "music": "stage.m4a". Führen Sie es nach jeder Änderung des Timings erneut aus. --no-bed --music track.mp3 tauscht den Walzer gegen einen Titel aus, den der Benutzer lizenzieren darf.
  9. Validieren: node scripts/validate.mjs effect.json — beheben Sie jeden Fehler und lesen Sie die Warnungen dem Benutzer vor.
  10. Entwurf: node scripts/render.mjs effect.json --quality draft --width 540 --out draft.mp4, und überprüfen Sie ein Bild aus jeder Aufnahme: keine Bildunterschrift, kein Tag oder keine Puppe auf einem Gesicht oder dem Produkt, alles außerhalb der rechten 14 %, wo die Buttons der Plattform sitzen.
  11. Final: node scripts/render.mjs effect.json --out film.mp4 --poster poster.png. Für Xiaohongshu eine 3:4-Version zuschneiden: ffmpeg -i film.mp4 -vf crop=720:960:0:160 -c:a copy film-3x4.mp4 (bei der Standardbreite von 720; prüfen, ob nichts Wichtiges in den oberen oder unteren 160 px sitzt).

Aufnahmen

Alle Positionen sind in 1080 × 1920 Bildpixeln. Jede Aufnahme ist eine von:

  • Eine Clip-Aufnahme: clip (die Datei, aus der reel.mjs schneidet), from und to (Sekunden im Clip), speed (0,5 = halbe Geschwindigkeit, was bei der 12-Schritt-Wiedergabe jedes Bild einer kurzen guten Sequenz verwendet), hold (Sekunden, die das erste Bild hält, bevor es sich bewegt).
  • Eine Standbild-Aufnahme: still (ein Bild), len, box und boxTo ([x, y, Breite] 9:16-Fenster in den Bildpixeln; die Ansicht bewegt sich von einem zum anderen).

Jede Aufnahme kann haben:

  • captions: { "text", "at", "out", "x", "y", "rot", "size" } — zerrissene Papierschnipsel mit handgeschriebenen Wörtern; \n bricht eine Zeile um.
  • tags: { "text", "at", "x", "y", "to": [x, y], "ink": "dark" | "light", "rot", "size" } — handgeschriebene Wörter mit einem Pfeil, der sich zu to zeichnet.
  • puppets: { "image", "path": [[t, x, y, Breite, Rotation], …], "sound", "exit", "flip", "wobble" } — ein Ausschnitt, der zwischen seinen Schlüsseln bewegt wird (t in Sekunden innerhalb der Aufnahme, x und y sein Mittelpunkt). Ein Schlüssel mit Breite 0 gefolgt von einem vollen Schlüssel einen Schritt später ist ein Pop. Es hält seinen letzten Schlüssel, es sei denn, "exit": true. sound wird bei seinem ersten Schlüssel abgespielt.
  • screen: { "rect": [x, y, w, h], "off", "static", "plate", "plateAt" } — ein Fernseh- oder Telefonbildschirm, der bis off schwarz ist, bis static Rauschen zeigt, und plate (derselbe Keyframe mit geleertem Bildschirm) ab plateAt anzeigt, damit eine Puppe daraus klettern kann.
  • sounds: [[t, "Kind"], …] — click, tvon, static, ghost, boing, tap, pop, whoosh, land, stab, sip, sparkle, chime, paper, scribble, cut. Schnitte, Bildunterschriften, Tags, Bildschirme und Puppen mit einem sound erhalten ihre automatisch.

Die letzte Karte

end: len, bg (eine bemalte Wand in 9:16), wordmark (wordmarkY, wordmarkWidth), name (nameY, nameSize), line (lineY), note auf einem Papierschnipsel (noteX, noteY), cta auf einer Pille (ctaY), und puppets wie bei einer Aufnahme (das Produkt in einer Hand, das von der Kante hereingleitet, die Figur, Sterne). Jedes hat eine …At-Zeit.

Felder

FeldErforderlichAnmerkungen
reeljaPfad zu einer Videodatei, relativ zur JSON-Datei — jeder Clip-Aufnahme in einen einzigen stillen 9:16-Film geschnitten von scripts/reel.mjs (reel.mp4)
shotsjaListe von 2–10 Einträgen: clip, from, to, speed, hold, still, len — der Film in Reihenfolge: Clip-Aufnahmen (ein KI-Clip eines Ihrer Standbilder) und Standbild-Aufnahmen (ein Standbild mit einer langsamen Bewegung); siehe SKILL.md, Aufnahmen
end.bgneinPfad zu einem Bild, relativ zur JSON-Datei — der Hintergrund der letzten Karte: eine bemalte Wand oder ein Hintergrund aus Ihren Fotos, 9:16
end.wordmarkneinPfad zu einem Bild, relativ zur JSON-Datei — Ihr Wortmarke auf transparentem Hintergrund (scripts/generate.mjs wordmark)
end.nameneinText, unter 4 Wörtern — der Produktname, handgeschrieben auf der letzten Karte
end.lineneinText, unter 6 Wörtern — eine kurze Zeile unter dem Namen, z. B. die Geschmacksrichtungen
end.noteneinText, unter 4 Wörtern — auf einem zerrissenen Papierschnipsel, z. B. „Halloween limited“
end.ctaneinText, unter 12 Wörtern
musicneinPfad zu einer Audiodatei, relativ zur JSON-Datei — der Soundtrack von scripts/sfx.mjs (stage.m4a)
paletteneinFarben als #RRGGBB; Schlüssel: ink (Bildunterschriften und dunkle Tags), paper (die Papierschnipsel und helle Tags) und accent (die CTA-Pille)

Tipps

  • Schreiben Sie die Clip-Prompts eng: ein oder zwei kleine Aktionen, ein ausdrucksloses Gesicht, „der Becher bleibt aufrecht und still, Etikett zur Kamera“. Große Gesten verwischen Gesichter und Etiketten.
  • Kling wählt sein eigenes Timing: beobachten Sie, wo die Aktion endet, und setzen Sie den Klick, den Schnitt und die Puppen auf dieses Bild, nicht auf eine runde Zahl.
  • Geben Sie der Geschichte einen Reisenden: eine Puppe, die aus einem Foto ausgeschnitten ist und in den nächsten Aufnahmen wieder auftaucht, verbindet sieben Standbilder zu einem Film.
  • Schneiden Sie Puppen aus den Fotos selbst aus, nicht aus neuer Kunst: dieselbe Farbe, dasselbe Papier und dasselbe Licht lassen sie dazugehören.
  • Halten Sie Bildunterschriften auf drei oder vier Wörter; die Bilder erzählen den Großteil.

Ausgabe

H.264 MP4, 1080 × 1920, 30 fps (das Bild bewegt sich in 12 Schritten pro Sekunde), 15–20 Sekunden mit Ton, plus ein Standbild als Vorschaubild (PNG).

Verwandte Skills