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
- Cartes, tuiles, terrains, parallaxe ou plaques de scène : generate2dmap.
- Animer un personnage : approuvez un maître ici, puis video2dsprite crée un clip par action (video-handoff.md).
- Art codé que l'utilisateur a demandé : codeart2d. Un simple appel API ou CLI : generate2dmedia.
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.
- 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. - 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. - codeart2d uniquement lorsque l'utilisateur demande explicitement de l'art codé, ou lorsque
route_media.pyafficheno-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.
- 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). - Générer :
python "<skill-dir>/scripts/master_still.py" generate --spec <json> --takes 3 --output-dir <new>. Chaque prise passe par generate2dmediaroute_media.py(d'abord la clé API, puis le démon local) ;takes.pngles 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écutezmaster_still.py promptet attachez les références listées dans cet ordre. - Choisissez en regardant : identité, orientation, rien ne touche un bord, pas de texte.
- 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>). - 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 écritmaster.png(opaque, key pur),master_rgba.pngetmaster.json(generate2dsprite.master.v1). - 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_genest votre propre outil d'image ; sans clé configurée, utilisez-le et regardez les résultats avecview_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 traitezgenerated.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.pyprend 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_alphaconserve la transparence réelle (un damier peint n'est pas alpha) ;chroma_keyutilise du magenta plat uniquement lorsque le sujet n'en a pas ;opaqueconserve les images entières (assemble_frames.py). - Échantillonnage :
lanczosou un redimensionnement de zone prémultipliée pour l'art généré ;nearestuniquement 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.
| Besoin | Route |
|---|---|
| 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écoupage | sheet_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 feuille | generate2dsprite.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'art | process --resampler nearest --logical-pixel M --pixel-scale N (échelles entières uniquement) |
| Sauts, rebond ou recul sur un point d'enregistrement | process --scale-strategy registered (ou --anchor-px X,Y) |
| Échelle d'un personnage à travers les actions | process --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 ligne | process --grid-rounding nearest ou --pad-to-grid ; --direction-order down,up,left,right (modes.md) |
| Identité, alternance PROCHE/LOIN, dérive, lignes de base | sheet_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ée | scale_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, transitions | build_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 moteur | export_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 demande | codeart2d 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 hibit | fx_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.jsonmatte.qa(un avertissementkey_ring_spill: ajoutez--despill-radius 1ou--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.