@mcptoolshop/style-dataset-lab 3.2.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 +58 -1
- package/README.es.md +40 -19
- package/README.fr.md +74 -53
- package/README.hi.md +67 -46
- package/README.it.md +42 -21
- package/README.ja.md +44 -23
- package/README.md +25 -4
- package/README.pt-BR.md +42 -21
- package/README.zh.md +66 -45
- package/bin/sdlab.js +51 -4
- package/lib/adapters/ai-toolkit.js +37 -5
- package/lib/adapters/comfyui-runner.js +114 -27
- 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 +82 -3
- package/lib/critique-render.js +45 -0
- 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 +69 -16
- 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 +394 -0
- package/lib/run-summary.js +12 -6
- package/lib/runtime-runs.js +45 -4
- package/lib/snapshot.js +121 -16
- package/lib/split.js +364 -48
- package/lib/training-manifests.js +114 -21
- package/lib/training-packages.js +147 -15
- package/lib/verifier.js +67 -0
- 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 +48 -8
- package/scripts/curate.js +23 -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 +72 -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 +334 -13
- package/scripts/reingest.js +2 -2
- package/scripts/run-generate.js +3 -0
- 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,7 +4,64 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
-
## [3.
|
|
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
|
+
|
|
40
|
+
## [3.3.0] - 2026-07-06
|
|
41
|
+
|
|
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.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **PIN_PER_STEP — run-manifest pinning contract** (`lib/run-manifest.js`, the single source of truth): every generation writer now records a `pinning` block so a wave is byte-for-byte replayable —
|
|
47
|
+
- **`comfy_workflow_sha`** — SHA-256 of the exact ComfyUI graph submitted (per-item seed + prompt normalized out, so one hash pins the whole wave's pipeline skeleton). The JS runners (`generate.js`, `comfyui-runner.js`) and the Python bridge (`scripts/qwen_generate.py`) produce a **byte-identical** hash for the same graph.
|
|
48
|
+
- **Model + LoRA content identity** — `unet`/`clip`/`vae`/`checkpoint` and each LoRA upgraded from a bare filename to `{name, size_bytes, sha256}`. `sha256` is opt-in via `--hash-models` (best-effort, resolved under the ComfyUI models dir, cached by `(name, size, mtime)` so multi-GB checkpoints aren't re-hashed every wave); `size_bytes` is always recorded when the file resolves. Unresolvable files record `sha256: null` with a `hash_note` — a hash is never fabricated.
|
|
49
|
+
- **`seed_policy`** — records the intent behind seed selection (`base+increment`, `explicit-per-item`, `fixed`, `random`), not just the values.
|
|
50
|
+
- New `--hash-models` flag on `sdlab generate` and `sdlab run generate` (and `scripts/qwen_generate.py`).
|
|
51
|
+
- **EXTERNAL_VERIFIER — judge/generator provenance** (`lib/verifier.js`): curate and critique records now carry **`judged_by_model`** (`human` / `rule-based:sdlab-critique-v1`) and **`generator_model`** (derived as `<base>:<model>`, e.g. `qwen-image:qwen_image_fp8_e4m3fn`), and a **WARN fires when the two are the same model** — the self-verification failure mode. (Today's rule-based critique engine is a different artifact class from the generator, so the warning does not fire; the fields + warning install the muscle for when an LLM critique mode enters the loop.)
|
|
52
|
+
- **UNCERTAINTY_GATED_HUMANS —**
|
|
53
|
+
- **`sdlab critique --triage`** surfaces only the candidates that need a human — `off-model` OR ≥ `--drift-threshold` (default 3) drift issues — so attention gates on uncertainty rather than on every item. The full `critique.json` is unchanged; triage is a view over it.
|
|
54
|
+
- **Contrastive freeze-gate refusals** — the freeze bypass prompt now leads with the default action and the system's reasoning (`Default: REFUSE — "<id>" is <status> frozen by <by> on <date>, reason: "<why>". Override with --i-know --reason ONLY if your change does not touch the watched fields [...]`), and `curate <id> borderline` prints a contrastive HOLD advisory.
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- **Manifest `SCHEMA_VERSION` 2.2.0 → 2.3.0** — the ComfyUI run manifest now stamps `schema_version` and carries the `pinning` block. Readers still `checkManifestVersion()`-warn (never throw) on mismatch, so pre-3.3.0 manifests load fine.
|
|
59
|
+
|
|
60
|
+
### Tests & coverage
|
|
61
|
+
|
|
62
|
+
- **400 tests, 0 failing** (368 → 400: +32 for pinning, verifier fields, triage, and contrastive freeze wording). Coverage: statements **63.53%** / branches **75.77%** / functions **69.04%**.
|
|
63
|
+
|
|
64
|
+
|
|
8
65
|
|
|
9
66
|
The **canon authoring** release. A new `sdlab canon *` namespace turns a project's canon entity store into the projections training actually consumes, and wraps a witness-backed freeze spine around entries that must not drift — plus first-class Flux and Qwen-Image training paths.
|
|
10
67
|
|
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
|
|
|
@@ -113,6 +120,15 @@ Style Dataset Lab hace que la conexión sea explícita. Tu constitución define
|
|
|
113
120
|
|
|
114
121
|
El resultado práctico: cuando tu LoRA se desvía, puedes preguntar *por qué*. Cuando tu próxima ronda de entrenamiento necesita mejores datos, sabes exactamente qué registros son casi correctos y cuál es la única regla que no cumplieron. Cuando un nuevo miembro del equipo pregunta cuál es el lenguaje visual del proyecto, la respuesta no es un panel de Figma, sino una constitución consultable con 1182 ejemplos calificados.
|
|
115
122
|
|
|
123
|
+
## Probado en producción
|
|
124
|
+
|
|
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.
|
|
126
|
+
|
|
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.
|
|
129
|
+
|
|
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.
|
|
131
|
+
|
|
116
132
|
## Cinco dominios, reglas reales
|
|
117
133
|
|
|
118
134
|
No son plantillas genéricas. Cada dominio se entrega con reglas de constitución de grado de producción, definiciones de carriles, rúbricas de puntuación y vocabulario de grupo.
|
|
@@ -153,11 +169,16 @@ projects/my-project/
|
|
|
153
169
|
|
|
154
170
|
Estas no son aspiracionales. Se aplican rigurosamente.
|
|
155
171
|
|
|
156
|
-
- **Las instantáneas son inmutables.** La huella digital de la configuración (SHA-256) demuestra que
|
|
157
|
-
- **Las divisiones evitan fugas.** Las familias de sujetos (por identidad, linaje o
|
|
158
|
-
- **Los manifiestos son contratos congelados.** Hash de exportación + huella digital de
|
|
159
|
-
- **
|
|
160
|
-
- **
|
|
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.
|
|
161
182
|
|
|
162
183
|
## Star Freight
|
|
163
184
|
|
|
@@ -173,7 +194,7 @@ sdlab split build --project star-freight # zero subject leakage
|
|
|
173
194
|
|
|
174
195
|
## Formatos posteriores
|
|
175
196
|
|
|
176
|
-
`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.
|
|
177
198
|
|
|
178
199
|
## Instalación
|
|
179
200
|
|
|
@@ -198,9 +219,9 @@ sdlab project doctor --project test
|
|
|
198
219
|
sdlab snapshot create --dry-run --project star-freight
|
|
199
220
|
```
|
|
200
221
|
|
|
201
|
-
`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.
|
|
202
223
|
|
|
203
|
-
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.
|
|
204
225
|
|
|
205
226
|
### Reanudando una ejecución interrumpida
|
|
206
227
|
|
|
@@ -226,22 +247,22 @@ Modos de fallo comunes y soluciones:
|
|
|
226
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`.
|
|
227
248
|
|
|
228
249
|
**`missing checkpoint` / `LoRA weight not found`**
|
|
229
|
-
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.
|
|
230
251
|
|
|
231
252
|
**Errores de `sdlab project doctor`**
|
|
232
253
|
Doctor devuelve códigos de error estructurados. Algunos comunes:
|
|
233
|
-
- `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.
|
|
234
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.
|
|
235
|
-
- `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.
|
|
236
257
|
|
|
237
258
|
**`No --project specified, falling back to <name>`**
|
|
238
|
-
Una advertencia
|
|
259
|
+
Una advertencia suave. Pasa `--project <name>` explícitamente para seleccionar el proyecto correcto y silenciar la advertencia.
|
|
239
260
|
|
|
240
|
-
**
|
|
241
|
-
|
|
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.
|
|
242
263
|
|
|
243
|
-
**
|
|
244
|
-
|
|
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.
|
|
245
266
|
|
|
246
267
|
## Seguridad
|
|
247
268
|
|
package/README.fr.md
CHANGED
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
|
-
Écrivez vos règles visuelles. Générez des œuvres d’art. Évaluez chaque image en fonction de ces règles. Diffusez les résultats sous forme de données d’entraînement versionnées et auditables, puis mettez
|
|
16
|
+
Écrivez vos règles visuelles. Générez des œuvres d’art. Évaluez chaque image en fonction de ces règles. Diffusez les résultats sous forme de données d’entraînement versionnées et auditables, puis mettez en œuvre les modèles entraînés dans des flux de travail de production réels et renvoyez les meilleurs résultats dans votre corpus.
|
|
17
17
|
|
|
18
|
-
Style Dataset Lab relie ce que vous avez écrit
|
|
18
|
+
Style Dataset Lab relie ce que vous avez écrit sur votre style artistique à l’ensemble de données à partir duquel vous effectuez réellement l’entraînement, puis boucle le processus jusqu’à la production. Vous définissez une constitution : règles de silhouette, contraintes de palette, langage des matériaux, tout ce qui compte pour votre projet. Le pipeline génère des candidats, les évalue en fonction de ces règles et regroupe les œuvres approuvées dans des ensembles de données reproductibles où chaque enregistrement explique pourquoi il a été inclus.
|
|
19
19
|
|
|
20
|
-
Ensuite, l’environnement de travail de production prend le relais : compilez des
|
|
20
|
+
Ensuite, l’environnement de travail de production prend le relais : compilez des instructions de génération à partir des éléments clés du projet, exécutez-les via ComfyUI, évaluez les résultats, produisez en série des feuilles d’expression et des planches d’ambiance, sélectionnez les meilleurs résultats et réintégrez-les en tant que nouveaux candidats. La boucle se ferme : produire, sélectionner, examiner, améliorer.
|
|
21
21
|
|
|
22
22
|
## Le pipeline
|
|
23
23
|
|
|
@@ -27,8 +27,15 @@ sdlab init my-project --domain character-design
|
|
|
27
27
|
|
|
28
28
|
# Generate candidates via ComfyUI, then review them
|
|
29
29
|
sdlab generate inputs/prompts/wave1.json --project my-project
|
|
30
|
+
sdlab sheet outputs/candidates --project my-project # HTML contact sheet to triage
|
|
30
31
|
sdlab curate <id> approved "Strong silhouette, correct faction palette"
|
|
31
32
|
|
|
33
|
+
# Already have images? Bring them in without generating anything
|
|
34
|
+
sdlab ingest ~/renders/wave1 --project my-project
|
|
35
|
+
|
|
36
|
+
# Measure what the pixels actually are — palette and texture, as numbers
|
|
37
|
+
sdlab measure outputs/candidates --project my-project
|
|
38
|
+
|
|
32
39
|
# Bind approved work to constitution rules
|
|
33
40
|
# (`sdlab bind` is a shorter alias for `canon-bind`)
|
|
34
41
|
sdlab canon-bind --project my-project
|
|
@@ -56,11 +63,11 @@ sdlab select --run run_2026-04-16_001 --approve 001.png,003.png
|
|
|
56
63
|
sdlab reingest selected --selection selection_2026-04-16_001
|
|
57
64
|
```
|
|
58
65
|
|
|
59
|
-
Cette dernière commande est essentielle. Les
|
|
66
|
+
Cette dernière commande est essentielle. Les résultats sélectionnés repassent par le même processus d’évaluation que tous les autres éléments. Le corpus s’enrichit et les règles sont respectées.
|
|
60
67
|
|
|
61
|
-
## Création
|
|
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,58 +83,67 @@ 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 adressable par contenu : sa sortie est indexée par un `canon_sha` et mise en cache, de sorte qu’une
|
|
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
|
-
Flux de travail complet dans le manuel : [Canon build](handbook/canon-build/), [Canon freeze](handbook/canon-freeze/) et [Two-LoRA
|
|
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
|
|
|
83
|
-
## Ce
|
|
90
|
+
## Ce qu’il produit
|
|
84
91
|
|
|
85
|
-
Sept artefacts
|
|
92
|
+
Sept artefacts d’ensemble de données et un environnement de travail de production complet. Chaque artefact est lié à ses prédécesseurs, ce qui vous permet de retracer tout enregistrement d’entraînement jusqu’à la règle qui l’a approuvé.
|
|
86
93
|
|
|
87
|
-
| Artefact | Ce que c’est |
|
|
94
|
+
| Artefact. | Ce que c’est. |
|
|
88
95
|
|----------|-----------|
|
|
89
96
|
| **Snapshot** | Sélection des enregistrements figés avec empreinte de configuration. Chaque inclusion a une raison explicite. |
|
|
90
|
-
| **Split** | Partitionnement entraînement/validation/test où les familles de sujets ne
|
|
91
|
-
| **Export package** |
|
|
97
|
+
| **Split** | Partitionnement entraînement/validation/test où les familles de sujets ne se croisent jamais. |
|
|
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** |
|
|
94
|
-
| **Eval scorecard** | Résultat de réussite/échec par tâche
|
|
95
|
-
| **Implementation pack** | Exemples d’invites,
|
|
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. |
|
|
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. |
|
|
102
|
+
| **Implementation pack** | Exemples d’invites, erreurs connues, tests de continuité et instructions pour la réintégration. |
|
|
96
103
|
|
|
97
104
|
L’environnement de travail de production ajoute :
|
|
98
105
|
|
|
99
|
-
| Surface | Ce que cela fait |
|
|
106
|
+
| Surface. | Ce que cela fait. |
|
|
100
107
|
|---------|-------------|
|
|
101
|
-
| **Compiled brief** | Instruction de génération déterministe à partir du profil de flux de travail + des
|
|
102
|
-
| **Run** | Artefact d’exécution figé :
|
|
108
|
+
| **Compiled brief** | Instruction de génération déterministe à partir du profil de flux de travail + des éléments clés du projet. |
|
|
109
|
+
| **Run** | Artefact d’exécution figé : instruction + graines + résultats ComfyUI + manifeste. |
|
|
103
110
|
| **Critique** | Évaluation structurée multidimensionnelle des résultats de l’exécution par rapport au canon. |
|
|
104
111
|
| **Batch** | Production coordonnée multi-slots (feuilles d’expression, planches d’ambiance, ensembles de silhouettes). |
|
|
105
|
-
| **Selection** | Artefact de décision créative : quels
|
|
106
|
-
| **Re-ingest** | Les
|
|
112
|
+
| **Selection** | Artefact de décision créative : quels résultats ont été choisis, pourquoi et d’où ils proviennent. |
|
|
113
|
+
| **Re-ingest** | Les résultats sélectionnés sont renvoyés en tant qu’enregistrements candidats avec une provenance complète de la génération. |
|
|
107
114
|
|
|
108
115
|
## Pourquoi cela existe
|
|
109
116
|
|
|
110
117
|
Les données d’entraînement constituent l’artefact le plus important dans tout pipeline d’IA visuelle. Mais la plupart des données d’entraînement ne sont qu’un dossier d’images sans historique, sans suivi de l’évaluation et sans lien avec les règles de style qu’elles étaient censées suivre.
|
|
111
118
|
|
|
112
|
-
Style Dataset Lab rend le lien explicite. Votre constitution définit les règles. Votre barème définit les dimensions d’évaluation. Vos enregistrements de sélection consignent l’évaluation. Votre liaison canonique prouve le lien. Et votre
|
|
119
|
+
Style Dataset Lab rend le lien explicite. Votre constitution définit les règles. Votre barème définit les dimensions d’évaluation. Vos enregistrements de sélection consignent l’évaluation. Votre liaison canonique prouve le lien. Et votre ensemble de données conserve tout cela sous une forme structurée, interrogeable et reproductible.
|
|
120
|
+
|
|
121
|
+
Le résultat pratique : lorsque votre LoRA dérive, vous pouvez demander *pourquoi*. Lorsque votre prochain cycle d’entraînement a besoin de meilleures données, vous savez exactement quels enregistrements sont presque corrects et quelle règle ils ont violée. Lorsqu’un nouveau membre de l’équipe demande quel est le langage visuel du projet, la réponse n’est pas un tableau Figma, mais une constitution consultable avec 1 182 exemples notés.
|
|
122
|
+
|
|
123
|
+
## Prouvé en production
|
|
124
|
+
|
|
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.
|
|
126
|
+
|
|
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.
|
|
113
129
|
|
|
114
|
-
|
|
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.
|
|
115
131
|
|
|
116
132
|
## Cinq domaines, règles réelles
|
|
117
133
|
|
|
118
|
-
Pas de modèles
|
|
134
|
+
Pas de modèles génériques. Chaque domaine est livré avec des règles de constitution de qualité professionnelle, des définitions de voies, des barèmes d’évaluation et un vocabulaire de groupe.
|
|
119
135
|
|
|
120
136
|
| Domaine | Voies | Ce qui est évalué |
|
|
121
137
|
|--------|-------|-----------------|
|
|
122
|
-
| **game-art** | personnage, environnement, accessoire, interface utilisateur, vaisseau, intérieur, équipement | Silhouette à l’échelle du jeu,
|
|
123
|
-
| **character-design** | portrait, corps entier, rotation, feuille d’
|
|
124
|
-
| **creature-design** | concept, orthographique, étude
|
|
138
|
+
| **game-art** | personnage, environnement, accessoire, interface utilisateur, vaisseau, intérieur, équipement | Silhouette à l’échelle du jeu, identification de la faction, usure et vieillissement |
|
|
139
|
+
| **character-design** | portrait, corps entier, rotation, feuille d’expressions, pose d’action | Proportions, cohérence du costume, personnalité, clarté des gestes |
|
|
140
|
+
| **creature-design** | concept, orthographique, étude de détails, action, référence d’échelle, habitat | Anatomie, logique évolutive, distinction de la silhouette |
|
|
125
141
|
| **architecture** | extérieur, intérieur, paysage urbain, détail structurel, ruine, paysage | Structure, cohérence des matériaux, perspective, cohérence de l’époque |
|
|
126
142
|
| **vehicle-mech** | extérieur, cockpit, composant, schéma, feuille de silhouette, variante de dommage | Logique mécanique, langage du design, points d’accès, récit des dommages |
|
|
127
143
|
|
|
128
144
|
## Structure du projet
|
|
129
145
|
|
|
130
|
-
Chaque projet est autonome. Cinq fichiers de configuration JSON définissent les règles ; tout le reste
|
|
146
|
+
Chaque projet est autonome. Cinq fichiers de configuration JSON définissent les règles ; tout le reste est constitué de données.
|
|
131
147
|
|
|
132
148
|
```
|
|
133
149
|
projects/my-project/
|
|
@@ -151,17 +167,22 @@ projects/my-project/
|
|
|
151
167
|
|
|
152
168
|
## Propriétés de confiance
|
|
153
169
|
|
|
154
|
-
|
|
170
|
+
Ce ne sont pas des objectifs à atteindre. Elles sont appliquées.
|
|
155
171
|
|
|
156
|
-
- **Les instantanés sont immuables.** L’empreinte de configuration (SHA-256) prouve qu’aucun changement n’a été apporté.
|
|
157
|
-
- **Les
|
|
158
|
-
- **Les manifestes sont des contrats figés.** Hachage d’exportation + empreinte de configuration
|
|
159
|
-
- **Les
|
|
160
|
-
- **
|
|
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.
|
|
161
182
|
|
|
162
183
|
## Star Freight
|
|
163
184
|
|
|
164
|
-
Le dépôt
|
|
185
|
+
Le dépôt comprend un exemple complet et fonctionnel : 1 182 enregistrements, 5 factions, 7 voies, 24 règles de constitution, 892 actifs approuvés, 2 profils d’entraînement. Un canon visuel RPG de science-fiction réaliste, entièrement organisé.
|
|
165
186
|
|
|
166
187
|
```bash
|
|
167
188
|
git clone https://github.com/mcp-tool-shop-org/style-dataset-lab
|
|
@@ -173,7 +194,7 @@ sdlab split build --project star-freight # zero subject leakage
|
|
|
173
194
|
|
|
174
195
|
## Formats en aval
|
|
175
196
|
|
|
176
|
-
`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.
|
|
177
198
|
|
|
178
199
|
## Installation
|
|
179
200
|
|
|
@@ -185,7 +206,7 @@ Nécessite Node.js 20+ et [ComfyUI](https://github.com/comfyanonymous/ComfyUI) s
|
|
|
185
206
|
|
|
186
207
|
### Essayez-le sans ComfyUI
|
|
187
208
|
|
|
188
|
-
Vous pouvez explorer toute la surface non liée à la génération (inspection, organisation, instantané,
|
|
209
|
+
Vous pouvez explorer toute la surface non liée à la génération (inspection, organisation, instantané, division, exportation) en utilisant le projet Star Freight inclus sans installer ComfyUI ni télécharger des poids SDXL.
|
|
189
210
|
|
|
190
211
|
```bash
|
|
191
212
|
# Scaffold a fresh project (no ComfyUI needed)
|
|
@@ -198,9 +219,9 @@ sdlab project doctor --project test
|
|
|
198
219
|
sdlab snapshot create --dry-run --project star-freight
|
|
199
220
|
```
|
|
200
221
|
|
|
201
|
-
`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.
|
|
202
223
|
|
|
203
|
-
Si vous oubliez `--project`, l’interface
|
|
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.
|
|
204
225
|
|
|
205
226
|
### Reprise d’une exécution interrompue
|
|
206
227
|
|
|
@@ -216,36 +237,36 @@ sdlab generate inputs/prompts/wave1.json --project my-project --resume
|
|
|
216
237
|
sdlab batch generate --resume batch_2026-04-22_001 --project my-project
|
|
217
238
|
```
|
|
218
239
|
|
|
219
|
-
Les deux commandes fonctionnent car chaque emplacement écrit son entrée de manifeste de manière atomique lorsqu’il
|
|
240
|
+
Les deux commandes fonctionnent car chaque emplacement écrit son entrée de manifeste de manière atomique lorsqu’il a terminé — un plantage en cours d’exécution ne corrompt jamais l’état partiel.
|
|
220
241
|
|
|
221
242
|
## Dépannage
|
|
222
243
|
|
|
223
244
|
Modes d’échec courants et solutions :
|
|
224
245
|
|
|
225
|
-
**`ECONNREFUSED 127.0.0.1:8188`
|
|
226
|
-
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`.
|
|
227
248
|
|
|
228
249
|
**`missing checkpoint` / `LoRA weight not found`**
|
|
229
|
-
|
|
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.
|
|
230
251
|
|
|
231
|
-
**Erreurs
|
|
252
|
+
**Erreurs `sdlab project doctor`**
|
|
232
253
|
Doctor renvoie des codes d’erreur structurés. Les plus courants :
|
|
233
|
-
- `E_PROJECT_NOT_FOUND` — le répertoire du projet n’existe pas
|
|
254
|
+
- `E_PROJECT_NOT_FOUND` — le répertoire du projet n’existe pas sous `projects/`. Vérifiez l’orthographe.
|
|
234
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.
|
|
235
|
-
- `E_RECORD_DRIFT` — l’empreinte de configuration d’un enregistrement ne correspond plus à sa source.
|
|
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.
|
|
236
257
|
|
|
237
|
-
|
|
238
|
-
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.
|
|
239
260
|
|
|
240
|
-
**
|
|
241
|
-
|
|
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.
|
|
242
263
|
|
|
243
|
-
**
|
|
244
|
-
|
|
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.
|
|
245
266
|
|
|
246
267
|
## Sécurité
|
|
247
268
|
|
|
248
|
-
Uniquement local. Pas de télémétrie, pas d’analyses, pas de
|
|
269
|
+
Uniquement local. Pas de télémétrie, pas d’analyses, pas de demandes externes. Les images restent sur votre GPU et votre système de fichiers.
|
|
249
270
|
|
|
250
271
|
## Licence
|
|
251
272
|
|