Nouveaux blocs et outils

16 — Atelier de personnages : recherche sur le « projet basic »

Statut : proposé · Phase : P16 · Mis à jour : 25/10/2026.

Ce document répond à la dernière question restée ouverte des plans 11 et 14 : ce qu'est le « projet basic » d'images en full JS. L'utilisateur l'a précisé le 25/10/2026 : « une réflexion où tu pouvais, grâce à des skills, générer des personnages ou autres avec du JS, des personnages pixélisés ? Avoir une sorte d'environnement de création de perso 2D ? ». Il a demandé une recherche profonde des dépôts GitHub sur ce thème, avec leurs plus et leurs moins.

C'est un rapport de recherche suivi d'une recommandation, au même niveau que les plans 10 à 15, avec les mêmes règles : une seule stack, une seule source, génération d'images toujours hors de Récit (les prompts sont des données), aucune métrique inventée. Les faits ci-dessous (étoiles, licences, dernière activité) ont été relevés le 25/10/2026 par gh api repos/... sur 96 dépôts ; les fichiers LICENSE ont été ouverts quand le rapport et l'API ne s'accordaient pas.

Ce plan ne change ni la propriété du personnage (plan 14, bible et kit de Broc), ni le rendu des poses (plan 11, D9 : bloc sprite). Il ajoute un outil de création en amont : de quoi produire une grille ```pixel, une recette de sprite à graine ou une planche codex-pet-v1 sans modèle d'image.

1. La question et ce qu'on cherche

1.1 La question

« Environnement de création de perso 2D, piloté par des skills, en JS. » Trois sens possibles, tous couverts par la recherche :

  1. Pixel art en code : un agent écrit un fichier texte (grille, palette, frames), un outil le rend en image. Reproductible, versionnable, sans modèle.
  2. Génération procédurale à graine : une graine et quelques paramètres donnent un sprite, un avatar ou un visage. Le personnage est une recette de quelques nombres.
  3. Créateur en couches (paper doll) : on assemble un corps, des cheveux, des vêtements, et l'on obtient une planche animée complète.

S'y ajoutent les outils voisins : éditeurs pixel (retouche à la main), formats de planches (Aseprite, TexturePacker), lecteurs de planches et pipelines d'IA (à garder hors de Récit).

1.2 Critères

CritèreCe qu'on attend
StackJS/TS, utilisable dans le navigateur et dans Node (SSR, export, goldens). Pas de Python, Go, C++ ou Godot dans un package publié
Déterminismemême source, même graine, mêmes octets. C'est la condition des goldens (plan 11 : « même grille, même SVG »)
Données JSONle personnage se décrit en données que le jumeau typé (@recit/core/schema, zod) peut valider : recette, grille, options
Licencecode MIT, ISC ou Apache-2.0 pour toute dépendance ; art CC0 de préférence ; GPL et CC-BY-SA seulement en outil externe, crédits obligatoires
Maintenanceactivité récente, plus d'un mainteneur si possible ; sinon on s'en inspire au lieu d'en dépendre
Sortieplanche de sprites (grille fixe) avec métadonnées de frames et de durées, ou SVG pur
Intégration Récitblocs ```pixel et sprite (plan 11, D3 et D9), kit de personnage et bible (plan 14, D12), layout codex-pet-v1, une couleur par thème
Dépendanceszéro ou presque ; une seule nouvelle dépendance doit remplacer du code, jamais en doubler

1.3 Le contrat codex-pet-v1 (rappel vérifié)

