Communitygithub.com

murathany7/character-2d

Animieren Sie einen 2D-Cartoon-Charakter oder ein Maskottchen in einem Video – ein per Code gezeichnetes SVG-Rig, eine Lottie-Datei oder eine Rive-Datei. Deckt Benennung von Teilen, Leerlauf-/Blinzeln-/Sprechen-/Winken-/Hüpfen, Lippen-Synchronisation zu einer Sprachaufnahme (Rhubarb-Mundformen, auch bei einem nur als PNG existierenden Maskottchen) sowie die Regeln für das Markenmaskottchen ab.

Was ist character-2d?

Diese Fähigkeit ermöglicht es, 2D-Charaktere und Maskottchen in Videos zu animieren, basierend auf SVG-Rigs, Lottie- oder Rive-Dateien. Sie ist besonders nützlich für Entwickler, die schnell interaktive und sprechende Charaktere in Web-Kompositionen einbinden möchten – ohne manuelle Keyframe-Animation. Unterstützt werden SVG-Rigs (codebasiert, mit Teilen wie #body, #eyes, #mouth), Lottie (Designerdatei mit lottie-web), Rive (mit Animationen oder State Machines) und eine PNG-basierte Mund-Nachrüstung für Markenmaskottchen. Die Lippen-Synchronisation nutzt Rhubarb Lip Sync für präzise Mundformen (A–H) oder eine vereinfachte Sprachsteuerung. Die Fähigkeit setzt auf Plattformen wie Claude Code, Cursor oder Codex auf und fügt sich nahtlos in bestehende Projektstrukturen ein – inklusive der Einhaltung von Markenrichtlinien und Qualitätssicherungshinweisen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/murathany7/reel-studio/tree/HEAD/.agents/skills/character-2d

In Ihrer bevorzugten KI fragen

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

Dokumentation

2D-Charaktere

Lesen Sie zuerst die Regeln für das Markenmaskottchen (brands/<slug>/README.md, Maskottchen). Ein Markenmaskottchen wird nur aus den eigenen Dateien der Marke gezeichnet; zeichnen Sie es niemals aus dem Gedächtnis neu.

SVG-Rig (keine Designerdatei)

  1. Zeichnen Sie den Charakter als eingebettetes <svg> aus einfachen Formen in den Markenfarben. Benennen Sie die Teile: #body, #eyes, #mouth-closed, #mouth-open, #arm-l, #arm-r (jeweils optional).
  2. const c = SvgRig(svgEl) und dann verketten: .idle(von, bis), .blink([t…]), .talk(von, bis), .wave(t), .hop(t).
  3. Arme drehen sich um die untere innere Ecke des Armkastens. Wenn ein Arm vom Körper wegschwingt, setzen Sie data-pivot="x% y%" darauf.
  4. Sprachaufnahme sprechen: Lippensynchronisation (nächster Abschnitt). Ohne Rhubarb ein einfacherer Lippenklapp: Wortbeginne von scripts/transcribe.sh audio/vo.wav audio/vo übergeben als .talk(0, 0, { beats: [...] }).
  5. Wiederverwendung: Sobald ein Charakter genehmigt ist, speichern Sie sein SVG in brands/<slug>/assets/characters/ und fügen Sie es dem Marken-README hinzu.

Lippensynchronisation (ein Charakter spricht die Sprachaufnahme)

  1. Cues pro VO-Zeile: scripts/lipsync.sh audio/vo.wav audio/vo.visemes.json --dialog audio/vo.txt (Rhubarb Lip Sync; Installationshinweis im Skript). Verwenden Sie das genehmigte Skript als Dialogdatei. Sekunden für jede Zeile.
  2. Laden Sie <script src="../audio/vo.visemes.js"> und <script src="/engines/lipsync.js"> in der Komposition.
  3. SVG-Rig: Zeichnen Sie die Mundformen als #mouth-A … #mouth-H, wobei #mouth-closed (oder #mouth-X) den Ruhemund darstellt. A (Lippen gepresst), B (leicht geöffnet, Zähne), C (offen), D (weit offen), E (O), F (OO) tragen den Großteil; G (F/V) und H (L) fallen auf A und C zurück, falls nicht gezeichnet. Dann .lipsync(LipSync.cues("vo.visemes"), { offset: <VO-Start> }), ein Aufruf pro Zeile. Verwenden Sie .talk() oder .lipsync() für eine Zeile, nicht beides. Beispiel: examples/engines-demo/index.html.
  4. Maskottchen, das nur als Bild existiert (ein PNG von der Marke): LipSync.mountMouth(wrapper, { cx, cy, w, aspect, shapes: LipSync.mouthSet({ ink, cover }) }) zeichnet einen Mund darüber (cover = die Gesichtsfarbe, verdeckt den eigenen Mund des Bildes während des Sprechens; im Ruhezustand zeigt das Bild seinen Mund). cx, cy, w sind Bruchteile des Bildes: einmal messen, Standbilder bei einigen Cues überprüfen und die Zahlen im Marken-README behalten (Maskottchen). Danach LipSync.addToTimeline(Studio.tl, cues, mouth, { offset }).
  5. Ein gezeichneter Mund auf einem Markenmaskottchen ist ein neues Kunstwerk: Der Markeninhaber genehmigt es, bevor etwas damit veröffentlicht wird.
  6. Halten Sie das Gesicht lebendig, während es spricht: ein Blinzeln alle 2–4 s, ein kleines Nicken bei betonten Wörtern. LipSync.talking(cues, t, offset) gibt an, wann der Charakter spricht.
  7. Qualitätssicherung: Standbilder zu einigen Cue-Zeiten neben der Cue-Datei (passt jeder Mund zum Ton?), dann einmal anhören mit dem Mix.

Regeln und die 3D-Seite: engines/README.md, Lippensynchronisation.

Lottie (Designerdatei)

Studio.lottie(el, "/brands/<slug>/assets/lottie/<file>.json", { start, loop, speed }). Laden Sie /core/node_modules/lottie-web/build/player/lottie.min.js vor der Runtime. Überprüfen Sie, dass die Datei keine Ausdrücke oder Effekte verwendet, die lottie-web nicht zeichnen kann (ein Standbild rendern, mit der Designer-Vorschau vergleichen).

Rive (Designerdatei)

riveLayer(el, "/brands/<slug>/assets/<file>.riv", { animation | stateMachine, start, loop, inputs }) von engines/rive.js. Eine Zeitleiste (animation) wird direkt von t aus posiert. Eine Zustandsmaschine wird von 0 an mit der Bildrate schrittweise durchlaufen, geben Sie ihre Eingaben also als Zeiten: inputs: [{ at: 1.2, name: "wave" }, { at: 2, name: "mood", value: 2 }] (kein Wert = Auslöser). Rendern Sie einige Standbilder in zwei Reihenfolgen (--workers 1, dann --workers 2 mit umgekehrten Zeiten) und prüfen Sie, ob die md5s übereinstimmen. examples/reel-layer/rive.html ist eine funktionierende Testseite.

Charakter-Handwerk

  • Antizipation vor einer Bewegung (ein kleines Zusammendrücken vor einem Hüpfer), Überschwingen danach (back.out).
  • Blinzeln alle 2–4 s in unregelmäßigen Abständen. Ein stiller Charakter wirkt leblos.
  • Halten Sie Posen lange genug, um sie auf einem Handy lesen zu können (≥ 0,4 s).

Individual skills in this repo

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

Verwandte Skills