@mcptoolshop/style-dataset-lab 3.3.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 (119) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.es.md +117 -55
  3. package/README.fr.md +125 -65
  4. package/README.hi.md +117 -68
  5. package/README.it.md +119 -58
  6. package/README.ja.md +124 -74
  7. package/README.md +73 -7
  8. package/README.pt-BR.md +128 -63
  9. package/README.zh.md +116 -65
  10. package/bin/sdlab.js +100 -4
  11. package/lib/adapters/ai-toolkit.js +224 -35
  12. package/lib/adapters/comfyui-runner.js +79 -26
  13. package/lib/adapters/comfyui-workflows.js +94 -11
  14. package/lib/adapters/diffusers-lora.js +37 -5
  15. package/lib/adapters/generic-image-caption.js +43 -5
  16. package/lib/args.js +16 -1
  17. package/lib/asset-ingest.js +575 -0
  18. package/lib/asset-masks.js +323 -0
  19. package/lib/asset-source.js +1176 -0
  20. package/lib/batch-modes.js +29 -8
  21. package/lib/batch-runs.js +29 -1
  22. package/lib/batch-sheet-render.js +13 -3
  23. package/lib/brief-compiler.js +19 -0
  24. package/lib/candidate-sheet.js +327 -0
  25. package/lib/canon-author.js +350 -0
  26. package/lib/canon-build/build.js +146 -93
  27. package/lib/canon-review-gate.js +205 -0
  28. package/lib/captions.js +57 -0
  29. package/lib/card.js +74 -2
  30. package/lib/colab-launcher-guards.js +285 -0
  31. package/lib/comfyui.js +116 -18
  32. package/lib/config.js +116 -12
  33. package/lib/critique-engine.js +36 -2
  34. package/lib/eligibility.js +121 -9
  35. package/lib/eval-pack.js +14 -14
  36. package/lib/eval-runs.js +33 -0
  37. package/lib/export.js +122 -34
  38. package/lib/freeze-gate.js +16 -3
  39. package/lib/freeze-stamp.js +28 -3
  40. package/lib/generated-provenance.js +194 -6
  41. package/lib/implementation-packs.js +95 -17
  42. package/lib/ingest.js +396 -0
  43. package/lib/judgment-provenance.js +220 -0
  44. package/lib/lane1-render.js +668 -0
  45. package/lib/measure.js +422 -0
  46. package/lib/memory-store.js +663 -0
  47. package/lib/model-licences.js +305 -0
  48. package/lib/npy-meta.js +130 -0
  49. package/lib/paths.js +196 -7
  50. package/lib/png-meta.js +512 -0
  51. package/lib/records.js +54 -8
  52. package/lib/reingest-selected.js +113 -17
  53. package/lib/reingest.js +27 -3
  54. package/lib/run-manifest.js +159 -25
  55. package/lib/run-summary.js +12 -6
  56. package/lib/runtime-runs.js +45 -4
  57. package/lib/snapshot.js +114 -15
  58. package/lib/split.js +364 -48
  59. package/lib/train-runs.js +214 -0
  60. package/lib/training-manifests.js +114 -21
  61. package/lib/training-packages.js +147 -15
  62. package/lib/verifier.js +3 -0
  63. package/lib/verify-chain.js +367 -0
  64. package/lib/workflow-profiles.js +24 -3
  65. package/package.json +4 -3
  66. package/runtime/comfyui/txt2img-qwen.json +38 -0
  67. package/runtime/comfyui/txt2img-standard.json +21 -0
  68. package/scripts/_resume.js +62 -0
  69. package/scripts/_shared-args.js +44 -0
  70. package/scripts/asset-ingest.js +160 -0
  71. package/scripts/brief-compile.js +2 -1
  72. package/scripts/brief-show.js +2 -1
  73. package/scripts/canon-bind.js +2 -2
  74. package/scripts/canon-build.js +27 -20
  75. package/scripts/canon-draft.js +82 -0
  76. package/scripts/canon-drift.js +16 -7
  77. package/scripts/canon-freeze-status.js +14 -6
  78. package/scripts/canon-freeze.js +31 -11
  79. package/scripts/canon-unfreeze.js +17 -9
  80. package/scripts/card.js +2 -2
  81. package/scripts/colab/REAL_SERVICE_ASSUMPTIONS.md +14 -0
  82. package/scripts/colab/ai-toolkit-override-py315.txt +45 -0
  83. package/scripts/colab/colab_window.sh +587 -0
  84. package/scripts/colab/lane1_render.py +970 -0
  85. package/scripts/colab/launch_guards.py +564 -0
  86. package/scripts/colab/launch_lane1_stub.sh +309 -0
  87. package/scripts/colab/launch_lane3_stub.sh +366 -0
  88. package/scripts/colab/remote_runner.py +59 -0
  89. package/scripts/compare.js +2 -2
  90. package/scripts/critique.js +16 -1
  91. package/scripts/curate.js +2 -2
  92. package/scripts/doctor.js +182 -55
  93. package/scripts/eligibility.js +42 -2
  94. package/scripts/eval-pack.js +2 -2
  95. package/scripts/eval-run.js +2 -2
  96. package/scripts/export.js +2 -2
  97. package/scripts/generate-controlnet.js +45 -25
  98. package/scripts/generate-identity.js +53 -23
  99. package/scripts/generate-ipadapter.js +44 -23
  100. package/scripts/generate.js +86 -17
  101. package/scripts/implementation-pack.js +2 -2
  102. package/scripts/ingest.js +145 -0
  103. package/scripts/init.js +73 -13
  104. package/scripts/measure.js +170 -0
  105. package/scripts/measure_image.py +458 -0
  106. package/scripts/migrate-records.js +142 -0
  107. package/scripts/painterly-test.js +4 -3
  108. package/scripts/painterly.js +7 -3
  109. package/scripts/qwen_generate.py +138 -20
  110. package/scripts/reingest.js +2 -2
  111. package/scripts/sheet.js +142 -0
  112. package/scripts/snapshot.js +2 -2
  113. package/scripts/split.js +2 -2
  114. package/scripts/training-manifest.js +2 -2
  115. package/scripts/training-package.js +2 -2
  116. package/scripts/training-profile.js +2 -2
  117. package/scripts/verify.js +67 -0
  118. package/scripts/workflow-list.js +2 -1
  119. package/scripts/workflow-show.js +2 -1
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
 
