@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.
- package/CHANGELOG.md +33 -0
- package/README.es.md +35 -25
- package/README.fr.md +38 -28
- package/README.hi.md +36 -26
- package/README.it.md +37 -27
- package/README.ja.md +40 -30
- package/README.md +15 -5
- package/README.pt-BR.md +35 -25
- package/README.zh.md +33 -23
- package/bin/sdlab.js +51 -4
- package/lib/adapters/ai-toolkit.js +37 -5
- package/lib/adapters/comfyui-runner.js +79 -26
- package/lib/adapters/comfyui-workflows.js +10 -2
- 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/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-build/build.js +146 -93
- package/lib/captions.js +57 -0
- package/lib/card.js +74 -2
- 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 +13 -3
- package/lib/freeze-stamp.js +28 -3
- package/lib/generated-provenance.js +16 -1
- package/lib/implementation-packs.js +95 -17
- package/lib/ingest.js +396 -0
- package/lib/judgment-provenance.js +220 -0
- package/lib/measure.js +422 -0
- package/lib/paths.js +196 -7
- package/lib/reingest-selected.js +98 -16
- package/lib/run-manifest.js +102 -16
- 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/training-manifests.js +114 -21
- package/lib/training-packages.js +147 -15
- package/lib/workflow-profiles.js +24 -3
- package/package.json +3 -2
- 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/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-drift.js +16 -7
- package/scripts/canon-freeze-status.js +14 -6
- package/scripts/canon-freeze.js +27 -11
- package/scripts/canon-unfreeze.js +17 -9
- package/scripts/card.js +2 -2
- package/scripts/compare.js +2 -2
- package/scripts/critique.js +16 -1
- package/scripts/curate.js +2 -2
- package/scripts/doctor.js +181 -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 +48 -5
- 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/workflow-list.js +2 -1
- package/scripts/workflow-show.js +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,39 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## [3.4.0] - 2026-08-04
|
|
8
|
+
|
|
9
|
+
**Dogfood swarm.** A full health pass (bugs/security, then proactive hardening, then user-facing copy) followed by three new commands. Tests **400 → 791**. Every fix carries a test proven to fail against the unfixed code.
|
|
10
|
+
|
|
11
|
+
The through-line: this package had never been exercised outside its own repo checkout, where the workspace root and the package root happen to be the same directory. Most of what follows falls out of that.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`sdlab ingest <dir>`** — bring externally-generated images into a project as bare, uncurated candidate records. There was previously no path in: `reingest generated` requires a trained LoRA's manifest and `reingest selected` requires a selection only the production loop can mint. Records land with `judgment: null`, `canon: null` and `provenance.source: "external"` — it never invents a judgment, a score, or a caption.
|
|
16
|
+
- **`sdlab sheet [<dir>]`** — an HTML contact sheet over any directory of candidates, for visual triage before full-resolution review. Shows record id, curation status and prompt per tile; degrades to filename for images with no record yet. Images are referenced by relative path, so a 99-image sheet is ~110 KB and stays openable.
|
|
17
|
+
- **`sdlab measure <target>`** — deterministic palette and texture measurement attached to records as numbers. Ported from the validated salt-road audit instruments. **Measurement, not verdict**: it never sets `judgment` or `overall_fit`. Requires Python 3.9+ with Pillow/numpy/scipy; without them it fails with a clear structured error rather than degrading silently.
|
|
18
|
+
- **Judgment-provenance reporting** in `sdlab eligibility audit` — distinguishes judgments a person made from judgments a bulk script minted, read-only, without modifying any record.
|
|
19
|
+
- `--resume` on `generate:identity`, `generate:controlnet` and `generate:ipadapter`, including the seed-advances-on-skip discipline that makes a resumed run reproduce what an uninterrupted one would have produced.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- **`sdlab init` wrote user projects into `node_modules/`.** `REPO_ROOT` resolved from the module's own location, so for anyone installing from npm rather than cloning, every project — canon, records, judgments, snapshots, exports — landed inside the installed package, where the next `npm ci` silently destroyed it. Replaced with a workspace resolver (`SDLAB_ROOT` → walk up from cwd for `projects/` → module root if it is the checkout → cwd) that refuses any root inside `node_modules`. A separate package root now serves `templates/` and `runtime/`, which ship in the tarball and are not workspace content.
|
|
24
|
+
- **`--project` accepted a traversing value.** `--project ../../some-sibling-repo` resolved outside the sandbox and was accepted; ~26 scripts then wrote beneath it. `getProjectRoot()` now rejects separators and `..`, and every script routes through it.
|
|
25
|
+
- **`sdlab project doctor` printed a failure and exited 0** on a missing project — and `npm run verify` and the CI smoke step both gate on that exit code.
|
|
26
|
+
- **Subject leakage with an audit that certified it clean.** The split's subject-family fallback split one subject across two families (`_v1` suffix vs `v2` infix, case-sensitively), and the leakage audit re-read the same family map the assignment used, so it could not detect that class at all — while the dataset card printed "Subject leakage: None (verified)". Added an independent stem cross-check; the card now withholds "verified" unless both checks pass and the guessed-family share is immaterial. A split predating the cross-check now says so instead of claiming verification it never received.
|
|
27
|
+
- **`training-package build` produced an empty package and exited 0 on Windows** without Developer Mode: no symlink guard, and a bare `catch { continue; }` in all three adapters dropped image, caption and metadata row together.
|
|
28
|
+
- **`eval-run score` returned `overall_verdict: "pass"` for a missing eval pack** — `[].every()` is vacuously true, so a moved or deleted pack scored zero tasks as a pass.
|
|
29
|
+
- **Pinning parity between the JS and Python runners.** Float formatting diverged (`0.00005` vs `5e-05`), an explicit `null` LoRA weight defaulted differently, and the Python bridge hardcoded `sampler`/`scheduler`/`shift` **inside its own pinning receipt** — asserting values it never read.
|
|
30
|
+
- The freeze gate failed open on a malformed `status` (a capital `F` silently disabled protection). Captions fell back into curation metadata. `checksums.txt` was written and never verified. No `fetch` in the ComfyUI client carried a timeout. `--dry-run` created directories. `run generate` wrote its manifest only at the end, so an interrupted long run left no record at all and did not appear in `run list`.
|
|
31
|
+
- `migrate-records.js` was excluded from the npm tarball while still dispatched and documented — every npm user running `sdlab migrate` got `Cannot find module`. `runtime/` did not ship at all. 30 KB of Python bytecode did.
|
|
32
|
+
- Three scripts that fabricated curation rationales from a filename-prefix regex were deleted.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- Error hints across `doctor`'s ~38 failure sites now carry a concrete next action, and `INPUT_UNKNOWN_PROJECT` names both causes (wrong directory vs missing project) rather than assuming the second.
|
|
37
|
+
- `sdlab critique` no longer presents its automatic `Next:` suggestion as a considered judgment when nothing has been reviewed — every candidate is stamped `usable` by default and nothing changes it, so the ranking was drift-count tiebreaking, not assessment.
|
|
38
|
+
- `sdlab init` scaffolds a per-project `.gitignore`; generated contact sheets and re-ingest staging images are ignored.
|
|
39
|
+
|
|
7
40
|
## [3.3.0] - 2026-07-06
|
|
8
41
|
|
|
9
42
|
**Provenance hardening.** This release closes the three weakest workflow-standards scores (PIN_PER_STEP, EXTERNAL_VERIFIER, UNCERTAINTY_GATED_HUMANS) so shipped, production LoRA work is byte-for-byte reproducible and the verifier/human-gate muscles are in place. No breaking changes — every new field is additive and optional; legacy manifests and records load unchanged.
|
package/README.es.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 @@ Ese último comando es el punto clave. Las salidas seleccionadas vuelven a pasar
|
|
|
60
67
|
|
|
61
68
|
## Creación del canon
|
|
62
69
|
|
|
63
|
-
|
|
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` es direccionable por contenido: su
|
|
86
|
+
`canon build` es direccionable por contenido: su resultado se basa en un `canon_sha` y se almacena en caché, de modo que una versión sin cambios se vuelve a generar instantáneamente. `canon freeze` registra cada estado congelado con respecto a una versión específica y lo agrega a un registro de auditoría `freeze-events.jsonl`: las entradas `frozen` rechazan la regeneración por completo, las entradas `soft-advisory` la rechazan de forma predeterminada (se puede omitir con `--i-know`). `canon drift` recalcula el hash de cada entrada supervisada y marca todo lo que haya cambiado desde la última compilación limpia.
|
|
80
87
|
|
|
81
88
|
Flujo de trabajo completo en el manual: [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/) y [Two-LoRA stacking](handbook/two-lora-stacking/).
|
|
82
89
|
|
|
@@ -90,7 +97,7 @@ Siete artefactos del conjunto de datos y un entorno de trabajo de producción co
|
|
|
90
97
|
| **Split** | Partición de entrenamiento/validación/prueba donde las familias de sujetos nunca cruzan los límites. |
|
|
91
98
|
| **Export package** | Conjunto de datos autónomo: manifiesto, metadatos, imágenes, divisiones, tarjeta del conjunto de datos, sumas de comprobación. |
|
|
92
99
|
| **Eval pack** | Tareas de prueba con conocimiento del canon: cobertura de carriles, desviación prohibida, ancla/oro, continuidad del sujeto. |
|
|
93
|
-
| **Training package** | Diseño listo para
|
|
100
|
+
| **Training package** | Diseño listo para entrenar mediante adaptadores (`diffusers-lora`, `generic-image-caption`). La misma información, diferente formato. |
|
|
94
101
|
| **Eval scorecard** | Aprobación/rechazo por tarea basada en la evaluación de las salidas generadas con respecto a los paquetes de evaluación. |
|
|
95
102
|
| **Implementation pack** | Ejemplos de indicaciones, fallas conocidas, pruebas de continuidad y orientación para volver a introducir datos. |
|
|
96
103
|
|
|
@@ -115,12 +122,12 @@ El resultado práctico: cuando tu LoRA se desvía, puedes preguntar *por qué*.
|
|
|
115
122
|
|
|
116
123
|
## Probado en producción
|
|
117
124
|
|
|
118
|
-
|
|
125
|
+
Este no es un flujo de trabajo de demostración. Dos LoRA de estilo reales se han implementado por completo: el mismo ciclo de canon → curación → entrenamiento → implementación, en extremos opuestos del espectro de la curación.
|
|
119
126
|
|
|
120
|
-
- **[Tallow Fen](handbook/case-study-tallow-fen/)** (diseño de criaturas): un bestiario
|
|
121
|
-
- **[Rustline](handbook/case-study-rustline/)** (diseño conceptual):
|
|
127
|
+
- **[Tallow Fen](handbook/case-study-tallow-fen/)** (diseño de criaturas): un canon de bestiario creado desde cero, con aproximadamente el **34% de aprobación** en 293 registros seleccionados (169 rechazados: la puerta de entrada rechaza con firmeza). Implementado `tallow_fen_style_v3.safetensors` @ 1.5 en `qwen-image`.
|
|
128
|
+
- **[Rustline](handbook/case-study-rustline/)** (diseño conceptual): canon denso y preformado, con aproximadamente el **96% de aprobación** en 180 registros. Implementado `rustline_v3ckpt_1500.safetensors` @ 1.0 en `qwen-image`, reutilizado posteriormente por un segundo proyecto.
|
|
122
129
|
|
|
123
|
-
|
|
130
|
+
El mismo flujo de trabajo, dos perfiles de producción: la puerta de entrada de la curación es real (rechaza con firmeza los temas abiertos) y un canon disciplinado produce una alta tasa de aceptación.
|
|
124
131
|
|
|
125
132
|
## Cinco dominios, reglas reales
|
|
126
133
|
|
|
@@ -162,13 +169,16 @@ projects/my-project/
|
|
|
162
169
|
|
|
163
170
|
Estas no son aspiracionales. Se aplican rigurosamente.
|
|
164
171
|
|
|
165
|
-
- **Las instantáneas son inmutables.** La huella digital de la configuración (SHA-256) demuestra que no se ha
|
|
166
|
-
- **
|
|
167
|
-
- **Los manifiestos son contratos congelados.**
|
|
168
|
-
- **Las ejecuciones fijan su gráfico exacto.** Cada generación registra `comfy_workflow_sha` +
|
|
169
|
-
- **Ningún modelo verifica su propia salida.** Los juicios registran `judged_by_model` y `generator_model`; se
|
|
170
|
-
- **
|
|
171
|
-
- **
|
|
172
|
+
- **Las instantáneas son inmutables.** La huella digital de la configuración (SHA-256) demuestra que no se ha cambiado nada. Los ID se asignan atómicamente, por lo que dos ejecuciones simultáneas no pueden intercalarse en un solo directorio.
|
|
173
|
+
- **Las divisiones evitan fugas y la comprobación que lo confirma es independiente.** Las familias de sujetos (por identidad, linaje o raíz de ID normalizada) nunca cruzan los límites de las particiones, y una segunda comprobación vuelve a derivar la identidad del sujeto desde cero en lugar de volver a leer el mapa que utilizó la propia división. Una tarjeta de conjunto de datos solo afirma "fugas: ninguna (verificado)" cuando ambas comprobaciones se han ejecutado y superado; una división anterior a la segunda comprobación indica exactamente eso.
|
|
174
|
+
- **Los manifiestos son contratos congelados.** Hash de exportación + huella digital de configuración, y `validate` vuelve a calcular el hash de cada archivo que enumera `checksums.txt`, por lo que reemplazar una imagen dentro de una exportación finalizada se detecta, incluso para los manifiestos creados antes de que existiera esa comprobación.
|
|
175
|
+
- **Las ejecuciones fijan su gráfico exacto.** Cada generación registra `comfy_workflow_sha` + hashes del contenido del modelo/LoRA + política de semillas, por lo que una ola puede reproducirse byte por byte. Los ejecutores de JS y Python se mantienen con un hash idéntico mediante una prueba que los inicia a ambos. El hashing del modelo es opcional (`--hash-models`) y nunca se fabrica: un archivo irresoluble registra `sha256: null` con una nota.
|
|
176
|
+
- **Ningún modelo verifica su propia salida.** Los juicios registran `judged_by_model` y `generator_model`; se activa una advertencia si alguna vez son el mismo modelo.
|
|
177
|
+
- **Un juicio indica quién lo realizó.** `eligibility audit` distingue los juicios que escribió una persona de los juicios que generó un script masivo, por lo que una justificación que describe una categoría en lugar de una imagen no puede considerarse como curación.
|
|
178
|
+
- **La medición no es el veredicto.** `sdlab measure` adjunta números a un registro. Nunca establece un juicio, un ajuste o una aprobación, y cuando una medida no está definida para una imagen, registra `null` en lugar de un número plausible.
|
|
179
|
+
- **Los adaptadores no pueden modificar la información.** Diferente diseño, los mismos registros. Sin adiciones, sin eliminaciones, sin reclasificaciones.
|
|
180
|
+
- **Las salidas generadas vuelven a entrar a través de la revisión.** No hay omisión. Curar y vincular como todo lo demás. Las imágenes generadas externamente entran de la misma manera a través de `sdlab ingest`, sin curar.
|
|
181
|
+
- **Los errores son visibles.** Un registro faltante, una imagen que no se puede colocar o un título que no se puede construir detiene una exportación o un paquete de entrenamiento en lugar de reducirlo silenciosamente.
|
|
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
|
## Formatos posteriores
|
|
186
196
|
|
|
187
|
-
`sdlab` es
|
|
197
|
+
`sdlab` es propietario del conjunto de datos. La conversión de formato la gestiona [`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset): TRL, LLaVA, Qwen2-VL, JSONL, Parquet y más. `repo-dataset` renderiza; nunca decide la inclusión.
|
|
188
198
|
|
|
189
199
|
## Instalación
|
|
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`
|
|
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
|
-
Si olvidas `--project`, la CLI recurre al primer proyecto que encuentra
|
|
224
|
+
Si olvidas `--project`, la CLI recurre al primer proyecto que encuentra debajo de `projects/` e imprime una advertencia: pasa `--project` explícitamente para silenciarla.
|
|
215
225
|
|
|
216
226
|
### Reanudando una ejecución interrumpida
|
|
217
227
|
|
|
@@ -237,22 +247,22 @@ Modos de fallo comunes y soluciones:
|
|
|
237
247
|
ComfyUI no se está ejecutando. Inicia ComfyUI (`python main.py --listen 127.0.0.1 --port 8188`) y confirma con `curl http://127.0.0.1:8188/system_stats`. Para apuntar a un host/puerto diferente, establece `COMFY_URL=http://host:port`.
|
|
238
248
|
|
|
239
249
|
**`missing checkpoint` / `LoRA weight not found`**
|
|
240
|
-
El perfil de flujo de trabajo especifica un archivo de modelo que no está en la carpeta `models/checkpoints/` o `models/loras/` de ComfyUI. Abre `projects/<project>/workflows/profiles/<profile>.json`, localiza el campo `checkpoint` o `lora` y
|
|
250
|
+
El nombre de tu perfil de flujo de trabajo especifica un archivo de modelo que no está en la carpeta `models/checkpoints/` o `models/loras/` de ComfyUI. Abre `projects/<project>/workflows/profiles/<profile>.json`, localiza el campo `checkpoint` o `lora` y descarga el peso referenciado o cámbialo por uno que ya tengas. Vuelve a ejecutar `sdlab project doctor --project <project>` para confirmar la corrección.
|
|
241
251
|
|
|
242
252
|
**Errores de `sdlab project doctor`**
|
|
243
253
|
Doctor devuelve códigos de error estructurados. Algunos comunes:
|
|
244
|
-
- `E_PROJECT_NOT_FOUND`: el directorio del proyecto no existe
|
|
254
|
+
- `E_PROJECT_NOT_FOUND`: el directorio del proyecto no existe debajo de `projects/`. Verifica la ortografía.
|
|
245
255
|
- `E_CONFIG_INVALID`: uno de los cinco archivos de configuración JSON falló la validación del esquema. El campo `hint` indica el archivo y el campo incorrectos.
|
|
246
|
-
- `E_RECORD_DRIFT`: la huella digital de la configuración de un registro ya no coincide con su origen. Vuelve a curar o vuelve a vincular según lo que sugiera la
|
|
256
|
+
- `E_RECORD_DRIFT`: la huella digital de la configuración de un registro ya no coincide con su origen. Vuelve a curar o vuelve a vincular según lo que sugiera la indicación.
|
|
247
257
|
|
|
248
258
|
**`No --project specified, falling back to <name>`**
|
|
249
|
-
Una advertencia
|
|
259
|
+
Una advertencia suave. Pasa `--project <name>` explícitamente para seleccionar el proyecto correcto y silenciar la advertencia.
|
|
250
260
|
|
|
251
|
-
**
|
|
252
|
-
|
|
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
|
-
|
|
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
|
## Seguridad
|
|
258
268
|
|
package/README.fr.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 @@ Cette dernière commande est essentielle. Les résultats sélectionnés repassen
|
|
|
60
67
|
|
|
61
68
|
## Création de contenu canonique
|
|
62
69
|
|
|
63
|
-
|
|
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` est
|
|
86
|
+
`canon build` est adressable par contenu : sa sortie est indexée par un `canon_sha` et mise en cache, de sorte qu’une version non modifiée se reconstruit instantanément. `canon freeze` enregistre chaque « gel » par rapport à une version spécifique et l’ajoute à un historique d’audit `freeze-events.jsonl` : les entrées `frozen` refusent purement et simplement la régénération, les entrées `soft-advisory` refusent par défaut (contournement possible avec `--i-know`). `canon drift` recalcule le hachage de chaque entrée suivie et signale tout ce qui a été modifié depuis la dernière version propre.
|
|
80
87
|
|
|
81
88
|
Flux de travail complet dans le manuel : [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/) et [Empilement Two-LoRA](handbook/two-lora-stacking/).
|
|
82
89
|
|
|
@@ -90,7 +97,7 @@ Sept artefacts d’ensemble de données et un environnement de travail de produc
|
|
|
90
97
|
| **Split** | Partitionnement entraînement/validation/test où les familles de sujets ne se croisent jamais. |
|
|
91
98
|
| **Export package** | Ensemble de données autonome : manifeste, métadonnées, images, partitions, fiche d’informations sur l’ensemble de données, sommes de contrôle. |
|
|
92
99
|
| **Eval pack** | Tâches de test tenant compte du canon : couverture des voies, dérive interdite, ancrage/or, continuité des sujets. |
|
|
93
|
-
| **Training package** |
|
|
100
|
+
| **Training package** | Mise en page prête pour l’entraînement via des adaptateurs (`diffusers-lora`, `generic-image-caption`). Même vérité, format différent. |
|
|
94
101
|
| **Eval scorecard** | Résultat de réussite/échec par tâche obtenu en évaluant les résultats générés par rapport aux ensembles d’évaluation. |
|
|
95
102
|
| **Implementation pack** | Exemples d’invites, erreurs connues, tests de continuité et instructions pour la réintégration. |
|
|
96
103
|
|
|
@@ -117,8 +124,8 @@ Le résultat pratique : lorsque votre LoRA dérive, vous pouvez demander *pourqu
|
|
|
117
124
|
|
|
118
125
|
Il ne s’agit pas d’un pipeline de démonstration. Deux LoRA de style réels ont été mis en œuvre de bout en bout grâce à celui-ci, en utilisant la même boucle canon → sélection → entraînement → diffusion, aux extrémités opposées du spectre de la sélection.
|
|
119
126
|
|
|
120
|
-
- **[Tallow Fen](handbook/case-study-tallow-fen/)** (conception de créatures)
|
|
121
|
-
- **[Rustline](handbook/case-study-rustline/)** (conception de concepts)
|
|
127
|
+
- **[Tallow Fen](handbook/case-study-tallow-fen/)** (conception de créatures) — un bestiaire entièrement nouveau, avec environ **34 % d’approbation** sur 293 enregistrements sélectionnés (169 rejetés — le système de validation est strict). Publié `tallow_fen_style_v3.safetensors` @ 1.5 sur `qwen-image`.
|
|
128
|
+
- **[Rustline](handbook/case-study-rustline/)** (conception de concepts) — un ensemble dense et préformaté, avec environ **96 % d’approbation** sur 180 enregistrements. Publié `rustline_v3ckpt_1500.safetensors` @ 1.0 sur `qwen-image`, réutilisé par un deuxième projet.
|
|
122
129
|
|
|
123
130
|
Même pipeline, deux profils de production : la porte de sélection est réelle (elle rejette fermement les sujets ouverts) et une canonisation disciplinée donne des taux d’acceptation élevés.
|
|
124
131
|
|
|
@@ -162,13 +169,16 @@ projects/my-project/
|
|
|
162
169
|
|
|
163
170
|
Ce ne sont pas des objectifs à atteindre. Elles sont appliquées.
|
|
164
171
|
|
|
165
|
-
- **Les instantanés sont immuables.** L’empreinte de configuration (SHA-256) prouve qu’
|
|
166
|
-
- **Les divisions empêchent les fuites.** Les familles
|
|
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
|
|
170
|
-
- **
|
|
171
|
-
- **
|
|
172
|
+
- **Les instantanés sont immuables.** L’empreinte de configuration (SHA-256) prouve qu’aucun changement n’a été apporté. Les identifiants sont attribués de manière atomique, de sorte que deux exécutions simultanées ne peuvent pas se mélanger dans un seul répertoire.
|
|
173
|
+
- **Les divisions empêchent les fuites — et la vérification qui le confirme est indépendante.** Les familles d’éléments (par identité, lignée ou racine d’identifiant normalisée) ne traversent jamais les limites des partitions, et une deuxième vérification redétermine l’identité de l’élément à partir de zéro plutôt que de relire la carte utilisée par la division elle-même. Une carte de jeu de données n’indique « fuite : aucune (vérifiée) » que lorsque les deux vérifications ont été exécutées et réussies ; une division antérieure à la deuxième vérification indique exactement cela.
|
|
174
|
+
- **Les manifestes sont des contrats figés.** Hachage d’exportation + empreinte de configuration, et `validate` recalcule le hachage de chaque fichier répertorié par `checksums.txt` — ainsi, le remplacement d’une image dans une exportation terminée est détecté, y compris pour les manifestes créés avant l’existence de cette vérification.
|
|
175
|
+
- **Les exécutions définissent leur graphique exact.** Chaque génération enregistre `comfy_workflow_sha` + hachages du contenu du modèle/LoRA + politique de graines, de sorte qu’une série peut être rejouée octet par octet. Les exécutants JS et Python sont maintenus à un hachage identique au niveau de l’octet par un test qui les lance tous les deux. Le hachage des modèles est facultatif (`--hash-models`) et n’est jamais fabriqué — un fichier non résolvable enregistre `sha256: null` avec une note.
|
|
176
|
+
- **Aucun modèle ne vérifie sa propre sortie.** Les évaluations enregistrent `judged_by_model` et `generator_model` ; un avertissement s’affiche si elles sont identiques.
|
|
177
|
+
- **Une évaluation indique qui l’a créée.** `eligibility audit` distingue les évaluations écrites par une personne des évaluations générées par un script en masse, de sorte qu’une justification décrivant une catégorie plutôt qu’une image ne peut pas être considérée comme une curation.
|
|
178
|
+
- **La mesure n’est pas un verdict.** `sdlab measure` associe des nombres à un enregistrement. Elle ne définit jamais une évaluation, une adéquation ou une approbation — et lorsqu’une mesure est indéfinie pour une image, elle enregistre `null` plutôt qu’un nombre plausible.
|
|
179
|
+
- **Les adaptateurs ne peuvent pas modifier la vérité.** Mise en page différente, mêmes enregistrements. Pas d’ajouts, pas de suppressions, pas de reclassification.
|
|
180
|
+
- **Les sorties générées réintègrent le processus via l’examen.** Aucun contournement possible. Curater et lier comme tout le reste. Les images générées en externe entrent de la même manière via `sdlab ingest`, sans curation préalable.
|
|
181
|
+
- **Les échecs sont visibles.** Un enregistrement manquant, une image impossible à placer ou une légende qui ne peut pas être créée interrompent une exportation ou un ensemble d’entraînement plutôt que de le réduire silencieusement.
|
|
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
|
## Formats en aval
|
|
186
196
|
|
|
187
|
-
`sdlab`
|
|
197
|
+
`sdlab` possède l’ensemble de données. La conversion de format est gérée par [`repo-dataset`](https://github.com/mcp-tool-shop-org/repo-dataset) : TRL, LLaVA, Qwen2-VL, JSONL, Parquet et plus encore. `repo-dataset` effectue le rendu ; il ne décide jamais de l’inclusion.
|
|
188
198
|
|
|
189
199
|
## Installation
|
|
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`
|
|
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
|
-
Si vous oubliez `--project`,
|
|
224
|
+
Si vous oubliez `--project`, l’interface en ligne de commande revient au premier projet qu’elle trouve sous `projects/` et affiche un avertissement — passez `--project` explicitement pour le supprimer.
|
|
215
225
|
|
|
216
226
|
### Reprise d’une exécution interrompue
|
|
217
227
|
|
|
@@ -233,26 +243,26 @@ Les deux commandes fonctionnent car chaque emplacement écrit son entrée de man
|
|
|
233
243
|
|
|
234
244
|
Modes d’échec courants et solutions :
|
|
235
245
|
|
|
236
|
-
**`ECONNREFUSED 127.0.0.1:8188`
|
|
237
|
-
ComfyUI
|
|
246
|
+
**`ECONNREFUSED 127.0.0.1:8188` sur n’importe quel `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
|
|
247
|
+
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
248
|
|
|
239
249
|
**`missing checkpoint` / `LoRA weight not found`**
|
|
240
|
-
Le
|
|
250
|
+
Le nom de votre profil de flux de travail fait référence à un fichier de modèle qui ne se trouve pas dans le dossier `models/checkpoints/` ou `models/loras/` de ComfyUI. Ouvrez `projects/<project>/workflows/profiles/<profile>.json`, localisez le champ `checkpoint` ou `lora` et téléchargez soit le poids référencé, soit remplacez-le par celui que vous avez déjà. Relancez `sdlab project doctor --project <project>` pour confirmer la correction.
|
|
241
251
|
|
|
242
|
-
**Erreurs
|
|
252
|
+
**Erreurs `sdlab project doctor`**
|
|
243
253
|
Doctor renvoie des codes d’erreur structurés. Les plus courants :
|
|
244
|
-
- `E_PROJECT_NOT_FOUND` — le répertoire du projet n’existe pas
|
|
245
|
-
- `E_CONFIG_INVALID` — l’un des cinq fichiers de configuration JSON a échoué à la validation du schéma. Le champ `hint` indique le fichier et le champ
|
|
246
|
-
- `E_RECORD_DRIFT` — l’empreinte de configuration d’un enregistrement ne correspond plus à sa source.
|
|
254
|
+
- `E_PROJECT_NOT_FOUND` — le répertoire du projet n’existe pas sous `projects/`. Vérifiez l’orthographe.
|
|
255
|
+
- `E_CONFIG_INVALID` — l’un des cinq fichiers de configuration JSON a échoué à la validation du schéma. Le champ `hint` indique le fichier et le champ défectueux.
|
|
256
|
+
- `E_RECORD_DRIFT` — l’empreinte de configuration d’un enregistrement ne correspond plus à sa source. Recurez ou reliez comme le suggère l’indication.
|
|
247
257
|
|
|
248
|
-
|
|
249
|
-
Un
|
|
258
|
+
**Avertissement `No --project specified, falling back to <name>`**
|
|
259
|
+
Un avertissement modéré. Passez `--project <name>` explicitement pour sélectionner le bon projet et supprimer l’avertissement.
|
|
250
260
|
|
|
251
|
-
**
|
|
252
|
-
|
|
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
|
-
|
|
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
|
## Sécurité
|
|
258
268
|
|
package/README.hi.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
|
-
|
|
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` सामग्री-आधारित
|
|
86
|
+
`canon build` सामग्री-आधारित है — इसका आउटपुट एक `canon_sha` द्वारा कुंजीबद्ध होता है और कैश किया जाता है, इसलिए अपरिवर्तित कैनन तुरंत पुनर्निर्मित हो जाता है। `canon freeze` प्रत्येक फ़्रीज़ को एक विशिष्ट बिल्ड के विरुद्ध देखता है और एक `freeze-events.jsonl` ऑडिट ट्रेल में जोड़ता है: `frozen` प्रविष्टियाँ सीधे पुनरुत्पादन से इनकार करती हैं, `soft-advisory` प्रविष्टियाँ डिफ़ॉल्ट रूप से इनकार करती हैं (`--i-know` के साथ बाईपास करें)। `canon drift` प्रत्येक देखी गई प्रविष्टि के हैश की पुनः गणना करता है और उन सभी चीज़ों को चिह्नित करता है जो पिछली स्वच्छ बिल्ड के बाद से बदली हैं।
|
|
80
87
|
|
|
81
88
|
हैंडबुक में संपूर्ण वर्कफ़्लो: [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/), और [Two-LoRA stacking](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** |
|
|
100
|
+
| **Training package** | एडाप्टर के माध्यम से ट्रेनर-तैयार लेआउट (`diffusers-lora`, `generic-image-caption`)। समान सत्य, अलग प्रारूप। |
|
|
94
101
|
| **Eval scorecard** | उत्पन्न आउटपुट का मूल्यांकन पैक के विरुद्ध स्कोर करने से प्रति-कार्य पास/फेल। |
|
|
95
102
|
| **Implementation pack** | संकेत उदाहरण, ज्ञात विफलताएँ, निरंतरता परीक्षण और पुन: समावेश मार्गदर्शन। |
|
|
96
103
|
|
|
@@ -117,8 +124,8 @@ sdlab canon drift --project my-project
|
|
|
117
124
|
|
|
118
125
|
यह कोई डेमो पाइपलाइन नहीं है। दो वास्तविक शैली-LoRA इसके माध्यम से अंत-से-अंत तक भेजे गए हैं — समान मानक → क्यूरेट → प्रशिक्षित करें → भेजें चक्र, क्यूरेशन स्पेक्ट्रम के विपरीत छोरों पर।
|
|
119
126
|
|
|
120
|
-
- **[
|
|
121
|
-
- **[
|
|
127
|
+
- **[टैलो फेन](handbook/case-study-tallow-fen/)** (जीव-डिजाइन) — एक स्क्रैच से बनाया गया सर्वश्रेष्ठ कैनन, 293 क्यूरेटेड रिकॉर्ड में लगभग **34% स्वीकृति** (169 अस्वीकृत — गेट कड़ी अस्वीकृति करता है)। `tallow_fen_style_v3.safetensors` को `qwen-image` पर 1.5 पर भेजा गया।
|
|
128
|
+
- **[रस्टलाइन](handbook/case-study-rustline/)** (अवधारणा-डिजाइन) — सघन, पूर्व-निर्मित कैनन, 180 रिकॉर्ड में लगभग **96% स्वीकृति**। `rustline_v3ckpt_1500.safetensors` को `qwen-image` पर 1.0 पर भेजा गया, बाद में एक दूसरे प्रोजेक्ट द्वारा पुन: उपयोग किया गया।
|
|
122
129
|
|
|
123
130
|
समान पाइपलाइन, दो उत्पादन प्रोफ़ाइल: क्यूरेशन गेट वास्तविक है (यह खुले विषयों पर कठिन रूप से अस्वीकार करता है), और अनुशासित मानक उच्च स्वीकृति देता है।
|
|
124
131
|
|
|
@@ -162,13 +169,16 @@ projects/my-project/
|
|
|
162
169
|
|
|
163
170
|
ये आकांक्षात्मक नहीं हैं। इन्हें लागू किया जाता है।
|
|
164
171
|
|
|
165
|
-
- **स्नैपशॉट अपरिवर्तनीय हैं।** कॉन्फ़िगरेशन फ़िंगरप्रिंट (SHA-256) साबित करता है कि कुछ भी नहीं
|
|
166
|
-
- **विभाजन रिसाव को रोकते
|
|
167
|
-
- **मैनिफेस्ट जमे हुए अनुबंध हैं।** निर्यात हैश + कॉन्फ़िगरेशन
|
|
168
|
-
- **रन अपने सटीक ग्राफ़ को पिन करते हैं।** प्रत्येक पीढ़ी `comfy_workflow_sha` + मॉडल/LoRA सामग्री हैश + बीज नीति रिकॉर्ड करती है, इसलिए एक लहर बाइट-दर-बाइट
|
|
169
|
-
- **कोई भी मॉडल अपने स्वयं के आउटपुट
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
+
- **स्नैपशॉट अपरिवर्तनीय हैं।** कॉन्फ़िगरेशन फ़िंगरप्रिंट (SHA-256) साबित करता है कि कुछ भी नहीं बदला है। आईडी को परमाणु रूप से दावा किया जाता है, इसलिए दो समवर्ती रन एक ही निर्देशिका में आपस में मिल नहीं सकते।
|
|
173
|
+
- **विभाजन रिसाव को रोकते हैं — और यह बताने वाला चेक स्वतंत्र है।** विषय परिवार (पहचान, वंश या सामान्यीकृत आईडी स्टेम द्वारा) कभी भी विभाजन सीमाओं को पार नहीं करते हैं, और एक दूसरा चेक खरोंच से विषय पहचान को फिर से प्राप्त करता है, बजाय इसके कि विभाजन स्वयं उपयोग किए गए मानचित्र को फिर से पढ़े। एक डेटासेट कार्ड केवल तभी "रिसाव: कोई नहीं (सत्यापित)" का दावा करता है जब दोनों जांचें चलें और पास हों; विभाजन जो दूसरी जांच से पहले था, वह सटीक रूप से ऐसा ही बताता है।
|
|
174
|
+
- **मैनिफेस्ट जमे हुए अनुबंध हैं।** निर्यात हैश + कॉन्फ़िगरेशन फ़िंगरप्रिंट, और `validate` प्रत्येक फ़ाइल के हैश को फिर से करता है जिसे `checksums.txt` सूचीबद्ध करता है — इसलिए एक पूर्ण निर्यात के अंदर एक छवि को बदलने पर उसे पकड़ा जाता है, जिसमें उन मैनिफेस्ट भी शामिल हैं जो उस जांच से पहले बनाए गए थे।
|
|
175
|
+
- **रन अपने सटीक ग्राफ़ को पिन करते हैं।** प्रत्येक पीढ़ी `comfy_workflow_sha` + मॉडल/LoRA सामग्री हैश + बीज नीति रिकॉर्ड करती है, इसलिए एक लहर बाइट-दर-बाइट प्ले करने योग्य होती है। JS और Python रनर दोनों को एक परीक्षण द्वारा एक ही बाइट-समान हैश पर रखा जाता है जो दोनों को उत्पन्न करता है। मॉडल हैशिंग वैकल्पिक है (`--hash-models`) और कभी भी मनगढ़ंत नहीं होता — एक अनसुलझी फ़ाइल `sha256: null` के साथ एक नोट रिकॉर्ड करती है।
|
|
176
|
+
- **कोई भी मॉडल अपने स्वयं के आउटपुट की जांच नहीं करता है।** निर्णय `judged_by_model` और `generator_model` रिकॉर्ड करते हैं; यदि वे कभी भी समान मॉडल होते हैं तो एक चेतावनी जारी होती है।
|
|
177
|
+
- **एक निर्णय बताता है कि इसे किसने बनाया।** `eligibility audit` उन निर्णयों को अलग करता है जिन्हें किसी व्यक्ति ने लिखा था, उन निर्णयों से जो एक बल्क स्क्रिप्ट द्वारा बनाए गए थे, इसलिए एक तर्क जो एक छवि के बजाय एक श्रेणी का वर्णन करता है, वह क्यूरेशन के रूप में पारित नहीं हो सकता है।
|
|
178
|
+
- **माप निर्णय नहीं है।** `sdlab measure` एक रिकॉर्ड से संख्याएँ जोड़ता है। यह कभी भी किसी निर्णय, फिट या स्वीकृति को सेट नहीं करता — और जहां किसी छवि के लिए कोई माप अपरिभाषित होता है, तो यह `null` रिकॉर्ड करता है बजाय कि एक प्रशंसनीय संख्या।
|
|
179
|
+
- **एडाप्टर सत्य को नहीं बदल सकते।** अलग लेआउट, समान रिकॉर्ड। कोई अतिरिक्त नहीं, कोई हटाने नहीं, कोई पुनर्वर्गीकरण नहीं।
|
|
180
|
+
- **उत्पन्न आउटपुट समीक्षा के माध्यम से फिर से प्रवेश करते हैं।** कोई बाईपास नहीं। अन्य सभी चीजों की तरह क्यूरेट करें और बांधें। बाहरी रूप से उत्पन्न छवियां `sdlab ingest` के माध्यम से उसी तरह से प्रवेश करती हैं, बिना क्यूरेट किए।
|
|
181
|
+
- **विफलताएँ दिखाई देती हैं।** एक गुम रिकॉर्ड, एक ऐसी छवि जिसे रखा नहीं जा सकता है, या एक कैप्शन जिसे बनाया नहीं जा सकता है, वह निर्यात या प्रशिक्षण पैकेज को चुपचाप कम करने के बजाय रोक देता है।
|
|
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`
|
|
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/` के तहत पाए जाने वाले पहले प्रोजेक्ट पर वापस आ जाता है और एक चेतावनी प्रिंट करता है
|
|
224
|
+
यदि आप `--project` को भूल जाते हैं, तो CLI `projects/` के तहत पाए जाने वाले पहले प्रोजेक्ट पर वापस आ जाता है और एक चेतावनी प्रिंट करता है — इसे शांत करने के लिए `--project` को स्पष्ट रूप से पास करें।
|
|
215
225
|
|
|
216
226
|
### रुके हुए रन को फिर से शुरू करना
|
|
217
227
|
|
|
@@ -234,25 +244,25 @@ sdlab batch generate --resume batch_2026-04-22_001 --project my-project
|
|
|
234
244
|
सामान्य विफलता मोड और समाधान:
|
|
235
245
|
|
|
236
246
|
**किसी भी `sdlab generate` / `sdlab run generate` / `sdlab batch generate` पर `ECONNREFUSED 127.0.0.1:8188`**
|
|
237
|
-
ComfyUI नहीं चल रहा है। ComfyUI
|
|
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` फ़ील्ड का पता लगाएं, और या तो संदर्भित भार डाउनलोड करें या इसे किसी ऐसे
|
|
250
|
+
आपके वर्कफ़्लो प्रोफ़ाइल में एक मॉडल फ़ाइल का नाम है जो ComfyUI के `models/checkpoints/` या `models/loras/` फ़ोल्डर में नहीं है। `projects/<project>/workflows/profiles/<profile>.json` खोलें, `checkpoint` या `lora` फ़ील्ड का पता लगाएं, और या तो संदर्भित भार डाउनलोड करें या इसे किसी ऐसे से बदल दें जो आपके पास पहले से है। फिक्स की पुष्टि करने के लिए `sdlab project doctor --project <project>` को फिर से चलाएं।
|
|
241
251
|
|
|
242
252
|
**`sdlab project doctor` त्रुटियाँ**
|
|
243
253
|
डॉक्टर संरचित त्रुटि कोड लौटाता है। सामान्य:
|
|
244
|
-
- `E_PROJECT_NOT_FOUND`
|
|
245
|
-
- `E_CONFIG_INVALID`
|
|
246
|
-
- `E_RECORD_DRIFT`
|
|
254
|
+
- `E_PROJECT_NOT_FOUND` — प्रोजेक्ट निर्देशिका `projects/` के तहत मौजूद नहीं है। वर्तनी जांचें।
|
|
255
|
+
- `E_CONFIG_INVALID` — पांच JSON कॉन्फ़िगरेशन फ़ाइलों में से एक ने स्कीमा सत्यापन विफल कर दिया। `hint` फ़ील्ड खराब फ़ाइल और फ़ील्ड का नाम देता है।
|
|
256
|
+
- `E_RECORD_DRIFT` — किसी रिकॉर्ड के कॉन्फ़िगरेशन फ़िंगरप्रिंट अब इसके स्रोत से मेल नहीं खाते हैं। संकेत के अनुसार पुन: क्यूरेट करें या पुन: बांधें।
|
|
247
257
|
|
|
248
|
-
|
|
249
|
-
एक नरम चेतावनी। सही
|
|
258
|
+
**`No --project specified, falling back to <name>`**
|
|
259
|
+
एक नरम चेतावनी। सही प्रोजेक्ट का चयन करने और चेतावनी को शांत करने के लिए `--project <name>` को स्पष्ट रूप से पास करें।
|
|
250
260
|
|
|
251
|
-
|
|
252
|
-
|
|
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
|
|
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
|
|