ClipProj: codificador 4B en lugar del 32B de MiniMax H3 en ComfyUI
Un nodo de ComfyUI sustituye el codificador Qwen3-VL-32B (15,7 GB) de MiniMax H3 por un Qwen3-VL-4B con proyección aprendida, reduciendo la VRAM de acondicionamiento a 4,5 GB.
ComfyUI-ClipProj es un nuevo nodo personalizado que sustituye el codificador de texto Qwen3-VL-32B de MiniMax H3 por un Qwen3-VL-4B mucho más pequeño junto con una proyección lineal aprendida, reduciendo la huella de VRAM de acondicionamiento de 15.7 GB a 4.5 GB (matrices de proyección en Hugging Face). El DiT, los VAE y el muestreador no se tocan: el nodo devuelve un objeto que se comporta como el CLIP oficial, por lo que se conecta directamente a la entrada clip existente sin necesidad de recablear nada.
El pipeline completo: codificador, proyección, acondicionamiento, muestreo, decodificación y salida de vídeo (examples/minimax_h3_clipproj.json).
Por qué ahorra tanta VRAM
MiniMax H3 utiliza un Qwen3-VL-32B truncado a 50 capas (15.7 GB en NVFP4) únicamente para convertir un prompt en un tensor de acondicionamiento [seq, 5120]. ClipProj lo sustituye por un Qwen3-VL-4B (2560 dimensiones) más un mapa lineal aprendido hacia el espacio de 5120 dimensiones que el DiT espera:
cond = ((h - mean_in) / std_in) @ W * std_out + mean_outMemoria del codificador medida:
| Configuración del codificador | VRAM |
|---|---|
| Qwen3-VL-32B original (NVFP4) | 15.7 GB |
| Qwen3-VL-4B + ClipProj (bf16) | 8.3 GB |
| Qwen3-VL-4B + ClipProj (fp8) | 5.2 GB |
| Qwen3-VL-4B + ClipProj (int8_convrot) | 4.5 GB |
Cómo se aprende la proyección
Los codificadores de 4B y 32B comparten el mismo tokenizer (151,936 tokens), por lo que un prompt produce tokens idénticos en posiciones idénticas en ambos. Eso hace que un mapeo posición por posición sea aprendible. La calibración es regresión ridge, no entrenamiento: codifica N prompts con ambos modelos, acumula XᵀX y XᵀY en streaming (memoria constante) y luego resuelve. Sin gradientes, sin épocas, sin tasa de aprendizaje.
Las mediciones del autor (MEASUREMENTS.md) reportan un coseno entre prompts de ~0.71 con un corpus de 2,000 prompts. En la generación real, la proyección se sostiene para prompts simples, prompts estructurados de múltiples tomas (subject_definitions, tomas con timecode, overall_soundscape) y fl2va con primer y último fotograma. También es robusta al intercambio de pesos del codificador: una proyección calibrada en bf16 funciona en una variante fp8 abliterada y en int8_convrot.
Uso en ComfyUI
Instala el nodo:
cd ComfyUI/custom_nodes
git clone https://github.com/nicolab28/ComfyUI-ClipProjReinicia ComfyUI. No hay requirements.txt: los nodos importan únicamente torch y los módulos propios de ComfyUI. En el primer inicio se crea la carpeta ComfyUI/models/clip_projections/; coloca allí las matrices de proyección (mmh3-4b-ClipProj*.safetensors, mmh3-8b-ClipProj*.safetensors). Los flujos de trabajo de ejemplo están en examples/: arrastra minimax_h3_clipproj.json al lienzo.
Un ejemplo de flujo de trabajo que combina el codificador pequeño con la reescritura estructurada de prompts H3 (examples/rewrite_h3_prompt.json).
Estado
La versión 0.1.4 del nodo libera la tarjeta GPU antes de cargar un codificador de reemplazo (corrigiendo los picos de OOM cuando de otro modo dos codificadores estarían residentes a la vez), libera las cachés de proyección al recargar y mantiene las redes residuales en su precisión guardada. Las matrices -mlp ahora son fp16 y tienen la mitad de tamaño (240 MB para el 4B, 288 MB para el 8B).
El proyecto es explícitamente una prueba de concepto: construido y probado en una única configuración (Windows 11, NVIDIA RTX 3090 / 4070 / 3060, ComfyUI 0.31.0) con una exploración deliberadamente limitada. Espera bordes sin pulir y cambios que rompen la compatibilidad.
Disponibilidad
- Nodo personalizado: nicolab28/ComfyUI-ClipProj
- Matrices de proyección: NicoLab28/ClipProj-MiniMax-H3 en Hugging Face (variantes de 4B y 8B, además de las opciones
celeby-mlp)
Comentarios
Inicia sesión con GitHub para unirte a la conversación.