@mcptoolshop/style-dataset-lab 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.es.md +111 -59
  3. package/README.fr.md +117 -67
  4. package/README.hi.md +109 -70
  5. package/README.it.md +111 -60
  6. package/README.ja.md +116 -76
  7. package/README.md +58 -2
  8. package/README.pt-BR.md +119 -64
  9. package/README.zh.md +108 -67
  10. package/bin/sdlab.js +50 -1
  11. package/lib/adapters/ai-toolkit.js +187 -30
  12. package/lib/adapters/comfyui-workflows.js +84 -9
  13. package/lib/asset-ingest.js +575 -0
  14. package/lib/asset-masks.js +323 -0
  15. package/lib/asset-source.js +1176 -0
  16. package/lib/canon-author.js +350 -0
  17. package/lib/canon-review-gate.js +205 -0
  18. package/lib/colab-launcher-guards.js +285 -0
  19. package/lib/export.js +1 -1
  20. package/lib/freeze-gate.js +3 -0
  21. package/lib/generated-provenance.js +178 -5
  22. package/lib/lane1-render.js +668 -0
  23. package/lib/memory-store.js +663 -0
  24. package/lib/model-licences.js +305 -0
  25. package/lib/npy-meta.js +130 -0
  26. package/lib/png-meta.js +512 -0
  27. package/lib/records.js +54 -8
  28. package/lib/reingest-selected.js +15 -1
  29. package/lib/reingest.js +27 -3
  30. package/lib/run-manifest.js +59 -11
  31. package/lib/train-runs.js +214 -0
  32. package/lib/verifier.js +3 -0
  33. package/lib/verify-chain.js +367 -0
  34. package/package.json +2 -2
  35. package/scripts/asset-ingest.js +160 -0
  36. package/scripts/canon-draft.js +82 -0
  37. package/scripts/canon-freeze.js +4 -0
  38. package/scripts/colab/REAL_SERVICE_ASSUMPTIONS.md +14 -0
  39. package/scripts/colab/ai-toolkit-override-py315.txt +45 -0
  40. package/scripts/colab/colab_window.sh +587 -0
  41. package/scripts/colab/lane1_render.py +970 -0
  42. package/scripts/colab/launch_guards.py +564 -0
  43. package/scripts/colab/launch_lane1_stub.sh +309 -0
  44. package/scripts/colab/launch_lane3_stub.sh +366 -0
  45. package/scripts/colab/remote_runner.py +59 -0
  46. package/scripts/doctor.js +1 -0
  47. package/scripts/generate.js +38 -12
  48. package/scripts/verify.js +67 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,33 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## [3.5.0] - 2026-11-05