@@ -27,8 +27,15 @@ sdlab init my-project --domain character-design
27
27
 
28
28
  # Generate candidates via ComfyUI, then review them
29
29
  sdlab generate inputs/prompts/wave1.json --project my-project
30
+ sdlab sheet outputs/candidates --project my-project # HTML contact sheet to triage
30
31
  sdlab curate <id> approved "Strong silhouette, correct faction palette"
31
32
 
33
+ # Already have images? Bring them in without generating anything
34
+ sdlab ingest ~/renders/wave1 --project my-project
35
+
36
+ # Measure what the pixels actually are — palette and texture, as numbers
37
+ sdlab measure outputs/candidates --project my-project
38
+
32
39
  # Bind approved work to constitution rules
33
40
  # (`sdlab bind` is a shorter alias for `canon-bind`)
34
41
  sdlab canon-bind --project my-project
@@ -56,11 +63,56 @@ sdlab select --run run_2026-04-16_001 --approve 001.png,003.png
56
63
  sdlab reingest selected --selection selection_2026-04-16_001
57
64
  ```
58
65
 
59
- 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).
60
112
 
61
113
  ## Création de contenu canonique
62
114
 
63
- Avant l’exécution du pipeline de l’ensemble de données, l’espace de noms `sdlab canon *` transforme le référentiel 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 être modifiées.
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.
64
116
 
65
117
  ```bash
66
118
  # Build three projections from the canon entity store:
@@ -76,67 +128,69 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
76
128
  sdlab canon drift --project my-project
