CommunityImagemgithub.com

axolotl-sticker

Crie adesivos animados do Axolotl Launcher (美西螈表情包) com o motor AxoStickers — um axolote voxel na água sob um grande texto 3D rosa, GIF em loop de 400×400 com ≤ 1 MB cujo primeiro quadro é a capa.

O que é axolotl-sticker?

Esta skill permite gerar adesivos animados (GIFs) de axolotes voxel usando o motor AxoStickers, puramente em Python (numpy + Pillow) e ffmpeg, sem necessidade de GPU ou Blender. Ela aceita comandos para criar novos adesivos a partir de frases, produzir lotes, modificar adesivos existentes (texto, movimento, expressão, adereço, cor) e até gerar o adesivo especial de tornado d'água. O resultado é um GIF de 400×400 pixels, em loop, com ≤ 1 MB, onde o primeiro quadro funciona como capa. A skill é especialmente útil para usuários do Axolotl Launcher que desejam adesivos personalizados para frases ou emoções, suportando uma ampla variedade de movimentos, expressões, efeitos visuais, adereços e estilos de texto. O processo é totalmente controlado por scripts Python na raiz do repositório, com saída em `out/`.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Axolotl-Launcher/AxoStickers/tree/main/skill/axolotl-sticker

Installed? Explore more Imagem skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Adesivos de axolote

Tudo é Python puro (numpy + Pillow) mais ffmpeg; sem GPU, sem Blender. A raiz do repositório é a pasta que contém engine/, kit/ e out/.

pip install numpy pillow          # ffmpeg deve estar no PATH
python engine/build.py 301 --force            # renderizar uma especificação (por id)
python engine/build.py 12,40-45 --force       # várias
python engine/build.py                        # tudo que ainda não foi renderizado (retomável)
python engine/sheet.py 301-310                # folha de revisão -> ref/sheet_sel_N.png (capa + 3 quadros cada)
python engine/manifest.py                     # atualizar out/stickers.json após adicionar adesivos
python engine/tornado.py 我没事               # o adesivo de tornado d'água ("-" = sem texto); precisa de engine/fetch_mc.py primeiro

Saída: out/NNN_texto.gif e a capa out/_封面/NNN_texto.png.

Adicionar um adesivo

Uma linha por adesivo em engine/specs.py (adicione no final da seção correta para que ids existentes fiquem estáveis):

S('摸鱼', 'flagwave', 'happy', [], hold='fish', s=0.7)
#  texto   movimento expressão  fx   extras
S('别催了', 'rage', 'angry', ['steam'], style='red', tmode='shake')
S('暴富', 'spin', 'money', ['coins', ('float', 'money', 3, 4)], style='gold')

Escolha o movimento que encena a frase, depois uma expressão, 0–2 efeitos e no máximo um adereço/chapéu. Mantenha o texto entre 2–5 caracteres (6+ quebra em duas linhas e fica pequeno). Use / para forçar uma quebra de linha.

  • movimento (engine/motions.py, engine/motions2.py, 75 no total): nod shake hop jump flip spin sink popup peek hide tremble rage tantrum dance wag bow kowtow doze flop melt dash slidein look lookup wave cheer clap belly flipover float zoom pounce approach tilt shrink puff grow drift buoy sway headbang headbob roll circle stare shy turnaway think boing wobble faint run launch stretch slosh petrify glitch squish hiccup shakeoff nuzzle rise recoil bonk, e ações de adereço swing flagwave offer chomp drink read typing scan umbrella (estes leem hold=).
  • expressão (FACES em motions.py): normal smile happy joy love star shock surprise angry rage sad cry sob teary sleep sleepy tired meh dead dizzy smug wink focus struggle blep drool money awkward side cool eat shy tiny up grin catface blank pout sparkle determined worried xd — ou um dicionário como {'L': 'big', 'R': 'big', 'mouth': 'o'}.
  • fx (engine/fx.py): hearts question exclaim shock anger sweat panic zzz notes tears stream rain bulb confetti fireworks stars steam gloom sparkles speed fire sun moon blush coins snow leaves check cross boom bubbles ghost dots loading bolt flash thumb plus1 flowers swirl skull twinkle brokenheart; os genéricos aceitam um nome de ícone: ('float', 'diamond', n, size), ('pop', 'pin', size, (dx, dy)), ('stay', 'clock', size, (dx, dy)), ('say', 'mail'), ('orbit', 'star', n, (rx, ry), size), ('fall', 'flower', n, size).
  • hold= (adereço voxel segurado): pickaxe sword wrench flag fish rod heart diamond emerald cookie apple melon carrot potion bulb book cup boba phone laptop gift cake tnt grass brick bowl popcorn torch rtorch magnifier mail key trophy controller bucket umbrella ...
  • wear=[...] (chapéus/acessórios faciais): party crown nightcap shades glasses band helmet halo horns phones bow chef grad flowers mask towel ice
  • style= cor do texto: pink (padrão) blue purple red green gold gray cyan — combine com o humor (triste azul, bravo vermelho, dinheiro dourado, feito verde, cansado cinza, noite roxo).
  • tmode= animação do texto: stay (padrão) wave bounce shake shiver pulse droop swing zoom spin pop type slam.

Revise antes de entregar qualquer coisa

Renderize, depois abra a folha de revisão e olhe para ela. Verifique que:

  • a capa (primeiro quadro) mostra o texto completo e o axolote;
  • o adereço/efeito é legível no tamanho do adesivo e não está escondido atrás da faixa de texto (qualquer coisa acima da cabeça divide espaço com o texto);
  • o fundo branco permaneceu branco (o exportador tenta novamente com uma paleta de quadro completo quando o ffmpeg o tinge);
  • o arquivo tem ≤ 1000 KB (o exportador reduz automaticamente de 64 para 24 cores).

Armadilhas

  • Movimentos que saem do quadro no meio do loop (launch, sink, dash, popup, slidein, glitch) não devem usar texto pop/slam/type — a capa pegaria o axolote fora da tela.
  • Muitos adesivos com o mesmo movimento parecem repetitivos: limite qualquer movimento a cerca de 6 usos no conjunto (python -c "import sys; sys.path.insert(0,'engine'); import specs, collections; print(collections.Counter(s['motion'] for s in specs.all_specs()).most_common(10))").
  • As patas dianteiras são pequenas e ficam sob a cabeça; gestos só com as patas mal são legíveis — combine com um adereço ou efeito.
  • Coordenadas de adereços são pixels do modelo local da cabeça: o rosto está em z = -10, o topo da cabeça em y = 9, +x é a esquerda do observador.
  • O humor que funciona com este público é seco (难绷), não gritos exagerados.

O tornado d'água

engine/tornado.py desenha o funil como o mesmo corpo d'água do lago (um contorno, mesma cor, a linha d'água branca sobe pelas paredes), gira bandas espirais, lança gotas e faz o axolote tombar em 3D junto com itens vanilla do Minecraft tornados 3D (capacete de ferro/tartaruga, balde de axolote, TNT). Execute python engine/fetch_mc.py uma vez para copiar essas texturas do seu próprio cliente Minecraft (jar 1.21.2+) — elas nunca são versionadas.

Habilidades Relacionadas