@mcptoolshop/style-dataset-lab 3.3.0 → 3.4.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 (92) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.es.md +35 -25
  3. package/README.fr.md +38 -28
  4. package/README.hi.md +36 -26
  5. package/README.it.md +37 -27
  6. package/README.ja.md +40 -30
  7. package/README.md +15 -5
  8. package/README.pt-BR.md +35 -25
  9. package/README.zh.md +33 -23
  10. package/bin/sdlab.js +51 -4
  11. package/lib/adapters/ai-toolkit.js +37 -5
  12. package/lib/adapters/comfyui-runner.js +79 -26
  13. package/lib/adapters/comfyui-workflows.js +10 -2
  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/batch-modes.js +29 -8
  18. package/lib/batch-runs.js +29 -1
  19. package/lib/batch-sheet-render.js +13 -3
  20. package/lib/brief-compiler.js +19 -0
  21. package/lib/candidate-sheet.js +327 -0
  22. package/lib/canon-build/build.js +146 -93
  23. package/lib/captions.js +57 -0
  24. package/lib/card.js +74 -2
  25. package/lib/comfyui.js +116 -18
  26. package/lib/config.js +116 -12
  27. package/lib/critique-engine.js +36 -2
  28. package/lib/eligibility.js +121 -9
  29. package/lib/eval-pack.js +14 -14
  30. package/lib/eval-runs.js +33 -0
  31. package/lib/export.js +122 -34
  32. package/lib/freeze-gate.js +13 -3
  33. package/lib/freeze-stamp.js +28 -3
  34. package/lib/generated-provenance.js +16 -1
  35. package/lib/implementation-packs.js +95 -17
  36. package/lib/ingest.js +396 -0
  37. package/lib/judgment-provenance.js +220 -0
  38. package/lib/measure.js +422 -0
  39. package/lib/paths.js +196 -7
  40. package/lib/reingest-selected.js +98 -16
  41. package/lib/run-manifest.js +102 -16
  42. package/lib/run-summary.js +12 -6
  43. package/lib/runtime-runs.js +45 -4
  44. package/lib/snapshot.js +114 -15
  45. package/lib/split.js +364 -48
  46. package/lib/training-manifests.js +114 -21
  47. package/lib/training-packages.js +147 -15
  48. package/lib/workflow-profiles.js +24 -3
  49. package/package.json +3 -2
  50. package/runtime/comfyui/txt2img-qwen.json +38 -0
  51. package/runtime/comfyui/txt2img-standard.json +21 -0
  52. package/scripts/_resume.js +62 -0
  53. package/scripts/_shared-args.js +44 -0
  54. package/scripts/brief-compile.js +2 -1
  55. package/scripts/brief-show.js +2 -1
  56. package/scripts/canon-bind.js +2 -2
  57. package/scripts/canon-build.js +27 -20
  58. package/scripts/canon-drift.js +16 -7
  59. package/scripts/canon-freeze-status.js +14 -6
  60. package/scripts/canon-freeze.js +27 -11
  61. package/scripts/canon-unfreeze.js +17 -9
  62. package/scripts/card.js +2 -2
  63. package/scripts/compare.js +2 -2
  64. package/scripts/critique.js +16 -1
  65. package/scripts/curate.js +2 -2
  66. package/scripts/doctor.js +181 -55
  67. package/scripts/eligibility.js +42 -2
  68. package/scripts/eval-pack.js +2 -2
  69. package/scripts/eval-run.js +2 -2
  70. package/scripts/export.js +2 -2
  71. package/scripts/generate-controlnet.js +45 -25
  72. package/scripts/generate-identity.js +53 -23
  73. package/scripts/generate-ipadapter.js +44 -23
  74. package/scripts/generate.js +48 -5
  75. package/scripts/implementation-pack.js +2 -2
  76. package/scripts/ingest.js +145 -0
  77. package/scripts/init.js +73 -13
  78. package/scripts/measure.js +170 -0
  79. package/scripts/measure_image.py +458 -0
  80. package/scripts/migrate-records.js +142 -0
  81. package/scripts/painterly-test.js +4 -3
  82. package/scripts/painterly.js +7 -3
  83. package/scripts/qwen_generate.py +138 -20
  84. package/scripts/reingest.js +2 -2
  85. package/scripts/sheet.js +142 -0
  86. package/scripts/snapshot.js +2 -2
  87. package/scripts/split.js +2 -2
  88. package/scripts/training-manifest.js +2 -2
  89. package/scripts/training-package.js +2 -2
  90. package/scripts/training-profile.js +2 -2
  91. package/scripts/workflow-list.js +2 -1
  92. package/scripts/workflow-show.js +2 -1
package/README.it.md CHANGED
@@ -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
@@ -60,7 +67,7 @@ Quest'ultimo comando è il punto cruciale. Gli output selezionati vengono reintr
60
67
 
61
68
  ## Definizione del canone
62
69
 
63
- Prima che il flusso di lavoro del set di dati venga eseguito, lo spazio dei nomi `sdlab canon *` trasforma l'archivio delle entità del canone del tuo progetto nelle tre proiezioni utilizzate effettivamente per l'addestramento e la produzione, e blocca le voci che non devono subire modifiche.
70
+ Before the dataset pipeline runs, the `sdlab canon *` namespace turns your project's canon entity store into the three projections training and production actually consume — and locks the entries that must not drift.
64
71
 
65
72
  ```bash
66
73
  # Build three projections from the canon entity store:
@@ -76,7 +83,7 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
76
83
  sdlab canon drift --project my-project
77
84
  ```
78
85
 
79
- `canon build` è basato sull'indirizzamento dei contenuti: il suo output è identificato da un codice `canon_sha` ed è memorizzato nella cache, quindi una ricostruzione del canone invariata viene eseguita istantaneamente. `canon freeze` registra ogni "congelamento" rispetto a una versione specifica e lo aggiunge a una traccia di controllo in `freeze-events.jsonl`: le voci "congelate" rifiutano esplicitamente la rigenerazione, mentre le voci "soft-advisory" rifiutano per impostazione predefinita (è possibile ignorare l'impostazione con `--i-know`). `canon drift` ricalcola l'hash di ogni voce monitorata e segnala eventuali modifiche rispetto all'ultima versione pulita.
86
+ `canon build` è basato sull'indirizzamento dei contenuti: il suo output è identificato da un `canon_sha` e memorizzato nella cache, quindi una versione invariata del set di dati viene ricostruita istantaneamente. `canon freeze` registra ogni "freeze" rispetto a una specifica build e lo aggiunge a un registro di controllo `freeze-events.jsonl`: le voci `frozen` rifiutano esplicitamente la rigenerazione, le voci `soft-advisory` rifiutano per impostazione predefinita (è possibile aggirare questa limitazione con `--i-know`). `canon drift` ricalcola l'hash di ogni voce monitorata e segnala qualsiasi elemento che è stato modificato rispetto all'ultima build pulita.
80
87
 
