Communitygithub.com

emoji-party

Crie um videoclipe de mundo de emojis sincronizado com a batida de qualquer música usando o Grease Pencil do Blender: personagens emoji com estilo, um mundo e paleta por cena, letras animadas e renderização completa.

O que é emoji-party?

Esta skill transforma qualquer música (arquivo de áudio) e sua letra em um videoclipe completo de 1080p, estilizado como um mundo de emojis, usando o Blender Grease Pencil. Ela analisa a música para detectar BPM, compasso e energia, e então cria cenas com emojis únicos (cada um com expressão, acessórios e ações relacionáveis), sincronizados com a batida. As letras são animadas na tela, com efeitos de pop e vibração conforme a batida. A skill gera uma renderização paralela eficiente, montando o vídeo final com áudio. Funciona com qualquer gênero musical, adaptando estilo visual, ritmo de animação e tratamento das letras. É ideal para criadores de conteúdo, músicos e artistas visuais que desejam produzir vídeos musicais criativos e personalizados sem precisar de habilidades avançadas em animação 3D.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Emoji Party (videoclipe de mundo de emojis sincronizado com a batida, Blender Grease Pencil)

O usuário fornece uma música em qualquer gênero (arquivo de áudio) e sua letra, ou nenhuma letra para uma versão instrumental. Você entrega um vídeo completo em 1080p: um rosto emoji reconhecível por seção, cada um em seu próprio mundo e esquema de cores, fazendo algo relacionável, dançando na batida, com as letras aparecendo na tela e tremendo com o grave. Comprovado em "Mr Me" (150 BPM, 4:12, 15 cenas, ~840 objetos, renderizado em cerca de 10 minutos).

0. Regras criativas (aprendidas com o usuário)

  • Os protagonistas são rostos emoji que carregam uma emoção, um diferente por cena (ansioso, sorriso, enfaixado, bufando, chorando de rir, silêncio, mente explodida, nerd, bravo, quente, olhos estrelados, boca zíper, boca dinheiro, auréola, festa). Objetos (vela, bússola, diamante) são apenas adereços, nunca o protagonista.
  • Estilo em cada protagonista: todo protagonista usa algo. Para rap, isso inclui corrente com pingente, grillz, tatuagens no rosto, brincos e um chapéu (boné, durag, bucket, gorro, coroa); para outros gêneros, veja a seção 0b.
  • Ação relacionável por cena: dirigindo, andando de bicicleta, fazendo uma prova, filmando com celular, pescando, sendo DJ, levantando peso, selfie, jogando dinheiro.
  • Uma paleta por cena, escolhida a partir do clima da letra. O estilo da letra permanece constante entre as cenas para que o vídeo seja lido como uma peça única.
  • Um protagonista recorrente (emoji de óculos escuros) é o dono do refrão e retorna no refrão final com todo o elenco atrás.
  • Desenhe personagens originais no estilo emoji. Não copie o conjunto de emojis de um fornecedor.
  • Mostre uma única cena de teste (ou 3 opções de paleta) primeiro e obtenha um sim antes de construir tudo. Envie prévias de imagens com SendUserFile.

0b. Adapte-se à música (qualquer gênero)

Leia a faixa antes de escolher qualquer coisa. Gênero é uma entrada, não uma suposição.

  • Busca de tempo: pesquise de 60 a 180 BPM, depois resolva metade/dobro do tempo por onde a caixa ou o clap cai (tempos 2 e 4). Trap e hip-hop geralmente são lidos como 140-150, mas parecem em meio tempo; drum and bass lê 170+, mas pode ser animado na metade da velocidade. Armazene tanto FPB (batida sentida) quanto a batida da grade.
  • Compasso: padrão 4 batidas por compasso; torne batidas por compasso um parâmetro (3 para valsa, 6 para 6/8) e use-o em FR(bar) e nas expressões de duração do compasso.
  • Desvio de andamento (bandas ao vivo, gravações antigas): se a pontuação do comb for fraca ou desviar, use uma lista de batidas rastreada e crie uma propriedade beat_phase por batida em vez das expressões de período fixo.
  • Taxa de quadros: escolha o fps que fornece quadros inteiros por batida sentida; caso contrário, 25 e aceite batidas fracionárias.
  • Movimento por sensação:
    • Four-on-the-floor (house, techno, disco, amapiano): balanço uniforme em cada batida, oscilação constante.
    • Meio tempo (trap, hip-hop, drill, dubstep): grande impacto na batida 1, recue na 3, detalhes rápidos de chimbal.
    • Off-beat (reggae, dancehall, afrobeats, ska): quique no OFFP, quadris balançam em um período de 2 batidas.
    • Rápido (drum and bass, punk, hardcore): corpo na metade da velocidade, mãos e adereços na velocidade total.
    • Lento (balada, R&B, soul, lo-fi): apenas oscile, períodos longos, pouco squash, desvanecimentos lentos de letras em vez de pops.
    • Swing/tripleto (jazz, blues, shuffle): atrase o off-beat para dois terços da batida.
  • Taxa de corte por energia: 8-16 compassos por cena quando calmo, 4 compassos nos refrões, 1-2 compassos nas quedas e picos.
  • Aparência a partir do gênero e da letra: escolha paletas, mundos, chapéus e acessórios que pertençam à música (correntes e grillz para rap, fones de ouvido e viseiras para música de dança, chapéu de cowboy para country, flores para folk, tachas para rock). Sempre mantenha o rosto emoji como protagonista e mantenha a regra de estilo: todo protagonista usa algo.
  • Estilo da letra: pops fortes e agitação para faixas com muito grave; deslize suave e desvanecimento para faixas suaves; tipo maior para cantos e refrões. O idioma segue a letra fornecida (nunca "corrija" dialeto ou pidgin).
  • Instrumentais: sem camada de letra; use o título, nomes de seção ou palavras curtas de humor nas quedas, e deixe os adereços contarem a história.
  • Confirme a leitura com o usuário em uma linha (BPM, sensação, mapa de seção) antes de construir.

