CommunityImagengithub.com

hwcloud-scene-image

Genera imágenes de escenarios de producto en formato PNG de 1760×1120 con estilo de ilustración plana vectorial e interfaz de usuario. Soporta dos variantes (v2 y v3) y está optimizada para visualización reducida en tarjetas web.

¿Qué es hwcloud-scene-image?

Esta skill genera imágenes de escenarios de producto de alta calidad en formato PNG de 1760×1120 píxeles, con un estilo gráfico plano, vectorial y similar a una interfaz de usuario. Utiliza HTML/CSS para renderizar el diseño y luego lo convierte a PNG mediante un script, garantizando que todo el texto sea real, los trazos sean precisos y el resultado sea reproducible. Está pensada para desarrolladores, diseñadores o equipos de producto que necesitan ilustraciones consistentes, listas para usar en presentaciones, sitios web o páginas de producto. Ofrece dos variantes: v2 (con tarjetas redondeadas y etiquetas cortas, ideal para listas de 5-6 conceptos) y v3 (con iconos grandes, nodos circulares y elementos gráficos, adecuada para menos puntos pero con más impacto visual). La skill está optimizada para la visualización reducida: las imágenes se verán en tarjetas web de solo 240 píxeles de ancho, por lo que todos los elementos (texto, iconos y líneas) deben ser legibles a ese tamaño. Proporciona plantillas predefinidas, una biblioteca de 50 iconos lineales y 15 componentes gráficos, e incluye herramientas de verificación automática para evitar errores como líneas flotantes o texto demasiado pequeño.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sunhaha369369/hwcloud-scene-image-skill/tree/HEAD

Installed? Explore more Imagen skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Generador de Escenarios de Producto · v2 / v3

Dado un «título», genera una imagen de escenario de 1760×1120. El estilo ya está definido, no rediseñes, solo elige la maquetación + rellena el contenido.

Dos enfoques, elige primero:

v2 · Tarjetasv3 · Gráfico
Elemento principalNodos rectangulares redondeados + etiquetas cortasIconos grandes / Nodos circulares / Dispositivos gráficos
Área de contenidoTarjeta de contenido blanca completaNinguna, los gráficos flotan directamente sobre el panel azul claro
Cantidad de texto5–7 lugares con 2–4 caracteres3–4 lugares con 2–3 caracteres
Adecuado paraNecesidad de explicar 5–6 conceptos uno al lado del otroPocos puntos, que el gráfico hable por sí mismo
Plantillatemplate-b/c-*template-d/e-*

Por defecto usar v3 — estas imágenes a menudo se reducen a 240px de ancho al final; los gráficos resisten mejor la reducción que el texto. Solo cuando la información es "5 puntos paralelos, cada uno necesita ser leído", se vuelve a v2.

¿Por qué usar renderizado HTML/CSS en lugar de IA generativa? Este tipo de imagen tiene texto preciso y trazos de 1px. Los modelos de difusión desenfocan el texto y deforman los trazos, y el mismo prompt da resultados diferentes cada vez. Renderizado HTML → captura de pantalla: el texto siempre está nítido, se puede modificar en cualquier momento, se puede procesar por lotes y es reproducible.

¿Por qué la estructura debe ser simple? Estas imágenes a menudo se ven en un tamaño final de 240px de ancho (tarjeta web), no 1760. Con una reducción de 1/7, "seis nodos + minigráficos + barras finas" se convierten en ruido gris. El indicador clave de v2 es: reducido a 240 px, el título y la idea general de cada etiqueta aún deben ser legibles.

Regla de escala (recuerda esta tabla primero)

Ancho de visualizaciónReducciónTamaño real de texto de 48pxConclusión
1760 (PPT pantalla completa)1:148pxGrande pero aceptable
480 (Imagen grande en web)1/3.713pxCómodo
240 (Tarjeta web)1/7.36.6pxTamaño de verificación de diseño
190 (Miniatura de lista)1/9.35.2pxYa al límite

Por lo tanto: No debe aparecer ningún texto menor de 40px, ningún elemento menor de 300px de ancho puede soportar detalles.