81
88
  Flusso di lavoro completo nel manuale: [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/) e [Two-LoRA stacking](handbook/two-lora-stacking/).
82
89
 
@@ -90,7 +97,7 @@ Sette artefatti del set di dati e un ambiente di lavoro di produzione completo.
90
97
  | **Split** | Partizione train/val/test in cui le famiglie di soggetti non superano i confini. |
91
98
  | **Export package** | Set di dati autonomo: manifesto, metadati, immagini, suddivisioni, scheda del set di dati, checksum. |
92
99
  | **Eval pack** | Attività di test consapevoli del canone: copertura delle corsie, divieto di modifiche, ancoraggio/oro, continuità dei soggetti. |
93
- | **Training package** | Layout pronto per l'addestramento tramite adattatori (`diffusers-lora`, `generic-image-caption`). Stessi dati, formato diverso. |
100
+ | **Training package** | Layout pronto per l'addestramento tramite adattatori (`diffusers-lora`, `generic-image-caption`). La stessa base, formato diverso. |
94
101
  | **Eval scorecard** | Valutazione per attività con esito positivo/negativo basata sulla valutazione degli output generati rispetto ai pacchetti di valutazione. |
95
102
  | **Implementation pack** | Esempi di prompt, errori noti, test di continuità e indicazioni per la reintroduzione. |
96
103
 
@@ -115,12 +122,12 @@ Il risultato pratico: quando il tuo LoRA subisce modifiche indesiderate, puoi ch
115
122
 
116
123
  ## Testato in produzione
117
124
 
118
- Non si tratta di una pipeline dimostrativa. Due modelli LoRA reali sono stati elaborati integralmente attraverso questa pipeline: lo stesso ciclo canonico → curatela → addestramento → distribuzione, agli estremi opposti dello spettro della curatela.
125
+ Questo non è un ambiente di test. Due reali modelli LoRA sono stati utilizzati per intero: lo stesso ciclo canonico → curatela → addestramento → distribuzione, agli estremi opposti dello spettro della curatela.
119
126
 
120
- - **[Tallow Fen](handbook/case-study-tallow-fen/)** (progettazione di creature): un canone di bestiario creato da zero, con circa il **34% di approvazioni** su 293 record curati (169 rifiutati: la fase di selezione è rigorosa). È stato distribuito `tallow_fen_style_v3.safetensors` a 1.5 su `qwen-image`.
121
- - **[Rustline](handbook/case-study-rustline/)** (progettazione concettuale): un canone denso e predefinito, con circa il **96% di approvazioni** su 180 record. È stato distribuito `rustline_v3ckpt_1500.safetensors` a 1.0 su `qwen-image`, ed è stato riutilizzato in un secondo progetto.
127
+ - **[Tallow Fen](handbook/case-study-tallow-fen/)** (progettazione di creature): un set di dati canonico creato da zero, con circa il 34% di approvazioni su 293 record curati (169 rifiutati: il filtro è rigoroso). Distribuito `tallow_fen_style_v3.safetensors` @ 1.5 su `qwen-image`.
128
+ - **[Rustline](handbook/case-study-rustline/)** (progettazione concettuale): un set di dati canonico denso e preformato, con circa il 96% di approvazioni su 180 record. Distribuito `rustline_v3ckpt_1500.safetensors` @ 1.0 su `qwen-image`, riutilizzato a valle da un secondo progetto.
122
129
 
123
- La stessa pipeline, due profili di produzione: la fase di curatela è reale (rifiuta rigorosamente i contenuti inappropriati) e un canone ben definito produce alti tassi di accettazione.
130
+ Lo stesso flusso di lavoro, due profili di produzione: il filtro di curatela è reale (rifiuta in modo rigoroso gli argomenti controversi) e un set di dati canonico ben definito produce un'elevata percentuale di accettazione.
124
131
 
125
132
  ## Cinque domini, regole reali
126
133
 
@@ -162,13 +169,16 @@ projects/my-project/
162
169
 
163
170
  Queste non sono semplici aspirazioni. Sono applicate rigorosamente.
164
171
 
165
- - **Gli snapshot sono immutabili.** L'impronta della configurazione (SHA-256) dimostra che nulla è stato modificato.
166
- - **Le suddivisioni prevengono la dispersione dei dati.** Le famiglie di soggetti (per identità, discendenza o suffisso ID) non superano mai i confini delle partizioni.
167
- - **I manifest sono contratti vincolanti.** Esportazione dell'hash + impronta della configurazione. Se qualcosa cambia, crearne uno nuovo.
168
- - **Le esecuzioni fissano il loro grafo esatto.** Ogni generazione registra `comfy_workflow_sha` + hash del contenuto del modello/LoRA + politica dei seed, in modo che un ciclo possa essere riprodotto byte per byte: identico sia nell'ambiente JS che Python. L'hashing del modello è opzionale (`--hash-models`) e non viene mai falsificato.
169
- - **Nessun modello verifica il proprio output.** Le valutazioni registrano `judged_by_model` e `generator_model`; se questi valori sono mai uguali, viene visualizzato un avviso.
170
- - **Gli adattatori non possono alterare la verità.** Layout diverso, stessi record. Nessuna aggiunta, nessuna rimozione, nessuna riclassificazione.
171
- - **Gli output generati vengono reintrodotti attraverso la revisione.** Nessun bypass. Curatela e collegamento come per tutti gli altri elementi.
172
+ - **Gli snapshot sono immutabili.** L'impronta della configurazione (SHA-256) dimostra che nulla è stato modificato. Gli ID vengono assegnati in modo atomico, quindi due esecuzioni simultanee non possono sovrapporsi nella stessa directory.
173
+ - **Le suddivisioni impediscono la dispersione e il controllo che lo verifica è indipendente.** Le famiglie di soggetti (per identità, discendenza o radice ID normalizzata) non attraversano mai i confini delle partizioni e un secondo controllo deriva nuovamente l'identità del soggetto da zero anziché rileggere la mappa utilizzata dalla suddivisione stessa. Una scheda del set di dati afferma solo "dispersione: nessuna (verificata)" quando entrambi i controlli sono stati eseguiti correttamente; una suddivisione precedente al secondo controllo indica esattamente questo.
174
+ - **I manifest sono contratti congelati.** Hash dell'esportazione + impronta della configurazione e `validate` ricalcola l'hash di ogni file elencato in `checksums.txt`: quindi, la sostituzione di un'immagine all'interno di un'esportazione completata viene rilevata, anche per i manifest creati prima che questo controllo esistesse.
175
+ - **Le esecuzioni definiscono il loro grafo esatto.** Ogni generazione registra `comfy_workflow_sha` + hash del contenuto del modello/LoRA + policy dei seed, quindi una serie può essere riprodotta byte per byte. Gli script JS e Python sono vincolati a un hash identico tramite un test che li avvia entrambi. L'hashing del modello è facoltativo (`--hash-models`) e non viene mai fabbricato: un file irrisolvibile registra `sha256: null` con una nota.
176
+ - **Nessun modello verifica il proprio output.** I giudizi registrano `judged_by_model` e `generator_model`; se questi sono sempre lo stesso modello, viene visualizzato un avviso.
177
+ - **Un giudizio indica chi l'ha creato.** `eligibility audit` distingue i giudizi scritti da una persona dai giudizi generati da uno script di massa, quindi una motivazione che descrive una categoria anziché un'immagine non può essere considerata come curatela.
178
+ - **La misurazione non è una valutazione.** `sdlab measure` associa numeri a un record. Non imposta mai un giudizio, un adattamento o un'approvazione e, quando una misura non è definita per un'immagine, registra `null` anziché un numero plausibile.
179
+ - **Gli adattatori non possono modificare la verità.** Layout diverso, stessi record. Nessuna aggiunta, nessuna rimozione, nessuna riclassificazione.
180
+ - **Gli output generati vengono reinseriti attraverso la revisione.** Nessun bypass. Curatela e associazione come per tutto il resto. Le immagini generate esternamente entrano nello stesso modo tramite `sdlab ingest`, senza curatela preliminare.
181
+ - **I fallimenti sono visibili.** Un record mancante, un'immagine che non può essere posizionata o una didascalia che non può essere creata interrompe un pacchetto di esportazione o addestramento anziché ridurlo silenziosamente.
172
182
 
