@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.
- package/CHANGELOG.md +60 -0
- package/README.es.md +117 -55
- package/README.fr.md +125 -65
- package/README.hi.md +117 -68
- package/README.it.md +119 -58
- package/README.ja.md +124 -74
- package/README.md +73 -7
- package/README.pt-BR.md +128 -63
- package/README.zh.md +116 -65
- package/bin/sdlab.js +100 -4
- package/lib/adapters/ai-toolkit.js +224 -35
- package/lib/adapters/comfyui-runner.js +79 -26
- package/lib/adapters/comfyui-workflows.js +94 -11
- package/lib/adapters/diffusers-lora.js +37 -5
- package/lib/adapters/generic-image-caption.js +43 -5
- package/lib/args.js +16 -1
- package/lib/asset-ingest.js +575 -0
- package/lib/asset-masks.js +323 -0
- package/lib/asset-source.js +1176 -0
- package/lib/batch-modes.js +29 -8
- package/lib/batch-runs.js +29 -1
- package/lib/batch-sheet-render.js +13 -3
- package/lib/brief-compiler.js +19 -0
- package/lib/candidate-sheet.js +327 -0
- package/lib/canon-author.js +350 -0
- package/lib/canon-build/build.js +146 -93
- package/lib/canon-review-gate.js +205 -0
- package/lib/captions.js +57 -0
- package/lib/card.js +74 -2
- package/lib/colab-launcher-guards.js +285 -0
- package/lib/comfyui.js +116 -18
- package/lib/config.js +116 -12
- package/lib/critique-engine.js +36 -2
- package/lib/eligibility.js +121 -9
- package/lib/eval-pack.js +14 -14
- package/lib/eval-runs.js +33 -0
- package/lib/export.js +122 -34
- package/lib/freeze-gate.js +16 -3
- package/lib/freeze-stamp.js +28 -3
- package/lib/generated-provenance.js +194 -6
- package/lib/implementation-packs.js +95 -17
- package/lib/ingest.js +396 -0
- package/lib/judgment-provenance.js +220 -0
- package/lib/lane1-render.js +668 -0
- package/lib/measure.js +422 -0
- package/lib/memory-store.js +663 -0
- package/lib/model-licences.js +305 -0
- package/lib/npy-meta.js +130 -0
- package/lib/paths.js +196 -7
- package/lib/png-meta.js +512 -0
- package/lib/records.js +54 -8
- package/lib/reingest-selected.js +113 -17
- package/lib/reingest.js +27 -3
- package/lib/run-manifest.js +159 -25
- package/lib/run-summary.js +12 -6
- package/lib/runtime-runs.js +45 -4
- package/lib/snapshot.js +114 -15
- package/lib/split.js +364 -48
- package/lib/train-runs.js +214 -0
- package/lib/training-manifests.js +114 -21
- package/lib/training-packages.js +147 -15
- package/lib/verifier.js +3 -0
- package/lib/verify-chain.js +367 -0
- package/lib/workflow-profiles.js +24 -3
- package/package.json +4 -3
- package/runtime/comfyui/txt2img-qwen.json +38 -0
- package/runtime/comfyui/txt2img-standard.json +21 -0
- package/scripts/_resume.js +62 -0
- package/scripts/_shared-args.js +44 -0
- package/scripts/asset-ingest.js +160 -0
- package/scripts/brief-compile.js +2 -1
- package/scripts/brief-show.js +2 -1
- package/scripts/canon-bind.js +2 -2
- package/scripts/canon-build.js +27 -20
- package/scripts/canon-draft.js +82 -0
- package/scripts/canon-drift.js +16 -7
- package/scripts/canon-freeze-status.js +14 -6
- package/scripts/canon-freeze.js +31 -11
- package/scripts/canon-unfreeze.js +17 -9
- package/scripts/card.js +2 -2
- package/scripts/colab/REAL_SERVICE_ASSUMPTIONS.md +14 -0
- package/scripts/colab/ai-toolkit-override-py315.txt +45 -0
- package/scripts/colab/colab_window.sh +587 -0
- package/scripts/colab/lane1_render.py +970 -0
- package/scripts/colab/launch_guards.py +564 -0
- package/scripts/colab/launch_lane1_stub.sh +309 -0
- package/scripts/colab/launch_lane3_stub.sh +366 -0
- package/scripts/colab/remote_runner.py +59 -0
- package/scripts/compare.js +2 -2
- package/scripts/critique.js +16 -1
- package/scripts/curate.js +2 -2
- package/scripts/doctor.js +182 -55
- package/scripts/eligibility.js +42 -2
- package/scripts/eval-pack.js +2 -2
- package/scripts/eval-run.js +2 -2
- package/scripts/export.js +2 -2
- package/scripts/generate-controlnet.js +45 -25
- package/scripts/generate-identity.js +53 -23
- package/scripts/generate-ipadapter.js +44 -23
- package/scripts/generate.js +86 -17
- package/scripts/implementation-pack.js +2 -2
- package/scripts/ingest.js +145 -0
- package/scripts/init.js +73 -13
- package/scripts/measure.js +170 -0
- package/scripts/measure_image.py +458 -0
- package/scripts/migrate-records.js +142 -0
- package/scripts/painterly-test.js +4 -3
- package/scripts/painterly.js +7 -3
- package/scripts/qwen_generate.py +138 -20
- package/scripts/reingest.js +2 -2
- package/scripts/sheet.js +142 -0
- package/scripts/snapshot.js +2 -2
- package/scripts/split.js +2 -2
- package/scripts/training-manifest.js +2 -2
- package/scripts/training-package.js +2 -2
- package/scripts/training-profile.js +2 -2
- package/scripts/verify.js +67 -0
- package/scripts/workflow-list.js +2 -1
- 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.
|
|
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
|
|
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
|
|
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’
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
141
|
+
| Artefact | Ce que c’est |
|
|
88
142
|
|----------|-----------|
|
|
89
|
-
| **Snapshot** | Sélection
|
|
90
|
-
| **Split** |
|
|
91
|
-
| **Export package** | Ensemble de données autonome : manifeste, métadonnées, images, partitions, fiche d’informations
|
|
92
|
-
| **Eval pack** | Tâches de test tenant compte du canon
|
|
93
|
-
| **Training package** |
|
|
94
|
-
| **Eval scorecard** |
|
|
95
|
-
| **Implementation pack** | Exemples d’
|
|
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
|
|
151
|
+
L’environnement de production ajoute :
|
|
98
152
|
|
|
99
|
-
| Surface
|
|
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 +
|
|
102
|
-
| **Run** | Artefact d’exécution figé
|
|
103
|
-
| **Critique** | Évaluation structurée multidimensionnelle des résultats
|
|
104
|
-
| **Batch** | Production coordonnée multi-slots (feuilles d’expression,
|
|
105
|
-
| **Selection** | Artefact de décision créative
|
|
106
|
-
| **Re-ingest** | Les résultats sélectionnés sont renvoyés
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
121
|
-
- **[Rustline](handbook/case-study-rustline/)** (conception de concepts)
|
|
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
|
|
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
|
|
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 |
|
|
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,
|
|
132
|
-
| **character-design** | portrait, corps entier, rotation, feuille d’
|
|
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
|
|
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
|
|
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
|
|
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
|
|
166
|
-
- **Les divisions empêchent les fuites.** Les familles de sujets (par identité, lignée ou
|
|
167
|
-
- **Les manifestes sont des contrats figés.** Hachage d’exportation + empreinte de configuration.
|
|
168
|
-
- **Les exécutions
|
|
169
|
-
- **Aucun modèle ne vérifie sa propre sortie.** Les évaluations enregistrent `judged_by_model` et `generator_model
|
|
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
|
|
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
|
|
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`
|
|
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
|
|
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,
|
|
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`,
|
|
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
|
|
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`
|
|
237
|
-
ComfyUI
|
|
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
|
-
|
|
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
|
|
300
|
+
**Erreurs `sdlab project doctor`**
|
|
243
301
|
Doctor renvoie des codes d’erreur structurés. Les plus courants :
|
|
244
|
-
- `E_PROJECT_NOT_FOUND`
|
|
245
|
-
- `E_CONFIG_INVALID`
|
|
246
|
-
- `E_RECORD_DRIFT`
|
|
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
|
|
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 /
|
|
252
|
-
Consultez `docs/internal/HANDOFF.md` pour les notes
|
|
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
|
-
**
|
|
255
|
-
Créez un problème
|
|
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
|
-
|
|
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
|
|