CommunityImagemgithub.com

hwcloud-scene-image

Gera「imagem de cenário de produto」— PNG de 1760×1120 em estilo de diagrama de UI plano vetorial. Características: tela branca pura, três camadas de cartões de bordas arredondadas, gradiente azul-violeta de 135°, perspectiva estritamente 0°, sem pessoas nem fotos. Oferece duas vertentes: v2 (cartões + rótulos curtos) e v3 (ícones grandes / nós circulares / elementos gráficos, com texto mínimo), com 50 ícones lineares e 15 peças gráficas integrados. A restrição central é a legibilidade em miniatura: a imagem será colocada em um cartão de página web e reduzida a 240px de largura. Use esta skill quando precisar de uma ilustração estilizada e consistente para recursos de produtos, pontos de venda de soluções ou capacidades técnicas, que possa ser inserida diretamente em apresentações, sites ou páginas de produtos, ou quando precisar produzir em lote ilustrações no mesmo estilo com base em títulos. Palavras-chave: cena de produto, ilustração de cenário, diagrama funcional, ilustração, imagem de suporte, diagrama iconográfico, ilustração gráfica, ilustração vetorial plana, flat vector product illustration, product scenario illustration.

O que é hwcloud-scene-image?

Esta skill gera imagens de cenário de produto no formato PNG de 1760×1120, com um estilo de diagrama de UI vetorial plano. Ela é especialmente útil para desenvolvedores e profissionais de marketing que precisam de ilustrações consistentes e de alta qualidade para documentação técnica, apresentações, sites ou páginas de produto, sem depender de ferramentas de design gráfico ou modelos de difusão que frequentemente produzem resultados inconsistentes ou ilegíveis quando reduzidos. A skill oferece duas abordagens principais: v2 (baseada em cartões com rótulos de texto) e v3 (orientada a ícones e elementos gráficos, com texto mínimo), sendo que a v3 é recomendada por padrão, pois seus elementos gráficos suportam melhor a redução para 240px de largura em cartões de página web. A renderização é feita com HTML e CSS, garantindo texto nítido e elementos consistentes, e o pipeline de scripts (render.py, linklint.py, preview.py) automatiza a criação, verificação de conectividade de linhas e pré-visualização em miniatura. As regras de design são rigorosas: tela branca, 3 camades de cartões com gradiente azul, sem pessoas, sem fotos, sem perspectiva 3D, e o tamanho máximo de texto é de 44px para tags. As templates v2 e v3 possuem layouts predefinidos (B, C-1, C-2, D, E) que podem ser facilmente personalizados para diferentes necessidades de apresentação de informações, como fluxos, arquiteturas, ou processos circulares.

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

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Gerador de Imagens de Cenário · v2 / v3

Dado um "título", produza uma imagem de cenário de 1760×1120. O estilo já está definido; não o redesenhe, apenas escolha o layout + preencha o conteúdo.

Duas abordagens, escolha uma:

v2 · Cartõesv3 · Gráfico
CorpoNós retangulares arredondados + rótulos curtosÍcones grandes / nós circulares / elementos gráficos
Área de conteúdoPossui um cartão de conteúdo branco sólidoNão possui; os elementos gráficos flutuam diretamente sobre o painel azul claro
Quantidade de texto5–7 locais com 2–4 caracteres3–4 locais com 2–3 caracteres
Adequado paraQuando é necessário listar e explicar 5–6 conceitos lado a ladoPoucos pontos-chave, o gráfico deve falar por si
Templatetemplate-b/c-*template-d/e-*

Por padrão, use v3 — essas imagens geralmente são reduzidas para 240px de largura, e os gráficos suportam melhor a redução do que o texto. Use v2 apenas quando a informação for "5 itens em paralelo, cada um precisa ser lido".

Por que usar renderização HTML/CSS em vez de IA geradora de imagens: Estas imagens têm texto preciso e contornos de 1px. Modelos de difusão borram o texto e tremem os contornos, e o mesmo prompt produz resultados diferentes a cada vez. Renderização HTML → captura de tela: o texto é sempre nítido, facilmente editável, reproduzível e pode ser feito em lote.