173
183
  ## Star Freight
174
184
 
@@ -184,7 +194,7 @@ sdlab split build --project star-freight # zero subject leakage
184
194
 
185
195
  ## Formati downstream
186
196
 
187
- `sdlab` è il proprietario del set di dati. La conversione del formato è gestita da [`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset): TRL, LLaVA, Qwen2-VL, JSONL, Parquet e altro. `repo-dataset` esegue il rendering; non decide mai l'inclusione.
197
+ `sdlab` possiede il set di dati. La conversione del formato è gestita da [`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset): TRL, LLaVA, Qwen2-VL, JSONL, Parquet e altro ancora. `repo-dataset` esegue il rendering; non decide mai l'inclusione.
188
198
 
189
199
  ## Installazione
190
200
 
@@ -209,9 +219,9 @@ sdlab project doctor --project test
209
219
  sdlab snapshot create --dry-run --project star-freight
210
220
  ```
211
221
 
212
- `sdlab project doctor` convalida la configurazione di ogni progetto (costituzione, percorsi, rubrica, terminologia) e segnala l'idoneità senza toccare la GPU. Qualsiasi comando che modifica lo stato generato accetta `--dry-run` per visualizzare in anteprima l'effetto.
222
+ `sdlab project doctor` validates every project config (constitution, lanes, rubric, terminology) and reports eligibility without touching the GPU. Any command that mutates generated state accepts `--dry-run` to preview the effect first.
213
223
 
214
- Se si dimentica `--project`, la CLI torna al primo progetto che trova nella cartella `projects/` e stampa un avviso; passare `--project` esplicitamente per disattivare l'avviso.
224
+ Se si dimentica `--project`, la CLI torna al primo progetto che trova in `projects/` e stampa un avviso: passare `--project` esplicitamente per disattivarlo.
215
225
 
216
226
  ### Ripresa di un'esecuzione interrotta
217
227
 
@@ -233,26 +243,26 @@ Entrambi i comandi funzionano perché ogni slot scrive la sua voce del manifest
233
243
 
234
244
  Modalità di errore comuni e soluzioni:
235
245
 
236
- **`ECONNREFUSED 127.0.0.1:8188` in qualsiasi `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
246
+ **`ECONNREFUSED 127.0.0.1:8188` su qualsiasi `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
237
247
  ComfyUI non è in esecuzione. Avviare ComfyUI (`python main.py --listen 127.0.0.1 --port 8188`) e confermare con `curl http://127.0.0.1:8188/system_stats`. Per puntare a un host/porta diverso, impostare `COMFY_URL=http://host:port`.
238
248
 
239
249
  **`missing checkpoint` / `LoRA weight not found`**
240
- Il profilo del flusso di lavoro fa riferimento a un file modello che non si trova nelle cartelle `models/checkpoints/` o `models/loras/` di ComfyUI. Aprire `projects/<project>/workflows/profiles/<profile>.json`, individuare il campo `checkpoint` o `lora` e scaricare il peso di riferimento oppure sostituirlo con uno che si ha già. Rieseguire `sdlab project doctor --project <project>` per confermare la correzione.
250
+ Il profilo del flusso di lavoro fa riferimento a un file modello che non si trova nelle cartelle `models/checkpoints/` o `models/loras/` di ComfyUI. Aprire `projects/<project>/workflows/profiles/<profile>.json`, individuare il campo `checkpoint` o `lora` e scaricare il peso di riferimento oppure sostituirlo con uno già disponibile. Rieseguire `sdlab project doctor --project <project>` per confermare la correzione.
241
251
 
242
- **Errori di `sdlab project doctor`**
252
+ **Errori `sdlab project doctor`**
243
253
  Doctor restituisce codici di errore strutturati. Alcuni comuni:
244
254
  - `E_PROJECT_NOT_FOUND`: la directory del progetto non esiste in `projects/`. Controllare l'ortografia.
245
- - `E_CONFIG_INVALID`: uno dei cinque file di configurazione JSON ha fallito la convalida dello schema. Il campo `hint` indica il file e il campo problematici.
246
- - `E_RECORD_DRIFT`: l'impronta della configurazione di un record non corrisponde più alla sua origine. Rielaborare o ricollegare come suggerisce l'indicazione.
255
+ - `E_CONFIG_INVALID`: uno dei cinque file di configurazione JSON non ha superato la convalida dello schema. Il campo `hint` indica il file e il campo problematici.
256
+ - `E_RECORD_DRIFT`: l'impronta della configurazione di un record non corrisponde più alla sua origine. Curare o riassociare come suggerito.
247
257
 
248
- **`No --project specified, falling back to <name>`**
258
+ **Avviso `No --project specified, falling back to <name>`**
249
259
  Un avviso lieve. Passare `--project <name>` esplicitamente per selezionare il progetto corretto e disattivare l'avviso.
250
260
 
251
- **Problemi di memoria VRAM / "Painterly"**
252
- Consultare `docs/internal/HANDOFF.md` per le note sulla regolazione del denoising "painterly". In breve: ridurre la forza del denoising, diminuire la dimensione del batch o passare a un checkpoint più piccolo nel profilo del flusso di lavoro.
261
+ **Painterly / VRAM out-of-memory issues**
262
+ See `docs/internal/HANDOFF.md` for the painterly denoise tuning notes. In short: lower the denoise strength, reduce batch size, or switch to a smaller checkpoint in your workflow profile.
253
263
 