1. Analise a música (espaço de trabalho)

  • pip install --break-system-packages -q librosa, em seguida, uma pesquisa comb no fluxo de baixa banda (<130 Hz) em uma faixa de BPM fornece o BPM exato e o deslocamento da primeira batida; imprima o kick (K) e a intensidade (R) por compasso para ver introdução, groove, quedas e pausas. Não confie no BPM escrito no prompt (o prompt do Suno disse 140; a faixa era 150).
  • Use 25 fps quando fornecer quadros inteiros por batida (120, 125, 150 BPM fazem).
  • Temporizações da letra: modelos de fala não podem ser baixados no espaço de trabalho, e uploads para o armazenamento do Descript estão bloqueados a partir do shell. Chame Descript file_upload_ui, peça ao usuário para soltar o áudio, wait_for_job, depois export_transcript como srt. Espere temporização no nível da linha para partes de rap/faladas claras e temporização no nível do bloco (ou ausente) para partes densas ou cantadas; corresponda as letras reais do usuário a esses timestamps manualmente e estime o restante uniformemente entre os compassos. Informe ao usuário quais seções são estimadas.
  • Escreva uma tabela de cenas: seção, compasso inicial, emoji, mundo, ação, paleta. Os limites das cenas ficam nos compassos (meios compassos são aceitáveis). Adicione cenas instrumentais (cartão de título, queda) onde o vocal está silencioso.

2. Configuração do Blender

  • Verifique a conexão com blender__get_scene_info. Pergunte antes de limpar um arquivo salvo. Salve cedo (peça uma pasta; o Python do Blender pode ler as pastas do usuário diretamente, então aponte a faixa de som para o áudio no local em vez de copiá-lo).
  • 2D plano: câmera ortográfica em y=-20 olhando ao longo de +Y, ortho_scale 16 (a vista é 16 x 9 unidades). Tudo é desenhado no plano XZ; a profundidade é o Y do objeto (Y maior é mais ao fundo).
  • Cada cena vive em X = índice * 40 em sua própria coleção S01_...; a câmera salta entre elas com chaves LINEARES no local X (mais um pequeno desvio dentro de cada cena) e um marcador de linha do tempo por corte.
  • Cor: view_transform='Standard', look None. Armazene código reutilizável em bpy.data.texts e execute-o com exec no topo de cada chamada.

3. Regras do Grease Pencil que custam tempo para encontrar (Blender 5.x)

  • Dados são bpy.data.grease_pencils; layer.frames.new(1).drawing; drawing.add_strokes([n]); defina point.position=(x,0,z) e point.radius; chame drawing.tag_positions_changed().
  • Preenchimentos não renderizam a menos que cada traço preenchido tenha um fill_id diferente de zero. Defina stroke.fill_id = int único para preenchimentos e 0 para contornos, e stroke.hide_stroke = True em traços apenas de preenchimento. Dê a todos os loops de um glifo de texto o mesmo fill_id para que os buracos das letras sejam recortados.
  • Materiais: bpy.data.materials.create_gpencil_data(m); show_fill / show_stroke; gradiente radial via fill_style='GRADIENT'. As cores dos materiais são lineares: converta hex com (v/255)**2.2 ou tudo parecerá desbotado.
  • layer.use_lights = False em todas as camadas.
  • Objetos de texto de fonte/curva estão ocultos atrás do Grease Pencil nas renderizações. Converta texto para GP: faça uma curva FONT temporária, evaluated_get(dg).to_curve(dg), amostre splines bezier com mathutils.geometry.interpolate_bezier, desenhe os loops como traços GP (traços de contorno primeiro, depois preenchimentos). Faça o trabalho temporário em uma cena de rascunho separada para que o depsgraph da cena grande não seja reavaliado por palavra (486 palavras levaram 3 s desta forma).
  • Preenchimentos translúcidos sobre outros preenchimentos translúcidos parecem turvos; prefira cores opacas mais escuras para raios e brilhos.
  • Drivers: o Python de execução automática geralmente está desligado, então todo driver deve ser uma expressão simples (sin abs exp fmod min max pi frame); afirme driver.is_simple_expression.

