@mcptoolshop/style-dataset-lab 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.es.md +111 -59
  3. package/README.fr.md +117 -67
  4. package/README.hi.md +109 -70
  5. package/README.it.md +111 -60
  6. package/README.ja.md +116 -76
  7. package/README.md +58 -2
  8. package/README.pt-BR.md +119 -64
  9. package/README.zh.md +108 -67
  10. package/bin/sdlab.js +50 -1
  11. package/lib/adapters/ai-toolkit.js +187 -30
  12. package/lib/adapters/comfyui-workflows.js +84 -9
  13. package/lib/asset-ingest.js +575 -0
  14. package/lib/asset-masks.js +323 -0
  15. package/lib/asset-source.js +1176 -0
  16. package/lib/canon-author.js +350 -0
  17. package/lib/canon-review-gate.js +205 -0
  18. package/lib/colab-launcher-guards.js +285 -0
  19. package/lib/export.js +1 -1
  20. package/lib/freeze-gate.js +3 -0
  21. package/lib/generated-provenance.js +178 -5
  22. package/lib/lane1-render.js +668 -0
  23. package/lib/memory-store.js +663 -0
  24. package/lib/model-licences.js +305 -0
  25. package/lib/npy-meta.js +130 -0
  26. package/lib/png-meta.js +512 -0
  27. package/lib/records.js +54 -8
  28. package/lib/reingest-selected.js +15 -1
  29. package/lib/reingest.js +27 -3
  30. package/lib/run-manifest.js +59 -11
  31. package/lib/train-runs.js +214 -0
  32. package/lib/verifier.js +3 -0
  33. package/lib/verify-chain.js +367 -0
  34. package/package.json +2 -2
  35. package/scripts/asset-ingest.js +160 -0
  36. package/scripts/canon-draft.js +82 -0
  37. package/scripts/canon-freeze.js +4 -0
  38. package/scripts/colab/REAL_SERVICE_ASSUMPTIONS.md +14 -0
  39. package/scripts/colab/ai-toolkit-override-py315.txt +45 -0
  40. package/scripts/colab/colab_window.sh +587 -0
  41. package/scripts/colab/lane1_render.py +970 -0
  42. package/scripts/colab/launch_guards.py +564 -0
  43. package/scripts/colab/launch_lane1_stub.sh +309 -0
  44. package/scripts/colab/launch_lane3_stub.sh +366 -0
  45. package/scripts/colab/remote_runner.py +59 -0
  46. package/scripts/doctor.js +1 -0
  47. package/scripts/generate.js +38 -12
  48. package/scripts/verify.js +67 -0
package/README.fr.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.md">English</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
2
+ <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.md">English</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -13,11 +13,11 @@
13
13
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
14
14
  </p>
15
15
 
16
- Écrivez vos règles visuelles. Générez des œuvres d’art. Évaluez chaque image en fonction de ces règles. Diffusez les résultats sous forme de données d’entraînement versionnées et auditables, puis mettez en œuvre les modèles entraînés dans des flux de travail de production réels et renvoyez les meilleurs résultats dans votre corpus.
16
+ Écrivez vos règles visuelles. Générez des œuvres d’art. Évaluez chaque image en fonction de ces règles. Diffusez les résultats sous forme de données d’entraînement versionnées et auditables, puis mettez en œuvre les modèles entraînés dans des flux de travail de production réels et réinjectez les meilleurs résultats dans votre corpus.
17
17
 
18
- Style Dataset Lab relie ce que vous avez écrit sur votre style artistique à l’ensemble de données à partir duquel vous effectuez réellement l’entraînement, puis boucle le processus jusqu’à la production. Vous définissez une constitution : règles de silhouette, contraintes de palette, langage des matériaux, tout ce qui compte pour votre projet. Le pipeline génère des candidats, les évalue en fonction de ces règles et regroupe les œuvres approuvées dans des ensembles de données reproductibles où chaque enregistrement explique pourquoi il a été inclus.
18
+ Style Dataset Lab relie ce que vous avez écrit concernant votre style artistique à l’ensemble de données à partir duquel vous effectuez réellement l’entraînement, puis boucle le processus jusqu’à la production. Vous définissez une constitution : règles de silhouette, contraintes de palette, langage des matériaux, tout ce qui compte pour votre projet. Le pipeline génère des candidats, les évalue en fonction de ces règles et regroupe les éléments approuvés dans des ensembles de données reproductibles où chaque enregistrement explique pourquoi il a été inclus.
19
19
 
20
- Ensuite, l’environnement de travail de production prend le relais : compilez des instructions de génération à partir des éléments clés du projet, exécutez-les via ComfyUI, évaluez les résultats, produisez en série des feuilles d’expression et des planches d’ambiance, sélectionnez les meilleurs résultats et réintégrez-les en tant que nouveaux candidats. La boucle se ferme : produire, sélectionner, examiner, améliorer.
20
+ Ensuite, l’atelier de production prend le relais : compilez des briefs de génération à partir des données du projet, exécutez-les dans ComfyUI, critiquez les résultats, produisez en série des feuilles d’expression et des planches d’environnement, sélectionnez les meilleurs résultats et réintégrez-les en tant que nouveaux candidats. La boucle se ferme : produire, sélectionner, examiner, améliorer.
21
21
 