254
- **Segnalazione di bug**
255
- Aprire una segnalazione su https://github.com/mcp-tool-shop-org/style-dataset-lab/issues con la versione di sdlab (`sdlab --version`), la versione di Node (`node -v`), il comando completo e l'output strutturato dell'errore. Un modello per la segnalazione di bug precompila i campi.
264
+ **Reporting bugs**
265
+ File an issue at https://github.com/mcp-tool-shop-org/style-dataset-lab/issues with your sdlab version (`sdlab --version`), Node version (`node -v`), the full command, and the structured error output. A bug-report template prefills the fields.
256
266
 
257
267
  ## Sicurezza
258
268
 
package/README.ja.md CHANGED
@@ -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
@@ -60,7 +67,7 @@ sdlab reingest selected --selection selection_2026-04-16_001
60
67
 
61
68
  ## カノンオーサリング
62
69
 
63
- データセットパイプラインを実行する前に、`sdlab canon *`名前空間は、プロジェクトのカノンエンティティストアを、実際のトレーニングと制作で使用される3つのプロジェクションに変換し、変更してはならないエントリをロックします。
70
+ Before the dataset pipeline runs, the `sdlab canon *` namespace turns your project's canon entity store into the three projections training and production actually consume — and locks the entries that must not drift.
64
71
 
65
72
  ```bash
66
73
  # Build three projections from the canon entity store:
@@ -76,7 +83,7 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
76
83
  sdlab canon drift --project my-project
77
84
  ```
78
85
 
79
- `canon build`はコンテンツアドレス指定であり、その出力は`canon_sha`でキー付けされ、キャッシュされます。そのため、変更されていないカノンは瞬時に再構築されます。`canon freeze`は、各フリーズを特定のビルドに対して記録し、`freeze-events.jsonl`監査トレイルに追加します。`frozen`エントリは完全に再生成を拒否し、`soft-advisory`エントリはデフォルトで拒否しますが(`--i-know`オプションで回避できます)。`canon drift`は、監視対象のすべてのエントリのハッシュを再計算し、最後のクリーンビルド以降に変更されたものをフラグします。
86
+ `canon build`はコンテンツアドレス指定方式です。その出力は`canon_sha`をキーとしてキャッシュされ、変更されていない正当なデータは瞬時に再ビルドされます。`canon freeze`は、特定のビルドに対して各フリーズの状態を確認し、`freeze-events.jsonl`監査ログに追加します。`frozen`のエントリは再生成を完全に拒否し、`soft-advisory`のエントリはデフォルトで拒否します(`--i-know`を使用してバイパスできます)。`canon drift`は、監視対象のすべてのエントリのハッシュを再計算し、最後のクリーンビルド以降に変更されたものをフラグ付けします。
80
87
 
81
88
  完全なワークフローについては、ハンドブックをご覧ください。[カノンビルド](handbook/canon-build/)、[カノンフリーズ](handbook/canon-freeze/)、および[Two-LoRAスタッキング](handbook/two-lora-stacking/)。
82
89
 
@@ -90,7 +97,7 @@ sdlab canon drift --project my-project
90
97
  | **Split** | 被験者グループが境界を越えない、トレーニング/検証/テストの分割。 |
91
98
  | **Export package** | 自己完結型のデータセット:マニフェスト、メタデータ、画像、分割、データセットカード、チェックサム。 |
92
99
  | **Eval pack** | カノンを意識したテストタスク:レーンカバレッジ、禁止されたドリフト、アンカー/ゴールド、被験者の連続性。 |
93
- | **Training package** | アダプター(`diffusers-lora`、`generic-image-caption`)を介したトレーナー対応のレイアウト。同じ情報でありながら、異なる形式です。 |
100
+ | **Training package** | アダプターを使用したトレーナー向けのレイアウト(`diffusers-lora`、`generic-image-caption`)。同じデータでも、異なる形式です。 |
94
101
  | **Eval scorecard** | 生成された出力を評価パックに対してスコアリングし、タスクごとの合格/不合格を判定します。 |
95
102
  | **Implementation pack** | プロンプト例、既知の失敗、連続性テスト、および再取り込みガイダンス。 |
96
103
 
@@ -113,14 +120,14 @@ sdlab canon drift --project my-project
113
120
 
114
121
  実用的な結果:LoRAがドリフトした場合、なぜそうなるのかを尋ねることができます。次のトレーニングラウンドにより良いデータが必要な場合、どのレコードがほぼ合格であり、どの単一のルールに失敗したかを正確に知ることができます。新しいチームメンバーがプロジェクトのビジュアル言語について質問した場合、答えはFigmaボードではなく、1,182件の評価された例を含む検索可能な憲法です。
115
122
 
116
- ## 実運用で実績あり
123
+ ## 実運用環境で実績あり
117
124
 
118
- これはデモ用のパイプラインではありません。2つの実際のスタイルLoRAが、このパイプラインを通じて最初から最後まで処理されました。キュレーションの範囲において正反対の位置にある、同じ「原作 → キュレーション → トレーニング → 配信」というサイクルです。
125
+ これはデモ用のパイプラインではありません。2つの実際のスタイルLoRAが、最初から最後までこのパイプラインを通じて出荷されました。同じデータセットをキュレーションし、トレーニングを行い、出荷する一連のプロセスであり、その範囲はキュレーションのスペクトルの両端にあります。
119
126
 
120
- - **[Tallow Fen](handbook/case-study-tallow-fen/)**(クリーチャーデザイン)—最初から作成されたベストiaryの原作で、293件のキュレーション済みレコードのうち約34%が承認されました(169件は却下され、厳しい基準で審査されています)。`tallow_fen_style_v3.safetensors`を`qwen-image`上で1.5で使用して配信しました。
121
- - **[Rustline](handbook/case-study-rustline/)**(コンセプトデザイン)—密度が高く、事前に形成された原作で、180件のレコードのうち約96%が承認されました。`rustline_v3ckpt_1500.safetensors`を`qwen-image`上で1.0で使用して配信し、別のプロジェクトでも再利用しました。
127
+ - **[Tallow Fen](handbook/case-study-tallow-fen/)**(クリーチャーデザイン)—最初から作成されたベストiaryデータセットで、293件のキュレーションされたレコードのうち約34%が承認されました(169件は却下され、厳格な基準で判断されます)。`tallow_fen_style_v3.safetensors`を1.5で`qwen-image`に出荷しました。
128
+ - **[Rustline](handbook/case-study-rustline/)**(コンセプトデザイン)—密度が高く、事前に形成されたデータセットで、180件のレコードのうち約96%が承認されました。`rustline_v3ckpt_1500.safetensors`を1.0で`qwen-image`に出荷し、別のプロジェクトで再利用されました。
122
129
 
123
- 同じパイプラインで、2つの実運用プロファイル:キュレーションゲートは本物であり(オープンなテーマに対して厳しい基準で審査します)、厳格な原作によって高い承認率が得られます。
130
+ 同じパイプラインを使用し、2つの実運用環境プロファイル:キュレーションゲートは本物です(オープンなテーマについては厳格に判断します)。また、規律を守ったデータセットは高い受容率をもたらします。
124
131
 
125
132
  ## 5つのドメイン、実際のルール
126
133
 
@@ -162,13 +169,16 @@ projects/my-project/
162
169
 
