@mcptoolshop/style-dataset-lab 3.1.0 → 3.3.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 +61 -0
- package/README.es.md +96 -63
- package/README.fr.md +97 -64
- package/README.hi.md +108 -77
- package/README.it.md +97 -64
- package/README.ja.md +105 -72
- package/README.md +33 -0
- package/README.pt-BR.md +94 -61
- package/README.zh.md +98 -65
- package/bin/sdlab.js +71 -0
- package/lib/adapters/ai-toolkit.js +209 -0
- package/lib/adapters/comfyui-runner.js +36 -2
- package/lib/adapters/comfyui-workflows.js +133 -2
- package/lib/adapters/diffusers-lora.js +46 -66
- package/lib/adapters/generic-image-caption.js +22 -50
- package/lib/canon-build/build.js +450 -0
- package/lib/canon-build/emitters/base.js +122 -0
- package/lib/canon-build/emitters/character.js +167 -0
- package/lib/canon-build/emitters/deity.js +165 -0
- package/lib/canon-build/emitters/faction.js +161 -0
- package/lib/canon-build/emitters/index.js +38 -0
- package/lib/canon-build/emitters/location.js +153 -0
- package/lib/canon-build/emitters/monster.js +131 -0
- package/lib/canon-build/emitters/relic.js +142 -0
- package/lib/canon-build/emitters/ship.js +154 -0
- package/lib/canon-build/emitters/species.js +165 -0
- package/lib/canon-build/frontmatter.js +76 -0
- package/lib/canon-build/lane-resolve.js +64 -0
- package/lib/canon-build/load-config.js +117 -0
- package/lib/canon-build/load-entry.js +62 -0
- package/lib/canon-build/load-schema.js +46 -0
- package/lib/captions.js +197 -0
- package/lib/config.js +19 -0
- package/lib/critique-engine.js +46 -1
- package/lib/critique-render.js +45 -0
- package/lib/freeze-events.js +109 -0
- package/lib/freeze-gate.js +208 -0
- package/lib/freeze-stamp.js +161 -0
- package/lib/rows.js +228 -0
- package/lib/run-manifest.js +308 -0
- package/lib/snapshot.js +7 -1
- package/lib/training-adapters.js +5 -0
- package/lib/training-packages.js +24 -18
- package/lib/training-profiles.js +33 -0
- package/lib/verifier.js +67 -0
- package/package.json +12 -3
- package/scripts/_batch_cut.py +71 -0
- package/scripts/_seam_cutout.py +74 -0
- package/scripts/canon-build.js +88 -0
- package/scripts/canon-drift.js +193 -0
- package/scripts/canon-freeze-status.js +85 -0
- package/scripts/canon-freeze.js +211 -0
- package/scripts/canon-unfreeze.js +137 -0
- package/scripts/critique.js +32 -7
- package/scripts/curate.js +33 -0
- package/scripts/generate-controlnet.js +12 -0
- package/scripts/generate-identity.js +20 -4
- package/scripts/generate-ipadapter.js +11 -0
- package/scripts/generate.js +262 -102
- package/scripts/qwen_generate.py +327 -0
- package/scripts/run-generate.js +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,67 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## Unreleased
|
|
6
|
+
|
|
7
|
+
## [3.3.0] - 2026-07-06
|
|
8
|
+
|
|
9
|
+
**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.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **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 —
|
|
14
|
+
- **`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.
|
|
15
|
+
- **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.
|
|
16
|
+
- **`seed_policy`** — records the intent behind seed selection (`base+increment`, `explicit-per-item`, `fixed`, `random`), not just the values.
|
|
17
|
+
- New `--hash-models` flag on `sdlab generate` and `sdlab run generate` (and `scripts/qwen_generate.py`).
|
|
18
|
+
- **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.)
|
|
19
|
+
- **UNCERTAINTY_GATED_HUMANS —**
|
|
20
|
+
- **`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.
|
|
21
|
+
- **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.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **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.
|
|
26
|
+
|
|
27
|
+
### Tests & coverage
|
|
28
|
+
|
|
29
|
+
- **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%**.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
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.
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
|
|
37
|
+
- **Canon authoring namespace (`sdlab canon *`)** — the headline of this release:
|
|
38
|
+
- **`sdlab canon build`** (#16) — builds three canonical projections from a project's canon entity store: `dataset.jsonl` (for training adapters), `prompts/<id>.j2` (Jinja2 templates for ComfyUI invocation), and `context/<id>.md` (narrative blocks for Role OS dispatch). Output keyed by `<canon_sha>` with a content-addressable cache under `canon-build/.cache/`. Flags: `--full`, `--no-cache`, `--dry-run`, `--only <ids>`, `--json`, `--quiet`.
|
|
39
|
+
- **`sdlab canon freeze` / `unfreeze` / `freeze-status`** (#17) — witness-chain freeze tooling. `freeze` stamps a freeze block on an entry (witnessed against a canon-build output via `locked_at_build`), writing both the entry frontmatter and an append-only `canon-build/freeze-events.jsonl`. Statuses: `frozen` (regen refused; unfreeze ceremony required) and `soft-advisory` (refused by default, bypassable with `--i-know`). `--reason` is required on freeze/unfreeze — the audit record depends on it. `freeze-status` is a read-only glance at an entry's state.
|
|
40
|
+
- **`sdlab canon drift`** (#19) — for every frozen / on-canon-change entry, recomputes the watch-field hash and compares against the hash stamped in the latest canon-build manifest; reports drifted entries and overrides since a given build.
|
|
41
|
+
- **Canon schema system** (#18) — Star Freight Grounded canon shipped as worked example data (28 entities across 5 entry schemas), demonstrating the entity format `canon build` consumes.
|
|
42
|
+
- **`flux-natural-language` caption strategy** (#11) — natural-language captions for Flux.1-dev LoRA training, alongside the existing SDXL trigger-word strategy.
|
|
43
|
+
- **Two-LoRA stack training contract** (#15) — threads the `is_style_lora` boolean through profiles and adapters (world/style LoRAs → `true`, per-character subject LoRAs → `false`), driving trainer regularization for the two-LoRA stacking pattern.
|
|
44
|
+
- **Flux training targets** — Flux-target training profiles (#12) and Flux-target ComfyUI workflow profiles (#13) for Star Freight, plus the **`ai-toolkit` adapter** for Flux LoRA training (#14): emits `dataset/<partition>/<record_id>.{png,txt}` + `metadata/<partition>.jsonl` + an `ai-toolkit-config.yaml` that Ostris [ai-toolkit](https://github.com/ostris/ai-toolkit) consumes directly. Flux-only — rejects non-Flux profiles with `ADAPTER_TARGET_FAMILY_MISMATCH`; emits `is_style` from the profile's `is_style_lora`. Registered in `ADAPTER_REGISTRY` beside `generic-image-caption` and `diffusers-lora`.
|
|
45
|
+
- **Qwen-Image native generation** (#24) — native non-anime Qwen-Image generation path with a `gpu_model` override.
|
|
46
|
+
- **Qwen DiT LoRA chain** (#25) — DiT LoRA chaining in both Qwen runners, with tallow-fen style-LoRA dataset wiring.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- **Caption prompt bleed** (#9) — routed captions through the shared research-backed builder so prompt fragments no longer bleed across records.
|
|
51
|
+
- **Freeze witness-chain drift** (#19) — the drift CLI reads `.watch_hash` from the rich freeze stamp, and `freeze-status` surfaces resolved `watch_fields`.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- Training adapter registry now exposes three adapters — `generic-image-caption`, `diffusers-lora`, `ai-toolkit`; the handbook reference and README document the `ai-toolkit` Flux-only precondition.
|
|
56
|
+
- `projects/`: rustline and tallow-fen production style datasets added as worked examples (repo-clone content; not shipped in the npm package).
|
|
57
|
+
|
|
58
|
+
### Dependencies
|
|
59
|
+
|
|
60
|
+
- **`yaml@^2.8.3`** added as a runtime dependency for the ai-toolkit YAML config (#14), kept current in the range (#23). CI: `actions/checkout` 6→7 (#30), `codecov/codecov-action` 5→7 (#31).
|
|
61
|
+
|
|
62
|
+
### Tests & coverage
|
|
63
|
+
|
|
64
|
+
- **368 tests, 0 failing.** Coverage: statements **60.36%** / branches **75.5%** / functions **68.35%**.
|
|
65
|
+
|
|
5
66
|
## [3.1.0] - 2026-04-22
|
|
6
67
|
|
|
7
68
|
### Added — `--resume` for `generate` and `batch generate`
|
package/README.es.md
CHANGED
|
@@ -13,13 +13,13 @@
|
|
|
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
|
-
|
|
16
|
+
Escribe tus reglas visuales. Genera arte. Evalúa cada imagen según esas reglas. Entrega los resultados como datos de entrenamiento auditables y versionados, y luego utiliza los modelos entrenados en flujos de trabajo de producción reales, e introduce las mejores salidas nuevamente en tu corpus.
|
|
17
17
|
|
|
18
|
-
Style Dataset Lab conecta lo que
|
|
18
|
+
Style Dataset Lab conecta lo que has definido sobre tu estilo artístico con el conjunto de datos del cual realmente estás entrenando, y luego cierra el ciclo a lo largo de todo el proceso de producción. Defines una constitución: reglas de silueta, restricciones de paleta, lenguaje de materiales, o cualquier cosa que sea importante para tu proyecto. El flujo de trabajo genera candidatos, los evalúa según esas reglas y empaqueta el trabajo aprobado en conjuntos de datos reproducibles donde cada registro explica por qué se incluyó.
|
|
19
19
|
|
|
20
|
-
Luego, el entorno de trabajo de producción toma el control:
|
|
20
|
+
Luego, el entorno de trabajo de producción toma el control: compila resúmenes de generación a partir de la información del proyecto, ejecútalos a través de ComfyUI, evalúa las salidas, produce en lote hojas de expresión y paneles de entorno, selecciona los mejores resultados y vuelve a introducirlos como nuevos candidatos. El ciclo se cierra: producir, seleccionar, revisar, mejorar.
|
|
21
21
|
|
|
22
|
-
## El
|
|
22
|
+
## El flujo de trabajo
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
# Write your canon. Scaffold the project.
|
|
@@ -56,56 +56,87 @@ sdlab select --run run_2026-04-16_001 --approve 001.png,003.png
|
|
|
56
56
|
sdlab reingest selected --selection selection_2026-04-16_001
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
Ese último comando es el punto clave. Las salidas seleccionadas vuelven a pasar por el mismo proceso de revisión que todo lo demás. El corpus crece y las reglas se mantienen.
|
|
60
60
|
|
|
61
|
-
##
|
|
61
|
+
## Creación del canon
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
Antes de que se ejecute el flujo de trabajo del conjunto de datos, el espacio de nombres `sdlab canon *` convierte el almacén de entidades del canon de tu proyecto en los tres proyecciones que realmente utiliza el entrenamiento y la producción, y bloquea las entradas que no deben modificarse.
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
```bash
|
|
66
|
+
# Build three projections from the canon entity store:
|
|
67
|
+
# dataset.jsonl → training adapters
|
|
68
|
+
# prompts/*.j2 → ComfyUI workflow invocation
|
|
69
|
+
# context/*.md → Role OS narrative dispatch
|
|
70
|
+
sdlab canon build --project my-project
|
|
71
|
+
|
|
72
|
+
# Freeze an entry so regeneration can't silently change it
|
|
73
|
+
sdlab canon freeze kael_maren --project my-project --reason "prologue portrait locked"
|
|
74
|
+
|
|
75
|
+
# Report drift on frozen entries since the last clean build
|
|
76
|
+
sdlab canon drift --project my-project
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`canon build` es direccionable por contenido: su salida se identifica mediante un `canon_sha` y se almacena en caché, de modo que una reconstrucción del canon sin cambios se realiza instantáneamente. `canon freeze` registra cada congelación frente a una compilación específica y la agrega a un registro de auditoría `freeze-events.jsonl`: las entradas `frozen` rechazan explícitamente la regeneración, las entradas `soft-advisory` la rechazan por defecto (se puede omitir con `--i-know`). `canon drift` vuelve a calcular el hash de cada entrada observada y marca cualquier cosa que haya cambiado desde la última compilación limpia.
|
|
80
|
+
|
|
81
|
+
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
|
+
|
|
83
|
+
## Qué produce
|
|
84
|
+
|
|
85
|
+
Siete artefactos del conjunto de datos y un entorno de trabajo de producción completo. Cada artefacto se vincula a sus predecesores para que puedas rastrear cualquier registro de entrenamiento hasta la regla que lo aprobó.
|
|
86
|
+
|
|
87
|
+
| Artefacto | Qué es |
|
|
66
88
|
|----------|-----------|
|
|
67
|
-
| **Snapshot** | Selección de registros
|
|
68
|
-
| **Split** | Partición de entrenamiento/validación/prueba donde las familias de sujetos nunca cruzan límites. |
|
|
69
|
-
| **Export package** | Conjunto de datos
|
|
70
|
-
| **Eval pack** | Tareas de prueba
|
|
71
|
-
| **Training package** | Diseño listo para el entrenamiento a través de adaptadores (`diffusers-lora`, `generic-image-caption`). La misma información,
|
|
72
|
-
| **Eval scorecard** |
|
|
73
|
-
| **Implementation pack** | Ejemplos de indicaciones,
|
|
89
|
+
| **Snapshot** | Selección de registros congelados con huella digital de configuración. Cada inclusión tiene una razón explícita. |
|
|
90
|
+
| **Split** | Partición de entrenamiento/validación/prueba donde las familias de sujetos nunca cruzan los límites. |
|
|
91
|
+
| **Export package** | Conjunto de datos autónomo: manifiesto, metadatos, imágenes, divisiones, tarjeta del conjunto de datos, sumas de comprobación. |
|
|
92
|
+
| **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 el entrenamiento a través de adaptadores (`diffusers-lora`, `generic-image-caption`). La misma información, diferente formato. |
|
|
94
|
+
| **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
|
+
| **Implementation pack** | Ejemplos de indicaciones, fallas conocidas, pruebas de continuidad y orientación para volver a introducir datos. |
|
|
74
96
|
|
|
75
97
|
El entorno de trabajo de producción agrega:
|
|
76
98
|
|
|
77
99
|
| Superficie | Qué hace |
|
|
78
100
|
|---------|-------------|
|
|
79
|
-
| **Compiled brief** |
|
|
80
|
-
| **Run** | Artefacto de ejecución congelado:
|
|
81
|
-
| **Critique** | Evaluación estructurada
|
|
82
|
-
| **Batch** | Producción coordinada
|
|
83
|
-
| **Selection** | Artefacto de decisión creativa: qué
|
|
84
|
-
| **Re-ingest** |
|
|
101
|
+
| **Compiled brief** | Instrucción de generación determinista a partir del perfil del flujo de trabajo + la información del proyecto. |
|
|
102
|
+
| **Run** | Artefacto de ejecución congelado: resumen + semillas + salidas de ComfyUI + manifiesto. |
|
|
103
|
+
| **Critique** | Evaluación estructurada multidimensional de las salidas de ejecución con respecto al canon. |
|
|
104
|
+
| **Batch** | Producción coordinada en múltiples ranuras (hojas de expresión, paneles de entorno, paquetes de silueta). |
|
|
105
|
+
| **Selection** | Artefacto de decisión creativa: qué salidas se eligieron, por qué y de dónde provienen. |
|
|
106
|
+
| **Re-ingest** | Las salidas seleccionadas se devuelven como registros candidatos con el origen completo de la generación. |
|
|
107
|
+
|
|
108
|
+
## Por qué existe esto
|
|
109
|
+
|
|
110
|
+
Los datos de entrenamiento son el artefacto más importante en cualquier flujo de trabajo de IA visual. Pero la mayoría de los datos de entrenamiento son una carpeta de imágenes sin historial, sin rastro de evaluación y sin conexión con las reglas de estilo que se suponía que debían seguir.
|
|
111
|
+
|
|
112
|
+
Style Dataset Lab hace que la conexión sea explícita. Tu constitución define las reglas. Tu rúbrica define las dimensiones de puntuación. Tus registros de curación registran el juicio. El enlace del canon prueba la conexión. Y tu conjunto de datos lleva todo eso adelante como información estructurada, consultable y reproducible.
|
|
113
|
+
|
|
114
|
+
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.
|
|
85
115
|
|
|
86
|
-
##
|
|
116
|
+
## Probado en producción
|
|
87
117
|
|
|
88
|
-
|
|
118
|
+
Esto no es una cadena de procesamiento de prueba. Dos modelos LoRA reales con diferentes estilos se han procesado por completo a través de ella: el mismo ciclo de canon → curación → entrenamiento → lanzamiento, pero en extremos opuestos del espectro de la curación.
|
|
89
119
|
|
|
90
|
-
|
|
120
|
+
- **[Tallow Fen](handbook/case-study-tallow-fen/)** (diseño de criaturas): un bestiario completamente nuevo, con una **aprobación de aproximadamente el 34 %** en 293 registros seleccionados (169 rechazados; la fase de selección es estricta). Se lanzó `tallow_fen_style_v3.safetensors` con un valor de 1,5 en `qwen-image`.
|
|
121
|
+
- **[Rustline](handbook/case-study-rustline/)** (diseño conceptual): un canon denso y predefinido, con una **aprobación de aproximadamente el 96 %** en 180 registros. Se lanzó `rustline_v3ckpt_1500.safetensors` con un valor de 1,0 en `qwen-image`, y se reutilizó posteriormente en un segundo proyecto.
|
|
91
122
|
|
|
92
|
-
|
|
123
|
+
La misma cadena de procesamiento, dos perfiles de producción: la fase de selección es real (rechaza estrictamente los temas abiertos) y un canon bien definido produce una alta tasa de aceptación.
|
|
93
124
|
|
|
94
125
|
## Cinco dominios, reglas reales
|
|
95
126
|
|
|
96
|
-
No son plantillas genéricas. Cada dominio
|
|
127
|
+
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.
|
|
97
128
|
|
|
98
|
-
| Dominio
|
|
129
|
+
| Dominio | Carriles | Qué se evalúa |
|
|
99
130
|
|--------|-------|-----------------|
|
|
100
|
-
| **game-art** | personaje, entorno, accesorio, interfaz de usuario, nave, interior, equipo
|
|
101
|
-
| **character-design** | retrato, cuerpo
|
|
102
|
-
| **creature-design** | concepto, ortográfico, estudio de detalles, acción, referencia de escala, hábitat
|
|
103
|
-
| **architecture** | exterior, interior, paisaje urbano, detalle estructural, ruina, paisaje
|
|
104
|
-
| **vehicle-mech** | exterior, cabina, componente, esquema, hoja de silueta, variante de daño
|
|
131
|
+
| **game-art** | personaje, entorno, accesorio, interfaz de usuario, nave, interior, equipo | Silueta a escala de juego, identificación de facción, desgaste y envejecimiento |
|
|
132
|
+
| **character-design** | retrato, cuerpo completo, rotación, hoja de expresión, pose de acción | Proporciones, lógica del disfraz, personalidad, claridad del gesto |
|
|
133
|
+
| **creature-design** | concepto, ortográfico, estudio de detalles, acción, referencia de escala, hábitat | Anatomía, lógica evolutiva, distinción de la silueta |
|
|
134
|
+
| **architecture** | exterior, interior, paisaje urbano, detalle estructural, ruina, paisaje | Estructura, consistencia del material, perspectiva, coherencia de la época |
|
|
135
|
+
| **vehicle-mech** | exterior, cabina, componente, esquema, hoja de silueta, variante de daño | Lógica mecánica, lenguaje de diseño, puntos de acceso, narrativa de daños |
|
|
105
136
|
|
|
106
137
|
## Estructura del proyecto
|
|
107
138
|
|
|
108
|
-
Cada proyecto es independiente. Cinco archivos de configuración JSON definen las reglas; todo lo demás
|
|
139
|
+
Cada proyecto es independiente. Cinco archivos de configuración JSON definen las reglas; todo lo demás son datos.
|
|
109
140
|
|
|
110
141
|
```
|
|
111
142
|
projects/my-project/
|
|
@@ -129,17 +160,19 @@ projects/my-project/
|
|
|
129
160
|
|
|
130
161
|
## Propiedades de confianza
|
|
131
162
|
|
|
132
|
-
Estas no son
|
|
163
|
+
Estas no son aspiracionales. Se aplican rigurosamente.
|
|
133
164
|
|
|
134
|
-
- **Las instantáneas son inmutables.** La huella digital de la configuración (SHA-256) demuestra que
|
|
135
|
-
- **
|
|
136
|
-
- **Los manifiestos son contratos
|
|
137
|
-
- **
|
|
138
|
-
- **
|
|
165
|
+
- **Las instantáneas son inmutables.** La huella digital de la configuración (SHA-256) demuestra que no se ha modificado nada.
|
|
166
|
+
- **La división evita fugas.** Las familias de temas (por identidad, linaje o sufijo de ID) nunca cruzan los límites de las particiones.
|
|
167
|
+
- **Los manifiestos son contratos congelados.** Exporta el hash + la huella digital de la configuración. Si algo cambia, crea uno nuevo.
|
|
168
|
+
- **Las ejecuciones fijan su gráfico exacto.** Cada generación registra `comfy_workflow_sha` + los hashes del contenido del modelo/LoRA + la política de semillas, por lo que una serie se puede reproducir byte a byte, siendo idéntica en los ejecutores JS y Python. El hash del modelo es opcional (`--hash-models`) y nunca se falsifica.
|
|
169
|
+
- **Ningún modelo verifica su propia salida.** Los juicios registran `judged_by_model` y `generator_model`; se muestra una advertencia si alguna vez son el mismo modelo.
|
|
170
|
+
- **Los adaptadores no pueden alterar la verdad.** Diseño diferente, mismos registros. No hay adiciones, ni eliminaciones, ni reclasificaciones.
|
|
171
|
+
- **Las salidas generadas vuelven a entrar en la fase de revisión.** No hay atajos. Se curan y se vinculan como cualquier otra cosa.
|
|
139
172
|
|
|
140
173
|
## Star Freight
|
|
141
174
|
|
|
142
|
-
El repositorio incluye un ejemplo
|
|
175
|
+
El repositorio incluye un ejemplo completo y funcional: 1.182 registros, 5 facciones, 7 rutas, 24 reglas de constitución, 892 activos aprobados, 2 perfiles de entrenamiento. Un canon visual de ciencia ficción con toques ásperos, totalmente curado.
|
|
143
176
|
|
|
144
177
|
```bash
|
|
145
178
|
git clone https://github.com/mcp-tool-shop-org/style-dataset-lab
|
|
@@ -149,9 +182,9 @@ sdlab snapshot create --project star-freight # 839 eligible records
|
|
|
149
182
|
sdlab split build --project star-freight # zero subject leakage
|
|
150
183
|
```
|
|
151
184
|
|
|
152
|
-
## Formatos
|
|
185
|
+
## Formatos posteriores
|
|
153
186
|
|
|
154
|
-
`sdlab` es el propietario del conjunto de datos. La conversión de
|
|
187
|
+
`sdlab` es el 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 qué incluir.
|
|
155
188
|
|
|
156
189
|
## Instalación
|
|
157
190
|
|
|
@@ -161,9 +194,9 @@ npm install -g @mcptoolshop/style-dataset-lab
|
|
|
161
194
|
|
|
162
195
|
Requiere Node.js 20+ y [ComfyUI](https://github.com/comfyanonymous/ComfyUI) en localhost:8188 para la generación.
|
|
163
196
|
|
|
164
|
-
###
|
|
197
|
+
### Pruébalo sin ComfyUI
|
|
165
198
|
|
|
166
|
-
|
|
199
|
+
Puedes explorar toda la funcionalidad que no implica la generación (inspección, curación, instantánea, división, exportación) utilizando el proyecto Star Freight incluido sin instalar ComfyUI ni descargar ningún peso de SDXL.
|
|
167
200
|
|
|
168
201
|
```bash
|
|
169
202
|
# Scaffold a fresh project (no ComfyUI needed)
|
|
@@ -176,13 +209,13 @@ sdlab project doctor --project test
|
|
|
176
209
|
sdlab snapshot create --dry-run --project star-freight
|
|
177
210
|
```
|
|
178
211
|
|
|
179
|
-
`sdlab project doctor` valida cada configuración del proyecto (constitución,
|
|
212
|
+
`sdlab project doctor` valida cada configuración del proyecto (constitución, rutas, rúbrica, terminología) e informa sobre la elegibilidad sin tocar la GPU. Cualquier comando que modifique el estado generado acepta `--dry-run` para previsualizar el efecto primero.
|
|
180
213
|
|
|
181
|
-
Si
|
|
214
|
+
Si olvidas `--project`, la CLI recurre al primer proyecto que encuentra en `projects/` e imprime una advertencia; pasa `--project` explícitamente para silenciarla.
|
|
182
215
|
|
|
183
|
-
###
|
|
216
|
+
### Reanudando una ejecución interrumpida
|
|
184
217
|
|
|
185
|
-
Las
|
|
218
|
+
Las ejecuciones de generación largas se pueden reanudar sin rehacer el trabajo completado:
|
|
186
219
|
|
|
187
220
|
```bash
|
|
188
221
|
# Skip subjects whose record + image are already on disk.
|
|
@@ -194,36 +227,36 @@ sdlab generate inputs/prompts/wave1.json --project my-project --resume
|
|
|
194
227
|
sdlab batch generate --resume batch_2026-04-22_001 --project my-project
|
|
195
228
|
```
|
|
196
229
|
|
|
197
|
-
Ambos comandos funcionan porque cada ranura escribe su entrada de manifiesto
|
|
230
|
+
Ambos comandos funcionan porque cada ranura escribe su entrada de manifiesto atómicamente al finalizar; un fallo a mitad de la ejecución nunca corrompe el estado parcial.
|
|
198
231
|
|
|
199
232
|
## Solución de problemas
|
|
200
233
|
|
|
201
234
|
Modos de fallo comunes y soluciones:
|
|
202
235
|
|
|
203
236
|
**`ECONNREFUSED 127.0.0.1:8188` en cualquier `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
|
|
204
|
-
ComfyUI no se está ejecutando.
|
|
237
|
+
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`.
|
|
205
238
|
|
|
206
239
|
**`missing checkpoint` / `LoRA weight not found`**
|
|
207
|
-
|
|
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, ya sea descarga el peso referenciado o cámbialo por uno que ya tengas. Vuelve a ejecutar `sdlab project doctor --project <project>` para confirmar la solución.
|
|
208
241
|
|
|
209
|
-
|
|
242
|
+
**Errores de `sdlab project doctor`**
|
|
210
243
|
Doctor devuelve códigos de error estructurados. Algunos comunes:
|
|
211
|
-
- `E_PROJECT_NOT_FOUND
|
|
212
|
-
- `E_CONFIG_INVALID
|
|
213
|
-
- `E_RECORD_DRIFT
|
|
244
|
+
- `E_PROJECT_NOT_FOUND`: el directorio del proyecto no existe en `projects/`. Verifica la ortografía.
|
|
245
|
+
- `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 pista.
|
|
214
247
|
|
|
215
|
-
**`No
|
|
216
|
-
Una advertencia leve.
|
|
248
|
+
**`No --project specified, falling back to <name>`**
|
|
249
|
+
Una advertencia leve. Pasa `--project <name>` explícitamente para seleccionar el proyecto correcto y silenciar la advertencia.
|
|
217
250
|
|
|
218
|
-
**Problemas de memoria
|
|
219
|
-
|
|
251
|
+
**Problemas de memoria VRAM / "Painterly"**
|
|
252
|
+
Consulta `docs/internal/HANDOFF.md` para obtener las notas sobre el ajuste del ruido "painterly". En resumen: reduce la intensidad del ruido, disminuye el tamaño del lote o cambia a un punto de control más pequeño en tu perfil de flujo de trabajo.
|
|
220
253
|
|
|
221
|
-
**Informar
|
|
222
|
-
|
|
254
|
+
**Informar errores**
|
|
255
|
+
Crea un problema en https://github.com/mcp-tool-shop-org/style-dataset-lab/issues con tu versión de sdlab (`sdlab --version`), la versión de Node (`node -v`), el comando completo y la salida de error estructurada. Una plantilla de informe de errores rellena previamente los campos.
|
|
223
256
|
|
|
224
257
|
## Seguridad
|
|
225
258
|
|
|
226
|
-
Solo
|
|
259
|
+
Solo local. Sin telemetría, sin análisis, sin solicitudes externas. Las imágenes permanecen en tu GPU y sistema de archivos.
|
|
227
260
|
|
|
228
261
|
## Licencia
|
|
229
262
|
|
|
@@ -231,4 +264,4 @@ MIT
|
|
|
231
264
|
|
|
232
265
|
---
|
|
233
266
|
|
|
234
|
-
Creado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a
|
|
267
|
+
Creado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|