@mcptoolshop/style-dataset-lab 3.0.1 → 3.2.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 (57) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.es.md +154 -41
  3. package/README.fr.md +153 -40
  4. package/README.hi.md +160 -47
  5. package/README.it.md +155 -42
  6. package/README.ja.md +159 -46
  7. package/README.md +40 -0
  8. package/README.pt-BR.md +154 -41
  9. package/README.zh.md +154 -41
  10. package/bin/sdlab.js +81 -2
  11. package/lib/adapters/ai-toolkit.js +209 -0
  12. package/lib/adapters/comfyui-runner.js +11 -15
  13. package/lib/adapters/comfyui-workflows.js +133 -2
  14. package/lib/adapters/diffusers-lora.js +46 -66
  15. package/lib/adapters/generic-image-caption.js +22 -50
  16. package/lib/batch-runs.js +62 -0
  17. package/lib/canon-build/build.js +450 -0
  18. package/lib/canon-build/emitters/base.js +122 -0
  19. package/lib/canon-build/emitters/character.js +167 -0
  20. package/lib/canon-build/emitters/deity.js +165 -0
  21. package/lib/canon-build/emitters/faction.js +161 -0
  22. package/lib/canon-build/emitters/index.js +38 -0
  23. package/lib/canon-build/emitters/location.js +153 -0
  24. package/lib/canon-build/emitters/monster.js +131 -0
  25. package/lib/canon-build/emitters/relic.js +142 -0
  26. package/lib/canon-build/emitters/ship.js +154 -0
  27. package/lib/canon-build/emitters/species.js +165 -0
  28. package/lib/canon-build/frontmatter.js +76 -0
  29. package/lib/canon-build/lane-resolve.js +64 -0
  30. package/lib/canon-build/load-config.js +117 -0
  31. package/lib/canon-build/load-entry.js +62 -0
  32. package/lib/canon-build/load-schema.js +46 -0
  33. package/lib/captions.js +197 -0
  34. package/lib/comfyui-output.js +70 -0
  35. package/lib/config.js +19 -0
  36. package/lib/freeze-events.js +109 -0
  37. package/lib/freeze-gate.js +165 -0
  38. package/lib/freeze-stamp.js +161 -0
  39. package/lib/rows.js +228 -0
  40. package/lib/training-adapters.js +84 -0
  41. package/lib/training-packages.js +25 -32
  42. package/lib/training-profiles.js +43 -0
  43. package/package.json +29 -2
  44. package/scripts/_batch_cut.py +71 -0
  45. package/scripts/_seam_cutout.py +74 -0
  46. package/scripts/batch-generate.js +56 -13
  47. package/scripts/canon-build.js +88 -0
  48. package/scripts/canon-drift.js +193 -0
  49. package/scripts/canon-freeze-status.js +85 -0
  50. package/scripts/canon-freeze.js +211 -0
  51. package/scripts/canon-unfreeze.js +137 -0
  52. package/scripts/curate.js +12 -0
  53. package/scripts/generate-controlnet.js +12 -0
  54. package/scripts/generate-identity.js +20 -4
  55. package/scripts/generate-ipadapter.js +11 -0
  56. package/scripts/generate.js +250 -102
  57. package/scripts/qwen_generate.py +124 -0
package/README.fr.md CHANGED
@@ -8,14 +8,16 @@
8
8
 
9
9
  <p align="center">
10
10
  <a href="https://www.npmjs.com/package/@mcptoolshop/style-dataset-lab"><img src="https://img.shields.io/npm/v/@mcptoolshop/style-dataset-lab" alt="npm"></a>
11
+ <a href="https://github.com/mcp-tool-shop-org/style-dataset-lab/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/style-dataset-lab/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
12
+ <a href="https://codecov.io/gh/mcp-tool-shop-org/style-dataset-lab"><img src="https://codecov.io/gh/mcp-tool-shop-org/style-dataset-lab/branch/main/graph/badge.svg" alt="codecov"></a>
11
13
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
12
14
  </p>
13
15
 
14
- Définissez vos règles visuelles. Générez des œuvres. Évaluez chaque image en fonction de ces règles. Livrez les résultats sous forme de données d'entraînement versionnées et auditables.
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 à profit les modèles entraînés dans des flux de travail de production réels et renvoyez les meilleurs résultats dans votre corpus.
15
17
 
