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 :
- Pixel art en code : un agent écrit un fichier texte (grille, palette, frames), un outil le rend en image. Reproductible, versionnable, sans modèle.
- 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.
- 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ère | Ce qu'on attend |
|---|---|
| Stack | JS/TS, utilisable dans le navigateur et dans Node (SSR, export, goldens). Pas de Python, Go, C++ ou Godot dans un package publié |
| Déterminisme | même source, même graine, mêmes octets. C'est la condition des goldens (plan 11 : « même grille, même SVG ») |
| Données JSON | le personnage se décrit en données que le jumeau typé (@recit/core/schema, zod) peut valider : recette, grille, options |
| Licence | code 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 |
| Maintenance | activité récente, plus d'un mainteneur si possible ; sinon on s'en inspire au lieu d'en dépendre |
| Sortie | planche de sprites (grille fixe) avec métadonnées de frames et de durées, ou SVG pur |
| Intégration Récit | blocs ```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épendances | zé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 | État | Colonnes | Durées (ms) |
|---|---|---|---|
| 0 | idle | 0 à 5 | 280, 110, 110, 140, 140, 320 |
| 1 | running-right | 0 à 7 | 120, la dernière 220 |
| 2 | running-left | 0 à 7 | 120, la dernière 220 |
| 3 | waving | 0 à 3 | 140, la dernière 280 |
| 4 | jumping | 0 à 4 | 140, la dernière 280 |
| 5 | failed | 0 à 7 | 140, la dernière 240 |
| 6 | waiting | 0 à 5 | 150, la dernière 260 |
| 7 | running | 0 à 5 | 120, la dernière 220 (« travaille ») |
| 8 | review | 0 à 5 | 150, 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ôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| crsolver/claude-pxl | DSL .px.ts (palettes, grilles texte, miroir, contour auto, variantes de palette, frames en patchs) → PNG, planche + JSON, GIF, viewer ; livré avec SKILL.md | TS, Node ≥ 22.18, zéro dépendance, sans build | MIT | 431 | 2026-10-15 | le plus proche de la demande : skill, JS, graines reproductibles, sans modèle d'image ; variantes de palette = une couleur par thème | dix 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-pet | skill Codex qui crée, valide et empaquette des pets animés ; référence du contrat codex-pet-v1 | Markdown + scripts Python, $imagegen | Apache-2.0 (LICENSE.txt du dossier ; pas de licence racine) | 28,3k (dépôt entier) | 2026-09-08 | source du contrat ; tableau des lignes vérifié ; grille de QA | Python + modèle d'image : outil externe seulement (déjà la règle) ; reprise de texte = NOTICE Apache |
| runcomfy-com/skills — codex-pet | un appel GPT Image 2 pour la pose maître, puis ImageMagick fabrique les 9 lignes (pet.json + spritesheet.webp) | skill Markdown, CLI runcomfy, ImageMagick | MIT | 16 | 2026-10-21 | frames déterministes après l'image ; confirme le contrat de façon indépendante | service payant + binaire ImageMagick ; animation très pauvre (décalages, clignements) ; dépôt marketing |
| 0x0funky/agent-sprite-forge | skills 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) | MIT | 4,6k | 2026-10-06 | pipeline « un personnage, plusieurs actions cohérentes » le plus complet ; export JSON Aseprite avec tags | Python + API payantes ; génération non déterministe ; layout propre ; lourd |
| tachikomared/character-animation-creator-skill | skill : sprite de base 64×64 puis bandes idle/walk/attack en 8 directions, pixel_snap.py, validate_64_sheet.py | skill Markdown + Python/Pillow | non vérifiée (README MIT, pas de LICENSE) | 358 | 2026-05-08 | mê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.3 | MIT (les deux) | 390 (+154) | 2025-10-19 | dessin pas à pas sans diffusion, rejouable ; sortie JSON Aseprite | Aseprite propriétaire requis ; binaire Go ; inactif depuis un an |
| PlayableIntelligence/game-creator | plugin Claude pour jeux Phaser/Three.js, avec un skill de sprites Retro Diffusion | JS, plugin Claude | non vérifiée (README MIT, pas de LICENSE) | 346 | 2026-05-25 | exemple d'empaquetage de skills de sprites en plugin | orienté jeu, API payante, pas de licence |
2.2 Générateurs procéduraux de sprites pixel
| Dépôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| zfedoran/pixel-sprite-generator | portage JS de l'algorithme de masque de Dave Bollinger (masque −1/0/1/2, hasard, miroir, contour, couleur) | JS ES5, Canvas, npm | MIT | 618 | 2021-09-03 | algorithme de référence, court ; le masque est une donnée JSON idéale pour un jumeau | Math.random() (10 appels vérifiés) : pas de graine ; Canvas seulement ; une frame ; abandonné |
| seiyria/mixel | réécriture TS du précédent, teinte, RNG à graine ; Mask = {width, height, mirrorX, mirrorY, data} | TS, npm | MIT | 8 | 2018-06-15 | forme 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-nodejs | portage Node qui écrit des créatures en PNG | JS, Node | MIT | 24 | 2023-01-07 | sortie PNG sans navigateur, comme une étape de build | probablement sans graine (non vérifié) ; petit, inactif |
| KilledByAPixel/ZzSprite | générateur symétrique de 2,6 Ko : ZzSprite(ctx, x, y, seed, size, mode, mutateSeed, colorSeed) | JS, Canvas 2D | MIT | 168 | 2022-01-03 | entièrement à graine : un sprite = cinq nombres ; graines de mutation = variantes | dessine 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, setSeed | TS, npm | MIT | 24 | 2018-08-21 | entrée textuelle très compacte, native en Markdown ; tableaux de pixels, rendu sans DOM possible | abandonné ; petits sprites d'arcade, pas de poses |
| stmn/pixelship | graine → bruit → automate cellulaire → coque, réacteurs, armes ; planche PNG + JSON de points d'ancrage | JS, navigateur | MIT (+ clause : sprites générés en CC0) | 3 | 2026-09-02 | même philosophie que Récit : la recette (graine + paramètres) est ce qu'on sauvegarde ; sortie CC0 | vaisseaux seulement ; application, pas bibliothèque ; un auteur |
| ReneesmeS/pixel-monster-generator | monstres à graine, palettes, planche animée PNG | TS, Vite, Canvas 2D | MIT (+ notice d'attribution) | 5 | 2026-03-01 | même outillage que Récit ; créatures animées à graine | application ; pas de JSON de frames ; pas codex-pet-v1 |
| shikaan/pickcells | on peint un masque, l'outil génère des variations | TS, Vite | MIT | 7 | 2024-10-10 | l'idée d'atelier : silhouette humaine, variation algorithmique | petit ; graine et format d'export non vérifiés |
| joseprio/starshipwright | generateOutlineClassic(seed) puis generateShip(outline, colorSeed, shipSeed) | TS, npm, Canvas | MIT | 2 | 2024-11-15 | API propre à trois graines = jumeau de trois nombres | vaisseaux ; lié au navigateur ; peu pertinent |
| Deep-Fold/SpriteGenerator | créatures et vaisseaux procéduraux (auteur de PixelPlanets) | GDScript, Godot | MIT | 111 | 2021-06-10 | beaux résultats ; idées réimplémentables | Godot ; inactif ; référence seulement |
| yurkth/sprator | sprites symétriques par automate cellulaire | C++ | MIT | 179 | 2021-10-20 | algorithme simple (demi-grille, automate, miroir, contour), facile à refaire en TS | application C++ ; formes abstraites |
| laurentpayot/minidenticons | identicon SVG 5×5 symétrique depuis une chaîne | JS ESM, navigateur + Node, typé | MIT | 615 | 2024-05-30 | dé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ôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| LiberatedPixelCup/Universal-LPC-Spritesheet-Character-Generator | gé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édits | TS, Vite, Canvas/WebGL, Playwright | code GPL-3.0 ; art par fichier : CC0, CC-BY, CC-BY-SA, OGA-BY, GPL | 1,9k | 2026-10-20 | le seul vrai « atelier de personnage » mûr en corps entier animé ; couches en JSON ; crédits intégrés | code 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-mcp | serveur MCP Node : rendu LPC sans navigateur, personnages à graine, lots, GIF, atlas (Phaser, Aseprite, Godot…), crédits | JS, Node ≥ 20.11, MCP stdio, npm | GPL-3.0 | 3 | 2026-10-19 | exactement le schéma voulu pour un outil externe : requête JSON → PNG + atlas ; graines, goldens SHA-256 | GPL : jamais importé ; trois semaines d'âge ; licences LPC ; pas codex-pet-v1 |
| kyuza1/lpc-character-mcp | serveur MCP Python : planches LPC en langage naturel, GIF, presets | Python, uvx | MIT (fichier vérifié) ; art LPC selon ses licences | 1 | 2026-09-28 | code MIT, prêt pour un agent | Python ; graine non documentée ; doublon du précédent, n'en garder qu'un |
| ElizaWy/LPC | jeu d'art LPC Revised : personnages, palettes, guides d'animation | PNG | README : CC-BY-3.0 ou OGA-BY-3.0 (pas de fichier LICENSE) | 207 | 2023-12-02 | pas de share-alike ni de GPL ; guides d'animation documentés | assets seulement ; attribution ; inactif ; licence seulement dans le README |
| ObsidianTTRPGProject/LPC-Pattern-Clothier | génère de nouveaux motifs de vêtements LPC | HTML/JS | MIT | 0 | 2026-06-30 | étend le catalogue LPC | confidentiel ; la sortie hérite des licences sources |
2.4 Avatars et personnages vectoriels (SVG)
| Dépôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| 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/schema | TS, npm, navigateur + Node | code 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-21 | déterministe à l'octet ; jumeau = {style, seed, options} ; SVG pur (SSR, deck, motion, book) ; très actif ; styles CC0 sobres pour le site noir et blanc | têtes et bustes seulement, pas d'animation ni de planche ; liste blanche de styles à tenir ; une dépendance à justifier |
| zengm-games/facesjs | visages façon Mii ; chaque visage est un objet sérialisable rendu en SVG ; éditeur, CLI | TS, SVG, npm | Apache-2.0 | 1,4k | 2026-04-14 | l'objet est la donnée : la bibliothèque la plus proche d'un jumeau typé ; SVG sans navigateur | generate() sans graine (on stocke l'objet) ; visages seulement, style sportif |
| Mayandev/notion-avatar | créateur d'avatars au trait façon Notion, en couches | TS, Next.js | code MIT ; assets CC0 (README) | 3,2k | 2026-06-06 | trait noir et blanc CC0, idéal pour le défaut sobre | application ; fonctions IA avec backend ; même style dans DiceBear notionists |
| boringdesigners/boring-avatars | avatars abstraits SVG depuis un nom + palette de 5 couleurs (dont pixel) | TS, React | MIT | 6,5k | 2026-06-19 | déterministe ; palette = couleurs du thème | abstrait ; doublon de DiceBear si celui-ci est retenu |
| RobertBroersma/beanheads | personnages cartoon (buste, tenues, accessoires) par props | TS, React, SVG | MIT (pas de revente des icônes) | 1,5k | 2026-01-14 | props = jumeau ; plus « personnage » qu'une tête | hasard 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, React | code MIT ; art selon les conditions Avataaars | 846 | 2024-03-04 | props sérialisables | inactif ; art hors CC ; bustes ; déjà dans DiceBear |
| dapi-labs/react-nice-avatar | genConfig(seed) → config → avatar SVG | TS, React | MIT | 1,3k | 2024-07-23 | graine → config JSON → SVG : la forme exacte du pipeline Récit | inactif ; React DOM ; un seul style |
| Codennnn/vue-color-avatar | générateur sur l'Avatar Illustration System de Micah Lanier | Vue 3, Vite | code MIT ; assets CC BY 4.0 | 3,8k | 2025-07-24 | joli style ; config de pièces | Vue : 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 MCP | ReScript, React, Vite | MIT (dépôt) ; art Personas CC BY 4.0 selon DiceBear (non vérifié dans le dépôt) | 1,3k | 2026-10-23 | options publiées en JSON = schéma tout fait ; MCP pour un skill ; actif | ReScript : outil externe ; bustes |
| multiavatar/Multiavatar | multiavatar(string) → SVG mêlant 16 personnages × 3 thèmes | JS, zéro dépendance | licence Multiavatar propre (non OSI, limite le réempaquetage) | 2,0k | 2022-03-26 | déterministe | licence restrictive : à ne pas embarquer ; palettes figées ; abandonné |
| nusu/avvvatars | avatar de forme ou d'initiales par valeur | TS, React | MIT | 2,0k | 2024-07-08 | sobre (lettres, formes) | pas un personnage ; palette figée ; inactif |
| elizabetdev/react-kawaii | mascottes kawaii SVG avec humeur (happy, sad, shocked…) et couleur | TS, React | MIT | 3,0k | 2025-09-28 | l'humeur = état émotionnel minimal pour stories et toon ; couleur = thème | jeu de mascottes fixe ; ni graine ni poses |
| CeamKrier/react-peeps | composants React des Open Peeps : tête, visage, accessoires, corps debout ou assis | TS, React | code MIT ; art Open Peeps CC0 | 70 | 2023-10-05 | corps entiers CC0 au trait noir et blanc : le défaut sobre | petit, inactif ; dessins discrets, sans squelette ni animation |
2.5 Poupées de papier (modèles de données)
| Dépôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| JLChnToZ/paperbuddy | poupée de papier web : sélecteurs conditionnels imbriqués, éditeur d'arbre de couches, export PNG et config | TS | MIT | 2 | 2023-01-06 | couches + 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, Bevy | MIT | 9 (+13) | 2023-08-19 | modèle conceptuel propre (emplacements, fragments, pivots) à emprunter | Rust ; inactif ; référence seulement |
| KhurrumAli1997/paper-doll-studio | pipeline visual novel : import PSD/PNG, segmentation SAM, garde-robe, inpainting SD 1.5 | Python (FastAPI), JS, SD, SAM | Apache-2.0 (vérifiée) | 12 | 2026-05-28 | structure DOLL_CONFIG intéressante | Python + GPU ; style anime ; minuscule |
2.6 Éditeurs pixel et format Aseprite
| Dépôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| piskelapp/piskel | éditeur web de sprites (calques, frames, pelure d'oignon) ; export planche PNG, GIF, .piskel (JSON) | JS, jQuery, Grunt | Apache-2.0 | 12,9k | 2026-10-21 | mû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/Pixelorama | suite pixel art complète (sprites, tuiles, animation), bureau et web (WASM) | GDScript, Godot | MIT | 10,8k | 2026-10-23 | très actif ; meilleure ergonomie libre | Godot : outil externe ; ni graine ni procédural |
| LibreSprite/LibreSprite | fork du dernier Aseprite GPLv2 | C++ | GPL-2.0 | 8,6k | 2026-10-21 | flux de travail façon Aseprite, gratuit | C++, 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 disponible | 40,3k | 2026-10-22 | son JSON est le format d'échange de fait : durées par frame et tags nommés = lignes codex-pet | non libre, non redistribuable ; pour ceux qui le possèdent |
| TheCyberRonin/ase-parser | lecteur de fichiers .aseprite sans dépendance | JS, Node Buffer | MIT | 27 | 2026-09-04 | lire calques, frames et tags en JSON typé sans lancer Aseprite | pré-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, GIF | React, Redux, ImmutableJS | MIT | 6,0k | 2026-02-05 | React ; projets en texte ; sortie CSS indépendante de la résolution | Redux/Immutable en doublon ; pas de graine |
| rgab1508/PixelCraft | PWA pixel art et GIF | JS, Canvas | MIT | 1,5k | 2025-03-16 | petit ; algorithmes ligne/cercle/remplissage faciles à porter | pas une bibliothèque ; peu actif |
| Esshahn/spritemate | éditeur de sprites Commodore 64 | TS | MIT | 154 | 2026-10-23 | modèle de sprite à palette contrainte et taille fixe, stocké en données | contraintes C64 ; application |
| lospec/pixel-editor | éditeur en ligne de Lospec | JS | GPL-3.0 | 1,1k | 2024-06-29 | l'écosystème de palettes Lospec (palettes en données) | déprécié (README) ; GPL : lien seulement |
| kitao/pyxel | moteur rétro avec éditeur de sprites et palette de 16 couleurs | Rust, Python, WASM | MIT (fichier vérifié) | 18,5k | 2026-10-24 | modèle d'asset à palette fixe défini en données : bonne référence | hors stack ; référence seulement |
2.7 Planches : empaquetage et lecture
| Dépôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| odrick/free-tex-packer-core (+ GUI) | atlas JsonHash, JsonArray, Pixi, Phaser, Godot, Unity… ou gabarit libre ; GUI 1,3k ★ | JS, Node | MIT | 151 | 2026-09-11 | déterministe ; un exporteur maison pourrait écrire un manifeste Récit | dépendances image (non vérifiées) ; codex-pet est une grille fixe : rien à empaqueter |
| soimy/maxrects-packer | empaquetage 2D MaxRects | TS | MIT | 249 | 2026-10-15 | zéro dépendance, typé, actif, déterministe | géométrie seulement |
| twolfson/spritesmith | assemble des images en planche + coordonnées | JS, Node | MIT | 927 | 2024-10-23 | mûr, déterministe | orienté sprites CSS ; API ancienne ; doublon d'outillage image |
| houmain/spright | empaqueteur et annotateur piloté par un fichier de définition | C++ | GPL-3.0 | 83 | 2025-12-22 | données en entrée, planche + description en sortie | C++, GPL |
| krzysztof-o/spritesheet.js | CLI de planches (Starling, PIXI, Easel, cocos2d) | JS, Node | CC-BY-NC-SA-4.0 (vérifiée) | 567 | 2026-03-04 | référence des formes JSON PIXI et Starling | non commerciale : ni dépendance ni copie |
| danilosetra/react-responsive-spritesheet | lecteur React de planches responsive | TS, React | MIT | 104 | 2026-05-13 | même stack | piloté par minuterie : motion veut une fonction de la frame (plan 11 D9) |
| filidorwiese/spriteling | moteur d'animation de planches (scripts, boucles) | TS | ISC | 107 | 2023-01-03 | scripts déclaratifs proches des lignes codex-pet | inactif ; trivial à écrire dans Récit |
2.8 Animation vectorielle et squelettes
| Dépôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| airbnb/lottie-web | rend des animations Lottie JSON en SVG/canvas | JS | MIT | 32,3k | 2025-09-01 | animation en JSON ; positionnable frame par frame (motion) | pas un créateur de personnage ; maintenance ralentie ; lourd (chargement paresseux) |
| rive-app/rive-wasm | runtime des fichiers Rive (os, machines à états) | TS + WASM | MIT (runtime) ; éditeur propriétaire | 1,0k | 2026-10-24 | vrais squelettes avec états (idle, walk, wave) | éditeur propriétaire ; .riv binaire, pas de jumeau JSON ; moteur WASM en plus |
| DragonBones/DragonBonesJS | runtime squelette JSON + atlas, adaptateurs Pixi/Phaser | TS | MIT | 857 | 2026-01-23 | format 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ôt | Ce que c'est | Techno | Licence | ★ | Activité | Plus | Moins |
|---|---|---|---|---|---|---|---|
| mor-o/comfyui-2d-character-pipeline | cinq workflows ComfyUI : pose, image → vidéo, détourage en planche RGBA grise, couches teintables | ComfyUI (Python), GPU 24 Go | MIT | 115 | 2026-06-20 | workflows en JSON ; base grise + teinte = une couleur par thème | GPU lourd ; non déterministe sans graines figées |
| AHEKOT/ComfyUI_VNCCS | suite de personnage cohérent pour visual novel : poses, tenues, émotions | nœuds ComfyUI, Python + JS | MIT | 1,7k | 2026-10-22 | actif ; planches d'émotions et de costumes pour stories et toon | GPU ; pas de manifeste d'atlas ; licences de modèles variables |
| dimtoneff/ComfyUI-PixelArt-Detector | réduction, changement de palette, tramage de pixel art issu de SDXL | Python, ComfyUI | MIT | 452 | 2025-10-31 | palette imposée (couleurs de thème) | post-traitement seulement |
| Astropulse/pixeldetector | détecte la vraie grille d'un pixel art agrandi et le réduit | Python | MIT | 370 | 2024-04-04 | déterministe ; petit algorithme réimplémentable pour un validateur | Python ; non maintenu |
| blendi-remade/sprite-sheet-creator | application : prompt → personnage pixel, planches 2×2 par animation, bac à sable | Next.js, React, fal.ai | aucune | 1,8k | 2026-07-01 | référence d'ergonomie pour un studio web | sans licence : rien de réutilisable ; API payante |
| lovisdotio/falsprite | un LLM réécrit le prompt en chorégraphie par ligne, un modèle génère une planche NxN | JS, Node, sharp | non vérifiée (README MIT, pas de LICENSE) | 211 | 2026-02-26 | « chorégraphie par ligne » = prompts en données | pas de licence ; fournisseur payant ; pas de JSON de frames |
| Retro-Diffusion/api-examples | exemples, contrats et llms.txt de l'API pixel art Retro Diffusion | Python | aucune | 156 | 2026-10-07 | documentation pensée pour les agents ; modèle natif pixel | API 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 :
| Candidat | Pourquoi il pourrait entrer | Pourquoi 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 CC0 | ne 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-packer | zéro dépendance, typé | codex-pet-v1 est une grille fixe : rien à empaqueter. Seulement si un atlas libre devient nécessaire |
| ase-parser | lire un .aseprite sans Aseprite | pré-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).
| Outil | Usage dans Récit |
|---|---|
hatch-pet (déjà retenu) | planche codex-pet-v1 depuis une image de référence (Broc) |
| crsolver/claude-pxl | pixel art écrit par un agent, sans modèle ; sortie PNG + JSON à convertir en grille ```pixel ou en planche |
| LPC generator / lpc-spritesheet-mcp | personnages 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, ComfyUI | pipelines 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
| Cas | Consé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'IA | conditions 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.
- 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/componentsne doit pas importer lerandom()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. - Recette typée :
PixelRecipedans@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. - 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 decodex-pet-v1. Rendu volontairement modeste, comme runcomfy, mais sans modèle. - Export
codex-pet-v1: composition des frames dans une grille 8×9 de cases192×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 blocspritedu plan 11 D9 et se valide avec le schémaSpriteSheetdu plan 14 D12. - Constantes du layout : le tableau du §1.3 en données typées (
layout: "codex-pet-v1"), source unique pour le validateur, le blocspriteet l'export. - 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.
- Skill :
recit://guide/pixeldécrit la syntaxe et la recette ;recit skills exporten 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 verscodex-pet-v1quand 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 —
PixelRecipedans@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, provenanceorigin: 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 parsprite.
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/pixelcomplété ; skill exporté parrecit 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/pixelsi 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
| Risque | Parade |
|---|---|
| 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 pauvres | assumé : 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 graphique | atelier limité à grille + graine + aperçu ; tout le reste renvoie à Piskel |
| Asset LPC publié sans crédits ou en violation du share-alike | provenance obligatoire, CSV de crédits exigé en --strict, aucun asset LPC dans les exemples |
| claude-pxl change ou disparaît | outil 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 moteur | PRNG 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 :
« 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.Dépendance ou code maison ?Tranché : code maison, zéro dépendance (§3.1).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 :
- Faut-il un portrait par entrée de bible (ce qui ferait entrer DiceBear en AT4) ?
- Le site lebrocoli.fr doit-il proposer l'atelier au public, ou seulement ai.recit.dev ?
- 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.mdD10 : « 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.