77
129
  ```
78
130
 
79
- `canon build` est basé sur des adresses de contenu : sa sortie est identifiée par un `canon_sha` et mise en cache, de sorte qu’une reconstruction du canon non modifié se fait instantanément. `canon freeze` atteste de chaque blocage par rapport à une version spécifique et l’ajoute à un journal 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 surveillée et signale tout ce qui a changé depuis la dernière reconstruction 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é.
80
132
 
81
- 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/).
82
136
 
83
137
  ## Ce qu’il produit
84
138
 
85
- 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é.
86
140
 
87
- | Artefact. | Ce que c’est. |
141
+ | Artefact | Ce que c’est |
88
142
  |----------|-----------|
89
- | **Snapshot** | Sélection des enregistrements figés avec empreinte de configuration. Chaque inclusion a une raison explicite. |
90
- | **Split** | Partitionnement entraînement/validation/test où les familles de sujets ne se croisent jamais. |
91
- | **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. |
92
- | **Eval pack** | Tâches de test tenant compte du canon : couverture des voies, dérive interdite, ancrage/or, continuité des sujets. |
93
- | **Training package** | Disposition prête pour le formateur via des adaptateurs (`diffusers-lora`, `generic-image-caption`). Même vérité, format différent. |
94
- | **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. |
95
- | **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. |
96
150
 
97
- L’environnement de travail de production ajoute :
151
+ L’environnement de production ajoute :
98
152
 
99
- | Surface. | Ce que cela fait. |
153
+ | Surface | Ce que cela fait |
100
154
  |---------|-------------|
101
- | **Compiled brief** | Instruction de génération déterministe à partir du profil de flux de travail + des éléments clés du projet. |
102
- | **Run** | Artefact d’exécution figé : instruction + graines + résultats ComfyUI + manifeste. |
103
- | **Critique** | Évaluation structurée multidimensionnelle des résultats de l’exécution par rapport au canon. |
104
- | **Batch** | Production coordonnée multi-slots (feuilles d’expression, planches d’ambiance, ensembles de silhouettes). |
105
- | **Selection** | Artefact de décision créative : quels résultats ont été choisis, pourquoi et d’où ils proviennent. |
106
- | **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. |
107
161
 
108
162
  ## Pourquoi cela existe
109
163
 
110
- 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.
111
165
 
112
- 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.
113
167
 
114
- 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.
115
169
 
116
170
  ## Prouvé en production
117
171
 
118
- 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.
119
173
 
120
- - **[Tallow Fen](handbook/case-study-tallow-fen/)** (conception de créatures) : un canon de bestiaire créé à partir de zéro, avec environ 34 % d’approbation sur 293 enregistrements sélectionnés (169 rejetés — la porte rejette fermement). Diffusion de `tallow_fen_style_v3.safetensors` @ 1.5 sur `qwen-image`.
121
- - **[Rustline](handbook/case-study-rustline/)** (conception de concepts) : canon dense et préformé, avec environ 96 % d’approbation sur 180 enregistrements. Diffusion de `rustline_v3ckpt_1500.safetensors` @ 1.0 sur `qwen-image`, réutilisé en aval 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.
122
176
 
123
- 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.
124
178
 
125
179
  ## Cinq domaines, règles réelles
126
180
 
127
- 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.
128
182
 
129
- | Domaine | Voies | Ce qui est évalué |
183
+ | Domaine | Pistes | Ce qui est évalué |
130
184
  |--------|-------|-----------------|
131
- | **game-art** | personnage, environnement, accessoire, interface utilisateur, vaisseau, intérieur, équipement | Silhouette à l’échelle du jeu, identification de la faction, usure et vieillissement |
132
- | **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 |
133
187
  | **creature-design** | concept, orthographique, étude de détails, action, référence d’échelle, habitat | Anatomie, logique évolutive, distinction de la silhouette |
134
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 |
135
- | **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 |
136
190
 
137
191
  ## Structure du projet
138
192
 
139
- 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.
140
194
 
141
195
  ```
142
196
  projects/my-project/
@@ -160,19 +214,23 @@ projects/my-project/
160
214
 
161
215
  ## Propriétés de confiance
162
216
 
163
- Ce ne sont pas des objectifs à atteindre. Elles sont appliquées.
217
+ Ce ne sont pas des aspirations. Elles sont appliquées.
164
218
 
165
- - **Les instantanés sont immuables.** L’empreinte de configuration (SHA-256) prouve qu’il n’y a eu aucun changement.
166
- - **Les divisions empêchent les fuites.** Les familles de sujets (par identité, lignée ou suffixe d’ID) ne traversent jamais les limites des partitions.
167
- - **Les manifestes sont des contrats figés.** Hachage d’exportation + empreinte de configuration. Si quoi que ce soit change, créez-en un nouveau.
168
- - **Les exécutions fixent 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 — identique sur les exécutants JS et Python. Le hachage des modèles est facultatif (`--hash-models`) et n’est jamais fabriqué.
169
- - **Aucun modèle ne vérifie sa propre sortie.** Les évaluations enregistrent `judged_by_model` et `generator_model`; un avertissement s’affiche si ce sont toujours le même modèle.
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.
170
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.
171
- - **Les sorties générées réintègrent le processus par le biais de l’examen.** Pas de contournement. Organisez et liez comme tout le reste.
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.
172
230
 