16
- Style Dataset Lab relie les éléments que vous avez écrits concernant votre style artistique à l'ensemble de données sur lequel vous entraînez réellement votre modèle. Vous définissez une constitution : règles de silhouette, contraintes de palette, langage des matériaux, tout ce qui est important 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 au jeu 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 jeux de données reproductibles où chaque enregistrement explique pourquoi il a été inclus.
17
19
 
18
- La boucle se referme : entraînez un modèle, générez de nouvelles sorties, évaluez-les en fonction des mêmes critères, réintégrez ce qui est validé. L'ensemble de données grandit et les règles restent valables.
20
+ Ensuite, l’environnement de travail de production prend le relais : compilez des briefs de génération à partir des données 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.
19
21
 
20
22
  ## Le pipeline
21
23
 
@@ -28,59 +30,104 @@ sdlab generate inputs/prompts/wave1.json --project my-project
28
30
  sdlab curate <id> approved "Strong silhouette, correct faction palette"
29
31
 
30
32
  # Bind approved work to constitution rules
31
- sdlab bind --project my-project
33
+ # (`sdlab bind` is a shorter alias for `canon-bind`)
34
+ sdlab canon-bind --project my-project
32
35
 
33
36
  # Freeze a versioned dataset
34
37
  sdlab snapshot create --project my-project
35
38
  sdlab split build
36
39
  sdlab export build
37
40
 
38
- # Build a training package and close the loop
41
+ # Build a training package
39
42
  sdlab training-manifest create --profile character-style-lora
40
43
  sdlab training-package build
