Communitygithub.com

emoji-party

Erstelle ein beat-synchronisiertes Emoji-Welt-Lyric-Musikvideo in Blender Grease Pencil aus jedem Song und jedem Genre: Emoji-Charaktere mit Style, eine Welt und Palette pro Szene, animierte Lyrics, vollständiger Render.

Was ist emoji-party?

Emoji Party ist ein KI-Agenten-Skill, der aus einem beliebigen Song (Audio-Datei) und seinen Lyrics ein vollständiges 1080p-Video in Blender Grease Pencil erstellt. Das Video zeigt pro Abschnitt ein erkennbares Emoji-Gesicht in einer eigenen Welt mit eigenem Farbschema, das eine nachvollziehbare Aktion ausführt, auf den Beat tanzt und die Lyrics text-synchronisiert einblendet. Der Skill unterstützt alle Musikgenres von Rap und Techno bis Folk und Jazz und passt die Bewegungsstile (z. B. Four-on-the-Floor, Half-Time, Swing) sowie die visuelle Gestaltung (Paletten, Welten, Accessoires) automatisch an die Stimmung und den Rhythmus des Tracks an. Er nutzt erweiterte Beat-Analyse mit Librosa, paralleles Rendern von Szenen in Blender und eine vielseitige Bibliothek für Emojis, Swag-Elemente, Welten und Lyric-Animationen. Geeignet für Claude Code und andere KI-Agenten, die über eine Workspace-Integration verfügen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MayorDapper/Partymoji/tree/HEAD/emoji-party

In Ihrer bevorzugten KI fragen

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

Dokumentation


name: emoji-party description: Erstelle ein beat-synchronisiertes Emoji-Welt-Lyric-Musikvideo in Blender Grease Pencil aus jedem Song und jedem Genre: Emoji-Charaktere mit Style, eine Welt und Palette pro Szene, animierte Lyrics, vollständiger Render.

Emoji Party (beat-synchronisiertes Emoji-Welt-Lyric-Video, Blender Grease Pencil)

Der Benutzer gibt einen Song in einem beliebigen Genre (Audio-Datei) und dessen Lyrics an, oder keine Lyrics für ein Instrumental. Du lieferst ein vollständiges 1080p-Video: ein erkennbares Emoji-Gesicht pro Abschnitt, jedes in seiner eigenen Welt und Farbschema, das etwas Nachvollziehbares tut, auf den Beat tanzt, mit den Lyrics, die auf dem Bildschirm erscheinen und mit dem Bass wackeln. Bewährt mit "Mr Me" (150 BPM, 4:12, 15 Szenen, ~840 Objekte, gerendert in etwa 10 Minuten).

0. Kreativregeln (vom Benutzer gelernt)

  • Hauptfiguren sind Emoji-Gesichter, die eine Emotion tragen, ein anderes pro Szene (ängstlich, Grinsen, bandagiert, keuchend, weinend-lachend, pssst, sprachlos, Nerd, wütend, heiß, Sternenaugen, Reißverschluss-Mund, Geld-Mund, Heiligenschein, Party). Objekte (Kerze, Kompass, Diamant) sind nur Requisiten, niemals die Hauptfigur.
  • Style für jede Hauptfigur: jede Hauptfigur trägt etwas. Für Rap ist das eine Kette mit Anhänger, Grills, Gesichtstattoos, Ohrringe und ein Hut (Cap, Durag, Bucket, Beanie, Krone); für andere Genres siehe Abschnitt 0b.
  • Nachvollziehbare Aktion pro Szene: Autofahren, Fahrrad fahren, eine Prüfung schreiben, mit Handys filmen, angeln, DJ spielen, Gewichte heben, Selfie, Geld werfen.
  • Eine Palette pro Szene, gewählt aus der Stimmung des Liedtextes. Das Lyric-Styling bleibt über die Szenen hinweg konstant, damit das Video als einheitliches Stück wirkt.
  • Eine wiederkehrende Hauptfigur (Sonnenbrillen-Emoji) besitzt den Refrain und kehrt im letzten Refrain mit der gesamten Besetzung dahinter zurück.
  • Zeichne originelle Emoji-ähnliche Charaktere. Kopiere keinen Emoji-Satz eines Anbieters.
  • Zeige zuerst eine einzelne Testszenen (oder 3 Palettenoptionen) und hole ein OK, bevor du alles baust. Sende Vorschaustandbilder mit SendUserFile.

0b. An die Musik anpassen (jedes Genre)