22
22
  ## Le pipeline
23
23
 
@@ -63,11 +63,56 @@ sdlab select --run run_2026-04-16_001 --approve 001.png,003.png
63
63
  sdlab reingest selected --selection selection_2026-04-16_001
64
64
  ```
65
65
 
66
- Cette dernière commande est essentielle. Les résultats sélectionnés repassent par le même processus d’évaluation que tous les autres éléments. Le corpus s’enrichit et les règles sont respectées.
66
+ Cette dernière commande est essentielle. Les résultats sélectionnés repassent par le même processus d’examen que tous les autres. Le corpus s’enrichit et les règles sont respectées.
67
+
68
+ ## La chaîne d’actifs : exportations 3D en tant que données d’entraînement
69
+
70
+ `sdlab ingest` accepte les images brutes sans vérification. `sdlab asset ingest` exige un **contrat**.
71
+
72
+ Lorsqu’un actif 3D passe son étape de validation, le fait de le rendre à partir de N angles vous donne une vue d’ensemble cohérente *par construction* — une propriété que la diffusion par vue ne peut pas garantir. La chaîne d’actifs accepte ces exportations en tant que données d’entraînement traçables :
73
+
74
+ ```bash
75
+ # Validate an export's manifest end to end, run the gates, write nothing
76
+ sdlab asset ingest ~/exports/dragon_dense --project my-project --dry-run
77
+
78
+ # Register it: records, candidates, masks, channels, receipt
79
+ sdlab asset ingest ~/exports/dragon_dense --project my-project
80
+ ```
81
+
82
+ Le répertoire d’exportation contient un manifeste `asset-source.json` (schéma **1.3.0**) qui déclare
83
+ ses canaux, ses bandes de palette, ses seuils de validation, le verdict d’acceptation, le registre de style, la manière dont
84
+ les rendus ont été créés et leur provenance. sdlab prouve chaque déclaration
85
+ par rapport aux octets réels et refuse l’ensemble de l’ingestion en cas de violation — rien n’est enregistré
86
+ si le manifeste est incorrect.
87
+
88
+ **La jonction :** sdlab fournit le mécanisme, l’actif fournit la sémantique. sdlab ne trace jamais de rayons,
89
+ ne rend jamais et n’apprend jamais qu’un canal appelé « provenance » est spécial. Il prouve,
90
+ mesure, enregistre et regroupe. La signification des chiffres reste avec l’actif.
91
+
92
+ Ce que le contrat impose :
93
+
94
+ | étape | ce qui est prouvé |
95
+ |---|---|
96
+ | **schema** | forme, identifiants, bandes de palette bien formées et un verdict d’acceptation qui est littéralement `"accepted"` |
97
+ | **containment** | chaque chemin référencé se résout *à l’intérieur* du répertoire d’exportation (il s’agit d’une entrée non fiable) et existe |
98
+ | **encoding** | l’en-tête IHDR d’un PNG correspond à son encodage déclaré ; un en-tête NPY correspond à son dtype et à sa forme déclarés. Un manifeste qui « semble correct » mais qui est en désaccord avec ses octets est la classe d’échec que cette chaîne est conçue pour empêcher |
99
+ | **categorical** | les PNG indexés prouvent que PLTE ⊆ palette déclarée ; les canaux filtrés avec `nearest` font l’objet d’un décodage de pixels *exhaustif* ; les NPY catégoriques font l’objet d’une analyse exhaustive des valeurs |
100
+ | **gates** | la validation de la palette s’effectue par rendu, à partir des propres bandes et seuils du manifeste — un rendu qui échoue est rejeté de manière audible et signalé, et non admis silencieusement |
101
+
102
+ Les enregistrements sont enregistrés **sans curation** (`judgment: null`) avec `provenance.source: "asset"`, en conservant
103
+ le bloc d’acceptation tel quel, les hachages par fichier, la caméra et la direction dérivée, les mesures de validation, le registre de style déclaré et, par image, la trame et la graine de génération. Ils sont ensuite
104
+ soumis au même processus de curation que tous les autres enregistrements.
105
+
106
+ L’ingestion signale également ce qu’un manifeste *n’a pas* déclaré — un registre de style inconnu, une
107
+ absence de `identity.subject_name`, une absence de provenance de la génération — sous forme de **notifications** plutôt que
108
+ d’échecs. Elles sont incluses dans le reçu et affichées dans l’interface en ligne de commande. Un écart dont personne n’est informé est un écart que personne ne peut combler ; et comme un manifeste peut *déclarer* que ses rendus sont des dérivations déterministes sans graine propre, la chaîne ne signale jamais un écart sur une exportation qui est correcte.
109
+
110
+ Contrat complet, l’échelle de validation et la justification de chaque champ :
111
+ [docs/asset-lane-design.md](docs/asset-lane-design.md).
67
112
 
68
113
  ## Création de contenu canonique
69
114
 
70
- Before the dataset pipeline runs, the `sdlab canon *` namespace turns your project's canon entity store into the three projections training and production actually consume — and locks the entries that must not drift.
115
+ Avant que le pipeline de l’ensemble de données ne s’exécute, l’espace de noms `sdlab canon *` transforme le magasin d’entités canoniques de votre projet en les trois projections que l’entraînement et la production utilisent réellement, et verrouille les entrées qui ne doivent pas dériver.
71
116
 
72
117
  ```bash