Por que a estrutura deve ser simples: O tamanho final de visualização dessas imagens é geralmente 240px de largura (cartão de página web), não 1760px. Com uma redução de 1/7, "seis nós + mini gráficos + barras de esqueleto finas" se transformam em ruído cinza. O requisito mínimo para v2 é: reduzido a 240px, o título e a ideia geral de cada rótulo ainda devem ser legíveis.

Escala de Redução (Memorize Esta Tabela Primeiro)

Largura de VisualizaçãoReduçãoTamanho real do texto de 48pxConclusão
1760 (PPT em tela cheia)1:148pxGrande, mas aceitável
480 (Imagem grande na web)1/3.713pxConfortável
240 (Cartão da web)1/7.36.6pxTamanho de verificação de design
190 (Miniatura de lista)1/9.35.2pxJá no limite

Portanto: qualquer texto menor que 40px não deve aparecer, e qualquer elemento com menos de 300px de largura não suporta detalhes.

Regras de Ferro (Violar qualquer uma delas fará com que o resultado não pareça correto)

  1. Tela 1760×1120 (11:7), fundo branco puro, sem gradiente, sem vinheta, sem borda.
  2. As coordenadas das duas camadas externas (casca + painel) devem ser fixas e não alteradas; esta é a única fonte de "profundidade". O cartão de conteúdo branco da terceira camada pertence apenas ao v2; o v3 não o usa, os elementos gráficos ficam diretamente sobre o painel.
  3. A imagem inteira tem apenas 1 bloco de ícone gradiente, 170–200px de lado, e é o elemento visual principal.
  4. Número total de elementos na área de conteúdo ≤ 7 (linhas de conexão e alças não contam). Mais de 7, e eles se transformarão em ruído quando reduzidos.
  5. Texto: Título em 76px, Rótulos em 48–50px, Badge (flutuante) em 44px. Não existem palavras com tamanho 20px.
  6. Matiz de cor bloqueado 200°–250°. A única cor quente #F58A8A só pode ser usada para "alerta".
  7. Sem pessoas, sem perspectiva, sem 3D, sem fotos, sem fundo de ambiente. Todos os retângulos estritamente alinhados aos eixos.
  8. Saída apenas no tamanho 1760×1120, não exporte imagens derivadas reduzidas como 660×420.
  9. Todo texto deve ser texto real (HTML text), não imagem ou path.
  10. Ambas as extremidades de cada linha de conexão devem tocar a borda de um elemento ou outra linha . Antes da entrega, a verificação de conexão do render.py deve ser aprovada (código de saída 0).

Geometria Fixa (Copie, não altere)

CamadaElementolefttopwhr
L0canvas0017601120–
L1shell (cartão externo branco)11066152096862
L2panel (painel azul claro)14096146090850
L3content (cartão de conteúdo branco)180240131064440
L4badge (flutuante)1312personalizado32012832
–title (título)190132––76px / 600

Limites derivados (use para alinhar o conteúdo):

  • Borda direita do painel 1600, borda inferior 1004; borda direita do cartão de conteúdo 1490, borda inferior 884.
  • A borda inferior do cartão de conteúdo até a borda inferior do painel deixa uma faixa azul de 120px (1004 − 884).
  • Borda direita do badge 1632, ultrapassando o painel em 32px — isso é "quebrar a moldura", não o coloque de volta dentro do cartão.
  • Largura útil da área de conteúdo = 180→1490, menos 60px de padding interno em cada lado = 1190; os elementos devem ser colocados entre 240–1430.
  • O badge ocupa o espaço após 1312; a borda direita dos elementos de conteúdo não deve ultrapassar 1230, ou serão sobrepostos.