Lies den Track, bevor du etwas auswählst. Genre ist eine Eingabe, keine Annahme.

  • Tempobestimmung: Suche 60-180 BPM, löse dann Halb-/Doppelzeit basierend darauf, wo die Snare oder Clap liegt (Beat 2 und 4). Trap und Hip-Hop lesen sich oft als 140-150, fühlen sich aber halb so schnell an; Drum and Bass liest 170+, kann aber mit halber Geschwindigkeit animiert werden. Speichere sowohl FPB (gefühlter Beat) als auch den Grid-Beat.
  • Taktart: Standard 4 Beats pro Takt; mache Beats-pro-Takt zu einem Parameter (3 für Walzer, 6 für 6/8) und verwende ihn in FR(takt) und den Taktlängen-Ausdrücken.
  • Tempodrift (Live-Bands, ältere Aufnahmen): Wenn der Kammfilter-Score schwach ist oder driftet, verwende eine getrackte Beat-Liste und weise jedem Beat eine beat_phase-Eigenschaft zu, anstelle der Ausdrücke mit fester Periode.
  • Bildrate: Wähle die fps, die ganze Frames pro gefühltem Beat ergibt; ansonsten 25 und akzeptiere gebrochene Beats.
  • Bewegung nach Gefühl:
    • Four-on-the-Floor (House, Techno, Disco, Amapiano): gleichmäßiger Hüpfer auf jedem Beat, stetiges Wiegen.
    • Half-Time (Trap, Hip-Hop, Drill, Dubstep): großer Einschlag auf Beat 1, zurücklehnen auf 3, kleine HiHat-Details.
    • Off-Beat (Reggae, Dancehall, Afrobeats, Ska): Hüpfen auf OFFB, Hüften schwingen mit einer 2-Beat-Periode.
    • Schnell (Drum and Bass, Punk, Hardcore): halb so schneller Körper, volle Geschwindigkeit bei Händen und Requisiten.
    • Langsam (Ballade, R&B, Soul, Lo-Fi): nur wiegen, lange Perioden, wenig Quetschen, langsame Lyric-Fades statt Poppen.
    • Swing/Triple (Jazz, Blues, Shuffle): Verzögere den Off-Beat auf zwei Drittel des Beats.
  • Schnittrate nach Energie: 8-16 Takte pro Szene in ruhigen Passagen, 4 Takte in Refrains, 1-2 Takte in Drops und Höhepunkten.
  • Look nach Genre und Lyrics: Wähle Paletten, Welten, Hüte und Accessoires, die zur Musik gehören (Ketten und Grills für Rap, Kopfhörer und Visiere für Dance-Musik, Cowboyhut für Country, Blumen für Folk, Nieten für Rock). Behalte immer das Emoji-Gesicht als Hauptfigur und halte die Style-Regel ein: jede Hauptfigur trägt etwas.
  • Lyric-Stil: harte Pops und Shake für basslastige Tracks; sanfter Slide und Fade für ruhige Tracks; größere Schrift für Gesänge und Hooks. Die Sprache folgt den Lyrics wie vorgegeben (dialektale oder Pidgin-Formen niemals "korrigieren").
  • Instrumentals: keine Lyric-Ebene; verwende den Titel, Abschnittsnamen oder kurze Stimmungswörter bei Drops und lass Requisiten die Geschichte erzählen.
  • Bestätige die Interpretation mit dem Benutzer in einer Zeile (BPM, Gefühl, Abschnittszuordnung), bevor du baust.

1. Den Song analysieren (Workspace)

  • pip install --break-system-packages -q librosa, dann eine Kammfilter-Suche über niederfrequenten Fluss (<130 Hz) über einen BPM-Bereich ergibt exakten BPM und Offset des ersten Beats; drucke pro Takt Kick (K) und Lautstärke (R), um Intro, Groove, Drops und Dropouts zu sehen. Vertraue nicht dem im Prompt geschriebenen BPM (der Suno-Prompt sagte 140; der Track hatte 150).
  • Verwende 25 fps, wenn es ganze Frames pro Beat ergibt (120, 125, 150 BPM tun das).
  • Lyric-Timings: Sprachmodelle können im Workspace nicht heruntergeladen werden, und Uploads zu Descript-Speichern sind von der Shell aus blockiert. Rufe Descript file_upload_ui auf, bitte den Benutzer, das Audio abzulegen, wait_for_job, dann export_transcript als srt. Erwarte zeilenweises Timing für klare Rap/gesprochene Teile und blockweises (oder fehlendes) Timing für dichte oder gesungene Teile; ordne die echten Lyrics des Benutzers diesen Zeitstempeln manuell zu und schätze den Rest gleichmäßig über die Takte auf. Teile dem Benutzer mit, welche Abschnitte geschätzt sind.
  • Schreibe eine Szenetabelle: Abschnitt, Starttakt, Emoji, Welt, Aktion, Palette. Szenengrenzen liegen auf Takten (halbe Takte sind in Ordnung). Füge instrumentale Szenen (Titelkarte, Drop) hinzu, wo die Stimme leise ist.