73
118
  # Build three projections from the canon entity store:
@@ -83,67 +128,69 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
83
128
  sdlab canon drift --project my-project
84
129
  ```
85
130
 
86
- `canon build` est adressable par contenu : sa sortie est indexée par un `canon_sha` et mise en cache, de sorte qu’une version non modifiée se reconstruit instantanément. `canon freeze` enregistre chaque « gel » par rapport à une version spécifique et l’ajoute à un historique d’audit `freeze-events.jsonl` : les entrées `frozen` refusent purement et simplement la régénération, les entrées `soft-advisory` refusent par défaut (contournement possible avec `--i-know`). `canon drift` recalcule le hachage de chaque entrée suivie et signale tout ce qui a été modifié depuis la dernière version propre.
131
+ Un modèle local peut également rédiger le contenu canonique, mais il ne peut pas le décider. `sdlab canon draft <class_id> --endpoint <url> --brief "<text>" --out <path>` demande à un serveur en boucle uniquement, compatible OpenAI, une entrée canonique et des invites, et les écrit avec `status: "draft"`, `judgment: null` et le modèle de rédaction estampillé sur chaque sortie. Un brouillon ne peut pas être figé tant qu’une personne ne l’a pas approuvé : la porte de gel refuse toute entrée rédigée par un modèle sans l’approbation d’un humain, une justification et le hachage du brouillon exact qui a été approuvé.
87
132
 
88
- Flux de travail complet dans le manuel : [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/) et [Empilement Two-LoRA](handbook/two-lora-stacking/).
133
+ `canon build` est adressable par contenu — sa sortie est indexée par un `canon_sha` et mise en cache, de sorte qu’une reconstruction canonique inchangée se fait instantanément. `canon freeze` atteste de chaque gel par rapport à une version spécifique et ajoute une `freeze-events.jsonl` à un historique d’audit : les `frozen` entrées refusent purement et simplement la régénération, les `soft-advisory` entrées refusent par défaut (contournement avec `--i-know`). `canon drift` recalcule le hachage de chaque entrée surveillée et signale tout ce qui a été déplacé depuis la dernière reconstruction propre.
134
+
135
+ Flux de travail complet dans le manuel : [Création de contenu canonique](handbook/canon-build/), [Gel de contenu canonique](handbook/canon-freeze/) et [Empilement de deux LoRA](handbook/two-lora-stacking/).
89
136
 
90
137
  ## Ce qu’il produit
91
138
 
92
- Sept artefacts d’ensemble de données et un environnement de travail de production complet. Chaque artefact est lié à ses prédécesseurs, ce qui vous permet de retracer tout enregistrement d’entraînement jusqu’à la règle qui l’a approuvé.
139
+ Sept artefacts d’ensemble de données et un atelier de production complet. Chaque artefact est lié à ses prédécesseurs, ce qui vous permet de retracer tout enregistrement d’entraînement jusqu’à la règle qui l’a approuvé.
93
140
 
94
- | Artefact. | Ce que c’est. |
141
+ | Artefact | Ce que c’est |
95
142
  |----------|-----------|
96
- | **Snapshot** | Sélection des enregistrements figés avec empreinte de configuration. Chaque inclusion a une raison explicite. |
97
- | **Split** | Partitionnement entraînement/validation/test où les familles de sujets ne se croisent jamais. |
98
- | **Export package** | Ensemble de données autonome : manifeste, métadonnées, images, partitions, fiche d’informations sur l’ensemble de données, sommes de contrôle. |
99
- | **Eval pack** | Tâches de test tenant compte du canon : couverture des voies, dérive interdite, ancrage/or, continuité des sujets. |
100
- | **Training package** | Mise en page prête pour l’entraînement via des adaptateurs (`diffusers-lora`, `generic-image-caption`). Même vérité, format différent. |
101
- | **Eval scorecard** | Résultat de réussite/échec par tâche obtenu en évaluant les résultats générés par rapport aux ensembles d’évaluation. |
102
- | **Implementation pack** | Exemples d’invites, erreurs connues, tests de continuité et instructions pour la réintégration. |
143
+ | **Snapshot** | Sélection d’enregistrements figés avec une empreinte de configuration. Chaque inclusion a une raison explicite. |
144
+ | **Split** | Partition train/val/test où les familles de sujets ne traversent jamais les frontières. |
145
+ | **Export package** | Ensemble de données autonome : manifeste, métadonnées, images, partitions, fiche d’informations de l’ensemble de données, sommes de contrôle. |
146
+ | **Eval pack** | Tâches de test tenant compte du canon : couverture des pistes, dérive interdite, ancrage/or, continuité du sujet. |
147
+ | **Training package** | Configuration prête pour l’entraînement via des adaptateurs (`diffusers-lora`, `generic-image-caption`). Même vérité, format différent. |
148
+ | **Eval scorecard** | Évaluation par tâche : succès/échec, basée sur les résultats générés et comparés aux ensembles d’évaluation. |
149
+ | **Implementation pack** | Exemples d’instructions, exemples d’échecs connus, tests de continuité et instructions pour la réintégration. |
103
150
 
104
- L’environnement de travail de production ajoute :
151
+ L’environnement de production ajoute :
105
152
 
106
- | Surface. | Ce que cela fait. |
153
+ | Surface | Ce que cela fait |
107
154
  |---------|-------------|
108
- | **Compiled brief** | Instruction de génération déterministe à partir du profil de flux de travail + des éléments clés du projet. |
109
- | **Run** | Artefact d’exécution figé : instruction + graines + résultats ComfyUI + manifeste. |
110
- | **Critique** | Évaluation structurée multidimensionnelle des résultats de l’exécution par rapport au canon. |
111
- | **Batch** | Production coordonnée multi-slots (feuilles d’expression, planches d’ambiance, ensembles de silhouettes). |
112
- | **Selection** | Artefact de décision créative : quels résultats ont été choisis, pourquoi et d’où ils proviennent. |
113
- | **Re-ingest** | Les résultats sélectionnés sont renvoyés en tant qu’enregistrements candidats avec une provenance complète de la génération. |
155
+ | **Compiled brief** | Instruction de génération déterministe à partir du profil de flux de travail + de la vérité du projet. |
156
+ | **Run** | Artefact d’exécution figé : résumé + graines + ComfyUI résultats + manifeste. |
157
+ | **Critique** | Évaluation structurée multidimensionnelle des résultats d’exécution par rapport au canon. |
158
+ | **Batch** | Production coordonnée multi-slots (feuilles d’expression, tableaux d’environnement, ensembles de silhouettes). |
159
+ | **Selection** | Artefact de décision créative : quels résultats ont été choisis, pourquoi et d’où ils proviennent. |
160
+ | **Re-ingest** | Les résultats sélectionnés sont renvoyés sous forme d’enregistrements candidats avec une traçabilité complète de la génération. |
114
161
 
115
162
  ## Pourquoi cela existe
116
163
 
117
- Les données d’entraînement constituent l’artefact le plus important dans tout pipeline d’IA visuelle. Mais la plupart des données d’entraînement ne sont qu’un dossier d’images sans historique, sans suivi de l’évaluation et sans lien avec les règles de style qu’elles étaient censées suivre.
164
+ Les données d’entraînement sont l’artefact le plus important dans tout pipeline d’IA visuelle. Mais la plupart des données d’entraînement ne sont qu’un dossier d’images sans historique, sans suivi des évaluations et sans lien avec les règles de style qu’elles étaient censées suivre.
118
165
 
119
- Style Dataset Lab rend le lien explicite. Votre constitution définit les règles. Votre barème définit les dimensions d’évaluation. Vos enregistrements de sélection consignent l’évaluation. Votre liaison canonique prouve le lien. Et votre ensemble de données conserve tout cela sous une forme structurée, interrogeable et reproductible.
166
+ Style Dataset Lab établit explicitement le lien. Votre constitution définit les règles. Votre grille d’évaluation définit les dimensions d’évaluation. Vos enregistrements de curation enregistrent l’évaluation. Votre liaison au canon prouve le lien. Et votre ensemble de données conserve tout cela sous une forme structurée, interrogeable et reproductible.
120
167
 
121
- Le résultat pratique : lorsque votre LoRA dérive, vous pouvez demander *pourquoi*. Lorsque votre prochain cycle d’entraînement a besoin de meilleures données, vous savez exactement quels enregistrements sont presque corrects et quelle règle ils ont violée. Lorsqu’un nouveau membre de l’équipe demande quel est le langage visuel du projet, la réponse n’est pas un tableau Figma, mais une constitution consultable avec 1 182 exemples notés.
168
+ Le résultat pratique : lorsque votre LoRA dévie, vous pouvez demander *pourquoi*. Lorsque votre prochain cycle d’entraînement a besoin de meilleures données, vous savez exactement quels enregistrements sont presque ratés et quelle règle unique ils ont violée. Lorsqu’un nouveau membre de l’équipe demande quelle est la langue visuelle du projet, la réponse n’est pas un tableau Figma, mais une constitution consultable avec 1 182 exemples notés.
122
169
 
123
170
  ## Prouvé en production
124
171
 
125
- Il ne s’agit pas d’un pipeline de démonstration. Deux LoRA de style réels ont été mis en œuvre de bout en bout grâce à celui-ci, en utilisant la même boucle canon → sélection → entraînement → diffusion, aux extrémités opposées du spectre de la sélection.
172
+ Il ne s’agit pas d’un pipeline de démonstration. Deux vrais modèles LoRA de style ont été déployés de bout en bout grâce à celui-ci, en utilisant la même boucle canon → curation → entraînement → déploiement, aux extrémités opposées du spectre de la curation.
126
173
 
127
- - **[Tallow Fen](handbook/case-study-tallow-fen/)** (conception de créatures) — un bestiaire entièrement nouveau, avec environ **34 % d’approbation** sur 293 enregistrements sélectionnés (169 rejetés — le système de validation est strict). Publié `tallow_fen_style_v3.safetensors` @ 1.5 sur `qwen-image`.
128
- - **[Rustline](handbook/case-study-rustline/)** (conception de concepts) — un ensemble dense et préformaté, avec environ **96 % d’approbation** sur 180 enregistrements. Publié `rustline_v3ckpt_1500.safetensors` @ 1.0 sur `qwen-image`, réutilisé par un deuxième projet.
174
+ - **[Tallow Fen](handbook/case-study-tallow-fen/)** (conception de créatures) : un canon de bestiaire créé à partir de zéro, **~34 % d’approbation** sur 293 enregistrements évalués (169 rejetés : la porte rejette sévèrement). Déployé `tallow_fen_style_v3.safetensors` @ 1.5 sur `qwen-image`.
175
+ - **[Rustline](handbook/case-study-rustline/)** (conception de concepts) : canon dense et préformé, **~96 % d’approbation** sur 180 enregistrements. Déployé `rustline_v3ckpt_1500.safetensors` @ 1.0 sur `qwen-image`, réutilisé en aval par un deuxième projet.
129
176
 
130
- Même pipeline, deux profils de production : la porte de sélection est réelle (elle rejette fermement les sujets ouverts) et une canonisation disciplinée donne des taux d’acceptation élevés.
177
+ Même pipeline, deux profils de production : la porte de curation est réelle (elle rejette sévèrement les sujets ouverts) et un canon discipliné donne de bons résultats.
131
178
 
132
179
  ## Cinq domaines, règles réelles
133
180
 
134
- Pas de modèles génériques. Chaque domaine est livré avec des règles de constitution de qualité professionnelle, des définitions de voies, des barèmes d’évaluation et un vocabulaire de groupe.
181
+ Pas de modèles de base. Chaque domaine est livré avec des règles de constitution de qualité de production, des définitions de pistes, des grilles d’évaluation et un vocabulaire de groupe.
135
182
 
136
- | Domaine | Voies | Ce qui est évalué |
183
+ | Domaine | Pistes | Ce qui est évalué |
137
184
  |--------|-------|-----------------|
138
- | **game-art** | personnage, environnement, accessoire, interface utilisateur, vaisseau, intérieur, équipement | Silhouette à l’échelle du jeu, identification de la faction, usure et vieillissement |
139
- | **character-design** | portrait, corps entier, rotation, feuille d’expressions, pose d’action | Proportions, cohérence du costume, personnalité, clarté des gestes |
185
+ | **game-art** | personnage, environnement, accessoire, interface utilisateur, vaisseau, intérieur, équipement | Silhouette à l’échelle du jeu, lisibilité de la faction, usure et vieillissement |
186
+ | **character-design** | portrait, corps entier, rotation, feuille d’expression, pose d’action | Proportions, logique du costume, personnalité, clarté du geste |
140
187
  | **creature-design** | concept, orthographique, étude de détails, action, référence d’échelle, habitat | Anatomie, logique évolutive, distinction de la silhouette |
141
188
  | **architecture** | extérieur, intérieur, paysage urbain, détail structurel, ruine, paysage | Structure, cohérence des matériaux, perspective, cohérence de l’époque |
142
- | **vehicle-mech** | extérieur, cockpit, composant, schéma, feuille de silhouette, variante de dommage | Logique mécanique, langage du design, points d’accès, récit des dommages |
189
+ | **vehicle-mech** | extérieur, cockpit, composant, schéma, feuille de silhouette, variante de dommage | Logique mécanique, langage de conception, points d’accès, récit des dommages |
143
190
 
144
191
  ## Structure du projet
145
192
 
146
- Chaque projet est autonome. Cinq fichiers de configuration JSON définissent les règles ; tout le reste est constitué de données.
193
+ Chaque projet est autonome. Cinq fichiers de configuration JSON définissent les règles ; tout le reste est des données.
147
194
 
148
195
  ```