163
170
  これらは理想的なものではありません。強制的に適用されます。
164
171
 
165
- - **スナップショットは不変です。**構成のフィンガープリント(SHA-256)により、変更がないことが証明されます。
166
- - **分割により情報漏洩を防ぎます。**被験者グループ(同一性、系統、またはIDサフィックスによって分類)は、決してパーティション境界を越えません。
167
- - **マニフェストは固定された契約です。**エクスポートハッシュと構成のフィンガープリントが含まれます。変更がある場合は、新しいものを生成します。
168
- - **実行は正確なグラフに固定されます。**すべての生成処理において、`comfy_workflow_sha` + モデル/LoRAコンテンツハッシュ + シードポリシーが記録されるため、一連の処理をバイト単位で完全に再現できます。これは、JavaScriptとPythonの両方のランナーで同じ結果になります。モデルのハッシュ化はオプション(`--hash-models`)であり、偽造されることはありません。
169
- - **どのモデルも自身の出力を検証しません。**評価では、`judged_by_model`と`generator_model`が記録され、これらが同一のモデルである場合、警告が表示されます。
170
- - **アダプターは真実を改ざんできません。**レイアウトは異なりますが、同じレコードを使用します。追加、削除、再分類は行われません。
171
- - **生成された出力は、レビューを通じて再度処理されます。**バイパスはありません。他のものと同様に、キュレーションとバインドを行います。
172
+ - **Snapshots are immutable.** Config fingerprint (SHA-256) proves nothing changed. IDs are claimed atomically, so two concurrent runs cannot interleave into one directory.
173
+ - **Splits prevent leakage — and the check that says so is independent.** Subject families (by identity, lineage, or normalized ID stem) never cross partition boundaries, and a second check re-derives subject identity from scratch rather than re-reading the map the split itself used. A dataset card only claims "leakage: none (verified)" when both checks ran and passed; a split predating the second check says exactly that instead.
174
+ - **Manifests are frozen contracts.** Export hash + config fingerprint, and `validate` re-hashes every file `checksums.txt` lists — so replacing an image inside a finished export is caught, including for manifests created before that check existed.
175
+ - **Runs pin their exact graph.** Every generation records `comfy_workflow_sha` + model/LoRA content hashes + seed policy, so a wave is byte-for-byte replayable. The JS and Python runners are held to a byte-identical hash by a test that spawns both. Model hashing is opt-in (`--hash-models`) and never fabricated — an unresolvable file records `sha256: null` with a note.
176
+ - **No model verifies its own output.** Judgments record `judged_by_model` and `generator_model`; a warning fires if they are ever the same model.
177
+ - **A judgment says who made it.** `eligibility audit` distinguishes judgments a person wrote from judgments a bulk script minted, so a rationale that describes a category rather than an image cannot pass as curation.
178
+ - **Measurement is not verdict.** `sdlab measure` attaches numbers to a record. It never sets a judgment, a fit, or an approval — and where a measure is undefined for an image it records `null` rather than a plausible number.
179
+ - **Adapters cannot mutate truth.** Different layout, same records. No additions, no removals, no reclassification.
180
+ - **Generated outputs re-enter through review.** No bypass. Curate and bind like everything else. Externally-generated images enter the same way via `sdlab ingest`, uncurated.
181
+ - **Failures are visible.** A missing record, an unplaceable image, or a caption that cannot be built stops an export or training package rather than quietly shrinking it.
172
182
 
173
183
  ## スター・フレイト
174
184
 
@@ -184,7 +194,7 @@ sdlab split build --project star-freight # zero subject leakage
184
194
 
185
195
  ## 下流形式
186
196
 
187
- `sdlab`がデータセットを所有します。フォーマット変換は[`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset)によって処理されます:TRL、LLaVA、Qwen2-VL、JSONL、Parquetなど。`repo-dataset`はレンダリングを行い、データの選択は行いません。
197
+ `sdlab`がデータセットを所有します。形式変換は、[`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset)によって処理されます:TRL、LLaVA、Qwen2-VL、JSONL、Parquetなど。`repo-dataset`はレンダリングし、包含を決定することはありません。
188
198
 
189
199
  ## インストール
190
200
 
@@ -209,9 +219,9 @@ sdlab project doctor --project test
209
219
  sdlab snapshot create --dry-run --project star-freight
210
220
  ```
211
221
 
212
- `sdlab project doctor`は、すべてのプロジェクト設定(憲法、ルート、ルーブリック、用語)を検証し、GPUに触れることなく有効性を報告します。生成された状態を変更するコマンドはすべて、最初に効果をプレビューするために`--dry-run`を受け入れます。
222
+ `sdlab project doctor` validates every project config (constitution, lanes, rubric, terminology) and reports eligibility without touching the GPU. Any command that mutates generated state accepts `--dry-run` to preview the effect first.
213
223
 
214
- `--project`を忘れた場合、CLIは`projects/`の下で最初に見つかったプロジェクトにフォールバックし、警告を表示します。警告を抑制するには、`--project`を明示的に指定してください。
224
+ `--project`を忘れると、CLIは`projects/`の下で最初に見つかったプロジェクトにフォールバックし、警告を表示します。警告を抑制するには、`--project`を明示的に渡してください。
215
225
 
216
226
  ### 中断された実行の再開
217
227
 
@@ -233,26 +243,26 @@ sdlab batch generate --resume batch_2026-04-22_001 --project my-project
233
243
 
234
244
  一般的なエラーとその修正:
235
245
 
236
- **`sdlab generate` / `sdlab run generate` / `sdlab batch generate`のいずれかで`ECONNREFUSED 127.0.0.1:8188`が発生した場合**
237
- ComfyUIが実行されていません。ComfyUIを起動します(`python main.py --listen 127.0.0.1 --port 8188`)そして、`curl http://127.0.0.1:8188/system_stats`で確認してください。別のホスト/ポートを指定するには、`COMFY_URL=http://host:port`を設定します。
246
+ **`ECONNREFUSED 127.0.0.1:8188`(任意の`sdlab generate`/`sdlab run generate`/`sdlab batch generate`)**
247
+ ComfyUIが実行されていません。ComfyUI(`python main.py --listen 127.0.0.1 --port 8188`)を開始し、`curl http://127.0.0.1:8188/system_stats`で確認します。別のホスト/ポートを指定するには、`COMFY_URL=http://host:port`を設定します。
238
248
 
239
249
  **`missing checkpoint` / `LoRA weight not found`**
240
- ワークフロープロファイルで、ComfyUIの`models/checkpoints/`または`models/loras/`フォルダにないモデルファイルを指定しています。`projects/<project>/workflows/profiles/<profile>.json`を開き、`checkpoint`または`lora`フィールドを見つけて、参照されているウェイトをダウンロードするか、すでに持っているものと置き換えます。`sdlab project doctor --project <project>`を再実行して、修正を確認します。
250
+ ワークフロープロファイルで指定されたモデルファイルが、ComfyUIの`models/checkpoints/`または`models/loras/`フォルダーにありません。`projects/<project>/workflows/profiles/<profile>.json`を開き、`checkpoint`または`lora`フィールドを見つけて、参照されているウェイトをダウンロードするか、すでに持っているものと置き換えます。`sdlab project doctor --project <project>`を再実行して、修正を確認します。
241
251
 