173
231
  ## Star Freight
174
232
 
175
- 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é.
176
234
 
177
235
  ```bash
178
236
  git clone https://github.com/mcp-tool-shop-org/style-dataset-lab
@@ -184,7 +242,7 @@ sdlab split build --project star-freight # zero subject leakage
184
242
 
185
243
  ## Formats en aval
186
244
 
187
- `sdlab` est propriétaire 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.
188
246
 
189
247
  ## Installation
190
248
 
@@ -192,11 +250,11 @@ sdlab split build --project star-freight # zero subject leakage
192
250
  npm install -g @mcptoolshop/style-dataset-lab
193
251
  ```
194
252
 
195
- 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.
196
254
 
197
255
  ### Essayez-le sans ComfyUI
198
256
 
199
- 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.
200
258
 
201
259
  ```bash
202
260
  # Scaffold a fresh project (no ComfyUI needed)
@@ -209,9 +267,9 @@ sdlab project doctor --project test
209
267
  sdlab snapshot create --dry-run --project star-freight
210
268
  ```
211
269
 
212
- `sdlab project doctor` valide chaque configuration de projet (constitution, voies, critères, terminologie) et signale l’éligibilité sans toucher au GPU. Toute commande qui modifie l’état généré accepte `--dry-run` pour prévisualiser d’abord l’effet.
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.
213
271
 
214
- Si vous oubliez `--project`, la CLI revient au premier projet qu’elle trouve dans `projects/` et affiche un avertissement ; passez `--project` explicitement pour le désactiver.
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.
215
273
 
216
274
  ### Reprise d’une exécution interrompue
217
275
 
@@ -227,36 +285,38 @@ sdlab generate inputs/prompts/wave1.json --project my-project --resume
227
285
  sdlab batch generate --resume batch_2026-04-22_001 --project my-project
228
286
  ```
229
287
 
230
- 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.
231
289
 
232
290
  ## Dépannage
233
291
 
234
292
  Modes d’échec courants et solutions :
235
293
 
236
- **`ECONNREFUSED 127.0.0.1:8188` pour toute commande `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
237
- ComfyUI n’est pas en cours d’exécution. 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`.
294
+ **`ECONNREFUSED 127.0.0.1:8188` sur n’importe quel `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
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`.
238
296
 
239
297
  **`missing checkpoint` / `LoRA weight not found`**
240
- Le profil de votre flux de travail fait référence à un fichier 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 que vous avez déjà. Réexécutez `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.
241
299
 
242
- **Erreurs de `sdlab project doctor`**
300
+ **Erreurs `sdlab project doctor`**
243
301
  Doctor renvoie des codes d’erreur structurés. Les plus courants :
244
- - `E_PROJECT_NOT_FOUND` — le répertoire du projet n’existe pas dans `projects/`. Vérifiez l’orthographe.
245
- - `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 concernés.
246
- - `E_RECORD_DRIFT` — l’empreinte de configuration d’un enregistrement ne correspond plus à sa source. Réorganisez ou reliez comme le suggère l’indice.
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.
247
305
 
248
306
  **`No --project specified, falling back to <name>`**
249
- Un simple avertissement. Passez `--project <name>` explicitement pour sélectionner le bon projet et désactiver l’avertissement.
307
+ Un avertissement léger. Passez `--project <name>` explicitement pour sélectionner le bon projet et désactiver l’avertissement.
250
308
 
251
- **Problèmes de mémoire VRAM / problèmes d’aspect pictural**
252
- Consultez `docs/internal/HANDOFF.md` pour les notes sur le réglage du débruitage pictural. En résumé : diminuez la force du débruitage, réduisez la taille du lot ou passez à un point de contrôle plus petit dans votre profil de flux de travail.
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.
253
311
 
254
- **Signaler des bogues**
255
- Créez un problème sur https://github.com/mcp-tool-shop-org/style-dataset-lab/issues avec votre version de sdlab (`sdlab --version`), la 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.
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.
256
314
 
257
315
  ## Sécurité
258
316
 
259
- 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.
260
320
 
261
321
  ## Licence
262
322