149
196
  projects/my-project/
@@ -167,22 +214,23 @@ projects/my-project/
167
214
 
168
215
  ## Propriétés de confiance
169
216
 
170
- Ce ne sont pas des objectifs à atteindre. Elles sont appliquées.
217
+ Ce ne sont pas des aspirations. Elles sont appliquées.
171
218
 
172
- - **Les instantanés sont immuables.** L’empreinte de configuration (SHA-256) prouve qu’aucun changement n’a été apporté. Les identifiants sont attribués de manière atomique, de sorte que deux exécutions simultanées ne peuvent pas se mélanger dans un seul répertoire.
173
- - **Les divisions empêchent les fuites — et la vérification qui le confirme est indépendante.** Les familles d’éléments (par identité, lignée ou racine d’identifiant normalisée) ne traversent jamais les limites des partitions, et une deuxième vérification redétermine l’identité de l’élément à partir de zéro plutôt que de relire la carte utilisée par la division elle-même. Une carte de jeu de données n’indique « fuite : aucune (vérifiée) » que lorsque les deux vérifications ont été exécutées et réussies ; une division antérieure à la deuxième vérification indique exactement cela.
174
- - **Les manifestes sont des contrats figés.** Hachage d’exportation + empreinte de configuration, et `validate` recalcule le hachage de chaque fichier répertorié par `checksums.txt` — ainsi, le remplacement d’une image dans une exportation terminée est détecté, y compris pour les manifestes créés avant l’existence de cette vérification.
175
- - **Les exécutions définissent leur graphique exact.** Chaque génération enregistre `comfy_workflow_sha` + hachages du contenu du modèle/LoRA + politique de graines, de sorte qu’une série peut être rejouée octet par octet. Les exécutants JS et Python sont maintenus à un hachage identique au niveau de l’octet par un test qui les lance tous les deux. Le hachage des modèles est facultatif (`--hash-models`) et n’est jamais fabriqué — un fichier non résolvable enregistre `sha256: null` avec une note.
176
- - **Aucun modèle ne vérifie sa propre sortie.** Les évaluations enregistrent `judged_by_model` et `generator_model` ; un avertissement s’affiche si elles sont identiques.
177
- - **Une évaluation indique qui l’a créée.** `eligibility audit` distingue les évaluations écrites par une personne des évaluations générées par un script en masse, de sorte qu’une justification décrivant une catégorie plutôt qu’une image ne peut pas être considérée comme une curation.
178
- - **La mesure n’est pas un verdict.** `sdlab measure` associe des nombres à un enregistrement. Elle ne définit jamais une évaluation, une adéquation ou une approbation — et lorsqu’une mesure est indéfinie pour une image, elle enregistre `null` plutôt qu’un nombre plausible.
179
- - **Les adaptateurs ne peuvent pas modifier la vérité.** Mise en page différente, mêmes enregistrements. Pas d’ajouts, pas de suppressions, pas de reclassification.
180
- - **Les sorties générées réintègrent le processus via l’examen.** Aucun contournement possible. Curater et lier comme tout le reste. Les images générées en externe entrent de la même manière via `sdlab ingest`, sans curation préalable.
181
- - **Les échecs sont visibles.** Un enregistrement manquant, une image impossible à placer ou une légende qui ne peut pas être créée interrompent une exportation ou un ensemble d’entraînement plutôt que de le réduire silencieusement.
219
+ - **Les instantanés sont immuables.** L’empreinte de configuration (SHA-256) ne prouve aucun changement. Les identifiants sont attribués de manière atomique, de sorte que deux exécutions simultanées ne peuvent pas se mélanger dans un seul répertoire.
220
+ - **Les divisions empêchent les fuites, et la vérification qui le confirme est indépendante.** Les familles de sujets (par identité, lignée ou identifiant normalisé) ne traversent jamais les limites des partitions, et une deuxième vérification redéfinit l’identité du sujet à partir de zéro plutôt que de relire la carte utilisée par la division elle-même. Une carte de jeu de données n’indique « fuite : aucune (vérifiée) » que lorsque les deux vérifications ont été exécutées et ont réussi ; une division antérieure à la deuxième vérification indique exactement cela.
221
+ - **Les manifestes sont des contrats figés.** Hachage d’exportation + empreinte de configuration, et `validate` recalcule le hachage de chaque fichier `checksums.txt` répertorié, de sorte que le remplacement d’une image dans une exportation terminée est détecté, y compris pour les manifestes créés avant l’existence de cette vérification.
222
+ - **Les exécutions définissent leur graphe exact.** Chaque génération enregistre `comfy_workflow_sha` + hachages du contenu du modèle/LoRA + politique de graines, de sorte qu’une vague peut être rejouée octet par octet. Les exécuteurs JS et Python sont maintenus à un hachage identique octet par octet par un test qui les lance tous les deux. Le hachage du modèle est facultatif (`--hash-models`) et n’est jamais fabriqué ; un fichier non résolvable enregistre `sha256: null` avec une note.
223
+ - **Aucun modèle ne vérifie sa propre sortie.** Les évaluations enregistrent `judged_by_model` et `generator_model` ; un avertissement est déclenché si elles sont identiques.
224
+ - **Une évaluation indique qui l’a créée.** `eligibility audit` distingue les évaluations écrites par une personne des évaluations générées par un script en masse, de sorte qu’une justification qui décrit une catégorie plutôt qu’une image ne peut pas être considérée comme une curation.
225
+ - **La mesure n’est pas un verdict.** `sdlab measure` associe des nombres à un enregistrement. Elle ne définit jamais une évaluation, une adéquation ou une approbation, et lorsqu’une mesure est indéfinie pour une image, elle enregistre `null` plutôt qu’un nombre plausible.
226
+ - **Une publication peut prouver d’où provient chaque image.** `sdlab verify --project <name>` parcourt la chaîne hors ligne pour chaque enregistrement : le propriétaire et la licence de l’enregistrement, l’entrée du canon à laquelle il était lié (par hachage), la licence de chaque modèle et LoRA qui l’a créé (ID SPDX, URL de la licence, date de lecture et hachage du fichier), et le hachage du flux de travail dans le manifeste de l’exécution. Un lien manquant fait échouer la vérification plutôt que de la valider.
227
+ - **Les adaptateurs ne peuvent pas modifier la vérité.** Disposition différente, mêmes enregistrements. Pas d’ajouts, pas de suppressions, pas de reclassification.
228
+ - **Les sorties générées sont réintroduites via la révision.** Pas de contournement. Curater et lier comme tout le reste. Les images générées en externe entrent de la même manière via `sdlab ingest`, sans curation préalable.
229
+ - **Les échecs sont visibles.** Un enregistrement manquant, une image impossible à placer ou une légende qui ne peut pas être créée interrompt une exportation ou un ensemble d’entraînement plutôt que de le réduire discrètement.
182
230
 