242
- **`sdlab project doctor`のエラー**
252
+ **`sdlab project doctor`エラー**
243
253
  Doctorは構造化されたエラーコードを返します。一般的なもの:
244
- - `E_PROJECT_NOT_FOUND` — プロジェクトディレクトリが`projects/`の下に存在しません。スペルを確認してください。
245
- - `E_CONFIG_INVALID` — 5つのJSON設定ファイルのいずれかが、スキーマ検証に失敗しました。`hint`フィールドには、問題のあるファイルとフィールドの名前が表示されます。
246
- - `E_RECORD_DRIFT` — レコードの設定フィンガープリントが、そのソースと一致しなくなりました。ヒントに従って、再キュレーションまたは再バインドしてください。
254
+ - `E_PROJECT_NOT_FOUND`—プロジェクトディレクトリが`projects/`の下に存在しません。スペルを確認してください。
255
+ - `E_CONFIG_INVALID`—5つのJSON構成ファイルのいずれかが、スキーマ検証に失敗しました。`hint`フィールドには、問題のあるファイルとフィールドの名前が表示されます。
256
+ - `E_RECORD_DRIFT`—レコードの構成フィンガープリントが、ソースと一致しなくなりました。ヒントに従って、再キュレーションまたは再バインドしてください。
247
257
 
248
258
  **`No --project specified, falling back to <name>`**
249
- 軽度の警告です。`--project <name>`を明示的に指定して、適切なプロジェクトを選択し、警告を抑制します。
259
+ ソフトな警告です。`--project <name>`を明示的に渡して、適切なプロジェクトを選択し、警告を抑制します。
250
260
 
251
- **Painterly / VRAMのメモリ不足の問題**
252
- `docs/internal/HANDOFF.md`を参照して、Painterlyのデノイズ調整に関する注意事項を確認してください。要するに:デノイズ強度を下げたり、バッチサイズを減らしたり、ワークフロープロファイルでより小さいチェックポイントに切り替えたりします。
261
+ **Painterly / VRAM out-of-memory issues**
262
+ See `docs/internal/HANDOFF.md` for the painterly denoise tuning notes. In short: lower the denoise strength, reduce batch size, or switch to a smaller checkpoint in your workflow profile.
253
263
 
254
- **バグの報告**
255
- https://github.com/mcp-tool-shop-org/style-dataset-lab/issues に、sdlabバージョン(`sdlab --version`)、Nodeバージョン(`node -v`)、完全なコマンド、および構造化されたエラー出力を添えて問題を報告してください。バグ報告テンプレートには、フィールドが事前に設定されています。
264
+ **Reporting bugs**
265
+ File an issue at https://github.com/mcp-tool-shop-org/style-dataset-lab/issues with your sdlab version (`sdlab --version`), Node version (`node -v`), the full command, and the structured error output. A bug-report template prefills the fields.
256
266
 
257
267
  ## セキュリティ
258
268
 
package/README.md CHANGED
@@ -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
@@ -162,13 +169,16 @@ projects/my-project/
162
169
 
163
170
  These are not aspirational. They are enforced.
164
171
 
165
- - **Snapshots are immutable.** Config fingerprint (SHA-256) proves nothing changed.
166
- - **Splits prevent leakage.** Subject families (by identity, lineage, or ID suffix) never cross partition boundaries.
167
- - **Manifests are frozen contracts.** Export hash + config fingerprint. If anything changes, create a new one.
168
- - **Runs pin their exact graph.** Every generation records `comfy_workflow_sha` + model/LoRA content hashes + seed policy, so a wave is byte-for-byte replayable — identical across the JS and Python runners. Model hashing is opt-in (`--hash-models`) and never fabricated.
172
+ - **Snapshots are immutable.** Config fingerprint (SHA-256) proves nothing changed. IDs are claimed atomically, so two concurrent runs cannot interleave into one directory.
173
+ - **Splits prevent leakage — and the check that says so is independent.** Subject families (by identity, lineage, or normalized ID stem) never cross partition boundaries, and a second check re-derives subject identity from scratch rather than re-reading the map the split itself used. A dataset card only claims "leakage: none (verified)" when both checks ran and passed; a split predating the second check says exactly that instead.
174
+ - **Manifests are frozen contracts.** Export hash + config fingerprint, and `validate` re-hashes every file `checksums.txt` lists — so replacing an image inside a finished export is caught, including for manifests created before that check existed.
175
+ - **Runs pin their exact graph.** Every generation records `comfy_workflow_sha` + model/LoRA content hashes + seed policy, so a wave is byte-for-byte replayable. The JS and Python runners are held to a byte-identical hash by a test that spawns both. Model hashing is opt-in (`--hash-models`) and never fabricated — an unresolvable file records `sha256: null` with a note.
169
176
  - **No model verifies its own output.** Judgments record `judged_by_model` and `generator_model`; a warning fires if they are ever the same model.
177
+ - **A judgment says who made it.** `eligibility audit` distinguishes judgments a person wrote from judgments a bulk script minted, so a rationale that describes a category rather than an image cannot pass as curation.
178
+ - **Measurement is not verdict.** `sdlab measure` attaches numbers to a record. It never sets a judgment, a fit, or an approval — and where a measure is undefined for an image it records `null` rather than a plausible number.
170
179
  - **Adapters cannot mutate truth.** Different layout, same records. No additions, no removals, no reclassification.
171
- - **Generated outputs re-enter through review.** No bypass. Curate and bind like everything else.
180
+ - **Generated outputs re-enter through review.** No bypass. Curate and bind like everything else. Externally-generated images enter the same way via `sdlab ingest`, uncurated.
181
+ - **Failures are visible.** A missing record, an unplaceable image, or a caption that cannot be built stops an export or training package rather than quietly shrinking it.
172
182
 
173
183
  ## Star Freight
174
184
 
package/README.pt-BR.md CHANGED
@@ -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
@@ -60,7 +67,7 @@ Esse último comando é o ponto crucial. As saídas selecionadas retornam pelo m
60
67
 
61
68
  ## Criação do cânone
62
69
 
63
- Antes que o pipeline do conjunto de dados seja executado, o namespace `sdlab canon *` transforma o repositório de entidades do cânone do seu projeto nas três projeções que o treinamento e a produção realmente usam — e bloqueia as entradas que não devem ser alteradas.
70
+ Before the dataset pipeline runs, the `sdlab canon *` namespace turns your project's canon entity store into the three projections training and production actually consume — and locks the entries that must not drift.
64
71
 
65
72
  ```bash
66
73
  # Build three projections from the canon entity store:
@@ -76,7 +83,7 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
76
83
  sdlab canon drift --project my-project
77
84
  ```
