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>
55 lines
2.7 KiB
Markdown
55 lines
2.7 KiB
Markdown
# 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.
|