# MiniMax H3 Prompt Studio para ComfyUI

Un paquete de nodos visuales para **completar, seleccionar y compilar prompts técnicos de MiniMax H3** dentro de ComfyUI. No llama ninguna API y no genera el video: su única tarea es darte un prompt detallado, validado y listo para conectar a los workflows oficiales de H3.

Incluye los tres casos oficiales:

- **T2V**: texto a video con audio.
- **I2V / FL2VA**: first frame, first + last frame o last frame.
- **R2V / Ref2VA**: generación con referencias multimodales.

## Instalación

1. Descomprimí la carpeta `ComfyUI-H3-Prompt-Studio` dentro de:

   ```text
   ComfyUI/custom_nodes/
   ```

2. Reiniciá ComfyUI.
3. Arrastrá `example_workflows/H3_Prompt_Studio_Master.json` al lienzo.
4. Ejecutá el workflow. El último nodo muestra el prompt, el control de coherencia y un botón **Copiar prompt**.

No hay dependencias adicionales que instalar.

## Instalación y actualizaciones desde ComfyUI Manager

El nodo está preparado para publicarse en Comfy Registry con el identificador `h3-prompt-studio` y el Publisher `ivanrodriguez`. Una vez publicada la versión inicial, ComfyUI Manager podrá instalarla y detectar versiones nuevas automáticamente.

Las versiones usan el formato semántico `X.Y.Z`:

- `PATCH`, por ejemplo `1.0.0 → 1.0.1`, para correcciones.
- `MINOR`, por ejemplo `1.0.0 → 1.1.0`, para funciones compatibles nuevas.
- `MAJOR`, por ejemplo `1.0.0 → 2.0.0`, para cambios incompatibles.

Al modificar la versión de `pyproject.toml` en la rama `main`, GitHub Actions publica automáticamente el nuevo paquete. La credencial se guarda únicamente como el secreto `REGISTRY_ACCESS_TOKEN` del repositorio y nunca debe incluirse en archivos o commits.

## Cómo se usa

La cadena se completa de izquierda a derecha:

1. **Inicio de escena**: elegí T2V, una variante I2V o R2V; seleccioná una duración entera de 4–15 segundos y definí acontecimiento, entorno, luz, paleta, estilo y reglas globales. El selector muestra también los frames y la duración real resultante.
2. **Referencias R2V**: activalas solo en R2V. El índice debe coincidir exactamente con el orden en que conectaste cada imagen, video o audio al workflow oficial.
3. **Sujetos**: asigná un ID corto y estable, por ejemplo `maria`, y repetilo en planos y diálogos.
4. **Planos**: describí composición, acción, estado final, cámara, sonido, texto y uso de referencias. El orden de los nodos es el orden de montaje.
5. **Diálogos**: escribí la frase exacta, idioma, hablante, interpretación y tiempo. El compilador genera las etiquetas `<d>[Spanish] ...</d>` y asigna hablantes estables `(S1)`, `(S2)`.
6. **Sonido y música**: separá ambiente, sonidos físicos, vocalizaciones y música extradiegética.
7. **Compilar, validar y copiar**: corregí los errores del informe y copiá el resultado.

Para agregar contenido, duplicá un nodo de referencia, sujeto, plano o diálogo y volvé a insertarlo en la cadena. Los nodos traen un interruptor `enabled`, así podés conservar variantes apagadas sin borrarlas.

## Conexión con los tres workflows oficiales

La salida `prompt` del último nodo es un `STRING` estándar de ComfyUI.

- En el workflow oficial **T2V**, seleccioná `T2V — texto` y conectá `prompt` al campo de texto que alimenta el conditioning de H3.
- En **I2V**, elegí la variante correcta. El compilador agrega automáticamente el preámbulo de first frame, first + last o last frame. Conservá las imágenes en los slots del workflow oficial.
- En **R2V**, seleccioná `R2V — referencias`, activá los nodos de referencia y conectá su salida al campo de texto del workflow Ref2VA. Las imágenes, videos y audios siguen conectándose físicamente al nodo oficial de referencias; este paquete solo genera sus etiquetas y reglas de retención.

Si el campo de prompt del workflow oficial aparece solo como widget, hacé clic derecho sobre ese widget y elegí **Convert widget to input**, luego conectá la salida `prompt`.