41
- sdlab eval-run create && sdlab eval-run score <id> --outputs results.jsonl
42
- sdlab reingest generated --source ./outputs --manifest <id>
44
+
45
+ # Compile a production brief and run it
46
+ sdlab brief compile --workflow character-portrait-set --subject kael_maren
47
+ sdlab run generate --brief brief_2026-04-16_001
48
+
49
+ # Critique, refine, batch-produce
50
+ sdlab critique --run run_2026-04-16_001
51
+ sdlab refine --run run_2026-04-16_001 --pick 001.png
52
+ sdlab batch generate --mode expression-sheet --subject kael_maren
53
+
54
+ # Select the best outputs and bring them back
55
+ sdlab select --run run_2026-04-16_001 --approve 001.png,003.png
56
+ sdlab reingest selected --selection selection_2026-04-16_001
57
+ ```
58
+
59
+ Cette dernière commande est essentielle. Les éléments sélectionnés repassent par le même processus d’évaluation que tous les autres. Le corpus s’enrichit et les règles sont respectées.
60
+
61
+ ## Création du canon
62
+
63
+ Avant l’exécution du pipeline de jeu 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.
64
+
65
+ ```bash
66
+ # Build three projections from the canon entity store:
67
+ # dataset.jsonl → training adapters
68
+ # prompts/*.j2 → ComfyUI workflow invocation
69
+ # context/*.md → Role OS narrative dispatch
70
+ sdlab canon build --project my-project
71
+
72
+ # Freeze an entry so regeneration can't silently change it
73
+ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait locked"
74
+
75
+ # Report drift on frozen entries since the last clean build
76
+ sdlab canon drift --project my-project
43
77
  ```
44
78
 
45
- Cette dernière commande est essentielle. Les sorties générées passent par le même processus de révision que tout le reste. La boucle se referme.
79
+ `canon build` est adressable par contenu : sa sortie est indexé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 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.
80
+
81
+ Flux de travail complet dans le manuel : [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/) et [Two-LoRA stacking](handbook/two-lora-stacking/).
46
82
 
47
- ## Ce qu'il produit
83
+ ## Ce que cela produit
48
84
 
49
- Sept artefacts versionnés et vérifiés par checksum. Chacun 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é.
85
+ Sept artefacts de jeu 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é.
50
86
 
51
- | Élément | Description |
87
+ | Artefact | Ce que c’est |
52
88
  |----------|-----------|
53
- | **Snapshot** | Sélection d'enregistrements figée avec empreinte de configuration. Chaque inclusion a une raison explicite. |
54
- | **Split** | Partitionnement entraînement/validation/test où les familles de sujets ne traversent jamais les limites. |
55
- | **Export package** | Ensemble de données autonome : manifeste, métadonnées, images, divisions, description de l'ensemble de données et sommes de contrôle. |
56
- | **Eval pack** | Tâches de vérification respectant les règles constitutionnelles : couverture des aspects, dérive interdite, ancres/références, cohérence des sujets. |
57
- | **Training package** | Disposition prête pour l'entraînement via des adaptateurs (`diffusers-lora`, `generic-image-caption`). La même information, dans un format différent. |
58
- | **Eval scorecard** | Indicateur de réussite/échec par tâche, basé sur l'évaluation des sorties générées par rapport aux ensembles d'évaluation. |
59
- | **Implementation pack** | Exemples de prompts, échecs connus, tests de continuité et instructions de réintégration. |
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 franchissent jamais les frontières. |
91
+ | **Export package** | Jeu de données autonome : manifeste, métadonnées, images, partitions, fiche d’informations du jeu 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 l’entraîneur 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 à partir de l’évaluation des résultats générés par rapport aux ensembles d’évaluation. |
95
+ | **Implementation pack** | Exemples d’invites, échecs connus, tests de continuité et directives de réintégration. |
96
+
97
+ L’environnement de travail de production ajoute :
98
+
99
+ | Surface | Ce que cela fait |
100
+ |---------|-------------|
101
+ | **Compiled brief** | Instruction de génération déterministe à partir du profil de flux de travail + des données du projet. |
102
+ | **Run** | Artefact d’exécution figé : bref + graines + sorties 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 éléments ont été choisis, pourquoi et d’où ils proviennent. |
106
+ | **Re-ingest** | Les éléments sélectionnés sont renvoyés en tant qu’enregistrements candidats avec la provenance complète de la génération. |
60
107
 
61
108
  ## Pourquoi cela existe
62
109
 
63
- Les données d'entraînement sont l'élément 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 trace de jugement et sans lien avec les règles de style qu'elles étaient censées suivre.
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.
64
111
 
65
- Style Dataset Lab établit ce lien de manière explicite. Votre constitution définit les règles. Votre grille d'évaluation définit les dimensions de l'évaluation. Vos enregistrements de curation consignent le jugement. Votre canon de référence prouve le lien. Et votre ensemble de données transmet tout cela sous forme de vérité structurée, consultable et reproductible.
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 jeu de données conserve tout cela sous forme de vérité structurée, interrogeable et reproductible.
66
113
 
67
- Le résultat pratique : lorsque votre LoRA dérive, vous pouvez demander *pourquoi*. Lorsque votre prochaine phase d'entraînement a besoin de meilleures données, vous savez exactement quels enregistrements sont proches de la limite et quelle règle unique ils ont manqué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.
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 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.
68
115
 
69
116
  ## Cinq domaines, règles réelles
70
117
 
71
- Ce ne sont pas des modèles génériques. Chaque domaine est fourni avec des règles de constitution, des définitions de catégories, des grilles d'évaluation et un vocabulaire de groupe de qualité professionnelle.
118
+ Pas de modèles d’espace réservé. 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.
72
119
 
73
- | Domaine | Aspects | Ce qui est évalué |
120
+ | Domaine | Voies | Ce qui est évalué |
74
121
  |--------|-------|-----------------|
75
- | **game-art** | personnage, environnement, accessoire, interface utilisateur, vaisseau, intérieur, équipement | Silhouette à l'échelle du gameplay, interprétation de la faction, usure et vieillissement. |
76
- | **character-design** | portrait, corps entier, vue de face, feuille d'expressions, pose d'action | Proportions, logique des costumes, personnalité, clarté des gestes. |
77
- | **creature-design** | concept, orthographique, étude de détail, action, référence d'échelle, habitat | Anatomie, logique évolutive, distinction de la silhouette. |
78
- | **architecture** | extérieur, intérieur, paysage urbain, détail structurel, ruine, paysage | Structure, cohérence des matériaux, perspective, cohérence de l'époque. |
79
- | **vehicle-mech** | extérieur, cockpit, composant, schéma, feuille de silhouette, variante endommagée | Logique mécanique, langage de conception fonctionnelle, points d'accès, description des dommages. |
122
+ | **game-art** | personnage, environnement, accessoire, interface utilisateur, vaisseau, intérieur, équipement | Silhouette à l’échelle du jeu, lisibilité de la faction, usure et vieillissement |
123
+ | **character-design** | portrait, corps entier, rotation, feuille d’expression, pose d’action | Proportions, logique des costumes, personnalité, clarté des gestes |
124
+ | **creature-design** | concept, orthographique, étude détaillée, action, référence d’échelle, habitat | Anatomie, logique évolutive, distinction de la silhouette |
125
+ | **architecture** | extérieur, intérieur, paysage urbain, détail structurel, ruine, paysage | Structure, cohérence des matériaux, perspective, cohérence de l’époque |
126
+ | **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 |
80
127
 
81
128
  ## Structure du projet
82
129
 
83
- Chaque projet est autonome. Cinq fichiers de configuration JSON définissent les règles ; le reste est constitué de données.
130
+ Chaque projet est autonome. Cinq fichiers de configuration JSON définissent les règles ; tout le reste sont des données.
84
131
 
85
132
  ```