Gradiente do painel (deve terminar em #F5FAFF, não mais claro):

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

Tamanhos Mínimos de Elementos (v2)

ElementoTamanhoDescrição
Bloco de gradiente170–200 de ladoOcupa 10–11% da largura, a maior área de cor da imagem
Faixa larga910×152Use uma faixa para cada camada, coloque "ícone + nome da camada"
Nó regular330×132Três em uma linha, espaçamento de 35
Cartão de saída pequeno360×120Três em uma linha, espaçamento de 40
Badge320×128Ícone de 46 + texto de 44px
Ícone50–54stroke-width 2.2, muito fino e desaparece na redução
Linha de conexão4pxdasharray 12 10, seta com triângulo isósceles
Alça de seleção20×20border 3px, centro alinhado com o canto do nó

Fluxo de Trabalho

Etapa 1 · Título Longo → Título Curto + Badge

  • Pegue o nome da funcionalidade, reduza para 4–6 caracteres chineses: "Visualização de Documentação Técnica e Base de Conhecimento-…" → "Geração de Imagem de Documentação".
  • Texto do badge 4 caracteres (320px só cabe 4 caracteres de 44px), deve transmitir uma "promessa": "Inserir com Um Clique", "Apenas Esta Parte", "Layout Não se Altera", "Parcialmente Editável".
  • Escreva uma frase de exemplo real, não escreva "texto de exemplo" .

Etapa 2 · Escolha o Layout

Características do TítuloLayoutTemplate
Um núcleo → múltiplas saídas, irradiação de capacidade, um hub N cenáriosD Ramificação Central (v3)assets/template-d-orbit.html
A→B→C três etapas, Upload→Análise→Armazenamento, Construir→Testar→PublicarE Pipeline Circular (v3)assets/template-e-pipeline.html
Entrada → Geração → Múltiplas saídas, Transformação, Organização (precisa de rótulos de texto para explicar)B Fluxo de cima para baixo (v2)assets/template-b-flow.html
Explica tanto "gerar com uma frase" quanto "editar após geração" (precisa de sensação de interface)C-1 Estado de edição na tela (v2)assets/template-c-ui.html
Arquitetura em camadas (Interface/Serviço/Dados) explicada camada por camadaC-2 Estado de seleção de camada (v2)assets/template-c-arch.html

Detalhes em references/layouts.md. Em dúvida: pontos-chave ≤ 4 use D ou E; a informação precisa ser exibida item por item para usar C-2 (é o mais claro na miniatura).

Etapa 3 · Modifique o Template

Copie um template, altere apenas estes locais, não mexa em nenhuma linha do CSS da casca:

  1. Texto do .title;
  2. Rótulos curtos (2–4 caracteres) em cada item/nó/cartão;
  3. Texto do .badge (4 caracteres) + top (distância vertical entre dois badges ≥40px);
  4. Frases de exemplo nas barras de entrada / balões;
  5. Ao remover um elemento, remova também suas linhas de conexão e setas; caso contrário, deixará pontas soltas;
  6. Ao modificar as linhas de conexão, deve seguir o método "hub + segmentos independentes" descrito posteriormente em "Como desenhar linhas para não quebrar"; não adicione curvas desnecessárias.

Etapa 4 · Renderização

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

<SKILL_DIR> é o diretório de instalação desta skill (onde o SKILL.md está localizado), não o diretório de trabalho atual — seu cwd geralmente é o projeto do usuário, e escrever scripts/render.py diretamente não encontrará o arquivo.

O script copia o HTML para um diretório temporário ASCII e então chama um navegador headless — caminhos com caracteres chineses fazem o headless falhar silenciosamente, resultando em saída em branco ou imagem antiga. Ele também valida se a saída é 1760×1120 e verifica automaticamente se as extremidades de cada linha de conexão estão soltas — código de saída 3 indica linhas quebradas; não entregue.

Etapa 5 · Autoinspeção em Miniatura (a mais importante)

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

É obrigatório olhar a miniatura gerada e verificar de acordo com references/checklist.md. O critério de julgamento é apenas uma frase:

Reduzido a 240px, ainda é possível ler o título, a ideia geral de cada rótulo e "qual parte é a mais importante"?

Se não conseguir, reduza elementos, aumente o tamanho da fonte; não tente resolver adicionando detalhes.

v3 · Gráfico (Orientado a Ícones e Elementos Gráficos)

Em uma frase: O que pode ser desenhado, não escreva.

No v2, cada elemento é "retângulo arredondado + ícone + texto", todos isomórficos, então a imagem inteira parece um monte de blocos de fluxo. O v3 muda apenas três coisas — remove o cartão de conteúdo branco, triplica o tamanho dos ícones e deixa os gráficos assumirem a semântica.

Três Regras Rígidas

  1. Não use o cartão de conteúdo branco. Os elementos gráficos flutuam diretamente sobre o painel azul claro; o fundo branco é apenas para itens pequenos como emblemas e badges. Os limites são definidos por sombras, não por contornos.
  2. Ícones ≥ 84px. Largura visual da linha = stroke × tamanho da exibição / 24, alvo de 7–9px (cerca de 1px quando reduzido a 240px).
  3. Rótulos ≤ 4 locais, cada um com 2–3 caracteres. Mais de 4, significa que você ainda está usando texto para explicar — transforme essa informação em um gráfico.

Biblioteca de Ícones (50)

assets/icons.svg é um sprite. Cole todo o conteúdo inline na página para usá-lo:

<body>
  <!-- Cole todo o conteúdo de assets/icons.svg aqui -->
  <svg><use href="#i-database"/></svg>
</body>

Referências externas (<use href="icons.svg#i-database"/>) serão bloqueadas pelo navegador por violação de política de mesma origem em file://, e os ícones desaparecerão completamente na captura de tela headless sem aviso.

python <SKILL_DIR>/scripts/iconlib.py --list            # Lista todos os IDs por grupo
python <SKILL_DIR>/scripts/iconlib.py --preview p.png   # Gera um mural de ícones para seleção

Grupos: Gráficos / Diagramas 12 · Elementos Técnicos 15 · IA e Conteúdo 18 · Interação 5.

Não escreva stroke-width dentro do symbol; ajuste de acordo com o tamanho de exibição:

Tamanho de Exibiçãostroke
84–1081.9–2.0
130–1401.5
170–1901.3

Se não encontrar um adequado, troque por um similar; não desenhe temporariamente novas formas — a inconsistência no estilo das linhas estragará toda a imagem.

Peças de Elementos (15)

assets/parts.html é uma página com um mural de peças, cada uma com exemplo real + nome da classe + tamanho. Copie diretamente o HTML + CSS:

Bloco Gradiente · Emblema Circular Branco · Badge quebra-moldura · Cápsula de Rótulo · Moldura de Janela · Pilha de Camadas · Seta Gradiente · Linha Tracejada · Alça de Seleção · Balão de Comando · Progresso Circular · Micro Gráfico de Barras · Textura de Pontos · Estrela · Bloco Selecionado.

Dois Layouts

  • D Ramificação Central → Um núcleo → Múltiplas saídas. O centro são "três páginas sobrepostas desalinhadas + estrela", não um único ícone.
  • E Pipeline Circular → A→B→C três etapas. A parte do meio é o único corpo gradiente e é também o primeiro ponto de contato do leitor.

Ambos são montados a partir das peças acima. Para modificar a imagem, basta trocar os ícones e os rótulos de 2–3 caracteres.

Estrutura do Layout v2

B Fluxo de Cima para Baixo (template-b-flow.html) Cápsula de entrada 690×136 centralizada → linha vertical → bloco gradiente 200 → linha vertical até a linha principal → linha horizontal principal se divide em três ramificações → três cartões de saída 360×120. Badge no canto superior direito.

C-1 Estado de Edição na Tela (template-c-ui.html) Bloco gradiente no canto superior esquerdo 170 + barra de entrada 850×118 → placa de fundo azul claro 1160×352, contendo três nós 330×132, nó do meio selecionado → balão de comando abaixo 430×112, conectado ao nó selecionado por uma linha tracejada de 4px. Badge no canto superior direito.

C-2 Estado de Seleção de Camada (template-c-arch.html) Três faixas de camada 910×152 empilhadas verticalmente (espaçamento de 40, grupo inteiro centralizado verticalmente), faixa do meio selecionada com um pequeno bloco gradiente de 104px → dois badges à direita. Menor quantidade de informação, melhor legibilidade em miniatura.

Peças de Elementos v2 (6, suficientes)

  1. Bloco de ícone gradiente — 170–200 / r44–52 / linear-gradient(135deg,#4A9DFC,#5E92F9 45%,#7C6BF5) + ícone linear branco (84–100px, stroke-width 1.6) + brilho suave na borda inferior 0 18 40 rgba(74,157,252,.42), 0 0 40 8 rgba(124,107,245,.14).
  2. Badge — fundo branco 320×128 / r32 + 0 20 48 rgba(31,71,141,.16) + ícone azul de 46px + texto de 44px.
  3. Faixa de camada / Nó — fundo branco + contorno 3px #C9DCF2 + bloco de ícone azul claro arredondado de 90px + rótulo 50px/500. Não coloque barras de esqueleto; escreva texto real diretamente.
  4. Estado selecionado — 5px #4A9DFC + 0 0 0 12px rgba(74,157,252,.11) + alças de 20px nos quatro cantos (centro alinhado com os cantos) + opcionalmente um pequeno bloco gradiente embutido. Não desenhe uma caixa de seleção tracejada (as linhas de conexão a atravessariam).
  5. Linha de conexão — 4px / #A9C7EC / dasharray 12 10, seta é um triângulo isósceles M827 716 h16 l-8 14 z. Não pode usar triângulo retângulo.
  6. Placa de fundo da tela — #F8FBFF / 2px #DDEBFB / r36, agrupa "nós + balões" para evitar que a imagem se disperse.

Como Desenhar Linhas para Não Quebrar

As linhas de conexão são a única parte que requer coordenadas absolutas escritas à mão e são a parte mais sujeita a erros. Faltar algumas centenas de pixels em uma linha ainda faz a imagem parecer "ok"; na imagem original de 1760, não é perceptível sem ampliação, e reduzida a 240px é completamente invisível, até que a imagem já tenha sido entregue e alguém aponte o problema.

As Ramificações Devem ser Divididas em "Hub + Segmentos Independentes"

Errado — um único path que vira e ramifica no meio do caminho, com a linha principal cobrindo apenas a ramificação mais à esquerda:

<path d="M835 652 V690 H435 V716"/>   <!-- vertical → horizontal esquerda → vertical, para aqui -->
<path d="M835 690 V716"/>
<path d="M1235 690 V716"/>            <!-- ponto inicial flutuando no vazio -->

Correto — todos os pontos de intersecção coincidem no nível dos endpoints:

<path d="M835 652 V690"/>    <!-- linha vertical até o hub (835,690) -->
<path d="M835 690 H435"/>    <!-- metade esquerda da linha principal -->
<path d="M835 690 H1235"/>   <!-- metade direita da linha principal -->
<path d="M435 690 V716"/>    <!-- três ramificações, o y inicial é igual ao y da linha principal -->
<path d="M835 690 V716"/>
<path d="M1235 690 V716"/>

Três regras:

  1. Um path faz apenas uma coisa: ou desce reto, ou atravessa horizontalmente. Não vire no meio do caminho e depois ramifique.
  2. As extremidades da linha principal devem ser iguais aos x da ramificação mais à esquerda e mais à direita; esses três números devem ser literalmente iguais no código. Altere um lado e o outro deve ser alterado também.
  3. O y do ponto final da ramificação = top do cartão − 14 (14 é a altura da seta), o y inicial da ramificação = y da linha principal.

A Verificação é Automática a Cada Renderização

Após a renderização, render.py chama automaticamente linklint.py: faz o navegador calcular as extremidades reais de cada linha, verifica se cada extremidade toca a borda de algum elemento (≤8px) ou intersecta outra linha (≤3px). Se não, está solta, e as coordenadas são impressas:

[x] 1 endpoint solto encontrado:
    Linha 6, início em (1235,690), distância do objeto mais próximo é 40px  d="M1235 690 V716"

Neste caso, o código de saída é 3. Não entregue. Você também pode verificar separadamente:

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

Formas preenchidas, como triângulos de seta e losangos de relação, não participam da verificação (suas bordas inferiores já estão tocando os endpoints das linhas), mas elas são tratadas como alvos conectáveis — portanto, conectar uma linha a uma seta é válido.

Esta verificação só reconhece geometria, não "parece ok". Ela pegou um acidente real: a ramificação direita de uma bifurcação de três vias estava sem um segmento horizontal de 800px, e a imagem inteira parecia completamente normal a olho nu.

Erros Comuns (Todos Já Aconteceram na Prática)

FenômenoCausaCorreção
Reduzido a 240px, vira uma massa cinzentaElementos muito pequenos, muitosReduza elementos para ≤7, aumente o tamanho da fonte para 48px, engrosse os contornos para 3–5px
Barras de esqueleto na miniatura parecem ruído cinzaUsou barras de esqueleto decorativasSubstitua por rótulos curtos reais (2–4 caracteres)
Faixa branca na parte inferior, o painel parece ter apenas uma bordaGradiente desbotou para #FBFCFEPare em #F5FAFF
Badge sobrepõe o conteúdoElemento de conteúdo ultrapassou 1230Controle a borda direita do conteúdo para estar dentro de 1230
Alça flutuando fora do cantotop escrito à mão não foi reduzido pela metadehandle.left = x do canto − 10, top = y do canto − 10
Linha tracejada invisívelOfuscada pelo brilho do nó selecionadoAdicione z-index:6 ao svg da linha de conexão
Seta torta, parece um triângulo retânguloCaminho escrito erradoUse triângulo isósceles, veja peça 5
Linha principal horizontal pressionando o cartãoPonto de bifurcação muito baixoFundo do bloco → linha principal ≥38px, linha principal → cartão ≥40px
Espaçamento desigual entre três cartõesleft escrito à mãoArranje equidistantemente e verifique se os centros estão alinhados com as setas
Renderização em branco/antigaHTML em caminho com chinêsUse scripts/render.py
Três imagens com densidades inconsistentesTamanhos de elementos escritos cada um de um jeitoUse todos os valores da tabela "Tamanhos Mínimos de Elementos"
Linha quebrada no meio, ramificação soltaUm único path virou e cobriu apenas parte das ramificaçõesDivida em "hub + segmentos independentes", veja "Como Desenhar Linhas para Não Quebrar"
Linha tracejada do balão tem uma lacuna do nóPonto inicial não está na borda do elementoy inicial = bottom do elemento, use linklint para verificar até 0px

Índice de Arquivos

Esta skill é autocontida: os caminhos abaixo são relativos ao diretório onde SKILL.md está localizado, sem necessidade de acessar outros repositórios ou documentação externa.

SKILL.md
├── references/
│   ├── style-tokens.md    Tabela completa de tokens de cores, tamanhos de fonte, bordas arredondadas e sombras (inclui tokens gráficos v3)
│   ├── layouts.md         Diagramas de esqueleto, cenários de aplicação e composição de elementos dos cinco layouts
│   └── checklist.md       Verificação item por item antes da entrega (inclui aceitação da miniatura de 240px e itens específicos do v3)
├── assets/
│   ├── icons.svg          Sprite de 50 ícones lineares (use <use href="#i-xxx"/> após colocar inline)
│   ├── parts.html         Mural de 15 peças gráficas, pode ser visualizado ou copiado
│   ├── template-d-orbit.html      D Ramificação Central (v3)
│   ├── template-e-pipeline.html   E Pipeline Circular (v3)
│   ├── _blank-shell.html          Apenas a casca, use para construir layouts do zero
│   ├── template-b-flow.html       B Fluxo de Cima para Baixo (v2)
│   ├── template-c-ui.html         C-1 Estado de Edição na Tela (v2)
│   └── template-c-arch.html       C-2 Estado de Seleção de Camada (v2)
├── scripts/
│   ├── render.py          HTML → PNG 1760×1120 (tratamento de caminho + detecção de navegador + verificação de conexão)
│   ├── linklint.py        Verifica se as extremidades de cada linha de conexão estão soltas (chamado automaticamente pelo render.py)
│   ├── preview.py         Gera miniatura de 240px para "autoinspeção em miniatura"
│   └── iconlib.py         Lista IDs de ícones / gera mural de ícones
└── examples/              5 imagens finais + arquivos fonte renderizáveis, apenas para referência, não participam da geração

Os textos e gráficos nos templates são exemplos reais funcionais; modificá-los diretamente é mais rápido do que escrever a partir de uma página em branco.

Habilidades Relacionadas