78
85
 
79
- `canon build` é endereçável por conteúdo — sua saída é identificada por um `canon_sha` e armazenada em cache, para que uma reconstrução do cânone inalterado seja feita instantaneamente. `canon freeze` registra cada congelamento em relação a uma construção específica e anexa a um rastreamento de auditoria `freeze-events.jsonl`: as entradas `frozen` rejeitam explicitamente a regeneração, as entradas `soft-advisory` rejeitam por padrão (ignore com `--i-know`). `canon drift` recalcula o hash de cada entrada monitorada e sinaliza qualquer coisa que tenha sido alterada desde a última construção limpa.
86
+ `canon build` é endereçável por conteúdo — sua saída é identificada por um `canon_sha` e armazenada em cache, de modo que uma versão inalterada é reconstruída instantaneamente. `canon freeze` registra cada estado contra uma compilação específica e adiciona a um `freeze-events.jsonl` histórico de auditoria: as entradas `frozen` rejeitam explicitamente a regeneração, as entradas `soft-advisory` rejeitam por padrão (ignorar com `--i-know`). `canon drift` recalcula o hash de cada entrada monitorada e sinaliza qualquer coisa que tenha sido alterada desde a última compilação limpa.
80
87
 
81
88
  Fluxo de trabalho completo no manual: [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/) e [Two-LoRA stacking](handbook/two-lora-stacking/).
82
89
 
@@ -90,7 +97,7 @@ Sete artefatos de conjunto de dados e uma estação de trabalho de produção co
90
97
  | **Split** | Partição de treinamento/validação/teste onde as famílias de assuntos nunca cruzam os limites. |
91
98
  | **Export package** | Conjunto de dados autônomo: manifesto, metadados, imagens, divisões, cartão do conjunto de dados, somas de verificação. |
92
99
  | **Eval pack** | Tarefas de teste com reconhecimento do cânone: cobertura da faixa, desvio proibido, âncora/ouro, continuidade do assunto. |
93
- | **Training package** | Layout pronto para o treinador por meio de adaptadores (`diffusers-lora`, `generic-image-caption`). A mesma verdade, formato diferente. |
100
+ | **Training package** | Layout pronto para treinamento via adaptadores (`diffusers-lora`, `generic-image-caption`). A mesma verdade, formato diferente. |
94
101
  | **Eval scorecard** | Resultado de aprovação/reprovação por tarefa a partir da pontuação das saídas geradas em relação aos pacotes de avaliação. |
95
102
  | **Implementation pack** | Exemplos de prompts, falhas conhecidas, testes de continuidade e orientação para reintrodução. |
96
103
 
@@ -117,8 +124,8 @@ O resultado prático: quando seu LoRA se desvia, você pode perguntar *por quê*
117
124
 
118
125
  Este não é um fluxo de trabalho de demonstração. Duas LoRAs reais foram processadas integralmente através dele — o mesmo ciclo de criação → curadoria → treinamento → lançamento, em extremos opostos do espectro da curadoria.
119
126
 
120
- - **[Tallow Fen](handbook/case-study-tallow-fen/)** (design de criaturas) — um bestiário criado do zero, com aproximadamente **34% de aprovação** em 293 registros selecionados (169 rejeitados — a triagem é rigorosa). Lançado `tallow_fen_style_v3.safetensors` @ 1.5 no `qwen-image`.
121
- - **[Rustline](handbook/case-study-rustline/)** (design de conceito) — um conjunto denso e pré-definido, com aproximadamente **96% de aprovação** em 180 registros. Lançado `rustline_v3ckpt_1500.safetensors` @ 1.0 no `qwen-image`, reutilizado posteriormente por um segundo projeto.
127
+ - **[Tallow Fen](handbook/case-study-tallow-fen/)** (design de criaturas) — um bestiário criado do zero, com aproximadamente **34% de aprovação** em 293 registros selecionados (169 rejeitados — a barreira é rigorosa). Enviado `tallow_fen_style_v3.safetensors` @ 1.5 em `qwen-image`.
128
+ - **[Rustline](handbook/case-study-rustline/)** (design conceitual) — um conjunto de dados denso e pré-formatado, com aproximadamente **96% de aprovação** em 180 registros. Enviado `rustline_v3ckpt_1500.safetensors` @ 1.0 em `qwen-image`, reutilizado posteriormente por um segundo projeto.
122
129
 
123
130
  O mesmo fluxo de trabalho, dois perfis de produção: a triagem da curadoria é real (rejeita rigorosamente temas abertos) e uma abordagem disciplinada na criação resulta em alta aceitação.
124
131
 
@@ -162,13 +169,16 @@ projects/my-project/
162
169
 
163
170
  Estas não são apenas aspirações. Elas são aplicadas.
164
171
 
165
- - **Os instantâneos são imutáveis.** A impressão digital da configuração (SHA-256) comprova que nada foi alterado.
166
- - **As divisões evitam vazamentos.** As famílias de temas (por identidade, linhagem ou sufixo de ID) nunca cruzam os limites das partições.
167
- - **Os manifestos são contratos fixos.** Exporta o hash + impressão digital da configuração. Se algo mudar, crie um novo.
168
- - **As execuções fixam seu grafo exato.** Cada geração registra `comfy_workflow_sha` + hashes do conteúdo do modelo/LoRA + política de semente, para que uma série possa ser reproduzida byte a byte — idêntica nos executores JS e Python. O hash do modelo é opcional (`--hash-models`) e nunca é fabricado.
169
- - **Nenhum modelo verifica seu próprio resultado.** As avaliações registram `judged_by_model` e `generator_model`; um aviso é exibido se eles forem o mesmo modelo.
170
- - **Os adaptadores não podem alterar a verdade.** Layout diferente, os mesmos registros. Sem adições, sem remoções, sem reclassificação.
171
- - **As saídas geradas são reintroduzidas através da revisão.** Sem desvio. Curadoria e vinculação como em tudo o mais.
172
+ - **Os snapshots são imutáveis.** A impressão digital da configuração (SHA-256) prova que nada foi alterado. Os IDs são reivindicados atomicamente, portanto, duas execuções simultâneas não podem se intercalar em um único diretório.
173
+ - **As divisões evitam vazamentos — e a verificação que confirma isso é independente.** As famílias de objetos (por identidade, linhagem ou ID normalizado) nunca cruzam os limites da partição, e uma segunda verificação rederiva a identidade do objeto do zero, em vez de reler o mapa que a própria divisão usou. Um cartão de conjunto de dados apenas afirma "vazamento: nenhum (verificado)" quando ambas as verificações são executadas e aprovadas; uma divisão anterior à segunda verificação indica exatamente isso.
174
+ - **Os manifestos são contratos congelados.** Hash de exportação + impressão digital da configuração, e `validate` recalcula o hash de cada arquivo que `checksums.txt` lista — portanto, substituir uma imagem dentro de uma exportação finalizada é detectado, incluindo para manifestos criados antes que essa verificação existisse.
175
+ - **As execuções fixam seu grafo exato.** Cada geração registra `comfy_workflow_sha` + hashes do conteúdo do modelo/LoRA + política de sementes, portanto, uma onda pode ser reproduzida byte a byte. Os executores JS e Python são mantidos em um hash idêntico por meio de um teste que os inicia. O hashing do modelo é opcional (`--hash-models`) e nunca fabricado — um arquivo irresolvível registra `sha256: null` com uma nota.
176
+ - **Nenhum modelo verifica sua própria saída.** Os julgamentos registram `judged_by_model` e `generator_model`; um aviso é acionado se eles forem o mesmo modelo.
177
+ - **Um julgamento indica quem o fez.** `eligibility audit` distingue os julgamentos escritos por uma pessoa dos julgamentos gerados por um script em lote, portanto, uma justificativa que descreve uma categoria em vez de uma imagem não pode ser considerada como curadoria.
178
+ - **A medição não é veredicto.** `sdlab measure` anexa números a um registro. Nunca define um julgamento, um ajuste ou uma aprovação — e onde uma medida é indefinida para uma imagem, registra `null` em vez de um número plausível.
179
+ - **Os adaptadores não podem alterar a verdade.** Layout diferente, os mesmos registros. Sem adições, sem remoções, sem reclassificações.
180
+ - **As saídas geradas entram novamente por meio da revisão.** Sem desvio. Curadoria e vinculação como tudo o mais. As imagens geradas externamente entram da mesma forma via `sdlab ingest`, sem curadoria.
181
+ - **As falhas são visíveis.** Um registro ausente, uma imagem que não pode ser colocada ou uma legenda que não pode ser criada interrompe uma exportação ou pacote de treinamento em vez de simplesmente reduzi-lo silenciosamente.
172
182
 