86
133
  projects/my-project/
@@ -94,21 +141,27 @@ projects/my-project/
94
141
  splits/ Train/val/test partitions
95
142
  exports/ Versioned export packages
96
143
  training/ Profiles, manifests, packages, eval runs, implementations
144
+ workflows/ Workflow profiles + batch mode definitions
145
+ briefs/ Compiled generation briefs
146
+ runs/ Execution artifacts (brief + outputs + manifest)
147
+ batches/ Coordinated multi-slot productions
148
+ selections/ Chosen outputs with reasons and provenance
149
+ inbox/generated/ Re-ingested images awaiting review
97
150
  ```
98
151
 
99
152
  ## Propriétés de confiance
100
153
 
101
- Ce ne sont pas des aspirations. Elles sont appliquées.
154
+ Il ne s’agit pas d’objectifs à atteindre. Elles sont appliquées.
102
155
 
103
- - **Les instantanés sont immuables.** L'empreinte de configuration (SHA-256) prouve qu'il n'y a eu aucun changement.
104
- - **Les partitions empêchent les fuites.** Les familles de sujets (par identité, lignée ou suffixe d'ID) ne traversent jamais les limites des partitions.
105
- - **Les manifestes sont des contrats figés.** Hash d'exportation + empreinte de configuration. Si quelque chose change, créez-en un nouveau.
106
- - **Les adaptateurs ne peuvent pas modifier la vérité.** Disposition différente, mêmes enregistrements. Pas d'ajouts, pas de suppressions, pas de reclassements.
107
- - **Les sorties générées sont soumises à une révision.** Pas de contournement. Curatez et intégrez comme tout le reste.
156
+ - **Les instantanés sont immuables.** L’empreinte de configuration (SHA-256) prouve qu’aucun changement n’a été apporté.
157
+ - **Les séparations empêchent les fuites.** Les familles de sujets (par identité, lignée ou suffixe d’ID) ne traversent jamais les limites des partitions.
158
+ - **Les manifestes sont des contrats figés.** Hachage d’exportation + empreinte de configuration. Si quoi que ce soit change, créez-en un nouveau.
159
+ - **Les adaptateurs ne peuvent pas modifier la vérité.** Disposition différente, mêmes enregistrements. Pas d’ajouts, pas de suppressions, pas de reclassification.
160
+ - **Les résultats générés sont réintégrés via une revue.** Pas de contournement. Organisez et liez comme tout le reste.
108
161
 
109
162
  ## Star Freight
110
163
 
111
- Le dépôt comprend un exemple de fonctionnement complet : 1182 enregistrements, 5 factions, 7 voies, 24 règles constitutionnelles, 892 ressources approuvées, 2 profils de formation. Un corpus visuel de jeu de rôle de science-fiction, entièrement organisé.
164
+ Le dépôt inclut un exemple complet 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é.
112
165
 
113
166
  ```bash
114
167
  git clone https://github.com/mcp-tool-shop-org/style-dataset-lab
@@ -118,9 +171,9 @@ sdlab snapshot create --project star-freight # 839 eligible records
118
171
  sdlab split build --project star-freight # zero subject leakage