4. Expressões de batida (F0 = quadro da primeira batida, FPB = quadros por batida)

PULSE = exp(-fmod(quadro-F0+BIG, FPB)/(FPB*0.25))        # 1 em cada batida, decai
OFFP  = mesmo, deslocado meia batida                       # off-beat
HALF  = exp(-fmod(quadro-F0+BIG, 2*FPB)/(FPB*0.45))      # a cada 2 batidas
OFFB  = HALF deslocado uma batida
SWAY(per,ph) = sin(pi*(quadro-F0)/(FPB*per)+ph)
FR(compasso) = F0 + arredondar(4*FPB*compasso)

dance(obj): localização Z += bouncePULSE, escala X (1+squashPULSE), escala Z (1-squashPULSE), rotação Y += swaySWAY. Alterne PULSE e OFFP entre vizinhos. Mãos encolhem em HALF/OFFB. Câmera ortho_scale = 16*(1 - zoom*PULSE) com uma propriedade personalizada zoom com chave (maior em quedas e refrões).

5. Biblioteca auxiliar para construir uma vez

  • Formas: ell, rect, rrect, star, drop; F (preenchimento), S (contorno), P (preenchimento + contorno a tinta).
  • emo(C,nome,x,z,r,humor): sombra, disco gradiente amarelo, brilho, depois características por humor. Armazene o["r"]=r para que os acessórios escalem.
  • Estilo: chain(o, pingente, gelo), grills(o), tattoo(o, tipo, lado) (lágrima, cruz, estrela, linhas, texto), earring(o, lado), hat(o, tipo, cor1, cor2, inclinação) como um objeto filho, headphones(o), hand(...) com anéis e relógio opcional.
  • Mundo: sky(C, X, topo, meio, fundo) como 16 faixas de cor, ground, city horizonte com janelas iluminadas, wheel com um driver de rotação, phone.
  • preview(shots) renderiza imagens estáticas a 33% para /tmp e montage(caminhos) as organiza com numpy em uma imagem; veja-a com blender__look(imagem=caminho). Verifique cada cena desta forma antes de renderizar.

6. Camada de letras

  • Dados: lista de (tipo, t0, t1, texto) com tipos L linha, A ad-lib, H palavra de refrão, B grito grande. Armazene como JSON em um bloco de texto.
  • L: divida em palavras, ajuste para 14.4 unidades de largura no tamanho 0.78 com um espaçamento de 0.44, topo do quadro. Cada palavra é seu próprio objeto GP que aparece em início + i*passo (passo da duração da linha, 2 a 8 quadros) e fica oculta no início da próxima linha ou no corte da cena.
  • Drivers por palavra: escala = vis * pop * (1+0.10*PULSE) onde vis é uma rampa de entrada/saída de 2 quadros e pop é um overshoot de 6 quadros; localização X/Z += shake*sen(quadro*k+ph)*PULSE para a vibração do grave.
  • A: rosa, inclinado, alternando esquerda e direita. H: amarelo, inferior, cai de cima. B: dourado, tamanho 1.5, superior.
  • Coloque os objetos de letra de cada cena em coleções LYR_Sxx para que os blocos de renderização possam ocultar o resto.

7. Renderização (caminho rápido)

  • Uma renderização de cena completa leva ~1.3 s/quadro porque cada objeto GP é avaliado. Renderize um bloco por cena em paralelo em vez disso: um Blender em segundo plano por cena que define hide_render em todas as coleções exceto Sxx_, LYR_Sxx e CAMERA, remove a faixa de som e escreve H264 sem áudio. Execute 5 por vez a partir de um processo runner destacado (start_new_session=True) que registra em render_log.txt.
  • Em seguida, monte em uma cena vazia de fábrica com faixas de filme no quadro inicial de cada cena mais a faixa de som, H264 + AAC. Defina a transformação de visualização dessa cena como Padrão ou o vídeo final sairá escuro e dessaturado (o padrão de fábrica é AgX).
  • Não exclua os blocos até que o arquivo final seja verificado.
  • Verifique: carregue o mp4 como um movieclip (contagem de quadros, fps, tamanho) e como um som (taxa, canais); extraia ~16 quadros através de uma cena de sequenciador temporária com transformação de visualização Padrão em uma folha de contato e observe-a. O traceback do add-on bgl nos logs de segundo plano é inofensivo.
  • Não faça polling em um loop apertado; durma ~5 minutos entre as verificações e informe ao usuário o tempo esperado.

8. Entrega

  • Diga onde estão o mp4 e o .blend (palavras simples mais um link computer://), e envie a folha de contato.
  • Informe o que não foi verificado (você viu imagens estáticas, não a reprodução) e quais seções de letra são estimadas.
  • Ofereça correções por cena ou por linha de letra; os marcadores da linha do tempo são os cortes e o JSON da letra contém as temporizações.

Habilidades Relacionadas