CommunityImagegithub.com

Générer un sprite 2D

Crée des personnages, créatures, accessoires, icônes et effets spéciaux prêts pour le jeu, sous forme de plans fixes maîtres, de feuilles de sprites ou de clips d'animation.

Qu'est-ce que Générer un sprite 2D ?

Cette compétence permet de générer des assets 2D complets pour un moteur de jeu, en passant par la planification, la génération d'images (via API ou outils locaux comme Codex ou Grok), l'approbation d'un plan fixe maître par personnage, puis le découpage, l'enregistrement, la mise à l'échelle, la palette, le contrôle qualité et l'exportation vers des formats comme Aseprite JSON, Godot SpriteFrames ou Sprite3D. Elle prend en charge les finitions HD (par défaut), pixel ou hi-bit, et gère les feuilles de sprites pour les effets, icônes et accessoires, tandis que les animations de personnages sont déléguées à la compétence video2dsprite pour un clip par action. L'outil vérifie automatiquement les clés API configurées (OpenAI, Gemini, xAI, etc.) ou utilise des outils locaux, et suit un pipeline rigoureux avec des contrôles de qualité numériques. Elle n'est pas destinée aux cartes, tuiles, décors ou aux appels directs à une API d'image ou de vidéo.

Compatible avec✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/lyseocuonglauthingai-sketch/agent-sprite-skills/tree/HEAD/.agents/skills/generate2dsprite

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

Que fait Générer un sprite 2D ?

Créez le plus petit ensemble d'assets dont le jeu a besoin, à sa taille d'affichage réelle, selon sa caméra et son style. La logique de jeu (collision, dégâts, timing) reste indépendante de l'art.

Quand l'utiliser

  • Un personnage, une créature, un accessoire, un objet, une icône ou un effet est nécessaire sous forme de plan fixe maître, d'une feuille ou de clips.
  • Des images existent déjà (générées, peintes, codées) et ont besoin de clips, de palettes ou d'une exportation pour un moteur.

Quand ne pas l'utiliser

Vérification des capacités (une fois par session)

Exécutez python "<skill-dir>/../generate2dmedia/scripts/forge_doctor.py" --host-tools <tools> --save <output>/doctor.json, où <tools> liste les outils média de votre propre liste d'outils (image_gen, image_edit, image_to_video) ou none. Son bloc ROUTES montre quelles clés API sont configurées (oui ou non), la disponibilité locale et l'ordre résolu. Si encoding.stdout échoue, définissez PYTHONUTF8=1.

Source artistique

La génération d'images est la source par défaut pour les personnages, créatures, accessoires, icônes et effets. Enregistrez-la comme art_source (api, host_image, existing, ou code uniquement sur demande) et nommez la route dans votre réponse. Une route que l'utilisateur nomme explicitement l'emporte.

  1. API, lorsqu'une clé est configurée : OpenAI (OPENAI_API_KEY), Google Gemini (GEMINI_API_KEY), xAI (XAI_API_KEY), BytePlus Seedream (ARK_API_KEY) ou fal.ai (FAL_KEY), dans l'environnement ou le fichier de configuration utilisateur (route-media.md). La clé configurée est le consentement du propriétaire, donc pas de question par appel.
  2. Local : votre propre outil d'image (Codex image_gen, outil natif de Grok) si vous en avez un, sinon le Codex CLI de l'utilisateur connecté, puis Grok CLI.
  3. codeart2d uniquement lorsque l'utilisateur demande explicitement de l'art codé, ou lorsque route_media.py affiche no-route (sortie 3). Dites alors « codé, pas de modèle d'image ».

Les FX Hibit sont la seule exception : fx_pixelfx.py check les envoie à pixelfx lorsque l'utilisateur l'a installé (route A, FX codés tiers, crédités et divulgués), sinon à la route image (route B). Voir hibit.md.