Reglas de hierro (si se viola alguna, no se verá correcto)

  1. Lienzo 1760×1120 (11:7), fondo blanco puro, sin degradados, sin viñetas, sin bordes.
  2. Las coordenadas de carcasa + panel son fijas y no deben modificarse, esta es la única fuente de "profundidad". La tarjeta de contenido blanca de la tercera capa solo pertenece a v2; v3 no la coloca, los gráficos caen directamente sobre el panel.
  3. Toda la imagen tiene solo 1 mosaico de icono con degradado, de 170–200 px de lado, es el elemento visual principal.
  4. El número total de elementos en el área de contenido ≤ 7 (las líneas de conexión y los mangos no cuentan). Más de 7, se convertirán en ruido al reducir.
  5. Texto: Título 76px, etiquetas 48–50px, insignia 44px. No existe texto de 20px.
  6. Tono bloqueado en 200°–250°. El único color cálido #F58A8A solo se puede usar para "alerta".
  7. Sin personas, sin perspectiva, sin 3D, sin fotos, sin fondos ambientales. Todos los rectángulos estrictamente alineados con los ejes.
  8. Solo se genera un tamaño de 1760×1120, no exportar imágenes derivadas reducidas como 660×420.
  9. Todo el texto debe ser texto real (HTML), no imágenes o trazados.
  10. Cada línea de conexión debe comenzar y terminar en el borde de un elemento o en otra línea. Antes de entregar, la verificación de conexiones de render.py debe pasar (código de salida 0).

Geometría fija (copiar, no modificar)

CapaElementolefttopwhr
L0Lienzo0017601120–
L1Carcasa (tarjeta blanca)11066152096862
L2Panel (azul claro)14096146090850
L3Contenido (tarjeta blanca)180240131064440
L4Insignia (flotante)1312según necesidad32012832
–Título190132––76px / 600

Límites derivados (para alinear contenido):

  • Borde derecho del panel 1600, borde inferior 1004; borde derecho de la tarjeta de contenido 1490, borde inferior 884.
  • El espacio desde el borde inferior de la tarjeta de contenido hasta el borde inferior del panel es de 120px de banda azul (1004 − 884).
  • Borde derecho de la insignia 1632, sobrepasando el panel en 32px — esto es "romper el marco", no lo devuelvas a la tarjeta.
  • Ancho utilizable del área de contenido = 180→1490, menos 60 de padding a cada lado = 1190, los elementos deben colocarse entre 240–1430.
  • La insignia ocupa el espacio después de 1312, el borde derecho de los elementos de contenido no debe exceder 1230, de lo contrario serán cubiertos.