119
172
  ```
120
173
 
121
- ## Formats compatibles
174
+ ## Formats en aval
122
175
 
123
- `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 la conversion ; il ne décide jamais de l'inclusion.
176
+ `sdlab` est propriétaire du 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.
124
177
 
125
178
  ## Installation
126
179
 
@@ -128,11 +181,71 @@ sdlab split build --project star-freight # zero subject leakage
128
181
  npm install -g @mcptoolshop/style-dataset-lab
129
182
  ```
130
183
 
131
- Nécessite Node.js 20+ et [ComfyUI](https://github.com/comfyanonymous/ComfyUI) installé localement sur le port 8188 pour la génération.
184
+ Nécessite Node.js 20+ et [ComfyUI](https://github.com/comfyanonymous/ComfyUI) sur localhost:8188 pour la génération.
185
+
186
+ ### Essayez-le sans ComfyUI
187
+
188
+ Vous pouvez explorer toute la surface non liée à la génération (inspection, organisation, instantané, séparation, exportation) en utilisant le projet Star Freight inclus sans installer ComfyUI ni télécharger des poids SDXL.
189
+
190
+ ```bash
191
+ # Scaffold a fresh project (no ComfyUI needed)
192
+ sdlab init test --domain game-art
193
+
194
+ # Run the canonical health check (no ComfyUI needed)
195
+ sdlab project doctor --project test
196
+
197
+ # Dry-run a snapshot against the bundled Star Freight corpus
198
+ sdlab snapshot create --dry-run --project star-freight
199
+ ```
200
+
201
+ `sdlab project doctor` valide chaque configuration de projet (constitution, voies, rubriques, terminologie) et signale l’éligibilité sans toucher au GPU. Toute commande qui modifie l’état généré accepte l’option `--dry-run` pour prévisualiser d’abord l’effet.
202
+
203
+ Si vous oubliez `--project`, l’interface de ligne de commande revient au premier projet qu’elle trouve dans `projects/` et affiche un avertissement ; passez explicitement `--project` pour le supprimer.
204
+
205
+ ### Reprise d’une exécution interrompue
206
+
207
+ Les longues exécutions peuvent être reprises sans refaire le travail terminé :
208
+
209
+ ```bash
210
+ # Skip subjects whose record + image are already on disk.
211
+ # Seeds are preserved — resumed runs are bit-identical to fresh ones.
212
+ sdlab generate inputs/prompts/wave1.json --project my-project --resume
213
+
214
+ # Re-run only failed/missing slots in an existing batch.
215
+ # Inherits mode/subject/theme from the prior manifest.
216
+ sdlab batch generate --resume batch_2026-04-22_001 --project my-project
217
+ ```
218
+
219
+ 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.
220
+
221
+ ## Dépannage
222
+
223
+ Modes d’échec courants et solutions :
224
+
225
+ **`ECONNREFUSED 127.0.0.1:8188` pour toute commande `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
226
+ 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`.
227
+
228
+ **`missing checkpoint` / `LoRA weight not found`**
229
+ Votre profil de flux de travail nomme 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.
230
+
231
+ **Erreurs de `sdlab project doctor`**
232
+ Doctor renvoie des codes d’erreur structurés. Les plus courants :
233
+ - `E_PROJECT_NOT_FOUND` — le répertoire du projet n’existe pas dans `projects/`. Vérifiez l’orthographe.
234
+ - `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.
235
+ - `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.
236
+
237
+ **`No --project specified, falling back to <name>`**
238
+ Un simple avertissement. Passez explicitement `--project <name>` pour sélectionner le bon projet et supprimer l’avertissement.
239
+
240
+ **Problèmes de mémoire VRAM / problèmes d’aspect pictural**
241
+ 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.
242
+
243
+ **Signalement des bogues**
244
+ 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.
132
245
 
133
246
  ## Sécurité
134
247
 
135
- Utilisation locale uniquement. Aucune télémétrie, aucune analyse, aucune requête externe. Les images restent sur votre GPU et votre système de fichiers.
248
+ Uniquement local. Pas de télémétrie, pas d’analyses, pas de requêtes externes. Les images restent sur votre GPU et votre système de fichiers.
136
249
 
137
250
  ## Licence
138
251