@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.
- package/CHANGELOG.md +27 -0
- package/README.es.md +111 -59
- package/README.fr.md +117 -67
- package/README.hi.md +109 -70
- package/README.it.md +111 -60
- package/README.ja.md +116 -76
- package/README.md +58 -2
- package/README.pt-BR.md +119 -64
- package/README.zh.md +108 -67
- package/bin/sdlab.js +50 -1
- package/lib/adapters/ai-toolkit.js +187 -30
- package/lib/adapters/comfyui-workflows.js +84 -9
- package/lib/asset-ingest.js +575 -0
- package/lib/asset-masks.js +323 -0
- package/lib/asset-source.js +1176 -0
- package/lib/canon-author.js +350 -0
- package/lib/canon-review-gate.js +205 -0
- package/lib/colab-launcher-guards.js +285 -0
- package/lib/export.js +1 -1
- package/lib/freeze-gate.js +3 -0
- package/lib/generated-provenance.js +178 -5
- package/lib/lane1-render.js +668 -0
- package/lib/memory-store.js +663 -0
- package/lib/model-licences.js +305 -0
- package/lib/npy-meta.js +130 -0
- package/lib/png-meta.js +512 -0
- package/lib/records.js +54 -8
- package/lib/reingest-selected.js +15 -1
- package/lib/reingest.js +27 -3
- package/lib/run-manifest.js +59 -11
- package/lib/train-runs.js +214 -0
- package/lib/verifier.js +3 -0
- package/lib/verify-chain.js +367 -0
- package/package.json +2 -2
- package/scripts/asset-ingest.js +160 -0
- package/scripts/canon-draft.js +82 -0
- package/scripts/canon-freeze.js +4 -0
- package/scripts/colab/REAL_SERVICE_ASSUMPTIONS.md +14 -0
- package/scripts/colab/ai-toolkit-override-py315.txt +45 -0
- package/scripts/colab/colab_window.sh +587 -0
- package/scripts/colab/lane1_render.py +970 -0
- package/scripts/colab/launch_guards.py +564 -0
- package/scripts/colab/launch_lane1_stub.sh +309 -0
- package/scripts/colab/launch_lane3_stub.sh +366 -0
- package/scripts/colab/remote_runner.py +59 -0
- package/scripts/doctor.js +1 -0
- package/scripts/generate.js +38 -12
- 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.
|
|
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
|
|
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
|
|
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
|
|
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
|
-
##
|
|
68
|
+
## La línea de activos: exportaciones 3D como datos de entrenamiento
|
|
69
69
|
|
|
70
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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** |
|
|
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
|
|
100
|
-
| **Training package** | Diseño listo para
|
|
101
|
-
| **Eval scorecard** | Aprobación/rechazo por tarea
|
|
102
|
-
| **Implementation pack** | Ejemplos de indicaciones,
|
|
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
|
|
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
|
|
109
|
-
| **Run** | Artefacto de ejecución congelado: resumen + semillas +
|
|
110
|
-
| **Critique** | Evaluación estructurada multidimensional de
|
|
111
|
-
| **Batch** | Producción coordinada en múltiples ranuras (hojas de expresión, paneles de entorno, paquetes de
|
|
112
|
-
| **Selection** | Artefacto de decisión creativa: qué
|
|
113
|
-
| **Re-ingest** |
|
|
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
|
|
164
|
+
## Por qué esto existe
|
|
116
165
|
|
|
117
|
-
Los datos de entrenamiento son el artefacto
|
|
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.
|
|
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
|
|
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
|
|
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,
|
|
128
|
-
- **[Rustline](handbook/case-study-rustline/)** (diseño
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
176
|
-
- **Ningún modelo verifica su propia salida.** Los juicios registran `judged_by_model` y `generator_model`; se
|
|
177
|
-
- **Un juicio indica quién lo realizó.** `eligibility audit` distingue los juicios
|
|
178
|
-
- **La medición no es
|
|
179
|
-
- **
|
|
180
|
-
- **
|
|
181
|
-
- **
|
|
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
|
|
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
|
-
|
|
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`
|
|
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
|
|
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
|
-
###
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
255
|
-
- `E_CONFIG_INVALID`: uno de los cinco archivos de configuración JSON
|
|
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
|
-
**
|
|
262
|
-
|
|
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
|
-
**
|
|
265
|
-
|
|
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
|
-
|
|
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
|
|