Source : openai/skills, skills/.curated/hatch-pet/references/animation-rows.md (Apache-2.0, faits d'interopérabilité réécrits, rien de copié). Planche 1536×1872, 8 colonnes × 9 lignes, cases de 192×208. Les cases inutilisées sont transparentes.

LigneÉtatColonnesDurées (ms)
0idle0 à 5280, 110, 110, 140, 140, 320
1running-right0 à 7120, la dernière 220
2running-left0 à 7120, la dernière 220
3waving0 à 3140, la dernière 280
4jumping0 à 4140, la dernière 280
5failed0 à 7140, la dernière 240
6waiting0 à 5150, la dernière 260
7running0 à 5120, la dernière 220 (« travaille »)
8review0 à 5150, la dernière 280

Aucun projet JS ne produit ce format directement. Tous les candidats demandent un adaptateur.

1.4 Couleurs : une par thématique, un défaut sobre

Demande de l'utilisateur (25/10) : une couleur différente pour chaque thématique, une couleur par défaut la plus sobre possible, et du noir et blanc pour le site de base qui référence le tout. Pour l'atelier, cela veut dire : une palette s'écrit en jetons de thème (text, accent, data.*, déjà prévus au plan 11 D3), jamais en couleurs figées. Un même sprite prend l'accent du thème du site qui l'affiche, et reste en noir et blanc sur le site de base. Un outil qui impose sa palette (Multiavatar, avvvatars) est donc écarté d'office.

2. Les dépôts, par catégorie

Légende : ★ = étoiles GitHub au 25/10/2026 ; « activité » = dernier push. Les licences « non vérifiées » sont annoncées dans un README sans fichier LICENSE : on les traite comme « tous droits réservés ».

2.1 Pixel art en code et skills d'agent

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
crsolver/claude-pxlDSL .px.ts (palettes, grilles texte, miroir, contour auto, variantes de palette, frames en patchs) → PNG, planche + JSON, GIF, viewer ; livré avec SKILL.mdTS, Node ≥ 22.18, zéro dépendance, sans buildMIT4312026-10-15le plus proche de la demande : skill, JS, graines reproductibles, sans modèle d'image ; variantes de palette = une couleur par thèmedix jours d'âge, un seul mainteneur, pas de release ni de paquet npm ; source = JS exécutable (le jumeau décrit les entrées, pas l'art) ; JSON façon TexturePacker, pas codex-pet-v1
openai/skills — hatch-petskill Codex qui crée, valide et empaquette des pets animés ; référence du contrat codex-pet-v1Markdown + scripts Python, $imagegenApache-2.0 (LICENSE.txt du dossier ; pas de licence racine)28,3k (dépôt entier)2026-09-08source du contrat ; tableau des lignes vérifié ; grille de QAPython + modèle d'image : outil externe seulement (déjà la règle) ; reprise de texte = NOTICE Apache
runcomfy-com/skills — codex-petun appel GPT Image 2 pour la pose maître, puis ImageMagick fabrique les 9 lignes (pet.json + spritesheet.webp)skill Markdown, CLI runcomfy, ImageMagickMIT162026-10-21frames déterministes après l'image ; confirme le contrat de façon indépendanteservice payant + binaire ImageMagick ; animation très pauvre (décalages, clignements) ; dépôt marketing
0x0funky/agent-sprite-forgeskills Claude Code / Codex / Grok : image maître validée, une vidéo par action, puis outils Python (détourage, boucle, palette, pixel)Python, API image et vidéo (OpenAI, Gemini, xAI, fal)MIT4,6k2026-10-06pipeline « un personnage, plusieurs actions cohérentes » le plus complet ; export JSON Aseprite avec tagsPython + API payantes ; génération non déterministe ; layout propre ; lourd
tachikomared/character-animation-creator-skillskill : sprite de base 64×64 puis bandes idle/walk/attack en 8 directions, pixel_snap.py, validate_64_sheet.pyskill Markdown + Python/Pillownon vérifiée (README MIT, pas de LICENSE)3582026-05-08même schéma « base canonique, puis lignes » que hatch-pet ; bonnes idées de validateur (palette, grille)pas de licence : rien à reprendre ; Python ; layout 64×64
willibrandon/pixel-plugin (+ pixel-mcp)plugin Claude Code qui dessine et anime dans Aseprite via un serveur MCP (40+ outils)plugin + MCP en Go, Aseprite ≥ 1.3MIT (les deux)390 (+154)2025-10-19dessin pas à pas sans diffusion, rejouable ; sortie JSON AsepriteAseprite propriétaire requis ; binaire Go ; inactif depuis un an
PlayableIntelligence/game-creatorplugin Claude pour jeux Phaser/Three.js, avec un skill de sprites Retro DiffusionJS, plugin Claudenon vérifiée (README MIT, pas de LICENSE)3462026-05-25exemple d'empaquetage de skills de sprites en pluginorienté jeu, API payante, pas de licence

2.2 Générateurs procéduraux de sprites pixel

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
zfedoran/pixel-sprite-generatorportage JS de l'algorithme de masque de Dave Bollinger (masque −1/0/1/2, hasard, miroir, contour, couleur)JS ES5, Canvas, npmMIT6182021-09-03algorithme de référence, court ; le masque est une donnée JSON idéale pour un jumeauMath.random() (10 appels vérifiés) : pas de graine ; Canvas seulement ; une frame ; abandonné
seiyria/mixelréécriture TS du précédent, teinte, RNG à graine ; Mask = {width, height, mirrorX, mirrorY, data}TS, npmMIT82018-06-15forme de masque typée : bon modèle de schéma « recette »abandonné ; graine annoncée mais non vérifiée ; aide Canvas
blipn/pixel-sprite-generator-nodejsportage Node qui écrit des créatures en PNGJS, NodeMIT242023-01-07sortie PNG sans navigateur, comme une étape de buildprobablement sans graine (non vérifié) ; petit, inactif
KilledByAPixel/ZzSpritegénérateur symétrique de 2,6 Ko : ZzSprite(ctx, x, y, seed, size, mode, mutateSeed, colorSeed)JS, Canvas 2DMIT1682022-01-03entièrement à graine : un sprite = cinq nombres ; graines de mutation = variantesdessine dans un contexte Canvas (portage nécessaire pour Node) ; créatures abstraites ; inactif
abagames/pixel-art-gen (+ crisp-game-lib)pixel art depuis de courtes chaînes de motif (x, -, o, *), miroir, rotation, setSeedTS, npmMIT242018-08-21entrée textuelle très compacte, native en Markdown ; tableaux de pixels, rendu sans DOM possibleabandonné ; petits sprites d'arcade, pas de poses
stmn/pixelshipgraine → bruit → automate cellulaire → coque, réacteurs, armes ; planche PNG + JSON de points d'ancrageJS, navigateurMIT (+ clause : sprites générés en CC0)32026-09-02même philosophie que Récit : la recette (graine + paramètres) est ce qu'on sauvegarde ; sortie CC0vaisseaux seulement ; application, pas bibliothèque ; un auteur
ReneesmeS/pixel-monster-generatormonstres à graine, palettes, planche animée PNGTS, Vite, Canvas 2DMIT (+ notice d'attribution)52026-03-01même outillage que Récit ; créatures animées à graineapplication ; pas de JSON de frames ; pas codex-pet-v1
shikaan/pickcellson peint un masque, l'outil génère des variationsTS, ViteMIT72024-10-10l'idée d'atelier : silhouette humaine, variation algorithmiquepetit ; graine et format d'export non vérifiés
joseprio/starshipwrightgenerateOutlineClassic(seed) puis generateShip(outline, colorSeed, shipSeed)TS, npm, CanvasMIT22024-11-15API propre à trois graines = jumeau de trois nombresvaisseaux ; lié au navigateur ; peu pertinent
Deep-Fold/SpriteGeneratorcréatures et vaisseaux procéduraux (auteur de PixelPlanets)GDScript, GodotMIT1112021-06-10beaux résultats ; idées réimplémentablesGodot ; inactif ; référence seulement
yurkth/spratorsprites symétriques par automate cellulaireC++MIT1792021-10-20algorithme simple (demi-grille, automate, miroir, contour), facile à refaire en TSapplication C++ ; formes abstraites
laurentpayot/minidenticonsidenticon SVG 5×5 symétrique depuis une chaîneJS ESM, navigateur + Node, typéMIT6152024-05-30déterministe, minuscule ; couleurs paramétrables (jetons de thème)motif abstrait, pas un personnage ; doublon du style identicon de DiceBear

2.3 Personnages en couches (LPC)

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
LiberatedPixelCup/Universal-LPC-Spritesheet-Character-Generatorgénérateur web : corps, cheveux, vêtements, armes en couches → planche 64 px complète (marche, attaque, sort, saut…) ; export PNG, JSON de sélection, CSV de créditsTS, Vite, Canvas/WebGL, Playwrightcode GPL-3.0 ; art par fichier : CC0, CC-BY, CC-BY-SA, OGA-BY, GPL1,9k2026-10-20le seul vrai « atelier de personnage » mûr en corps entier animé ; couches en JSON ; crédits intégréscode GPL : outil externe ou référence ; art share-alike ; layout 832×3456, pas codex-pet-v1 ; pas de CLI ; style RPG vu de dessus
↳ forks : sanderfrenken (424 ★, GPL-3.0, 2025-01-03, remplacé), Gaurav0 (7 ★, GPL-3.0, 2026-08-25), makrohn/Universal-LPC-spritesheet (354 ★, sans licence, 2015, ancêtre)historiques—————à ignorer, l'organisation LiberatedPixelCup les a absorbés
kanishka-namdeo/lpc-spritesheet-mcpserveur MCP Node : rendu LPC sans navigateur, personnages à graine, lots, GIF, atlas (Phaser, Aseprite, Godot…), créditsJS, Node ≥ 20.11, MCP stdio, npmGPL-3.032026-10-19exactement le schéma voulu pour un outil externe : requête JSON → PNG + atlas ; graines, goldens SHA-256GPL : jamais importé ; trois semaines d'âge ; licences LPC ; pas codex-pet-v1
kyuza1/lpc-character-mcpserveur MCP Python : planches LPC en langage naturel, GIF, presetsPython, uvxMIT (fichier vérifié) ; art LPC selon ses licences12026-09-28code MIT, prêt pour un agentPython ; graine non documentée ; doublon du précédent, n'en garder qu'un
ElizaWy/LPCjeu d'art LPC Revised : personnages, palettes, guides d'animationPNGREADME : CC-BY-3.0 ou OGA-BY-3.0 (pas de fichier LICENSE)2072023-12-02pas de share-alike ni de GPL ; guides d'animation documentésassets seulement ; attribution ; inactif ; licence seulement dans le README
ObsidianTTRPGProject/LPC-Pattern-Clothiergénère de nouveaux motifs de vêtements LPCHTML/JSMIT02026-06-30étend le catalogue LPCconfidentiel ; la sortie hérite des licences sources

2.4 Avatars et personnages vectoriels (SVG)

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
dicebear/dicebear (+ dicebear/styles)graine → avatar SVG, ~63 styles dont pixel-art ; en v10, les styles sont des définitions JSON validées par @dicebear/schemaTS, npm, navigateur + Nodecode MIT ; art par style : CC0 (pixel-art, notionists, open-peeps…), CC BY 4.0 (adventurer, micah, personas…), conditions propres (avataaars, bottts)9,9k (+10)2026-10-21déterministe à l'octet ; jumeau = {style, seed, options} ; SVG pur (SSR, deck, motion, book) ; très actif ; styles CC0 sobres pour le site noir et blanctêtes et bustes seulement, pas d'animation ni de planche ; liste blanche de styles à tenir ; une dépendance à justifier
zengm-games/facesjsvisages façon Mii ; chaque visage est un objet sérialisable rendu en SVG ; éditeur, CLITS, SVG, npmApache-2.01,4k2026-04-14l'objet est la donnée : la bibliothèque la plus proche d'un jumeau typé ; SVG sans navigateurgenerate() sans graine (on stocke l'objet) ; visages seulement, style sportif
Mayandev/notion-avatarcréateur d'avatars au trait façon Notion, en couchesTS, Next.jscode MIT ; assets CC0 (README)3,2k2026-06-06trait noir et blanc CC0, idéal pour le défaut sobreapplication ; fonctions IA avec backend ; même style dans DiceBear notionists
boringdesigners/boring-avatarsavatars abstraits SVG depuis un nom + palette de 5 couleurs (dont pixel)TS, ReactMIT6,5k2026-06-19déterministe ; palette = couleurs du thèmeabstrait ; doublon de DiceBear si celui-ci est retenu
RobertBroersma/beanheadspersonnages cartoon (buste, tenues, accessoires) par propsTS, React, SVGMIT (pas de revente des icônes)1,5k2026-01-14props = jumeau ; plus « personnage » qu'une têtehasard sans graine (non vérifié) ; pas de poses ; React seulement
fangpenlin/avataaars (+ avataaars-generator)composant React des Avataaars de Pablo Stanley ; générateur (2 990 ★, MIT, 2023-11-27)TS, Reactcode MIT ; art selon les conditions Avataaars8462024-03-04props sérialisablesinactif ; art hors CC ; bustes ; déjà dans DiceBear
dapi-labs/react-nice-avatargenConfig(seed) → config → avatar SVGTS, ReactMIT1,3k2024-07-23graine → config JSON → SVG : la forme exacte du pipeline Récitinactif ; React DOM ; un seul style
Codennnn/vue-color-avatargénérateur sur l'Avatar Illustration System de Micah LanierVue 3, Vitecode MIT ; assets CC BY 4.03,8k2025-07-24joli style ; config de piècesVue : hors stack ; attribution ; style déjà dans DiceBear (micah)
draftbit/avatar-generator (Personas)créateur Personas avec GET /api/options (JSON), /api/avatar.svg, codes de partage, serveur MCPReScript, React, ViteMIT (dépôt) ; art Personas CC BY 4.0 selon DiceBear (non vérifié dans le dépôt)1,3k2026-10-23options publiées en JSON = schéma tout fait ; MCP pour un skill ; actifReScript : outil externe ; bustes
multiavatar/Multiavatarmultiavatar(string) → SVG mêlant 16 personnages × 3 thèmesJS, zéro dépendancelicence Multiavatar propre (non OSI, limite le réempaquetage)2,0k2022-03-26déterministelicence restrictive : à ne pas embarquer ; palettes figées ; abandonné
nusu/avvvatarsavatar de forme ou d'initiales par valeurTS, ReactMIT2,0k2024-07-08sobre (lettres, formes)pas un personnage ; palette figée ; inactif
elizabetdev/react-kawaiimascottes kawaii SVG avec humeur (happy, sad, shocked…) et couleurTS, ReactMIT3,0k2025-09-28l'humeur = état émotionnel minimal pour stories et toon ; couleur = thèmejeu de mascottes fixe ; ni graine ni poses
CeamKrier/react-peepscomposants React des Open Peeps : tête, visage, accessoires, corps debout ou assisTS, Reactcode MIT ; art Open Peeps CC0702023-10-05corps entiers CC0 au trait noir et blanc : le défaut sobrepetit, inactif ; dessins discrets, sans squelette ni animation

2.5 Poupées de papier (modèles de données)

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
JLChnToZ/paperbuddypoupée de papier web : sélecteurs conditionnels imbriqués, éditeur d'arbre de couches, export PNG et configTSMIT22023-01-06couches + sélecteurs conditionnels se traduisent bien en schéma JSONébauche, inactif
fralonra/paperdoll (+ ppd-editor)modèle poupée / emplacement / fragment avec ancres ; conteneur .ppd ; éditeur (13 ★, MIT, 2024-12-11)Rust, BevyMIT9 (+13)2023-08-19modèle conceptuel propre (emplacements, fragments, pivots) à emprunterRust ; inactif ; référence seulement
KhurrumAli1997/paper-doll-studiopipeline visual novel : import PSD/PNG, segmentation SAM, garde-robe, inpainting SD 1.5Python (FastAPI), JS, SD, SAMApache-2.0 (vérifiée)122026-05-28structure DOLL_CONFIG intéressantePython + GPU ; style anime ; minuscule

2.6 Éditeurs pixel et format Aseprite

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
piskelapp/piskeléditeur web de sprites (calques, frames, pelure d'oignon) ; export planche PNG, GIF, .piskel (JSON)JS, jQuery, GruntApache-2.012,9k2026-10-21mûr, gratuit, dans le navigateur ; export en grille quelconque : retouche d'une planche 8×9éditeur, pas générateur ; stack jQuery en maintenance : outil externe
Orama-Interactive/Pixeloramasuite pixel art complète (sprites, tuiles, animation), bureau et web (WASM)GDScript, GodotMIT10,8k2026-10-23très actif ; meilleure ergonomie libreGodot : outil externe ; ni graine ni procédural
LibreSprite/LibreSpritefork du dernier Aseprite GPLv2C++GPL-2.08,6k2026-10-21flux de travail façon Aseprite, gratuitC++, GPL : outil externe
aseprite/asepriteéditeur de référence ; la CLI --sheet/--data exporte planche + JSON (frames, durées, frameTags, slices)C++EULA propriétaire, source disponible40,3k2026-10-22son JSON est le format d'échange de fait : durées par frame et tags nommés = lignes codex-petnon libre, non redistribuable ; pour ceux qui le possèdent
TheCyberRonin/ase-parserlecteur de fichiers .aseprite sans dépendanceJS, Node BufferMIT272026-09-04lire calques, frames et tags en JSON typé sans lancer Asepritepré-1.0, petit ; types et navigateur non vérifiés ; pas de composition
jvalen/pixel-art-react« Pixel Art to CSS » : dessin et animation, export box-shadow + keyframes, PNG, GIFReact, Redux, ImmutableJSMIT6,0k2026-02-05React ; projets en texte ; sortie CSS indépendante de la résolutionRedux/Immutable en doublon ; pas de graine
rgab1508/PixelCraftPWA pixel art et GIFJS, CanvasMIT1,5k2025-03-16petit ; algorithmes ligne/cercle/remplissage faciles à porterpas une bibliothèque ; peu actif
Esshahn/spritemateéditeur de sprites Commodore 64TSMIT1542026-10-23modèle de sprite à palette contrainte et taille fixe, stocké en donnéescontraintes C64 ; application
lospec/pixel-editoréditeur en ligne de LospecJSGPL-3.01,1k2024-06-29l'écosystème de palettes Lospec (palettes en données)déprécié (README) ; GPL : lien seulement
kitao/pyxelmoteur rétro avec éditeur de sprites et palette de 16 couleursRust, Python, WASMMIT (fichier vérifié)18,5k2026-10-24modèle d'asset à palette fixe défini en données : bonne référencehors stack ; référence seulement

2.7 Planches : empaquetage et lecture

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
odrick/free-tex-packer-core (+ GUI)atlas JsonHash, JsonArray, Pixi, Phaser, Godot, Unity… ou gabarit libre ; GUI 1,3k ★JS, NodeMIT1512026-09-11déterministe ; un exporteur maison pourrait écrire un manifeste Récitdépendances image (non vérifiées) ; codex-pet est une grille fixe : rien à empaqueter
soimy/maxrects-packerempaquetage 2D MaxRectsTSMIT2492026-10-15zéro dépendance, typé, actif, déterministegéométrie seulement
twolfson/spritesmithassemble des images en planche + coordonnéesJS, NodeMIT9272024-10-23mûr, déterministeorienté sprites CSS ; API ancienne ; doublon d'outillage image
houmain/sprightempaqueteur et annotateur piloté par un fichier de définitionC++GPL-3.0832025-12-22données en entrée, planche + description en sortieC++, GPL
krzysztof-o/spritesheet.jsCLI de planches (Starling, PIXI, Easel, cocos2d)JS, NodeCC-BY-NC-SA-4.0 (vérifiée)5672026-03-04référence des formes JSON PIXI et Starlingnon commerciale : ni dépendance ni copie
danilosetra/react-responsive-spritesheetlecteur React de planches responsiveTS, ReactMIT1042026-05-13même stackpiloté par minuterie : motion veut une fonction de la frame (plan 11 D9)
filidorwiese/spritelingmoteur d'animation de planches (scripts, boucles)TSISC1072023-01-03scripts déclaratifs proches des lignes codex-petinactif ; trivial à écrire dans Récit

2.8 Animation vectorielle et squelettes

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
airbnb/lottie-webrend des animations Lottie JSON en SVG/canvasJSMIT32,3k2025-09-01animation en JSON ; positionnable frame par frame (motion)pas un créateur de personnage ; maintenance ralentie ; lourd (chargement paresseux)
rive-app/rive-wasmruntime des fichiers Rive (os, machines à états)TS + WASMMIT (runtime) ; éditeur propriétaire1,0k2026-10-24vrais squelettes avec états (idle, walk, wave)éditeur propriétaire ; .riv binaire, pas de jumeau JSON ; moteur WASM en plus
DragonBones/DragonBonesJSruntime squelette JSON + atlas, adaptateurs Pixi/PhaserTSMIT8572026-01-23format de squelette ouvert en JSONéditeur quasi abandonné ; moteur de jeu nécessaire (nouvelle stack)

2.9 Pipelines d'IA (toujours hors de Récit)

DépôtCe que c'estTechnoLicence★ActivitéPlusMoins
mor-o/comfyui-2d-character-pipelinecinq workflows ComfyUI : pose, image → vidéo, détourage en planche RGBA grise, couches teintablesComfyUI (Python), GPU 24 GoMIT1152026-06-20workflows en JSON ; base grise + teinte = une couleur par thèmeGPU lourd ; non déterministe sans graines figées
AHEKOT/ComfyUI_VNCCSsuite de personnage cohérent pour visual novel : poses, tenues, émotionsnœuds ComfyUI, Python + JSMIT1,7k2026-10-22actif ; planches d'émotions et de costumes pour stories et toonGPU ; pas de manifeste d'atlas ; licences de modèles variables
dimtoneff/ComfyUI-PixelArt-Detectorréduction, changement de palette, tramage de pixel art issu de SDXLPython, ComfyUIMIT4522025-10-31palette imposée (couleurs de thème)post-traitement seulement
Astropulse/pixeldetectordétecte la vraie grille d'un pixel art agrandi et le réduitPythonMIT3702024-04-04déterministe ; petit algorithme réimplémentable pour un validateurPython ; non maintenu
blendi-remade/sprite-sheet-creatorapplication : prompt → personnage pixel, planches 2×2 par animation, bac à sableNext.js, React, fal.aiaucune1,8k2026-07-01référence d'ergonomie pour un studio websans licence : rien de réutilisable ; API payante
lovisdotio/falspriteun LLM réécrit le prompt en chorégraphie par ligne, un modèle génère une planche NxNJS, Node, sharpnon vérifiée (README MIT, pas de LICENSE)2112026-02-26« chorégraphie par ligne » = prompts en donnéespas de licence ; fournisseur payant ; pas de JSON de frames
Retro-Diffusion/api-examplesexemples, contrats et llms.txt de l'API pixel art Retro DiffusionPythonaucune1562026-10-07documentation pensée pour les agents ; modèle natif pixelAPI fermée et payante ; exemples sans licence

2.10 Écartés à la vérification

  • Licence : matveyco/8biticon et arusanov/avatar-generator (aucune), Mobilpadde/ww-psg (ni licence ni graine), Stipple Effect (EULA, Java), EsotericSoftware/spine-runtimes (licence Spine payante).
  • Morts ou peu utiles : yuigoto/infiniship-js, maierfelix/poxi, jackschaedler/goya (ClojureScript, EPL), eonarheim/NES-Sprite-Editor, Chernavskikh/pixel-avatars, pixellab-code/pixellab-mcp (un README qui renvoie vers un service fermé).
  • Hors sujet : M3-org/CharacterStudio (3D VRM), liveblocks/pixel-art-together (démo Svelte + SaaS), cubiq/PuLID_ComfyUI et ComfyUI_IPAdapter_plus (identité de visage réaliste ; IPAdapter en GPL-3.0).
  • Doublons : dmester/jdenticon et stewartlord/identicon.js (minidenticons et DiceBear suffisent).
  • Archaïques ou sans licence : fnaith/Godot-LPC, bluecarrot16/lpctools, buxx/lpcg (AGPL, Rust).

3. Analyse

3.1 Comme dépendance (rare, une seule stack)

Presque rien ne passe tous les critères à la fois. Les candidats sérieux :

CandidatPourquoi il pourrait entrerPourquoi on attend
DiceBear (@dicebear/core + styles CC0)déterministe à l'octet, SVG pur, styles en JSON validés, très actif ; portraits pixel-art et notionists CC0ne fait que des bustes ; aucun format Récit n'en a besoin aujourd'hui ; à n'ajouter que si la bible (plan 14) veut un portrait par entrée sans image
maxrects-packerzéro dépendance, typécodex-pet-v1 est une grille fixe : rien à empaqueter. Seulement si un atlas libre devient nécessaire
ase-parserlire un .aseprite sans Asepritepré-1.0, types non vérifiés ; le JSON exporté par Aseprite suffit en entrée

Conclusion : aucune dépendance nouvelle en v1. Le code utile tient en quelques centaines de lignes pures (PRNG à graine, masque de Bollinger, miroir, contour, composition d'une grille 8×9), à écrire dans le module pixel de @recit/components (plan 11 D2, option B).

3.2 Comme outil externe (lancé par l'auteur, jamais importé)

Même règle que hatch-pet (plan 11 D10) : l'outil tourne hors de Récit ; ses requêtes et ses sorties sont des données du projet, enregistrées avec leur provenance (recit assets register, plan 14 D7).

OutilUsage dans Récit
hatch-pet (déjà retenu)planche codex-pet-v1 depuis une image de référence (Broc)
crsolver/claude-pxlpixel art écrit par un agent, sans modèle ; sortie PNG + JSON à convertir en grille ```pixel ou en planche
LPC generator / lpc-spritesheet-mcppersonnages en corps entier, animés ; crédits par story obligatoires (voir §3.4)
Piskel (ou Pixelorama, Aseprite)retouche à la main d'une planche 8×9 ou d'une grille
agent-sprite-forge, ComfyUIpipelines IA lourds pour qui en a ; sortie JSON Aseprite importable

3.3 Comme source d'inspiration (idées, rien de copié)

  • Algorithme de masque de Bollinger (zfedoran, mixel) : la recette {width, height, mirrorX, mirrorY, data} est le bon modèle de schéma ; on le réimplémente avec une graine, ce que zfedoran ne fait pas.
  • ZzSprite et starshipwright : un sprite = quelques graines (forme, mutation, couleur). Les graines de mutation donnent des variantes d'un même personnage.
  • pixel-art-gen : motifs texte compacts, natifs en Markdown ; proche de la grille du plan 11 D3.
  • pixelship : la recette est ce qu'on sauvegarde, la sortie est CC0 ; même philosophie que Récit.
  • pickcells : l'atelier minimal = peindre un masque, puis générer des variations.
  • paperdoll / paperbuddy : emplacements, fragments, ancres, sélecteurs conditionnels, si un jour des couches s'ajoutent.
  • JSON Aseprite : forme d'échange (frames, durées en ms, frameTags) dont on tire un sous- ensemble zod pour l'import.
  • pixeldetector, tachikomared : idées de validateur (vraie grille, palette réduite).
  • facesjs, react-nice-avatar : graine → objet de configuration → SVG ; on stocke l'objet.

3.4 Licences à surveiller

CasConséquence pour Récit
Code GPL-2.0 / GPL-3.0 (LPC, lpc-spritesheet-mcp, LibreSprite, lospec, spright)jamais importé ni copié dans un package publié ; lien ou outil externe seulement
Art LPC (CC-BY-SA, GPL, CC-BY, OGA-BY)attribution par fichier ; CC-BY-SA impose le partage à l'identique de l'œuvre dérivée (la planche, et selon l'usage la story qui l'inclut) ; le CSV de crédits exporté devient la provenance de l'asset, contrôlée par recit validate --strict ; aucun asset LPC dans les exemples (Lorem, sans tiers)
Art CC BY 4.0 (DiceBear adventurer, micah, personas ; vue-color-avatar)crédit visible requis ; à éviter par défaut
Art sous conditions propres (avataaars, bottts, Multiavatar)exclu
Non commercial (spritesheet.js)ni dépendance ni copie
Sans fichier LICENSE (tachikomared, falsprite, game-creator, sprite-sheet-creator, Retro-Diffusion)tous droits réservés : lecture seulement
Apache-2.0 (hatch-pet, facesjs, piskel)compatible ; une reprise de texte ou de code exige la ligne NOTICE (déjà prévu pour codex-pet-v1)
Sorties d'IAconditions du fournisseur, aiGenerated: true dans la provenance (plan 14 D7)

4. Recommandation

4.1 Ce que Récit construit : le plus petit atelier utile

Tout dans le module pixel de @recit/components (fonctions pures, sans DOM), décision D2 du plan 11 inchangée. Zéro dépendance ajoutée.

  1. Générateur procédural à graine : réimplémentation TS de l'algorithme de masque (miroir, contour, couleurs par jetons de thème) avec un PRNG à graine écrit dans le module (quelques lignes ; à vérifier : @recit/components ne doit pas importer le random() de Remotion). C'est l'option ::pixel{gen=sprite seed=…} déjà réservée par IM3. Sortie : la même grille que le bloc ```pixel, donc le même rendu SVG, les mêmes goldens.
  2. Recette typée : PixelRecipe dans @recit/core/schema (zod) : { gen, seed, size, mask, mirror, palette, variants }. Le jumeau JSON décrit la recette ; la grille se recalcule. Une recette « figée » se convertit en grille ```pixel éditable à la main.
  3. Poses par transformations : à partir d'une grille de base, des transformations déterministes (décalage, rebond, clignement, miroir pour running-left) remplissent les 9 lignes de codex-pet-v1. Rendu volontairement modeste, comme runcomfy, mais sans modèle.
  4. Export codex-pet-v1 : composition des frames dans une grille 8×9 de cases 192×208 (pixels agrandis par un entier, cases inutilisées transparentes), en SVG ; la rasterisation PNG ou WebP passe par le runner Chromium existant (@recit/paged/runner, plan 15), pas par un encodeur ajouté. Le résultat se lit avec le bloc sprite du plan 11 D9 et se valide avec le schéma SpriteSheet du plan 14 D12.
  5. Constantes du layout : le tableau du §1.3 en données typées (layout: "codex-pet-v1"), source unique pour le validateur, le bloc sprite et l'export.
  6. Atelier web minimal : une page de docs (ou de ai.recit.dev en P16) avec une grille cliquable, un champ graine, un aperçu des 9 poses et deux boutons « copier le bloc Markdown » et « copier le JSON ». Aucun format de fichier propre : ce qu'on copie est la source Récit.
  7. Skill : recit://guide/pixel décrit la syntaxe et la recette ; recit skills export en tire le skill produit (plan 14 IA3.3). Un agent écrit une grille ou une recette, pas une image.

Couleurs (§1.4) : la palette par défaut n'utilise que text et bg (noir et blanc, site de base) ; l'accent de chaque thématique vient du thème du site qui affiche le sprite. Un même personnage change donc de couleur selon le site, sans seconde source.

4.2 Ce que Récit intègre en outil externe

  • Imports documentés, pas de code au départ : une page « importer depuis claude-pxl, Piskel, Aseprite, LPC » explique comment poser la planche, écrire la provenance et la licence.
  • Import JSON Aseprite (plus tard) : un sous-ensemble zod du JSON exporté par Aseprite (frames, durées, frameTags) converti vers codex-pet-v1 quand les tags portent les noms des 9 états. Piskel, LibreSprite, claude-pxl et agent-sprite-forge savent produire ce JSON ou un voisin.
  • LPC : outil externe uniquement, via son site ou lpc-spritesheet-mcp ; Récit importe la planche avec le CSV de crédits, et refuse en mode strict une planche LPC sans crédits.

4.3 Ce qu'il ne faut pas faire

  • Pas de dépendance GPL, ni de copie de code LPC ou d'un dépôt sans licence.
  • Pas d'appel à un modèle d'image depuis Récit (règle du plan 14).
  • Pas d'éditeur graphique complet (calques, pinceaux, pelure d'oignon) : Piskel et Pixelorama le font ; le risque « dérive vers un éditeur graphique » du plan 11 reste valable.
  • Pas de second système de personnage : la bible du plan 14 reste propriétaire ; un personnage généré est une entrée de bible avec une recette ou une planche.
  • Pas de Broc en pixel art (plan 11 D9, inchangé) : l'atelier sert aux personnages Lorem, aux figurants, aux mascottes secondaires et aux exemples.
  • Pas de dépendance à claude-pxl tant qu'il n'a ni release ni paquet npm.
  • Pas de DiceBear tant qu'aucun format ne demande un portrait ; et alors, styles CC0 seulement.

5. Phases, risques, questions

Tâches AT, lots AT1 à AT4, sous-tâches ATn.m (convention de 06, « Backlog »). Rien en P4 ni en P5. Le « projet basic » n'est donc plus bloqué : il devient ce lot.

AT1 — Générateur à graine (S/M), avec IM3, lot avancé de P11 au plus tôt

Après IM1 (le bloc ```pixel doit exister).

  • AT1.1 — PRNG à graine et algorithme de masque dans le module pixel de @recit/components.
  • AT1.2 — PixelRecipe dans @recit/core/schema ; directive ::pixel{gen=sprite seed=…}.
  • AT1.3 — Palette en jetons de thème ; défaut noir et blanc.
  • AT1.4 — examples/motion-pixel : une section « généré » (Lorem), en et fr.
  • Tests : même graine → même grille → même SVG ; équivalence Markdown ⇄ JSON ; goldens.

Sortie : une graine donne toujours le même sprite, dans tous les formats, sans dépendance ajoutée.

AT2 — Poses et export codex-pet-v1 (M), P16, avec IM4

  • AT2.1 — Constantes typées du layout codex-pet-v1 (source unique avec le plan 14 D12).
  • AT2.2 — Transformations de poses et composition 8×9 en SVG.
  • AT2.3 — recit pixel sheet <recette|grille> : PNG/WebP par @recit/paged/runner, provenance origin: code écrite automatiquement.
  • AT2.4 — Planche synthétique d'examples/stories-character (IM4.2) produite par cet export.
  • Tests : taille 1536×1872, cases inutilisées transparentes, chaque pose jouée par sprite.

Sortie : la planche de l'exemple Lorem est générée, pas dessinée, et rejouée par le bloc sprite.

AT3 — Atelier web et skill (M), P16, avec IA3 et IA4

  • AT3.1 — Page atelier (grille, graine, aperçu des 9 poses, copie Markdown et JSON).
  • AT3.2 — Guide recit://guide/pixel complété ; skill exporté par recit skills export.
  • AT3.3 — Page « importer depuis claude-pxl, Piskel, Aseprite, LPC », avec les règles de licence du §3.4.
  • Tests : e2e de l'atelier (copie, graine), skill régénéré identique.

AT4 — Options (après P16, sur besoin réel)

  • Import JSON Aseprite → codex-pet-v1.
  • Portraits DiceBear (styles CC0) pour les entrées de bible, si un format en a besoin.
  • Extraction de @recit/pixel si l'atelier devient un second consommateur hors de @recit/components (plan 11 D2).
  • Validateur « vraie grille » (idée de pixeldetector) pour les planches importées.

5.1 Risques

RisqueParade
Sprites procéduraux trop abstraits pour être des « personnages »masque de silhouette humaine fourni par défaut (idée pickcells) ; grille éditable à la main après génération
Poses par transformations trop pauvresassumé : c'est le niveau « placeholder » ; les vraies poses viennent de hatch-pet, Piskel ou LPC
Pixel art agrandi dans des cases 192×208 (facteur non entier)grille choisie pour que le facteur soit entier ; sinon marges transparentes, centrées ; mesuré sur les goldens
Dérive vers un éditeur graphiqueatelier limité à grille + graine + aperçu ; tout le reste renvoie à Piskel
Asset LPC publié sans crédits ou en violation du share-alikeprovenance obligatoire, CSV de crédits exigé en --strict, aucun asset LPC dans les exemples
claude-pxl change ou disparaîtoutil externe seulement ; Récit n'en dépend pas
Le contrat codex-pet évolue (v2)layout nommé et versionné (plan 14) ; codex-pet-v2 seulement avec une source publique
Déterminisme cassé par un PRNG ou un arrondi différent selon le moteurPRNG entier 32 bits, aucune opération flottante dans la génération, goldens en conteneur

5.2 Questions

Décisions prises sans l'utilisateur, à sa demande (« je te laisse choisir »), réversibles :

  1. « Projet basic » : de quoi s'agit-il ? Répondu (25/10) : un environnement de création de personnages 2D pixel en JS, piloté par des skills. Il devient le lot AT.
  2. Dépendance ou code maison ? Tranché : code maison, zéro dépendance (§3.1).
  3. Placement ? Tranché : AT1 avec IM3 (P11 au plus tôt), AT2 et AT3 en P16, AT4 après.

Restent pour l'utilisateur, sans bloquer AT1 :

  1. Faut-il un portrait par entrée de bible (ce qui ferait entrer DiceBear en AT4) ?
  2. Le site lebrocoli.fr doit-il proposer l'atelier au public, ou seulement ai.recit.dev ?
  3. Accepte-t-on des assets LPC dans des stories publiées, avec crédits et share-alike, ou les exclut-on de toute publication Récit ?

À reporter dans les autres documents si ce plan est accepté

  • 11-images.md D10 : « projet basic » répondu, renvoi vers ce plan ; IM3 cite AT1.
  • 14-ia-scenario.md : IA3 et IA4 citent AT3 ; §5.2, rien de nouveau dans NOTICE (aucun code repris).
  • 06-roadmap.md : ligne du backlog « atelier de personnages », lots AT1 à AT4.
  • journal.md : retirer « ce qu'est le projet basic » des questions restantes.