CommunityImagegithub.com

axolotl-sticker

Créez des autocollants animés Axolotl Launcher (美西螈表情包) avec le moteur AxoStickers — un axolotl voxel dans l'eau sous un grand texte 3D rose, en GIF bouclant de 400×400 ≤ 1 Mo dont la première image sert de couverture.

Qu'est-ce que axolotl-sticker ?

Cette compétence permet de générer automatiquement des autocollants animés (stickers) au format GIF mettant en scène un axolotl voxel dans une mare, surmonté d'un grand texte 3D coloré (rose par défaut). Elle repose entièrement sur du Python pur (numpy + Pillow) et ffmpeg, sans nécessiter de GPU ni de Blender. L'utilisateur peut spécifier un texte de 2 à 5 caractères, un mouvement (parmi 75 options), une expression faciale, des effets visuels, un accessoire tenu, un couvre-chef, une couleur de texte et une animation de texte. Un moteur de tornade aquatique permet également de créer un autocollant spectaculaire où l'axolotl est emporté dans un tourbillon avec des objets Minecraft. Le système produit des GIFs de 400×400 pixels, optimisés pour rester sous 1 Mo avec une gestion automatique de la palette de couleurs (64 à 24 couleurs). Un mécanisme de feuille de révision (review sheet) permet de vérifier visuellement chaque autocollant avant de le livrer. La compétence est conçue pour fonctionner sur n'importe quelle machine avec Python et ffmpeg, et peut être intégrée à des workflows de chat comme Claude Code ou Cursor pour répondre rapidement aux demandes de stickers personnalisés.

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

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Autocollants Axolotl

Tout est en Python pur (numpy + Pillow) plus ffmpeg ; pas de GPU, pas de Blender. La racine du dépôt est le dossier qui contient engine/, kit/ et out/.

pip install numpy pillow          # ffmpeg doit être dans le PATH
python engine/build.py 301 --force            # rend une spécification (par id)
python engine/build.py 12,40-45 --force       # plusieurs
python engine/build.py                        # tout ce qui n'est pas encore rendu (reprise)
python engine/sheet.py 301-310                # feuille de révision -> ref/sheet_sel_N.png (couverture + 3 images chacune)
python engine/manifest.py                     # rafraîchit out/stickers.json après avoir ajouté des stickers
python engine/tornado.py 我没事               # l'autocollant tornade aquatique ("-" = pas de texte) ; nécessite d'abord engine/fetch_mc.py

Sortie : out/NNN_texte.gif et la couverture out/_封面/NNN_texte.png.

Ajouter un autocollant

Une ligne par autocollant dans engine/specs.py (ajouter à la fin de la bonne section pour que les ids existants restent stables) :

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

Choisissez le mouvement qui illustre la phrase, puis un visage, 0 à 2 effets, et au plus un accessoire/chapeau. Gardez le texte entre 2 et 5 caractères (6+ passe sur deux lignes et devient petit). Utilisez / pour forcer un saut de ligne.

  • mouvement (engine/motions.py, engine/motions2.py, 75 au 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, et les actions d'accessoire swing flagwave offer chomp drink read typing scan umbrella (elles lisent hold=).
  • visage (FACES dans 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 un dict comme {'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 ; les génériques prennent un nom d'icône : ('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= (accessoire voxel tenu) : 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=[…] (chapeaux/équipement facial) : party crown nightcap shades glasses band helmet halo horns phones bow chef grad flowers mask towel ice
  • style= couleur du texte : pink (par défaut) blue purple red green gold gray cyan — adaptez à l'ambiance (triste en bleu, en colère en rouge, argent en gold, terminé en green, fatigué en gray, nuit en purple).
  • tmode= animation du texte : stay (par défaut) wave bounce shake shiver pulse droop swing zoom spin pop type slam.

Révision avant de livrer quoi que ce soit

Rendez, puis ouvrez la feuille de révision et regardez-la. Vérifiez que :

  • la couverture (première image) montre le texte complet et l'axolotl ;
  • l'accessoire/effet se lit à la taille du sticker et n'est pas caché derrière la bande de texte (tout ce qui est au-dessus de la tête partage l'espace avec le texte) ;
  • le fond blanc est resté blanc (l'exportateur réessaie avec une palette pleine image lorsque ffmpeg le teinte) ;
  • le fichier fait ≤ 1000 Ko (l'exportateur réduit automatiquement de 64 à 24 couleurs).

Pièges

  • Les mouvements qui quittent le cadre en cours de boucle (launch, sink, dash, popup, slidein, glitch) ne doivent pas utiliser de texte pop/slam/type — la couverture attraperait l'axolotl hors écran.
  • Trop d'autocollants avec le même mouvement semble répétitif : gardez chaque mouvement à environ 6 utilisations dans l'ensemble (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))").
  • Les pattes avant sont petites et situées sous la tête ; les gestes de pattes seuls se lisent à peine — associez-les à un accessoire ou un effet.
  • Les coordonnées des accessoires sont en pixels du modèle local à la tête : le visage est à z = -10, le sommet de la tête à y = 9, +x est la gauche du spectateur.
  • L'humour qui marche avec ce public est pince-sans-rire (难绷), pas les cris exagérés.

La tornade aquatique

engine/tornado.py dessine l'entonnoir comme la même eau que la mare (un contour, même couleur, la ligne d'eau blanche monte le long des parois), fait tourner des bandes en spirale, projette des gouttes et fait tourbillonner l'axolotl en 3D avec des objets vanilla Minecraft rendus en 3D (casque en fer/tortue, seau d'axolotl, TNT). Exécutez python engine/fetch_mc.py une fois pour copier ces textures depuis votre propre client Minecraft (jar 1.21.2+) — elles ne sont jamais commitées.

Skills associés