Héroe del Cómic — Herramientas
Acompañante de héroe-del-cómic. Esa habilidad describe cómo se ven las páginas buenas; esta cubre las herramientas que las hacen. La mayoría de las malas rotulaciones provienen de malas herramientas: elipses rasterizadas dibujadas a mano, fuentes del sistema y texto pegado plano sobre el arte.
1. Arte de panel con ComfyUI
Cómo ejecutar ComfyUI en sí mismo (instalar modelos, lanzar, ejecutar plantillas y flujos de trabajo) pertenece a las habilidades genéricas de ComfyUI en vendor/comfy-cli-skills/ en la raíz de este repositorio. Esta sección cubre cómo usarlas para cómics.
1.1 Configuración de generación para un proyecto de cómic
- Dos flujos de trabajo por proyecto: texto a imagen para paneles nuevos, edición de imagen para correcciones de continuidad, emparejamiento de tomas y texto en accesorios. Elígelos una vez, con un modelo y configuraciones fijas, y regístralos en la biblia del proyecto.
- Un panel = un trabajo = una imagen guardada. Eso hace que cada panel sea rastreable hasta su indicación, semilla y configuración.
- Dimensiona cada render desde el diseño, no al revés. Toma el recuadro del panel desde la miniatura y renderiza a aproximadamente 1 megapíxel en esa relación de aspecto (por ejemplo, 1408×704 ancho, 768×1024 alto, 1536×640 tira). Luego escala o recorta dentro del recuadro, manteniendo los detalles críticos de la historia alejados de los bordes del recorte.
- Procesa por escena, no por página, para que la luz, la paleta y los fondos se mantengan consistentes en los paneles de una escena.
1.2 Consistencia
- Primero, una hoja de modelo. Genera una vuelta y una hoja de expresiones para cada personaje, elige la mejor y reutilízala como imagen de referencia (IP-adapter, entrada de edición de imagen o un LoRA de personaje si puedes entrenar uno).
- Anclajes fijos (§4.5 de
comic-personajes.mdde héroe-del-cómic) palabra por palabra en cada indicación, enumerados de izquierda a derecha; un ancla de estilo para todo el proyecto. - Semillas: registra la semilla de cada panel aceptado para que pueda ser regenerado o variado.
- Control de pose: usa un OpenPose o depth ControlNet cuando la disposición importe (orden de hablantes, líneas de mirada, la línea de 180°).
1.3 Reglas de indicación que se mantienen
- Sabe si los negativos funcionan. Los modelos destilados ejecutados con CFG 1 (FLUX.2 klein, Z-Image-Turbo) generalmente ignoran la indicación negativa. Con ellos, expresa lo que quieres de manera positiva ("exactamente cuatro personas", "frente relajada y suave"). Usa negativos solo con modelos ejecutados con CFG real, o agrega un nodo de guía negativa (por ejemplo, NAG).
- Indica en el idioma del modelo. FLUX y Qwen/Z-Image leen oraciones naturales; SDXL lee etiquetas separadas por comas. Para modelos de oraciones, usa un orden fijo: toma y ángulo → cada figura con posición, de izquierda a derecha → la única acción → expresión como anatomía → escenario → luz → estilo.
- Expresiones como anatomía, nunca nombres. "Aburrido" tiende a producir un ceño fruncido. Descríbelo en su lugar: "párpados superiores medio caídos, cejas altas y planas, boca una línea plana cerrada". Donde los negativos funcionen, también indica negativamente el fallo ("ceño fruncido, ceño fruncido").
- Colores de vestuario dentro de la cláusula que nombra la parte del cuerpo ("mono marino a través de los hombros"). Los primeros planos tienden hacia colores genéricos; indica negativamente el color de deriva.
- Sin duplicados: un ancla por figura, conteo y orden explícitos ("exactamente tres personas: desde la izquierda, …"), y, donde los negativos funcionen, "personajes duplicados, clon, personas extra" en el negativo.
- Reserva espacio para el texto en la indicación ("el tercio superior es una pared plana vacía"). Pide una imagen limpia y sin palabras ("sin texto, sin letras, sin globos de diálogo", en el negativo donde funcione, de lo contrario redactado positivamente como "imagen limpia sin rotulación"), excepto en una pasada deliberada de edición de texto en accesorios.
- Escenifica desde la miniatura. Convierte la miniatura en un bloqueo aproximado (figuras de palo, cajas para muebles) y aliméntalo como una imagen de control de pose, lineart o profundidad, para que la colocación del elenco, la escala y quién está en la habitación sigan el plan.
- Genera varias, elige una. Renderiza 3–4 semillas por panel y elige contra el OBJETIVO del panel y los anclajes antes de cualquier rotulación.
1.4 Edición en lugar de regenerar
Usa el flujo de trabajo de edición de imagen con el panel existente como entrada:
- Paneles coincidentes (misma habitación, gags de repetición, tomas de reacción): gradúa el panel anterior en el nuevo en lugar de generar desde cero.
- Eliminación supera a reescenificación. "Elimina a la segunda persona en la mesa" funciona; "muévelo detrás de la silla" generalmente falla.
- Correcciones de continuidad: extras perdidos, colores de vestuario incorrectos, un accesorio en la mano equivocada. Inpinta o edita solo esa región.
- Texto en accesorios (§4): una palabra corta escrita en una insignia o letrero, verificada a 1:1.
1.5 Revisión antes de rotular
- Compara cada render con sus anclajes y el OBJETIVO del panel: rostro, colores de vestuario, accesorios y manos, dirección de la luz, personas extra, glifos perdidos, zona de texto vacía.
- Mantén un registro por panel (indicación, semilla, configuración, aceptado o rechazado y por qué) para que las correcciones sean reproducibles.
1.6 Configuraciones de modelo recomendadas
8 GB de VRAM (el valor predeterminado funcional):
| Trabajo | Modelo y archivos | Notas |
|---|---|---|
| Paneles y ediciones | FLUX.2 [klein] 4B fp8 (flux-2-klein-4b-fp8) + codificador de texto qwen_3_4b + flux2-vae | ~4 pasos, CFG 1. El modo de edición toma imágenes de referencia (hojas de modelo) para personajes en modelo. Apache-2.0. |
| Paneles individuales de mayor calidad, texto en accesorios | Z-Image-Turbo int8 (z_image_turbo_int8_convrot) + qwen_3_4b_fp8_mixed + ae.safetensors | Plantilla image_z_image_turbo_int8; ~8 pasos. Mejor seguimiento de texto e instrucciones; sin edición de imagen de referencia. Control de pose/profundidad a través de la plantilla ControlNet de Z-Image-Turbo Fun Union. Apache-2.0. |
| Control de escenificación | SDXL + OpenPose ControlNet + IP-adapter | El control de pose y diseño más maduro a 8 GB; refina el resultado con Klein. |
| Recortes de personajes | comfyui-rmbg con BiRefNet toonout (hecho para dibujos animados e ilustraciones) o RMBG-2.0 | Para el flujo de trabajo en capas a continuación. |
| Ampliación de escala | 4x-UltraSharp, en mosaico | Renderiza ~1 MP, luego amplía al tamaño de impresión. |
A 8 GB: usa pesos fp8/int8/GGUF; mueve el codificador de texto a la CPU o a una segunda GPU cuando esté ajustado; decodificación VAE en mosaico para imágenes grandes; un modelo cargado a la vez; mantén cualquier LLM local en una GPU diferente.
Personajes en capas: genera cada personaje sobre un fondo plano y liso, recórtalo (BiRefNet toonout) y combínalos sobre un fondo compartido por escena. Esto soluciona los problemas de escenificación, escala y quién está en la habitación que las indicaciones por sí solas no pueden, y permite que los accesorios mantengan el mismo tamaño en todos los paneles.
Con más VRAM: FLUX.2 [klein] 9B (~20 GB; no comercial), Qwen-Image-2.1 (~24 GB; 10 imágenes de referencia, salida RGBA transparente, ediciones enmascaradas; licencia de investigación), FLUX.2 [dev] (24 GB+ en fp8; calidad superior y múltiples referencias; no comercial). Verifica la licencia de cada tarjeta de modelo antes del uso comercial; el conjunto de 8 GB anterior es todo Apache-2.0.
2. Motor de rotulación: dibuja vectores, no píxeles
2.0 Usa la herramienta de rotulación (predeterminada)
No escribas código de rotulación. Usa scripts/letterer.py, que se envía dentro de la carpeta de esta habilidad (junto a este SKILL.md), junto con scripts/README.md, scripts/styles.json y las fuentes aprobadas en scripts/fonts/. Resuelve la ruta relativa a este SKILL.md, dondequiera que se haya clonado el repositorio; nunca copies el script en un proyecto. Ya sigue todas las reglas de esta sección y ejecuta las comprobaciones de control de calidad de §5 por sí mismo. Requisitos: Python 3.9+ con Pillow y numpy (pip install -r scripts/requirements.txt); recomendado mediapipe, que activa la verificación automática de rostros (los globos deben mantenerse fuera de los rostros) y "tail_to": "auto".
Flujo de trabajo:
python scripts/letterer.py grid --image panel_o_pagina.png --out cuadricula.pngy mira la superposición. Lee los rectángulos de los paneles, el recuadro de la cabeza y la boca de cada hablante, y las áreas abiertas. Luego elige la posición de cada globo y el punto de puntería de la cola según las reglas de colocación encomic-rotulacion.mdde héroe-del-cómic §12.2 y el procedimiento paso a paso en §12.7: globo en espacio abierto cerca de la cabeza, cola apuntando a la boca pero terminando fuera de la cabeza. Todas las coordenadas son relativas: 0.0–1.0 desde la esquina superior izquierda.- Escribe una especificación de página (JSON) con los elementos en orden de lectura:
{
"image": "tira.png", "out": "tira_rotulada.png",
"panels": [[0.0125,0.03,0.329,0.97], [0.342,0.03,0.658,0.97], [0.671,0.03,0.988,0.97]],
"avoid": "mascara_rostros.png",
"items": [
{"style": "declaration", "text": "La ciudad llama. Yo respondo.", "zone": [0.03,0.06,0.31,0.24]},
{"style": "speech", "text": "¿Alguien más escuchó|ese ruido?", "at": [0.46,0.30], "tail_to": [0.52,0.52]},
{"style": "sfx-micro", "text": "bzzt bzzt", "at": [0.39,0.62]},
{"style": "sfx", "text": "KA-CHUNK", "at": [0.80,0.88], "size": 2.4, "rotate": -8}
]
}
python scripts/letterer.py page especificacion.json. El código de salida0significa que cada verificación de control de calidad pasó;1significa que se renderizó pero el control de calidad falló, así que lee las fallas impresas, corrige la especificación (acerca el globo al hablante, agranda la zona, corta palabras, reajusta con|) y ejecútalo de nuevo;2significa un error (estilo desconocido, falta la fuente, especificación incorrecta).- Mira el PNG a tamaño completo y como miniatura. Guarda el SVG (editable) y el
_qa.json(números medidos) con la página.
Campos de elementos: style; text (| fuerza un salto de línea, de lo contrario se ajusta automáticamente en un diamante; _palabra_ subraya para énfasis); at [x,y] centro o zone [x0,y0,x1,y1] para encajar dentro; tail_to [x,y] punto de puntería: no la boca en sí, sino un punto en el espacio abierto justo fuera de la cabeza, en la línea desde el globo hacia la boca, aproximadamente a 1 ch del rostro (la herramienta detiene la punta un poco antes, por lo que la cola apunta al hablante sin tocarlo); omítelo con "no_tail": true. No uses "auto": devuelve los labios en sí; opcional panel índice, size multiplicador, rotate (grados, en sentido horario), fill (fondo), ink (contorno), text_color, font, tail_bend, link (índice de un globo anterior del mismo hablante: une los dos), bleed (true para romper el borde del panel a propósito), seed.
Campos de página más allá de lo básico: defaults establece colores y fuente para cada elemento ({"fill": "#FDF6E3", "ink": "#2B2B2B", "text_color": "#1F3A7A"}); styles anula un estilo para esta página ({"speech": {"fill": "#FFF7D6"}}); avoid predeterminado a "auto" (los rostros detectados están protegidos), o una imagen de máscara, o false.
Rótula la página o tira ensamblada en una sola ejecución de page, nunca panel por panel. Una ejecución mantiene el tamaño de rotulación idéntico en todos los paneles y permite que el control de calidad verifique el orden de lectura y las superposiciones en toda la página.
Campos de página: rutas image, out/svg/qa, panels (muy recomendado: se usa para espacios de borde, orden de lectura y tamaño de rotulación), ch (altura de mayúscula en píxeles; el valor predeterminado es la mediana del lado corto del panel ÷ 30, la misma en todas partes), avoid (blanco = rostros, manos o acción clave que debe permanecer libre; constrúyelo a partir de una pasada de segmentación), direction (ltr, o rtl para manga).
Estilos (ejecuta python scripts/letterer.py styles para la lista en vivo con usos de una línea):
- Diálogo:
speech,speech-hand(tinta a mano, cursiva, cola curva),emphasis(la línea grande; subraya con_palabra_),whisper(discontinuo),strain(contorno tembloroso, amarillo pálido: palabras entre dientes apretados),electronic(cola en zigzag). - Pensamientos:
thought-1(=thought, nube esponjosa),thought-2(festones finos),thought-3(óvalo suave con burbujas). En caso de duda, usathought-1: es el predeterminado siempre que se solicite un globo de pensamiento sin más detalles. Una estela de pensamiento necesita al menos 2.5 ch de espacio abierto entre el globo y su punto de puntería, o el control de calidad falla. Consulta §12.8 decomic-rotulacion.mdde héroe-del-cómic. - Fuerte:
shout,shout-2(explosión dibujada a mano),burst(sin cola). - Recuadros:
caption,caption-hand,declarationydeclaration-hand(voz en off citada; apila varios hacia abajo en una página para un monólogo),locator,narrator. - Efectos sonoros:
sfx(en la fuente, con un contorno exterior blanco fino),sfx-micro(sonidos pequeños),sfx-stack(un sonido repetido apilado junto a su fuente:"wub|wub|wub").
Mantén un aspecto de diálogo por libro: ya sea los estilos lisos o los -hand, no los mezcles dentro de una escena. Consulta examples/styles/hoja_rotulada.png en la raíz del repositorio para ver todos los estilos lado a lado. Agrega un estilo añadiendo una entrada a styles.json, nunca escribiendo nuevo código de dibujo.
Elemento único rápido: python scripts/letterer.py bubble --image entrada.png --out salida.png --text "¡AGÁCHATE!" --style shout --at 0.17,0.25 --tail-to 0.155,0.47 --panel 0.0125,0.03,0.329,0.97
Si falta la herramienta, sigue las reglas a continuación para construir el equivalente y aún así producir los mismos números de control de calidad.
- Construye la rotulación como SVG y renderízalo con resvg, cairosvg o Chromium sin cabeza (Playwright). Los vectores proporcionan curvas suaves, kerning real, trazos limpios y una capa editable. No dibujes globos con llamadas de elipse rasterizadas.
- Usa una fuente de cómic real.
- Diálogo: Comic Neue, Patrick Hand, Anime Ace u otra fuente de letra a mano, todo mayúsculas, una fuente para toda la obra.
- Efectos sonoros y títulos: una fuente de exhibición pesada como Bangers.
- Nunca un sans del sistema (Arial, Helvetica, DejaVu). Falla ruidosamente si el archivo de fuente falta en lugar de recurrir silenciosamente.
- El diálogo y los pies de foto usan solo una fuente de letra a mano, simple y vertical. Sin fuentes de exhibición, tecno, futuristas, de esténcil, de terror o novedosas para palabras que la gente debe leer: las letras con barras transversales faltantes o formas estilizadas E/A/M ralentizan la lectura y cambian el tono. Las fuentes decorativas son solo para efectos sonoros, títulos y logotipos.
- Mantén una lista aprobada en la biblia del proyecto (por ejemplo, diálogo: Comic Neue Bold o Anime Ace; efectos sonoros: Bangers) y rechaza cualquier fuente que no esté en ella.
- Los globos se ajustan al texto:
- Ajusta el texto en un diamante: línea superior corta, la más ancha en el medio, línea inferior corta, sin última línea de una sola palabra.
- Mide el bloque de texto y dibuja un óvalo redondeado o superelipse a su alrededor.
- Agranda la pared hasta que cada esquina del texto la despeje por al menos una altura de mayúscula.
- Nunca aprietes el texto en una elipse fija.
- Las colas son caminos curvos y cónicos, no triángulos:
- Base aproximadamente ⅛ del ancho del globo (nunca menos de ~0.8 altura de mayúscula), en el lado más cercano al hablante.
- Longitud hasta aproximadamente la mitad de la altura del globo (o 2.5 ch para globos pequeños), curvando hacia la boca y...