Degradado del panel (debe terminar en #F5FAFF, no más claro):

background:linear-gradient(180deg,#E4F1FF 0%,#E9F4FF 34%,#F2F9FF 74%,#F5FAFF 100%);

Límites de tamaño de elementos (v2)

ElementoTamañoDescripción
Mosaico degradado170–200 de ladoOcupa 10–11% de ancho, el bloque de color más grande de la imagen
Barra de capa ancha910×152Una capa completa, colocar "icono + nombre de capa"
Nodo regular330×132Tres en una fila, espaciado 35
Tarjeta pequeña de salida360×120Tres en una fila, espaciado 40
Insignia320×128Icono 46 + texto 44px
Icono50–54stroke-width 2.2, demasiado fino se pierde al reducir
Línea de conexión4pxdasharray 12 10, flecha con triángulo isósceles
Mango de selección20×20border 3px, centro alineado con la esquina del nodo

Flujo de trabajo

Paso 1 · Título largo → Título corto + Insignia

  • Tomar el nombre de la función, reducirlo a 4–6 caracteres chinos: «Visualización de documentos técnicos y bases de conocimiento…» → «Generación de imágenes para documentos».
  • Texto de la insignia 4 caracteres (320px solo caben 4 caracteres de 44px), debe ser "prometedor": «Insertar con un clic», «Solo modificar este bloque», «Diseño sin cambios», «Modificable localmente».
  • El texto de ejemplo debe ser una frase real, no escribas «Texto de ejemplo».

Paso 2 · Seleccionar maquetación

Característica del títuloMaquetaciónPlantilla
Un núcleo → múltiples salidas, radiación de capacidad, un centro y N escenariosD Rama central (v3)assets/template-d-orbit.html
A→B→C tres pasos, subir→analizar→almacenar, construir→probar→publicarE Tubería circular (v3)assets/template-e-pipeline.html
Entrada→generar→múltiples salidas, convertir, organizar (necesita etiquetas de texto)B Arriba→Abajo bifurcación (v2)assets/template-b-flow.html
Habla tanto de "generar con una frase" como de "poder modificar después de generar" (necesita sensación de interfaz)C-1 Estado de edición de lienzo (v2)assets/template-c-ui.html
Arquitectura en capas (acceso / servicio / datos) explicada capa por capaC-2 Estado de selección de capas (v2)assets/template-c-arch.html

Para detalles ver references/layouts.md. Si no estás seguro: ≤ 4 puntos usa D o E; la información debe presentarse en paralelo solo entonces usa C-2 (es la más clara en miniatura).

Paso 3 · Modificar plantilla

Copia una plantilla, solo modifica estas partes, no toques ni una línea del CSS de la carcasa:

  1. Texto de .title;
  2. Etiquetas cortas (2–4 caracteres) en cada entrada/cada nodo/cada tarjeta;
  3. Texto de la insignia .badge (4 caracteres) + top (distancia vertical entre dos insignias ≥40px);
  4. Texto de ejemplo en la barra de entrada / burbuja;
  5. Al eliminar un elemento, elimina también sus líneas de conexión y flechas, de lo contrario quedarán cabos sueltos;
  6. Al modificar líneas de conexión debes seguir el método de «Cómo dibujar líneas para que no se rompan» con «nodo central + tramos independientes», no añadas giros innecesarios.

Paso 4 · Renderizar

python <SKILL_DIR>/scripts/render.py <input.html> <output.png>

<SKILL_DIR> es el directorio de instalación de esta skill (donde se encuentra SKILL.md), no el directorio de trabajo actual — tu cwd suele ser el proyecto del usuario, escribir directamente scripts/render.py no encontrará el archivo.

El script copia el HTML a un directorio temporal ASCII y luego llama al navegador headless — las rutas con caracteres chinos hacen que el headless falle silenciosamente y genere una salida en blanco o anticuada. También verifica que la salida sea 1760×1120 y verifica automáticamente si los extremos de cada línea de conexión están sueltos — código de salida 3 significa líneas rotas, no entregar.

Paso 5 · Autocomprobación de miniatura (el paso más importante)

python <SKILL_DIR>/scripts/preview.py <output.png> --width 240

Debes mirar realmente la miniatura, verificar con references/checklist.md. El criterio de evaluación es solo una frase:

¿Reducida a 240px, aún se puede leer el título, la idea general de cada etiqueta, y "qué parte es importante"?

Si no se puede, reduce elementos, aumenta el tamaño de fuente, no intentes solucionarlo añadiendo detalles.

v3 · Gráfico (impulsado por iconos y elementos gráficos)

En una frase: Lo que se pueda dibujar, no lo escribas.

Cada elemento de v2 es "rectángulo redondeado + icono + texto", isomórficos entre sí, por lo que toda la imagen se lee como un montón de bloques de proceso. v3 solo cambia tres cosas: elimina la tarjeta de contenido blanca, triplica el tamaño de los iconos, deja que los gráficos asuman el significado.

Tres reglas estrictas

  1. No colocar la tarjeta de contenido blanca. Los gráficos flotan directamente sobre el panel azul claro; el fondo blanco solo se usa para pequeños elementos como insignias y flotadores. Los límites se definen con sombras, no con trazos.
  2. Iconos ≥ 84px. Ancho visual de línea = stroke × tamaño de visualización / 24, objetivo 7–9px (aproximadamente 1px al reducir a 240px).
  3. Etiquetas ≤ 4 lugares, cada una de 2–3 caracteres. Más de 4 lugares, significa que todavía estás usando texto para explicar cosas — vuelve y dibuja esa información como gráfico.

Biblioteca de iconos (50 piezas)

assets/icons.svg es un sprite. Incrusta todo el contenido en línea en la página para poder usarlo:

<body>
  <!-- Pega todo el contenido de assets/icons.svg aquí -->
  <svg><use href="#i-database"/></svg>
</body>

Las referencias externas (<use href="icons.svg#i-database"/>) serán bloqueadas por el navegador en file:// debido a restricciones de CORS, y los iconos desaparecerán por completo en la captura de pantalla headless, sin errores.

python <SKILL_DIR>/scripts/iconlib.py --list            # Lista todos los IDs agrupados
python <SKILL_DIR>/scripts/iconlib.py --preview p.png   # Genera un mural de iconos para seleccionar

Agrupaciones: Gráficos / Diagramas 12 · Elementos técnicos 15 · AI y contenido 18 · Interacción 5.

Dentro de symbol no se escribe stroke-width, ajústalo según el tamaño de visualización:

Tamaño de visualizaciónstroke
84–1081.9–2.0
130–1401.5
170–1901.3

Si no encuentras uno adecuado, elige uno similar, no dibujes nuevas formas a mano — si el estilo de línea no es uniforme, toda la imagen se notará.

Componentes gráficos (15 piezas)

assets/parts.html es una página con todos los componentes, cada uno con ejemplo visual + nombre de clase + tamaño, simplemente copia el HTML + CSS:

Mosaico degradado · Insignia circular blanca · Insignia flotante que rompe el marco · Cápsula de etiqueta · Marco de ventana · Apilamiento de capas · Flecha degradada · Línea discontinua · Mango de selección · Burbuja de comando · Progreso circular · Micro gráfico de barras · Textura de puntos · Estrella · Mosaico seleccionado.

Dos maquetaciones

  • D Rama central → Un núcleo → Múltiples salidas. El centro son «tres páginas desplazadas apiladas + estrella», no un solo icono.
  • E Tubería circular → A→B→C tres pasos. La parte central es el único elemento degradado, y también el primer punto de atención del lector.

Ambos están compuestos por los componentes anteriores, solo necesitas cambiar iconos y etiquetas de 2–3 caracteres.

Esqueleto de maquetación v2

B Arriba→Abajo bifurcación (template-b-flow.html) Cápsula de entrada 690×136 centrada → línea vertical → mosaico degradado 200 → línea vertical hasta línea principal → línea principal horizontal se divide en tres ramas → tres tarjetas de salida 360×120. Insignia en la esquina superior derecha.

C-1 Estado de edición de lienzo (template-c-ui.html) Mosaico superior izquierdo 170 + barra de entrada 850×118 → placa de lienzo azul claro 1160×352, que contiene tres nodos 330×132, el nodo central seleccionado → burbuja de comando inferior 430×112, conectada al nodo seleccionado con una línea discontinua de 4px. Insignia en la esquina superior derecha.

C-2 Estado de selección de capas (template-c-arch.html) Tres barras de capa 910×152 apiladas verticalmente (espaciado 40, todo el grupo centrado verticalmente), la barra central seleccionada con un pequeño mosaico degradado de 104px → dos insignias a la derecha. Menor cantidad de información, mejor legibilidad en miniatura.

Componentes de elementos v2 (6 piezas, suficientes)

  1. Mosaico de icono degradado — 170–200 / r44-52 / linear-gradient(135deg,#4A9DFC,#5E92F9 45%,#7C6BF5) + icono lineal blanco (84-100px, stroke-width 1.6) + luz suave inferior 0 18 40 rgba(74,157,252,.42), 0 0 40 8 rgba(124,107,245,.14).
  2. Insignia flotante — Fondo blanco 320×128 / r32 + 0 20 48 rgba(31,71,141,.16) + icono azul 46px + texto 44px.
  3. Barra de capa / Nodo — Fondo blanco + borde 3px #C9DCF2 + bloque de icono redondeado azul claro de 90px + etiqueta 50px/500. No coloques barras esqueléticas, escribe directamente el texto real.
  4. Estado seleccionado — 5px #4A9DFC + 0 0 0 12px rgba(74,157,252,.11) + mangos de 20px en las cuatro esquinas (centro alineado con la esquina) + pequeño mosaico degradado opcional incrustado. No dibujes un cuadro de selección discontinuo (las líneas de conexión lo atravesarán).
  5. Línea de conexión — 4px / #A9C7EC / dasharray 12 10, la flecha es un triángulo isósceles M827 716 h16 l-8 14 z. No se puede usar un triángulo rectángulo.
  6. Placa de lienzo — #F8FBFF / 2px #DDEBFB / r36, agrupa "nodos + burbujas" para evitar que la imagen se disperse.

Cómo dibujar líneas para que no se rompan

Las líneas de conexión son la única parte que necesita coordenadas absolutas escritas a mano, y también la más propensa a errores. Un segmento de línea que falte unos cientos de píxeles, toda la imagen se verá "como si fuera correcta" — en la imagen original de 1760 no se nota sin ampliar, al reducir a 240px es completamente invisible, hasta que la imagen ya se ha entregado y alguien lo señala.

Las bifurcaciones deben dividirse en «nodo central + tramos independientes»

Incorrecto — un solo path gira en el camino y se bifurca, la línea principal solo cubre la rama más a la izquierda:

<path d="M835 652 V690 H435 V716"/>   <!-- Vertical → Horizontal izquierdo → Vertical, se rompe aquí -->
<path d="M835 690 V716"/>
<path d="M1235 690 V716"/>            <!-- El punto de inicio cuelga en el vacío -->

Correcto — todas las intersecciones coinciden al nivel de los extremos:

<path d="M835 652 V690"/>    <!-- Línea vertical cae al nodo central (835,690) -->
<path d="M835 690 H435"/>    <!-- Mitad izquierda de la línea principal -->
<path d="M835 690 H1235"/>   <!-- Mitad derecha de la línea principal -->
<path d="M435 690 V716"/>    <!-- Tres ramas, el punto de inicio y de la línea principal son iguales -->
<path d="M835 690 V716"/>
<path d="M1235 690 V716"/>

Tres reglas:

  1. Un path solo hace una cosa: o baja recto, o cruza horizontalmente. No gira en el camino y luego se bifurca.
  2. Los dos extremos de la línea principal deben ser iguales a la x de la rama más a la izquierda y más a la derecha, estos tres números deben ser literalmente iguales en el código. Si modificas un lado, el otro debe seguir.
  3. La y del extremo de la rama = top de la tarjeta − 14 (14 es la altura de la flecha), la y del punto de inicio de la rama = y de la línea principal.

Cada renderizado se verifica automáticamente

render.py después de renderizar llama automáticamente a linklint.py: hace que el navegador calcule los extremos reales de cada línea, y determina si está tocando el borde de algún elemento (≤8px) o se cruza con otra línea (≤3px). Si no cumple, está suelto, imprime directamente las coordenadas:

[x] Se encontró 1 extremo suelto:
    Línea 6, punto de inicio en (1235,690), el objeto más cercano está a 40px  d="M1235 690 V716"

En este caso, el código de salida es 3, no entregar. También se puede verificar por separado:

python <SKILL_DIR>/scripts/linklint.py scene.html -v

Las formas rellenas como triángulos de flecha y rombos de relación no participan en la verificación (su base ya está tocando el extremo de la línea), pero se consideran objetivos conectables — por lo tanto, conectar una línea a una flecha es válido.

Esta verificación solo reconoce geometría, no "se ve más o menos bien". Una vez detectó un accidente real: A la rama derecha de una bifurcación en tres le faltaba un tramo completo de 800px de línea horizontal, y toda la imagen se veía completamente normal a simple vista.

Errores comunes (todos reales)

SíntomaCausaSolución
Al reducir a 240px se vuelve una mancha grisElementos demasiado pequeños o muchosReducir elementos a ≤7, aumentar tamaño de fuente a 48px, engrosar trazos a 3–5px
Las barras esqueléticas parecen ruido gris en miniaturaUsar barras decorativasReemplazar con etiquetas cortas reales (2–4 caracteres)
Aparece una banda blanca en la parte inferior, el panel parece solo tener bordeEl degradado se desvanece a #FBFCFETerminar en #F5FAFF
La insignia cubre el contenidoEl elemento de contenido supera 1230Controlar el borde derecho del contenido dentro de 1230
El mango flota fuera de la esquinaEl top escrito a mano no se reduce a la mitadhandle.left = x de la esquina − 10, top = y de la esquina − 10
La línea discontinua no se veCubierta por el halo del nodo seleccionadoAgregar z-index:6 al svg de la línea de conexión
Flecha torcida, parece un triángulo rectánguloRuta mal escritaUsar triángulo isósceles, ver componente 5
La línea principal horizontal presiona la tarjetaEl punto de bifurcación demasiado bajoParte inferior del mosaico → línea principal ≥38px, línea principal → tarjeta ≥40px
Espaciado desigual entre tres tarjetasleft escrito a manoDistribuir equidistantemente y verificar si el centro está alineado con la flecha
Renderizado en blanco o anticuadoHTML en ruta con caracteres chinosUsar scripts/render.py
Las tres imágenes tienen densidades inconsistentesTamaños de elementos diferentesTodos tomar valores de la tabla «Límites de tamaño de elementos»
La línea de conexión se rompe a medio camino, la rama cuelgaUn solo path gira y solo cubre parte de las ramasDividir en «nodo central + tramos independientes», ver «Cómo dibujar líneas para que no se rompan»
La línea discontinua de la burbuja tiene un espacio con el nodoEl punto de inicio no cae en el borde del elementoInicio y = bottom del elemento, dejar que linklint verifique a 0px

Índice de archivos

Esta skill es autocontenida: las siguientes rutas son relativas al directorio donde se encuentra SKILL.md, no necesitas acceder a otros repositorios o documentación externa.

SKILL.md
├── references/
│   ├── style-tokens.md    Tabla completa de tokens de colores, tamaños de fuente, radios y sombras (incluye tokens gráficos v3)
│   ├── layouts.md         Diagramas de esqueleto de las cinco maquetaciones, escenarios de aplicación y recetas de elementos
│   └── checklist.md       Verificación ítem por ítem antes de entregar (incluye verificación de miniatura de 240px e ítems específicos de v3)
├── assets/
│   ├── icons.svg          Sprite de 50 iconos lineales (incrustar en la página y usar `<use href="#i-xxx"/>`)
│   ├── parts.html         Página con 15 componentes gráficos, se pueden ver y copiar
│   ├── template-d-orbit.html      D Rama central (v3)
│   ├── template-e-pipeline.html   E Tubería circular (v3)
│   ├── _blank-shell.html          Solo la carcasa, para empezar desde cero la maquetación
│   ├── template-b-flow.html       B Arriba→Abajo bifurcación (v2)
│   ├── template-c-ui.html         C-1 Estado de edición de lienzo (v2)
│   └── template-c-arch.html       C-2 Estado de selección de capas (v2)
├── scripts/
│   ├── render.py          HTML → 1760×1120 PNG (manejo de rutas + detección de navegador + verificación de líneas)
│   ├── linklint.py        Verifica si los extremos de cada línea de conexión están sueltos (render.py lo llama automáticamente)
│   ├── preview.py         Genera miniatura de 240px para autocomprobación de miniatura
│   └── iconlib.py         Lista IDs de iconos / genera un mural de iconos
└── examples/              5 imágenes finales + archivos fuente renderizables, solo como referencia, no participan en la generación

El texto y los gráficos en las plantillas son ejemplos reales y funcionales, es más rápido modificar directamente sobre ellos que empezar desde una página en blanco.

Skills relacionados