8
+
9
+ **Provenance you can prove, canon a model can draft but not decide, and the first Colab lanes.** Tests **791 → 926**.
10
+
11
+ ### Added
12
+
13
+ - **`sdlab asset ingest <dir>`** — the asset lane. Admits a 3D asset's re-rendered turnaround as provenance-carrying training data, against an `asset-source.json` contract (schema 1.3.0). Every declaration (channels, palette bands, gate thresholds, the acceptance verdict, the style register, how the renders came to exist) is proven against the actual bytes, and the whole ingest is refused on any violation. Records land uncurated with `provenance.source: "asset"`. Missing-but-optional declarations are reported as notices rather than failures. Contract: `docs/asset-lane-design.md`.
14
+ - **`sdlab verify --project <name>`** — walks the release provenance chain offline for each record: owner and CC-BY-4.0 licence on the record, the bound canon entry (by `canon_sha` and entry hash), the licence of every model and LoRA (SPDX id, licence URL, date read, and the file's sha256), and the workflow hash in the run manifest. A missing link fails.
15
+ - **`sdlab canon draft`** — a local model drafts canon entries and prompts through a loopback-only, OpenAI-compatible endpoint. Output is written with `status: "draft"`, `judgment: null`, and `drafted_by_model` / `author_model` on every path. Keys a model could use to pre-fill a ratification, judgment or status are stripped from its output.
16
+ - **Canon review gate and memory store.** The freeze gate refuses any model-drafted entry unless a person approved it, with a reason and the sha256 of the exact draft approved. A persistent memory store keeps every draft and decision, marking model authorship.
17
+ - **Run provenance in images.** Lane-1 renders stamp their generation provenance into PNG metadata. Training runs record what trained them (`lib/train-runs.js`), including Qwen LoRA support through ai-toolkit.
18
+
19
+ ### Experimental
20
+
21
+ - **Colab launch kits** (`scripts/colab/`) for a lane-1 render and a lane-3 training step on your own Colab account. They pin every input by hash, check the real `colab` CLI contract, cap spend from your live balance (refusing to start if the balance can't be read), watch setup and run separately for stalls, and stop their own session on exit. **They have not yet completed a live window end to end.**
22
+ - The canon draft and review gate are complete, but no single command yet drives drafting, review and freeze together.
23
+
24
+ ### Changed
25
+
26
+ - Every pull request now runs CI; pushes stay paths-gated. Coverage is uploaded to Codecov, and the repository carries an Atlas map checked in CI.
27
+ - The landing site moved to Astro 7.
28
+
29
+ ### Fixed
30
+
31
+ - Updated `devalue` and `brace-expansion` to their patched releases.
32
+ - Removed home paths and an account handle from the tree.
33
+
7
34
  ## [3.4.0] - 2026-08-04
8
35
 
9
36
  **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.
package/README.es.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
2
+ <a href="README.zh.md">中文</a> | <a href="README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -13,11 +13,11 @@
13
13
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
14
14
  </p>
15
15
 
16
- 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.
16
+ Escribe tus reglas visuales. Genera arte. Evalúa cada imagen según esas reglas. Entrega los resultados como datos de entrenamiento auditables y con versiones, y luego pon en funcionamiento los modelos entrenados en flujos de trabajo de producción reales y reintroduce las mejores salidas en tu corpus.
17
17
 
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ó.
18
+ Style Dataset Lab conecta lo que escribiste sobre tu estilo artístico con el conjunto de datos del que realmente entrenas, 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, lo 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: 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.
20
+ Luego, el entorno de trabajo de producción se encarga de lo demás: 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 por lotes hojas de expresión y paneles de entorno, selecciona los mejores resultados y los vuelve a incorporar como nuevos candidatos. El ciclo se cierra: produce, selecciona, revisa, mejora.
21
21
 
22
22
  ## El flujo de trabajo
23
23
 
@@ -65,9 +65,56 @@ sdlab reingest selected --selection selection_2026-04-16_001
65
65
 
66
66
  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.
67
67
 
68
- ## Creación del canon
68
+ ## La línea de activos: exportaciones 3D como datos de entrenamiento
69
69
 
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.
70
+ `sdlab ingest` acepta las imágenes sin más. `sdlab asset ingest` requiere un **contrato**.
71
+
72
+ Cuando un activo 3D pasa su fase de aceptación, volver a renderizarlo desde N ángulos te proporciona una vista completa que es consistente *por diseño*, una propiedad que la difusión por vista no puede garantizar. La línea de activos admite esas exportaciones como datos de entrenamiento que llevan información de procedencia:
73
+
74
+ ```bash
75
+ # Validate an export's manifest end to end, run the gates, write nothing
76
+ sdlab asset ingest ~/exports/dragon_dense --project my-project --dry-run
77
+
78
+ # Register it: records, candidates, masks, channels, receipt
79
+ sdlab asset ingest ~/exports/dragon_dense --project my-project
80
+ ```
81
+
82
+ El directorio de exportación contiene un manifiesto `asset-source.json` (esquema **1.3.0**) que declara
83
+ sus canales, bandas de paleta, umbrales de aceptación, veredicto de aceptación, registro de estilo, cómo
84
+ se crearon los renders y su procedencia de generación. sdlab verifica cada declaración
85
+ frente a los bytes reales y rechaza la ingestión completa en caso de cualquier violación; nada se registra
86
+ si el manifiesto es incorrecto.
87
+
88
+ **La conexión:** sdlab proporciona el mecanismo, el activo proporciona la semántica. sdlab nunca realiza un trazado de rayos,
89
+ nunca renderiza y nunca aprende que un canal llamado "procedencia" es especial. Verifica,
90
+ mide, registra y empaqueta. El significado de los números permanece con el activo.
91
+
92
+ Lo que el contrato exige:
93
+
94
+ | etapa | lo que se verifica |
95
+ |---|---|
96
+ | **schema** | forma, identificadores, bandas de paleta bien formadas y un veredicto de aceptación que es literalmente `"accepted"` |
97
+ | **containment** | cada ruta de referencia se resuelve *dentro* del directorio de exportación (es una entrada no confiable) y existe |
98
+ | **encoding** | el IHDR de un PNG coincide con su codificación declarada; un encabezado NPY coincide con su dtype y forma declarados. Un manifiesto que "parece correcto" pero que no coincide con sus bytes es la clase de fallo que esta línea de activos está diseñada para evitar |
99
+ | **categorical** | los PNG indexados demuestran que PLTE ⊆ paleta declarada; los canales filtrados con `nearest` obtienen una decodificación de píxeles *exhaustiva*; los NPY categóricos obtienen un escaneo de valores exhaustivo |
100
+ | **gates** | la puerta de enlace de la paleta se ejecuta por cada render, a partir de las propias bandas y umbrales del manifiesto; un render fallido se rechaza de forma clara y se informa, nunca se admite en silencio |
101
+
102
+ Los registros se almacenan **sin curar** (`judgment: null`) con `provenance.source: "asset"`, llevando
103
+ el bloque de aceptación textualmente, hashes por archivo, cámara y orientación derivada, las mediciones de la puerta de enlace, el registro de estilo declarado y el fotograma de generación por imagen + semilla. Luego,
104
+ pasan por el mismo proceso de curación que cualquier otro registro.
105
+
106
+ La ingestión también informa sobre lo que un manifiesto *no* declara: un registro de estilo desconocido, una
107
+ `identity.subject_name` faltante, una procedencia de generación ausente, como **avisos** en lugar de
108
+ fallos. Se incluyen en el recibo e imprimen en la CLI. Una brecha de la que nadie está informado es una brecha
109
+ que nadie puede cerrar; y como un manifiesto puede *declarar* que sus renders son derivaciones deterministas sin una semilla propia, la línea de activos nunca informa sobre una brecha en una exportación que es
110
+ correcta.
111
+
112
+ Contrato completo, la escala de validación y el razonamiento detrás de cada campo:
113
+ [docs/asset-lane-design.md](docs/asset-lane-design.md).
114
+
115
+ ## Autoría canónica
116
+
117
+ 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 canónicas de tu proyecto en las tres proyecciones que realmente utilizan el entrenamiento y la producción, y bloquea las entradas que no deben cambiar.
71
118
 
72
119
  ```bash
73
120
  # Build three projections from the canon entity store:
@@ -83,63 +130,65 @@ sdlab canon freeze kael_maren --project my-project --reason "prologue portrait l
83
130
  sdlab canon drift --project my-project
84
131
  ```
85
132
 
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.
133
+ Un modelo local también puede redactar el canon, pero nunca decide sobre él. `sdlab canon draft <class_id> --endpoint <url> --brief "<text>" --out <path>` solicita a un servidor de solo bucle, compatible con OpenAI, una entrada canónica y avisos, y los escribe con `status: "draft"`, `judgment: null` y el modelo de redacción estampados en cada salida. Un borrador no puede congelarse hasta que una persona lo ratifique: la puerta de enlace de congelación rechaza cualquier entrada redactada por un modelo sin la aprobación de un humano, una razón y el hash del borrador exacto que se aprobó.
87
134
 
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/).
135
+ `canon build` es direccionable por contenido: su salida se basa en una `canon_sha` y se almacena en caché, por lo que una reconstrucción del canon sin cambios se realiza instantáneamente. `canon freeze` da testimonio de cada congelación frente a una versión específica y se 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 por defecto (se omite 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.
89
136
 
90
- ## Qué produce
137
+ Flujo de trabajo completo en el manual: [Compilación del canon](handbook/canon-build/), [Congelación del canon](handbook/canon-freeze/) y [Apilamiento de dos LORA](handbook/two-lora-stacking/).
138
+
139
+ ## Lo que produce
91
140
 
92
141
  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ó.
93
142
 
94
143
  | Artefacto | Qué es |
95
144
  |----------|-----------|
96
- | **Snapshot** | Selección de registros congelados con huella digital de configuración. Cada inclusión tiene una razón explícita. |
145
+ | **Snapshot** | Registro de selección congelado con huella digital de configuración. Cada inclusión tiene una razón explícita. |
97
146
  | **Split** | Partición de entrenamiento/validación/prueba donde las familias de sujetos nunca cruzan los límites. |
98
147
  | **Export package** | Conjunto de datos autónomo: manifiesto, metadatos, imágenes, divisiones, tarjeta del conjunto de datos, sumas de comprobación. |
99
- | **Eval pack** | Tareas de prueba con conocimiento del canon: cobertura de carriles, desviación prohibida, ancla/oro, continuidad del sujeto. |
100
- | **Training package** | Diseño listo para entrenar mediante adaptadores (`diffusers-lora`, `generic-image-caption`). La misma información, diferente formato. |
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. |
102
- | **Implementation pack** | Ejemplos de indicaciones, fallas conocidas, pruebas de continuidad y orientación para volver a introducir datos. |
148
+ | **Eval pack** | Tareas de prueba con conocimiento del canon: cobertura de carril, deriva prohibida, ancla/oro, continuidad del sujeto. |
149
+ | **Training package** | Diseño listo para el entrenamiento mediante adaptadores (`diffusers-lora`, `generic-image-caption`). La misma verdad, diferente formato. |
150
+ | **Eval scorecard** | Aprobación/rechazo por tarea a partir de la evaluación de los resultados generados en comparación con los paquetes de evaluación. |
151
+ | **Implementation pack** | Ejemplos de indicaciones, fallos conocidos, pruebas de continuidad y guía para la reintroducción de datos. |
103
152
 
104
- El entorno de trabajo de producción agrega:
153
+ El entorno de trabajo de producción añade:
105
154
 
106
155
  | Superficie | Qué hace |
107
156
  |---------|-------------|
108
- | **Compiled brief** | Instrucción de generación determinista a partir del perfil del flujo de trabajo + la información del proyecto. |
109
- | **Run** | Artefacto de ejecución congelado: resumen + semillas + salidas de ComfyUI + manifiesto. |
110
- | **Critique** | Evaluación estructurada multidimensional de las salidas de ejecución con respecto al canon. |
111
- | **Batch** | Producción coordinada en múltiples ranuras (hojas de expresión, paneles de entorno, paquetes de silueta). |
112
- | **Selection** | Artefacto de decisión creativa: qué salidas se eligieron, por qué y de dónde provienen. |
113
- | **Re-ingest** | Las salidas seleccionadas se devuelven como registros candidatos con el origen completo de la generación. |
157
+ | **Compiled brief** | Instrucción de generación determinista a partir del perfil del flujo de trabajo + la verdad del proyecto. |
158
+ | **Run** | Artefacto de ejecución congelado: resumen + semillas + resultados ComfyUI + manifiesto. |
159
+ | **Critique** | Evaluación estructurada multidimensional de los resultados de la ejecución en comparación con el canon. |
160
+ | **Batch** | Producción coordinada en múltiples ranuras (hojas de expresión, paneles de entorno, paquetes de siluetas). |
161
+ | **Selection** | Artefacto de decisión creativa: qué resultados se eligieron, por qué y de dónde provienen. |
162
+ | **Re-ingest** | Los resultados seleccionados se devuelven como registros candidatos con un historial completo de la generación. |
114
163
 
115
- ## Por qué existe esto
164
+ ## Por qué esto existe
116
165
 
117
- 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.
166
+ Los datos de entrenamiento son el artefacto de mayor utilidad 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.
118
167
 
119
- 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.
168
+ Style Dataset Lab hace que la conexión sea explícita. Su constitución define las reglas. Su rúbrica define las dimensiones de la evaluación. Sus registros de curación registran la evaluación. Su vinculación al canon demuestra la conexión. Y su conjunto de datos transmite todo eso como una verdad estructurada, consultable y reproducible.
120
169
 
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.
170
+ El resultado práctico: cuando su LoRA se desvía, puede preguntar *por qué*. Cuando su próximo ciclo de entrenamiento necesita mejores datos, sabe exactamente qué registros están cerca de fallar y qué regla específica incumplieron. 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.
122
171
 
123
172
  ## Probado en producción
124
173
 
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.
174
+ Este no es un flujo de trabajo de demostración. Dos LoRAs de estilo reales se han implementado de principio a fin a través de él: el mismo ciclo de canon → curación → entrenamiento → implementación, en extremos opuestos del espectro de la curación.
126
175
 
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.
176
+ - **[Tallow Fen](handbook/case-study-tallow-fen/)** (diseño de criaturas): un canon de bestiario creado desde cero, **~34% de aprobación** en 293 registros seleccionados (169 rechazados: la puerta de entrada rechaza con dureza). Implementado `tallow_fen_style_v3.safetensors` @ 1.5 en `qwen-image`.
177
+ - **[Rustline](handbook/case-study-rustline/)** (diseño de conceptos): canon denso y preformado, **~96% de aprobación** en 180 registros. Implementado `rustline_v3ckpt_1500.safetensors` @ 1.0 en `qwen-image`, reutilizado posteriormente por un segundo proyecto.
129
178
 
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.
179
+ El mismo flujo de trabajo, dos perfiles de producción: la puerta de entrada de la curación es real (rechaza con dureza los temas abiertos) y un canon disciplinado produce una alta tasa de aceptación.
131
180
 
132
181
  ## Cinco dominios, reglas reales
133
182
 
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.
183
+ No son plantillas de marcador de posición. Cada dominio se entrega con reglas de constitución de calidad de producción, definiciones de carriles, rúbricas de evaluación y vocabulario de grupo.
135
184
 
136
185
  | Dominio | Carriles | Qué se evalúa |
137
186
  |--------|-------|-----------------|
138
187
  | **game-art** | personaje, entorno, accesorio, interfaz de usuario, nave, interior, equipo | Silueta a escala de juego, identificación de facción, desgaste y envejecimiento |
139
- | **character-design** | retrato, cuerpo completo, rotación, hoja de expresión, pose de acción | Proporciones, lógica del disfraz, personalidad, claridad del gesto |
188
+ | **character-design** | retrato, cuerpo completo, rotación, hoja de expresión, pose de acción | Proporciones, lógica del vestuario, personalidad, claridad del gesto |
140
189
  | **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 |
141
190
  | **architecture** | exterior, interior, paisaje urbano, detalle estructural, ruina, paisaje | Estructura, consistencia del material, perspectiva, coherencia de la época |
142
- | **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 |
191
+ | **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 del daño |
143
192
 
144
193
  ## Estructura del proyecto
145
194
 
@@ -167,22 +216,23 @@ projects/my-project/
167
216
 
168
217
  ## Propiedades de confianza
169
218
 
170
- Estas no son aspiracionales. Se aplican rigurosamente.
219
+ Estas no son aspiracionales. Se aplican.
171
220
 
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.
221
+ - **Las instantáneas son inmutables.** La huella digital de la configuración (SHA-256) demuestra que no se ha realizado ningún cambio. Los ID se asignan de forma atómica, por lo que dos ejecuciones concurrentes no pueden intercalarse en un solo directorio.
222
+ - **Las divisiones evitan fugas de datos, 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 la partición, 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 que "no hay fugas (verificado)" cuando ambas comprobaciones se han ejecutado y han tenido éxito; una división anterior a la segunda comprobación indica exactamente eso.
223
+ - **Los manifiestos son contratos congelados.** Hash de exportación + huella digital de la 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.
224
+ - **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 iteración se puede reproducir byte por byte. Los ejecutores de JS y Python se ajustan a un hash idéntico en bytes mediante una prueba que inicia ambos. El hash del modelo es opcional (`--hash-models`) y nunca se fabrica; un archivo irresoluble registra `sha256: null` con una nota.
225
+ - **Ningún modelo verifica su propia salida.** Los juicios registran `judged_by_model` y `generator_model`; se genera una advertencia si alguna vez son el mismo modelo.
226
+ - **Un juicio indica quién lo realizó.** `eligibility audit` distingue los juicios escritos por una persona de los juicios generados por un script masivo, por lo que una justificación que describe una categoría en lugar de una imagen no puede considerarse como una curación.
227
+ - **La medición no es un 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.
228
+ - **Una versión puede demostrar de dónde proviene cada imagen.** `sdlab verify --project <name>` recorre la cadena sin conexión para cada registro: el propietario y la licencia del registro, la entrada del canon a la que estaba vinculado (por hash), la licencia de cada modelo y LoRA que lo creó (ID de SPDX, URL de la licencia, la fecha en que se leyó y el hash del archivo), y el hash del flujo de trabajo en el manifiesto de la ejecución. Un enlace faltante hace que la comprobación falle en lugar de que se apruebe.
229
+ - **Los adaptadores no pueden modificar la verdad.** Diseño diferente, mismos registros. Sin adiciones, sin eliminaciones, sin reclasificaciones.
230
+ - **Las salidas generadas vuelven a entrar a través de la revisión.** Sin 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.
231
+ - **Los fallos son visibles.** Un registro faltante, una imagen que no se puede colocar o una leyenda que no se puede crear detiene una exportación o un paquete de entrenamiento en lugar de reducirlo silenciosamente.
182
232
 
183
233
  ## Star Freight
184
234
 
185
- 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.
235
+ 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 un toque áspero, totalmente curado.
186
236
 
187
237
  ```bash
188
238
  git clone https://github.com/mcp-tool-shop-org/style-dataset-lab
@@ -194,7 +244,7 @@ sdlab split build --project star-freight # zero subject leakage
194
244
 
195
245
  ## Formatos posteriores
196
246
 
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.
247
+ `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 la inclusión.
198
248
 
199
249
  ## Instalación
200
250
 
@@ -206,7 +256,7 @@ Requiere Node.js 20+ y [ComfyUI](https://github.com/comfyanonymous/ComfyUI) en l
206
256
 
207
257
  ### Pruébalo sin ComfyUI
208
258
 
209
- 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.
259
+ Puede explorar toda la superficie no relacionada con 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.
210
260
 
211
261
  ```bash
212
262
  # Scaffold a fresh project (no ComfyUI needed)
@@ -219,11 +269,11 @@ sdlab project doctor --project test
219
269
  sdlab snapshot create --dry-run --project star-freight
220
270
  ```
221
271
 
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.
272
+ `sdlab project doctor` valida cada configuración de 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.
223
273
 
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.
274
+ Si olvidas `--project`, la CLI vuelve al primer proyecto que encuentra en `projects/` e imprime una advertencia; pasa `--project` explícitamente para silenciarla.
225
275
 
226
- ### Reanudando una ejecución interrumpida
276
+ ### Reanudación de una ejecución interrumpida
227
277
 
228
278
  Las ejecuciones de generación largas se pueden reanudar sin rehacer el trabajo completado:
229
279
 
@@ -237,36 +287,38 @@ sdlab generate inputs/prompts/wave1.json --project my-project --resume
237
287
  sdlab batch generate --resume batch_2026-04-22_001 --project my-project
238
288
  ```
239
289
 
240
- 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.
290
+ Ambos comandos funcionan porque cada ranura escribe su entrada de manifiesto de forma atómica al finalizar; una falla a la mitad de la ejecución nunca corrompe el estado parcial.
241
291
 
242
292
  ## Solución de problemas
243
293
 
244
- Modos de fallo comunes y soluciones:
294
+ Modos de falla comunes y soluciones:
245
295
 
246
296
  **`ECONNREFUSED 127.0.0.1:8188` en cualquier `sdlab generate` / `sdlab run generate` / `sdlab batch generate`**
247
297
  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`.
248
298
 
249
299
  **`missing checkpoint` / `LoRA weight not found`**
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.
300
+ Tu perfil de flujo de trabajo nombra 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 de referencia o cámbialo por uno que ya tengas. Vuelve a ejecutar `sdlab project doctor --project <project>` para confirmar la solución.
251
301
 
252
302
  **Errores de `sdlab project doctor`**
253
303
  Doctor devuelve códigos de error estructurados. Algunos comunes:
254
- - `E_PROJECT_NOT_FOUND`: el directorio del proyecto no existe debajo de `projects/`. Verifica la ortografía.
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.
304
+ - `E_PROJECT_NOT_FOUND`: el directorio del proyecto no existe en `projects/`. Verifica la ortografía.
305
+ - `E_CONFIG_INVALID`: uno de los cinco archivos de configuración JSON no superó la validación del esquema. El campo `hint` indica el archivo y el campo incorrectos.
256
306
  - `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.
257
307
 
258
308
  **`No --project specified, falling back to <name>`**
259
309
  Una advertencia suave. Pasa `--project <name>` explícitamente para seleccionar el proyecto correcto y silenciar la advertencia.
260
310
 
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.
311
+ **Problemas de memoria VRAM / "Painterly"**
312
+ Consulta `docs/internal/HANDOFF.md` para obtener las notas de ajuste de la configuración de "painterly". En resumen: reduce la intensidad del ruido, reduce el tamaño del lote o cambia a un punto de control más pequeño en tu perfil de flujo de trabajo.
263
313
 
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.
314
+ **Informar errores**
315
+ Crea un problema en https://github.com/mcp-tool-shop-org/style-dataset-lab/issues con tu versión de sdlab (`sdlab --version`), 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.
266
316
 
267
317
  ## Seguridad
268
318
 
269
- Solo local. Sin telemetría, sin análisis, sin solicitudes externas. Las imágenes permanecen en tu GPU y sistema de archivos.
319
+ Local por defecto. Sin telemetría, sin análisis y sin solicitudes externas desde la CLI de `sdlab`: las imágenes permanecen en tu GPU y sistema de archivos, y `canon draft` rechaza cualquier punto final que no sea de bucle local.
320
+
321
+ La única excepción es la opción de participación voluntaria. `scripts/colab/` contiene los kits de inicio para ejecutar un proceso de renderizado o un paso de entrenamiento LoRA en su propia cuenta de Google Colab. Solo cargan los archivos que usted indique, se ejecutan dentro de un límite de gasto que se lee del saldo actual de su cuenta de Colab y cierran su propia sesión al finalizar. Estos kits son **experimentales**: aún no han completado una prueba completa de principio a fin.
270
322
 
271
323
  ## Licencia
272
324