2. Blender-Setup

  • Überprüfe die Verbindung mit blender__get_scene_info. Frage nach, bevor du eine gespeicherte Datei löschst. Speichere frühzeitig (frage nach einem Ordner; Blenders Python kann die Benutzerordner direkt lesen, also weise den Soundstrip direkt auf das Audio an Ort und Stelle zu, anstatt es zu kopieren).
  • Flaches 2D: orthografische Kamera bei y=-20, blickt entlang +Y, ortho_scale 16 (Ansicht ist 16 x 9 Einheiten). Alles wird in der XZ-Ebene gezeichnet; Tiefe ist das Y des Objekts (größeres Y ist weiter hinten).
  • Jede Szene lebt bei X = Index * 40 in ihrer eigenen Collection S01_...; die Kamera springt zwischen ihnen mit LINEAR-Keyframes auf der X-Position (plus einer kleinen Drift innerhalb jeder Szene) und einem Timeline-Marker pro Schnitt.
  • Farbe: view_transform='Standard', Look None. Speichere wiederverwendbaren Code in bpy.data.texts und führe ihn am Anfang jedes Aufrufs mit exec aus.

3. Grease Pencil-Regeln, die Zeit kosten (Blender 5.x)

  • Daten sind bpy.data.grease_pencils; layer.frames.new(1).drawing; drawing.add_strokes([n]); setze point.position=(x,0,z) und point.radius; rufe drawing.tag_positions_changed() auf.
  • Flächen werden nicht gerendert, es sei denn, jeder gefüllte Stroke hat eine nicht-null fill_id. Setze stroke.fill_id = eindeutige Zahl für Flächen und 0 für Linien, und stroke.hide_stroke = True bei reinen Flächen-Strokes. Gib allen Schleifen einer Schriftglyphe dieselbe fill_id, damit Buchstabenlöcher ausgeschnitten werden.
  • Materialien: bpy.data.materials.create_gpencil_data(m); show_fill / show_stroke; radialer Verlauf via fill_style='GRADIENT'. Materialfarben sind linear: konvertiere Hex mit (v/255)**2.2, sonst sieht alles ausgewaschen aus.
  • layer.use_lights = False auf jeder Ebene.
  • Schrift-/Kurventext-Objekte werden in Rendern hinter Grease Pencil versteckt. Konvertiere Text zu GP: erstelle eine temporäre FONT-Kurve, evaluated_get(dg).to_curve(dg), sampel Bezier-Splines mit mathutils.geometry.interpolate_bezier, zeichne die Schleifen als GP-Strokes (zuerst Umriss-Strokes, dann Flächen). Erledige die temporäre Arbeit in einer separaten Scratch-Szene, damit der Depsgraph der großen Szene nicht für jedes Wort neu ausgewertet wird (486 Wörter brauchten so 3 s).
  • Transluzente Flächen über anderen transluzenten Flächen sehen matschig aus; bevorzuge undurchsichtige dunklere Farben für Strahlen und Glühen.
  • Treiber: Auto-Run Python ist normalerweise aus, daher muss jeder Treiber ein einfacher Ausdruck sein (sin abs exp fmod min max pi frame); behaupte driver.is_simple_expression.

4. Beat-Ausdrücke (F0 = Frame des ersten Beats, FPB = Frames pro Beat)

PULSE = exp(-fmod(frame-F0+BIG, FPB)/(FPB*0.25))        # 1 auf jedem Beat, klingt ab
OFFP  = dasselbe, um einen halben Beat verschoben                  # Off-Beat
HALF  = exp(-fmod(frame-F0+BIG, 2*FPB)/(FPB*0.45))      # alle 2 Beats
OFFB  = HALF um einen Beat verschoben
SWAY(per,ph) = sin(pi*(frame-F0)/(FPB*per)+ph)
FR(takt) = F0 + round(4*FPB*takt)

dance(obj): Position Z += HüpferPULSE, Skalierung X (1+QuetschenPULSE), Skalierung Z (1-QuetschenPULSE), Rotation Y += WiegenSWAY. Wechsle PULSE und OFFP zwischen Nachbarn ab. Hände zucken auf HALF/OFFB. Kamera ortho_scale = 16*(1 - Zoom*PULSE) mit einer getregen zoom-Custom-Property (größer in Drops und Refrains).