173
183
  ## Star Freight
174
184
 
@@ -209,9 +219,9 @@ sdlab project doctor --project test
209
219
  sdlab snapshot create --dry-run --project star-freight
210
220
  ```
211
221
 
212
- `sdlab project doctor` valida cada configuração de projeto (constituição, rotas, rubrica, terminologia) e relata a elegibilidade sem tocar na GPU. Qualquer comando que altere o estado gerado aceita `--dry-run` para visualizar o efeito primeiro.
222
+ `sdlab project doctor` validates every project config (constitution, lanes, rubric, terminology) and reports eligibility without touching the GPU. Any command that mutates generated state accepts `--dry-run` to preview the effect first.
213
223
 
214
- Se você esquecer `--project`, a CLI voltará ao primeiro projeto que encontrar em `projects/` e imprimirá um aviso — passe `--project` explicitamente para silenciá-lo.
224
+ Se você esquecer `--project`, a CLI volta ao primeiro projeto que encontrar em `projects/` e imprime um aviso — passe `--project` explicitamente para silenciá-lo.
215
225
 
216
226
  ### Retomando uma execução interrompida
217
227
 
@@ -237,22 +247,22 @@ Modos de falha comuns e soluções:
237
247
  O ComfyUI não está em execução. Inicie o ComfyUI (`python main.py --listen 127.0.0.1 --port 8188`) e confirme com `curl http://127.0.0.1:8188/system_stats`. Para apontar para um host/porta diferente, defina `COMFY_URL=http://host:port`.
238
248
 
239
249
  **`missing checkpoint` / `LoRA weight not found`**
240
- O perfil de fluxo de trabalho especifica um arquivo de modelo que não está na pasta `models/checkpoints/` ou `models/loras/` do ComfyUI. Abra `projects/<project>/workflows/profiles/<profile>.json`, localize o campo `checkpoint` ou `lora` e, ou baixe o peso referenciado ou substitua-o por um que você já tenha. Execute novamente `sdlab project doctor --project <project>` para confirmar a correção.
250
+ O perfil do seu fluxo de trabalho nomeia um arquivo de modelo que não está na pasta `models/checkpoints/` ou `models/loras/` do ComfyUI. Abra `projects/<project>/workflows/profiles/<profile>.json`, localize o campo `checkpoint` ou `lora` e baixe o peso referenciado ou substitua-o por um que você já tenha. Execute novamente `sdlab project doctor --project <project>` para confirmar a correção.
241
251
 
242
- **Erros de `sdlab project doctor`**
243
- Doctor retorna códigos de erro estruturados. Alguns comuns:
252
+ **Erros `sdlab project doctor`**
253
+ O Doctor retorna códigos de erro estruturados. Alguns comuns:
244
254
  - `E_PROJECT_NOT_FOUND` — o diretório do projeto não existe em `projects/`. Verifique a ortografia.
245
- - `E_CONFIG_INVALID` — um dos cinco arquivos de configuração JSON falhou na validação do esquema. O campo `hint` indica o arquivo e o campo com problemas.
246
- - `E_RECORD_DRIFT` — a impressão digital da configuração de um registro não corresponde mais à sua fonte. Reavalie ou redefina conforme sugerido no aviso.
255
+ - `E_CONFIG_INVALID` — um dos cinco arquivos de configuração JSON falhou na validação do esquema. O campo `hint` nomeia o arquivo e o campo com problemas.
256
+ - `E_RECORD_DRIFT` — a impressão digital da configuração de um registro não corresponde mais à sua fonte. Faça uma nova curadoria ou vincule novamente, conforme sugerido.
247
257
 
248
- **`No --project specified, falling back to <name>`**
249
- Um aviso leve. Passe `--project <name>` explicitamente para selecionar o projeto correto e silenciar o aviso.
258
+ **Aviso `No --project specified, falling back to <name>`**
259
+ Um aviso suave. Passe `--project <name>` explicitamente para selecionar o projeto correto e silenciar o aviso.
250
260
 
251
- **Problemas de VRAM / "Painterly" (estilo pictórico) / falta de memória**
252
- Consulte `docs/internal/HANDOFF.md` para obter as notas sobre o ajuste do ruído no estilo pictórico. Em resumo: diminua a intensidade do ruído, reduza o tamanho do lote ou altere para um checkpoint menor em seu perfil de fluxo de trabalho.
261
+ **Painterly / VRAM out-of-memory issues**
262
+ See `docs/internal/HANDOFF.md` for the painterly denoise tuning notes. In short: lower the denoise strength, reduce batch size, or switch to a smaller checkpoint in your workflow profile.
253
263
 
254
- **Relatando bugs**
255
- Crie uma solicitação em https://github.com/mcp-tool-shop-org/style-dataset-lab/issues com sua versão do sdlab (`sdlab --version`), versão do Node (`node -v`), o comando completo e a saída de erro estruturada. Um modelo de relatório de bug preenche os campos automaticamente.
264
+ **Reporting bugs**
265
+ File an issue at https://github.com/mcp-tool-shop-org/style-dataset-lab/issues with your sdlab version (`sdlab --version`), Node version (`node -v`), the full command, and the structured error output. A bug-report template prefills the fields.
256
266
 
257
267
  ## Segurança
258
268