Chaque image passe par une commande : python "<skill-dir>/../generate2dmedia/scripts/route_media.py" image --prompt-file <txt> --reference <png> --size 1024x1024 --out-dir <new>. Elle choisit la route dans cet ordre et imprime une ligne JSON avec route, artifact, sha256 et estimateUsd ; resolve --kind image indique quelle route serait exécutée. L'art existant fourni par l'utilisateur est toujours le bienvenu. Ne prétendez jamais à une génération qui n'a pas eu lieu ; conservez le prompt et le contrat et signalez une capacité manquante.

  • Finition : HD est la valeur par défaut : couleur complète, alpha propre, un enregistrement et un redimensionnement de zone prémultipliée à la hauteur du jeu. La finition pixel (une palette partagée, alpha binaire, pas de tramage) est une option lorsque l'utilisateur demande du pixel art ; la finition hibit (art plat sans ligne du modèle, puis une palette de personnage, un redimensionnement à la majorité et une couleur de contour tirée de l'image) lorsqu'il veut le look hi-bit (hibit.md). Ne demandez jamais à un modèle d'image une grille de pixels logique ; le look pixel vient de la finition.
  • Personnages : approuvez un plan fixe maître par personnage, puis animez-le avec video2dsprite : un clip image-vers-vidéo par action, tous à partir de ce maître (sprite_set.py). Conservez la hauteur du corps de chaque action par rapport à la pose de repos du maître.
  • Feuilles sont pour les FX, icônes et accessoires (et les images fournies par l'utilisateur), pas pour l'animation de personnages.

Plan fixe maître (toute animation de personnage commence ici)

Un plan fixe maître approuvé par personnage, puis un clip image-vers-vidéo par action à partir de celui-ci (video2dsprite) ; les feuilles sont pour les FX, icônes et accessoires. Formulation : prompt-rules.md ; commandes, cadrage et master.json : master-still.md.

  1. Spécification (--spec <json> et/ou drapeaux) : --name, --subject, --identity (long et précis), --facing left|right|front|back, --class hero|mob|boss|prop, --finish hd|pixel|hibit (HD par défaut ; pixel ou hibit uniquement sur demande ; hibit rend le plan fixe plat et sans ligne), --identity-ref (PREMIÈRE image, copiée exactement), --style-ref (SECONDE : un sprite pair approuvé, style et cadrage uniquement), --key (par défaut #FF00FF ; vert ou bleu pour les designs violet et rose).
  2. Générer : python "<skill-dir>/scripts/master_still.py" generate --spec <json> --takes 3 --output-dir <new>. Chaque prise passe par generate2dmedia route_media.py (d'abord la clé API, puis le démon local) ; takes.png les montre côte à côte. La sortie 3 signifie aucune route : dites-le ; codeart2d est la solution de repli (« codé, pas de modèle d'image »). Avec l'outil d'image de l'hôte : exécutez master_still.py prompt et attachez les références listées dans cet ordre.
  3. Choisissez en regardant : identité, orientation, rien ne touche un bord, pas de texte.
  4. Corrigez un quasi-échec par édition, jamais par re-lancer : master_still.py edit --run <dir> --take N --change "<un changement>" --output-dir <new> (ou --master <dir>).
  5. Approuvez : master_still.py approve --run <dir> --take N --output-dir <new> (un plan fixe d'ailleurs : --still <png> --route <ce qui l'a créé>). Il key le plan fixe, le recadre avec une marge de 6 px, le redimensionne par LANCZOS au cadrage de classe sur 1024x1024 (héros 788 px de haut, marge supérieure 138 px) et écrit master.png (opaque, key pur), master_rgba.png et master.json (generate2dsprite.master.v1).
  6. Les étapes de mouvement lisent master.json (identity_recap, facing, finish, class, framing, key, files, transform, route) et ne remesurent jamais le plan fixe ; chaque prompt de clip commence par « Le même <identity_recap> ».

Signalez la route depuis master.json route. Un avertissement FORGE_ROUTE_MEDIA_FAKE signifie que l'image n'est pas une vraie génération.

Notes sur l'hôte

  • Codex : image_gen est votre propre outil d'image ; sans clé configurée, utilisez-le et regardez les résultats avec view_image. Une image créée cette session qui n'est pas dans le projet : python "<skill-dir>/../generate2dmedia/scripts/cli_media.py" adopt --codex-thread <thread-id> --output-dir <new>, puis traitez generated.png. codeart2d et generate2dmedia sont explicites uniquement : ouvrez leur SKILL.md lorsque celui-ci y achemine.
  • Claude Code : pas de générateur d'image intégré : route_media.py prend l'API ou les CLI locaux. Regardez chaque PNG que vous créez avec Read ; exécutez les outils avec Bash ; <skill-dir> est ${CLAUDE_SKILL_DIR}.
  • Grok : ses outils d'image et de vidéo natifs sont vos propres outils ; utilisez leur vrai schéma.

Commandes

Exécutez chaque outil comme une seule ligne depuis la racine du projet de l'utilisateur : python "<skill-dir>/scripts/<tool>.py" .... <skill-dir> est le dossier de cette compétence ; les compétences sœurs se trouvent à côté (<skill-dir>/../video2dsprite). Gardez les entrées et sorties dans le projet. Chaque outil écrit un nouveau --output-dir : il refuse un dossier existant, se prépare à côté et ne publie qu'après ses vérifications (--strict-qc / --strict ne publie rien en cas d'échec). Le succès imprime une ligne JSON ; les erreurs impriment error: ... et quittent avec le code 1 ; les erreurs d'utilisation quittent avec le code 2. Nécessite Python 3.10+, numpy et Pillow (scipy recommandé). --help liste chaque drapeau.

Planifier l'asset

Enregistrez l'identité et la référence, la caméra et l'orientation, le style, la taille d'affichage du jeu, la finition (HD par défaut, pixel sur demande), la liste des actions et les phases, boucle ou tir unique, l'enveloppe de mouvement, la racine partagée et le format de sortie. Gardez un maître accepté et une échelle source-à-affichage par personnage ; les mobs ne sont pas plus grands que le héros sauf planification. Une grille n'est pas la fluidité : l'espacement des poses, le timing, la jointure de boucle et le contact au sol sont plus importants. Poses, jambes PROCHE/LOIN et timing : animation-planning.md.

  • Alpha : native_alpha conserve la transparence réelle (un damier peint n'est pas alpha) ; chroma_key utilise du magenta plat uniquement lorsque le sujet n'en a pas ; opaque conserve les images entières (assemble_frames.py).
  • Échantillonnage : lanczos ou un redimensionnement de zone prémultipliée pour l'art généré ; nearest uniquement pour une grille de pixels vérifiée. Une peinture haute résolution ressemblant à du pixel n'est pas du pixel art propre en 32 px.
  • Une racine partagée n'est pas un bas de boîte alpha par image : gardez les sauts intentionnels, le vol, le rebond et le recul.

Générer (routes d'image)

Écrivez le prompt vous-même (prompt-rules.md ; grilles, phases et préréglages dans action-recipes.md). Attachez les références via --reference (ou l'entrée d'image réelle de votre outil) ; un chemin dans le texte n'est pas une référence. Gardez le maître accepté dans chaque génération et décrivez les phases absolues, pas des modifications enchaînées ; une correction est une édition de l'image approuvée qui nomme le seul changement. Générez une famille d'actions à la fois et gardez les larges entailles, les traînées et les projectiles hors de la feuille de corps. Vérifiez la route réelle, le modèle et la taille retournée ; ne les prétendez jamais à partir du prompt.

Pipeline

Feuilles (FX, icônes, accessoires) : sheet_qc.py spill sur la feuille brute, puis generate2dsprite.py process, puis sheet_qc.py frames, puis scale_frames.py, puis build_animation_clips.py, puis export_engine.py. Les actions de personnage reviennent de video2dsprite sous forme de clips empaquetés.

BesoinRoute
Planifier une feuille pour un outil d'image (aspect, grille, guide, prompt)plan_guide.py --frames N --cycle run --output-dir <new> ; attachez guide.png, collez prompt.txt. Échelle fixe et ligne de pied : make_anchor_layout.py ; image sécurisée vide : make_layout_guide.py
Vérifier une feuille brute avant découpagesheet_qc.py spill --input <sheet> --rows R --cols C --output-dir <new> ; des parties qui se croisent signifient régénérer avec plus de marge ou découper par propriété, jamais un filtre de plus grand composant
Keyer, découper et enregistrer une feuillegenerate2dsprite.py process --input <sheet> --target asset --mode <mode> --rows R --cols C --output-dir <new> --strict-qc (géométrie v2 ; processing.md)
Pixel art dessiné à M px source par px d'artprocess --resampler nearest --logical-pixel M --pixel-scale N (échelles entières uniquement)
Sauts, rebond ou recul sur un point d'enregistrementprocess --scale-strategy registered (ou --anchor-px X,Y)
Échelle d'un personnage à travers les actionsprocess --write-scale-profile <p.json> sur la référence au sol, puis --scale-profile <p.json> --max-profile-scale-drift 0.08
Le canevas ne se divise pas en grille ; autre ordre de ligneprocess --grid-rounding nearest ou --pad-to-grid ; --direction-order down,up,left,right (modes.md)
Identité, alternance PROCHE/LOIN, dérive, lignes de basesheet_qc.py frames --sheet <sheet> --rows R --cols C --cycle run --output-dir <new> ; un demi-cycle dupliqué signifie régénérer la seconde moitié. Sur les images codées (art_source=code), identity_residual et torso_drift sont indicatifs
Taille du jeu sur un seul canevas et racine, jamais clampéescale_frames.py --frames <pngs> --root-lock torso-x --row-baseline --emit-clips --ticks N --output-dir <new> ; les actions ultérieures ajoutent --profile <first>/scale-frames.json --action-padding L,T,R,B
Clips avec timing, événements, transitionsbuild_animation_clips.py --manifest clips.json --output-dir <new> ; lisez les lints et review/ (frames-and-clips.md)
Images entières ou une boucle de scène (pas de keying)assemble_frames.py (--key chroma, --slice ownership ; --loop-overlap K --ambient pour boucles ambiantes uniquement)
Palette partagée, verrous, variantes, scintillement (finition pixel)palette_tool.py build, apply, lock, quantize-seq, variants, luts ; grille logique stricte : pixel_reduce.py (palette-and-pixels.md)
Exportation moteurexport_engine.py --clips <animation-clips.json> --target all --output-dir <new> ; Sprite3D : --target godot-sprite3d --world-height <units> (engine-export.md)
Jouer des clips dans un jeu (démarche, arrêt sur coup, transitions)runtime-integration.md
Sprites, rigs ou FX codés, uniquement sur demandecodeart2d render_pixelspec.py, rig_animate.py ou fx_build.py avec --build-clips (jamais process), puis export_engine.py ; divulguez-les comme codés
FX pour un jeu hibitfx_pixelfx.py check choisit la route (une route que l'utilisateur nomme l'emporte). A, pixelfx installé (recommandé) : fx_pixelfx.py render --pixelfx <checkout> --id <effect> --ramp ... --snap <palette.json>, pixelfx par Patch (MIT, un projet séparé que l'utilisateur clone), expédiez CREDITS.txt et divulguez comme codé par pixelfx. B, sinon : une feuille FX 2x2 depuis la route image, process --scale-strategy registered --cell-size 512, puis hibit_fx.py pixelize --palette <palette.json> (hibit.md)

Acceptation

  • Vérifiez à la taille du jeu : silhouette et identité, contact et vol, jointure de boucle ou récupération de tir unique, alpha sur fond clair et foncé, extrémités, échelle à travers les actions, racine et collider.
  • Citez les nombres pour les affirmations de qualité : pipeline-meta.json matte.qa (un avertissement key_ring_spill : ajoutez --despill-radius 1 ou --key-quality soft), sheet-qc.json, les lints du constructeur de clips. Le QC numérique trouve les symptômes ; il n'approuve jamais l'anatomie ou le mouvement.
  • Signalez chaque vérification WARN ou FAIL textuellement (id, valeur, seuil, fichiers) de chaque enveloppe QA publiée ; ne dites jamais « toutes les vérifications réussies » quand une enveloppe publiée a un avertissement.
  • Livrez l'art source accepté, les images ou clips d'exécution, l'aperçu, le prompt et la provenance (route, modèle, estimateUsd), le QA et les limites restantes. Gardez le dernier lot accepté lors de la révision.

Références

processing.md (drapeaux de traitement, commutateurs hérités), modes.md, prompt-rules.md, animation-planning.md, master-still.md, frames-and-clips.md, palette-and-pixels.md, engine-export.md, runtime-integration.md, hibit.md, video-handoff.md, route-media.md.

Skills associés