## Qué valida

El compilador no se limita a concatenar texto. Controla:

- duración oficial de 4–15 s;
- duración total limitada a opciones enteras preestablecidas, sin entrada libre como `5.4`;
- duración efectiva de ComfyUI a 24 fps y grilla de frames `17k+5`;
- extensión automática del último plano cuando la grilla H3 agrega una fracción de segundo a la duración solicitada;
- planos con tiempos válidos, sin superposición y dentro del clip real;
- IDs de sujetos únicos y referencias a sujetos existentes;
- diálogo ligado a un plano y hablante válidos;
- velocidad aproximada del diálogo para que sea pronunciable;
- contradicciones entre silencio, diálogo, efectos y música;
- referencias R2V numeradas desde 1, consecutivas y en orden;
- compatibilidad entre medio visual/audio y marcador de retención;
- cobertura temporal incompleta;
- rango orientativo oficial de 350–500 palabras para la descripción R2V.

Un error marca **CORREGIR**. Una advertencia permite generar, pero señala una decisión que H3 tendría que improvisar.

Si el último plano termina exactamente en la duración que elegiste —por ejemplo `5.000 s`— pero la grilla oficial produce `124 frames = 5.167 s`, el compilador extiende automáticamente el estado final hasta `5.167 s`. El informe lo muestra como **Ajuste automático**, no como advertencia. Los huecos intencionales mayores siguen siendo detectados.

## Estructura que compila

T2V e I2V usan los tres bloques oficiales:

```text
integrated_multimodal_description:
...

overall_soundscape:
...

non_diegetic_music:
...
```

R2V usa los seis bloques oficiales y en su orden correcto:

```text
subject_definitions:
...

summary:
...

retention_analysis:
...

detailed_description:
...

overall_soundscape:
...

non_diegetic_music:
...
```

## Reglas prácticas que mejoran H3

- Describí **cambios observables**, no conceptos vagos. Mejor “gira la cabeza 30 grados hacia la ventana” que “parece intrigada”.
- En cada plano, especificá estado inicial, acción, reacción y estado final. Eso reduce saltos de pose.
- Usá un movimiento principal de cámara por plano. Tipo + amplitud + velocidad + objetivo suele ser suficiente.
- Mantené la identidad en el nodo Sujeto y el movimiento en el nodo Plano. Evitá volver a describir el rostro de forma distinta en cada corte.
- Para diálogo, preservá el texto exacto en su idioma. La descripción técnica puede estar en inglés o español; para máxima cercanía con los ejemplos oficiales, completala en inglés.
- Separá sonido diegético de música. Sin música debe decirse explícitamente.
- En R2V, declarale a cada referencia una sola función clara. Si una imagen aporta identidad, indicá también qué **no** debe copiarse.
- `fully_preserved` es para retención visual estricta; `attribute_transfer` para copiar un atributo aislado; `fully_copy` y `partially_copy` son para audio.
- En first + last frame, preferí una transformación continua y pocos o ningún corte.
- No agregues negaciones genéricas interminables. Convertí cada restricción importante en una instrucción positiva y comprobable.

## Referencias oficiales usadas como fuente de verdad

- [Guía oficial MiniMax H3 de ComfyUI](https://docs.comfy.org/tutorials/video/minimax/minimax-h3)
- [Repositorio oficial MiniMax H3](https://github.com/MiniMax-AI/MiniMax-H3)
- [H3 Prompt Writing Skill oficial](https://github.com/MiniMax-AI/MiniMax-H3/tree/main/skills/h3-prompt-writing)
- [Manual base oficial de prompting](https://github.com/MiniMax-AI/MiniMax-H3/blob/main/skills/h3-prompt-writing/references/base-en.txt)
- [Manual oficial de prompting con referencias](https://github.com/MiniMax-AI/MiniMax-H3/blob/main/skills/h3-prompt-writing/references/ref-en.txt)

## Archivos

```text
ComfyUI-H3-Prompt-Studio/
├── __init__.py
├── core.py
├── nodes.py
├── web/h3_prompt_studio.js
├── example_workflows/H3_Prompt_Studio_Master.json
└── tests/test_core.py
```