5. Hilfsbibliothek zum einmaligen Bauen

  • Formen: ell, rect, rrect, star, drop; F (Füllung), S (Linie), P (Füllung + Tintenumriss).
  • emo(C,name,x,z,r,mood): Schatten, gelber Farbverlaufskreis, Glanz, dann Merkmale pro Stimmung. Speichere o["r"]=r, damit Accessoires skaliert werden.
  • Swag: chain(o,pendant,ice), grills(o), tattoo(o,kind,side) (Träne, Kreuz, Stern, Linien, Text), earring(o,side), hat(o,kind,col,col2,tilt) als Kind-Objekt, headphones(o), hand(...) mit Ringen und optionaler Uhr.
  • Welt: sky(C,X,top,mid,bot) als 16 Farbbänder, ground, city Skyline mit beleuchteten Fenstern, wheel mit einem Rotationstreiber, phone.
  • preview(shots) rendert Standbilder mit 33% nach /tmp und montage(pfade) kachelt sie mit numpy zu einem Bild; betrachte es mit blender__look(image=path). Überprüfe jede Szene auf diese Weise vor dem Rendern.

6. Lyric-Ebene

  • Daten: Liste von (art, t0, t1, text) mit Arten L Zeile, A Ad-lib, H Hook-Wort, B großer Ruf. Speichere sie als JSON in einem Textblock.
  • L: Teile in Wörter auf, umbreche auf 14,4 Einheiten Breite bei Größe 0,78 mit einem Abstand von 0,44, oben im Bild. Jedes Wort ist sein eigenes GP-Objekt, das bei start + i*schritt erscheint (Schritt aus Zeilendauer, 2 bis 8 Frames) und zu Beginn der nächsten Zeile oder beim Szenenschnitt ausgeblendet wird.
  • Pro-Wort-Treiber: scale = vis * pop * (1+0.10*PULSE) wobei vis eine 2-Frame-Ein-/Ausblendrampe und pop ein 6-Frame-Überschwinger ist; Position X/Z += shake*sin(frame*k+ph)*PULSE für den Bass-Vibrato.
  • A: pink, geneigt, wechselnd links und rechts. H: gelb, unten, fällt von oben ein. B: gold, Größe 1,5, oben.
  • Lege die Lyric-Objekte jeder Szene in LYR_Sxx-Collections, damit Render-Chunks den Rest ausblenden können.

7. Rendern (schneller Pfad)

  • Ein Vollbild-Render dauert ~1,3 s/Frame, weil jedes GP-Objekt ausgewertet wird. Rendere einen Chunk pro Szene parallel stattdessen: ein Hintergrund-Blender pro Szene, der hide_render für jede Collection außer Sxx_, LYR_Sxx und CAMERA setzt, den Soundstrip entfernt und H264 ohne Audio schreibt. Starte 5 gleichzeitig aus einem abgekoppelten Runner-Prozess (start_new_session=True), der in render_log.txt protokolliert.
  • Dann montiere in einer leeren Factory-Szene mit Filmstreifen am Startframe jeder Szene plus dem Soundstrip, H264 + AAC. Setze die View-Transform dieser Szene auf Standard, sonst kommt das endgültige Video dunkel und entsättigt heraus (Factory-Standard ist AgX).
  • Lösche Chunks erst, wenn die endgültige Datei verifiziert ist.
  • Verifiziere: Lade die mp4 als Movieclip (Frame-Anzahl, fps, Größe) und als Sound (Rate, Kanäle); ziehe ~16 Frames durch eine temporäre Sequencer-Szene mit Standard-View-Transform in ein Kontaktblatt und betrachte es. Der bgl-Add-on-Traceback in Hintergrundlogs ist harmlos.
  • Warte nicht in einer engen Schleife; schlafe ~5 Minuten zwischen den Überprüfungen und teile dem Benutzer die erwartete Zeit mit.

8. Liefern

  • Sage, wo die mp4 und die .blend-Datei sind (normale Worte plus ein computer://-Link) und sende das Kontaktblatt.
  • Gib an, was nicht überprüft wurde (du hast Standbilder gesehen, keine Wiedergabe) und welche Lyric-Abschnitte geschätzt sind.
  • Biete Korrekturen nach Szene oder nach Lyric-Zeile an; Timeline-Marker sind die Schnitte und das Lyric-JSON enthält die Timings.

Verwandte Skills