Filière A — fetch:medias rapatrie les photographies VALIDÉES depuis Commons et les encode en AVIF/WebP à 480, 800 et 1200 px. Aujourd'hui : 0 traité, 39 ignorés — le pipeline respecte la porte de validation au lieu de la contourner. Vérifié sur une copie : source de 256 Ko → 106 Ko en AVIF 1200 px, 36 Ko en 480 px, budget de 200 Ko tenu. ImageMagick est une dépendance système, pas un paquet npm. Filière B — client ComfyUI en bibliothèque standard seule, hors bundle. Les trois défauts du pack d'origine sont corrigés : - hash() est randomisé par exécution depuis Python 3.3, donc les seeds du pack n'étaient PAS reproductibles malgré son argumentaire. Remplacé par zlib.crc32 et prouvé empiriquement — deux processus avec des PYTHONHASHSEED différents donnent les mêmes valeurs. - copy.deepcopy au lieu de json.loads(json.dumps(...)). - rembg reste commenté avec l'avertissement qui manquait : le paquet est MIT, les poids du modèle ne le sont pas nécessairement. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.7 KiB
Session 3 — Pipeline d'assets
Date : 2026-07-27 · Livrable : deux pipelines, un par filière.
Porte de sortie
| Critère | Cible | Mesuré |
|---|---|---|
| Assets non validés dans le build | 0 | 0 — le pipeline refuse les 39 médias non validés ✅ |
| Assets de filière B dans une épreuve | 0 | refusé par validate:data, prouvé par test:porte ✅ |
| Reproductibilité des seeds | deux exécutions identiques | vérifié avec PYTHONHASHSEED différent ✅ |
| Poids par image | ≤ 200 Ko | AVIF 1200 px à 106 Ko, 800 px à 79 Ko, 480 px à 36 Ko ✅ |
| Appels réseau au runtime | 0 | les médias sont rapatriés au build, jamais chargés depuis Commons ✅ |
| Compositing sur média SA ou NC | 0 | refusé par validate:data ✅ |
Filière A — npm run fetch:medias
Rapatrie les photographies validées depuis Commons, les encode en AVIF et WebP à trois
largeurs (480, 800, 1200), et inscrit fichier_local dans les données.
Deux raisons de ne pas pointer vers les URLs de Commons dans le jeu : le projet s'interdit toute requête tierce au runtime, et un jeu qui doit fonctionner hors ligne ne peut pas dépendre d'un serveur distant.
Le script ne télécharge que ce qui est validé. Aujourd'hui : 0 traité, 39 ignorés. Le pipeline ne contourne pas la porte, il la respecte.
Vérifié sur une copie de travail, sans toucher aux données réelles : source de 256 Ko → 106 Ko en AVIF 1200 px, 36 Ko en 480 px. La qualité baisse d'un cran tant que le budget de 200 Ko est dépassé.
ImageMagick est une dépendance système, pas un paquet npm : l'outil existe sur la machine de build et n'a rien à faire dans le bundle.
Filière B — tools/assets/comfyui_client.py
Client ComfyUI en bibliothèque standard seule, hors bundle, avec son requirements.txt.
Les trois défauts du pack d'origine sont corrigés, et le premier est le plus grave :
le pack calculait ses seeds avec hash(), randomisé à chaque exécution depuis Python 3.3,
tout en vendant l'argument « même seed = même style ». Ses seeds ne l'étaient pas.
Remplacé par zlib.crc32. Prouvé empiriquement : deux processus lancés avec des
PYTHONHASHSEED différents produisent exactement les mêmes valeurs.
copy.deepcopy remplace json.loads(json.dumps(...)). Et rembg reste commenté dans
requirements.txt avec l'avertissement qui manquait : le paquet est sous MIT, les poids
du modèle ne le sont pas nécessairement.
Ce qui reste
Le plan d'assets et les workflows ComfyUI ne sont pas écrits : ils dépendent de choix graphiques qui appartiennent au porteur, et générer du décor avant d'avoir un jeu jouable serait mettre la charrue avant les bœufs.