183
231
  ## Star Freight
184
232
 
185
- Le dépôt comprend un exemple complet et fonctionnel : 1 182 enregistrements, 5 factions, 7 voies, 24 règles de constitution, 892 actifs approuvés, 2 profils d’entraînement. Un canon visuel RPG de science-fiction réaliste, entièrement organisé.
233
+ Le dépôt comprend un exemple de fonctionnement complet : 1 182 enregistrements, 5 factions, 7 lignes, 24 règles de constitution, 892 ressources approuvées, 2 profils d’entraînement. Un canon visuel de RPG de science-fiction réaliste, entièrement curaté.
186
234
 
187
235
  ```bash
188
236
  git clone https://github.com/mcp-tool-shop-org/style-dataset-lab
@@ -194,7 +242,7 @@ sdlab split build --project star-freight # zero subject leakage
194
242
 
195
243
  ## Formats en aval
196
244
 
197
- `sdlab` possède l’ensemble de données. La conversion de format est gérée par [`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset) : TRL, LLaVA, Qwen2-VL, JSONL, Parquet et plus encore. `repo-dataset` effectue le rendu ; il ne décide jamais de l’inclusion.
245
+ `sdlab` possède le jeu de données. La conversion de format est gérée par [`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset) : TRL, LLaVA, Qwen2-VL, JSONL, Parquet et plus encore. `repo-dataset` effectue le rendu ; il ne décide jamais de l’inclusion.
198
246
 
199
247
  ## Installation
200
248
 
@@ -202,11 +250,11 @@ sdlab split build --project star-freight # zero subject leakage
202
250
  npm install -g @mcptoolshop/style-dataset-lab
203
251
  ```
204
252
 
205
- Nécessite Node.js 20+ et [ComfyUI](https://github.com/comfyanonymous/ComfyUI) sur localhost:8188 pour la génération.
253
+ Nécessite Node.js 20+ et [ComfyUI](https://github.com/comfyanonymous/ComfyUI) sur localhost : 8188 pour la génération.
206
254
 
207
255
  ### Essayez-le sans ComfyUI
208
256
 
209
- Vous pouvez explorer toute la surface non liée à la génération (inspection, organisation, instantané, division, exportation) en utilisant le projet Star Freight inclus sans installer ComfyUI ni télécharger des poids SDXL.
257
+ Vous pouvez explorer l’ensemble des fonctionnalités sans génération (inspection, curation, instantané, division, exportation) en utilisant le projet Star Freight inclus sans installer ComfyUI ni télécharger de poids SDXL.
210
258
 
211
259
  ```bash
212
260
  # Scaffold a fresh project (no ComfyUI needed)
@@ -219,9 +267,9 @@ sdlab project doctor --project test
219
267
  sdlab snapshot create --dry-run --project star-freight
220
268
  ```
221
269
 
222
- `sdlab project doctor` validates every project config (constitution, lanes, rubric, terminology) and reports eligibility without touching the GPU. Any command that mutates generated state accepts `--dry-run` to preview the effect first.
270
+ `sdlab project doctor` valide chaque configuration de projet (constitution, lignes, rubriques, terminologie) et signale l’éligibilité sans toucher au GPU. Toute commande qui modifie l’état généré accepte `--dry-run` pour prévisualiser l’effet en premier.
223
271
 
224
- Si vous oubliez `--project`, l’interface en ligne de commande revient au premier projet qu’elle trouve sous `projects/` et affiche un avertissement — passez `--project` explicitement pour le supprimer.
272
+ Si vous oubliez `--project`, l’interface de ligne de commande revient au premier projet qu’elle trouve sous `projects/` et affiche un avertissement ; passez `--project` explicitement pour le désactiver.
225
273
 
226
274
  ### Reprise d’une exécution interrompue
227
275
 
@@ -237,7 +285,7 @@ sdlab generate inputs/prompts/wave1.json --project my-project --resume
237
285
  sdlab batch generate --resume batch_2026-04-22_001 --project my-project
238
286
  ```
239
287
 
240
- Les deux commandes fonctionnent car chaque emplacement écrit son entrée de manifeste de manière atomique lorsqu’il a terminé — un plantage en cours d’exécution ne corrompt jamais l’état partiel.
288
+ Les deux commandes fonctionnent car chaque emplacement écrit son entrée de manifeste de manière atomique lorsqu’il est terminé ; un plantage en cours d’exécution ne corrompt jamais l’état partiel.
241
289
 
242
290
  ## Dépannage
243
291
 
@@ -247,26 +295,28 @@ Modes d’échec courants et solutions :
247
295
  ComfyUI ne fonctionne pas. Démarrez ComfyUI (`python main.py --listen 127.0.0.1 --port 8188`) et confirmez avec `curl http://127.0.0.1:8188/system_stats`. Pour pointer vers un autre hôte/port, définissez `COMFY_URL=http://host:port`.
248
296
 
249
297
  **`missing checkpoint` / `LoRA weight not found`**
250
- Le nom de votre profil de flux de travail fait référence à un fichier de modèle qui ne se trouve pas dans le dossier `models/checkpoints/` ou `models/loras/` de ComfyUI. Ouvrez `projects/<project>/workflows/profiles/<profile>.json`, localisez le champ `checkpoint` ou `lora` et téléchargez soit le poids référencé, soit remplacez-le par celui que vous avez déjà. Relancez `sdlab project doctor --project <project>` pour confirmer la correction.
298
+ Votre profil de flux de travail nomme un fichier de modèle qui ne se trouve pas dans le dossier `models/checkpoints/` ou `models/loras/` de ComfyUI. Ouvrez `projects/<project>/workflows/profiles/<profile>.json`, localisez le champ `checkpoint` ou `lora`, et téléchargez soit le poids référencé, soit remplacez-le par un poids que vous avez déjà. Réexécutez `sdlab project doctor --project <project>` pour confirmer la correction.
251
299
 
252
300
  **Erreurs `sdlab project doctor`**
253
301
  Doctor renvoie des codes d’erreur structurés. Les plus courants :
254
- - `E_PROJECT_NOT_FOUND` — le répertoire du projet n’existe pas sous `projects/`. Vérifiez l’orthographe.
255
- - `E_CONFIG_INVALID` — l’un des cinq fichiers de configuration JSON a échoué à la validation du schéma. Le champ `hint` indique le fichier et le champ défectueux.
256
- - `E_RECORD_DRIFT` — l’empreinte de configuration d’un enregistrement ne correspond plus à sa source. Recurez ou reliez comme le suggère l’indication.
302
+ - `E_PROJECT_NOT_FOUND` : le répertoire du projet n’existe pas sous `projects/`. Vérifiez l’orthographe.
303
+ - `E_CONFIG_INVALID` : l’un des cinq fichiers de configuration JSON n’a pas réussi la validation du schéma. Le champ `hint` indique le fichier et le champ concernés.
304
+ - `E_RECORD_DRIFT` : l’empreinte de configuration d’un enregistrement ne correspond plus à sa source. Recurez ou reliez comme le suggère l’indice.
257
305
 
258
- **Avertissement `No --project specified, falling back to <name>`**
259
- Un avertissement modéré. Passez `--project <name>` explicitement pour sélectionner le bon projet et supprimer l’avertissement.
306
+ **`No --project specified, falling back to <name>`**
307
+ Un avertissement léger. Passez `--project <name>` explicitement pour sélectionner le bon projet et désactiver l’avertissement.
260
308
 
261
- **Painterly / VRAM out-of-memory issues**
262
- See `docs/internal/HANDOFF.md` for the painterly denoise tuning notes. In short: lower the denoise strength, reduce batch size, or switch to a smaller checkpoint in your workflow profile.
309
+ **Problèmes de mémoire VRAM / Painterly**
310
+ Consultez `docs/internal/HANDOFF.md` pour les notes de réglage du décrépitage « painterly ». En résumé : réduisez la force du décrépitage, réduisez la taille du lot ou passez à un point de contrôle plus petit dans votre profil de flux de travail.
263
311
 
264
- **Reporting bugs**
265
- File an issue at https://github.com/mcp-tool-shop-org/style-dataset-lab/issues with your sdlab version (`sdlab --version`), Node version (`node -v`), the full command, and the structured error output. A bug-report template prefills the fields.
312
+ **Signalement des bogues**
313
+ Créez un problème à l’adresse https://github.com/mcp-tool-shop-org/style-dataset-lab/issues avec votre version sdlab (`sdlab --version`), votre version de Node (`node -v`), la commande complète et la sortie d’erreur structurée. Un modèle de rapport de bogue préremplit les champs.
266
314
 
267
315
  ## Sécurité
268
316
 
269
- Uniquement local. Pas de télémétrie, pas d’analyses, pas de demandes externes. Les images restent sur votre GPU et votre système de fichiers.
317
+ Par défaut, il est local. Pas de télémétrie, pas d’analyses et aucune requête externe de l’interface de ligne de commande `sdlab` : les images restent sur votre GPU et votre système de fichiers, et `canon draft` refuse tout point de terminaison qui n’est pas en boucle locale.
318
+
319
+ La seule exception est l’option d’adhésion. `scripts/colab/` contient des kits de lancement pour exécuter un rendu ou une étape d’entraînement LoRA sur votre propre compte Google Colab. Ils ne téléchargent que les fichiers que vous leur indiquez, s’exécutent dans les limites de dépenses définies à partir du solde actuel de votre compte Colab et arrêtent leur propre session à la fermeture. Ces kits sont **expérimentaux** : ils n’ont pas encore été entièrement testés de bout en bout.
270
320
 
271
321
  ## Licence
272
322