Colagem (Collage)
Você recebe um tópico ou um corpo de texto. Seu trabalho é produzir uma obra de colagem, e não uma descrição de uma. Trabalhe de ponta a ponta: leia → extraia → encontre imagens → componha → renderize → verifique → explique.
Esta skill é uma pasta, não um arquivo único
Uma instalação só está completa se SKILL.md, references/, scripts/,
requirements.txt, install.sh, install.ps1 e scripts/check_setup.py
estiverem todos presentes no mesmo diretório. Se algum deles estiver faltando, reinstale o pacote inteiro em vez de copiar apenas SKILL.md.
Etapa 0 — Verifique a instalação (faça isso uma vez)
python3 scripts/check_setup.py
Isso verifica a versão do Python, todos os arquivos incluídos, Pillow, NumPy, resolução de fontes, um teste de fumaça do renderizador e um teste de fumaça do corte de conteúdo. Se algo estiver faltando:
bash install.sh # macOS / Linux: instala requirements.txt e depois reexecuta a verificação
# Windows: powershell -ExecutionPolicy Bypass -File install.ps1
Os instaladores precisam de conexão de rede apenas para os pacotes Python; todas as outras partes da skill funcionam offline.
A ideia central vem do material de referência em references/: colagem é
um conjunto de materiais que já têm uma história (Rise Art, Artsy), e
sua lógica visual é 断裂 / 重组 / 融合 — fratura, remontagem, fusão (UISDC).
Portanto, o resultado deve parecer papel cortado que foi colado e escaneado novamente, e deve carregar uma ideia formada pela junção de duas coisas diferentes.
Não peça ao usuário para tomar decisões artísticas
Inferir tudo o que pode ser inferido: estratégia, paleta, formato, manchete, motivos. Pergunte apenas se o resumo for uma única palavra ambígua sem contexto, ou se os próprios ativos do usuário forem claramente necessários. Use como padrão um pôster de 1200×1500, uma das seis estratégias abaixo e a busca autônoma de imagens.
Etapa 1 — Leia e extraia (este é o passo criativo; você o executa)
Leia o tema ou trecho do usuário e escreva um pequeno JSON de conceito. Não liste apenas substantivos do texto. Faça o seguinte:
- Identifique a tensão ou movimento no texto (o que muda, o que se opõe, o que retorna, o que se perde). Uma colagem precisa de duas coisas diferentes.
- Escreva uma frase de emparelhamento: "X encontra Y, o que sugere Z." Este é o argumento da obra. Se não conseguir escrevê-lo, você não entendeu o texto.
- Extraia 2–4 motivos visuais que possam transmitir esse argumento. Para cada um,
escreva uma consulta de pesquisa de imagem concreta (o inglês funciona melhor no Commons) e um
porquêexplicando o que ele contribui. Prefira objetos e texturas fotografáveis a substantivos abstratos. "memória" não é um motivo; "um canhoto de bilhete desbotado", "uma onda quebrando", "um horizonte noturno" são. - Escolha uma estratégia de
references/movements.mdque corresponda ao registro emocional, e uma paleta de 2–4 tintas. - Escolha um título (uma frase curta, como cortada de uma revista, no idioma do usuário ou em inglês) e, opcionalmente, um subtítulo (uma pequena linha monoespaçada).
Escreva em <job>/concept.json:
{
"theme": "Mareas e Cidade",
"headline": "MARÉ / CIDADE",
"kicker": "UMA NOTA SOBRE DISTÂNCIA",
"statement": "A maré que retorna encontra a cidade adormecida, sugerindo uma memória que insiste em voltar.",
"strategy": "surrealism",
"palette": ["#16283a", "#d94f36", "#4a86a8", "#f0c94b"],
"motifs": [
{"id": "maré", "query": "onda do mar quebrando água", "role": "hero",
"why": "a maré que retorna, a coisa que insiste em voltar"},
{"id": "cidade", "query": "skyline da cidade silhueta noturna", "role": "ground",
"why": "a cidade adormecida, a coisa fixa"},
{"id": "lua", "query": "lua cratera superfície lunar", "role": "satellite",
"why": "a testemunha distante, um objeto impossível dentro do arco"}
]
}
strategy é um de cubism, dada, surrealism, pop, decollage,
editorial. role é hero (um), ground, ou satellite. Esquema completo:
references/concept-schema.md.
Quando o usuário fornecer suas próprias imagens, pule a Etapa 2 e escreva um
manifesto SOURCES.json apontando para esses arquivos, com license: "user-provided".
Etapa 2 — Encontre imagens de origem autonomamente
python3 scripts/source_assets.py --concept <job>/concept.json \
--out-dir <job>/assets --per-motif 1
Isso pesquisa o Wikimedia Commons, mantém apenas resultados CC BY / BY-SA / CC0 / domínio público,
ignora arquivos com avisos de direitos de personalidade, baixa miniaturas
e escreve <job>/assets/SOURCES.json com autor, licença e página de origem para cada
imagem. Não pule este manifesto — a obra finalizada deve ser
atribuível. Use --query-only "..." para testar um termo de pesquisa quando um motivo
retornar resultados ruins e, em seguida, edite o conceito e execute novamente.
Regras para boas consultas: substantivos concretos, sem adjetivos estéticos ("belo", "vintage"), 2–4 palavras, evite consultas que retornem pessoas. Se uma imagem baixada for um retrato ou diagrama, substitua-a — verifique o resultado renderizado na Etapa 5 em vez de confiar no nome do arquivo.
Se o ambiente não tiver rede, informe isso e continue com as fontes de papel
processuais (photo, newsprint, grid, wood, halftone), que não precisam de
baixar dados. O renderizador degrada graciosamente quando um caminho de ativo está faltando.
Etapa 3 — Corte as imagens de acordo com seu conteúdo visível
Isso não é opcional. Uma colagem finalizada não deve ser uma pilha de fotografias retangulares inteiras com bordas rasgadas decorativas. Observe cada imagem de origem e corte a coisa que carrega significado: uma silhueta, uma mão, um teclado, uma boca, uma prancha de ponte, uma diagonal escura, um campo azul, uma fileira de assentos, um quadro negro, uma passagem pela grama. Recombine esses fragmentos em forma de imagem para que a costura se torne um argumento. O guia para iniciantes de Lydia Rink reforça a versão física disso: um bisturi/estilete é para cortar com precisão ao redor de elementos; arranje solto antes de colar; deixe espaço negativo; varie a escala; use camadas para criar profundidade.
scripts/visual_cutout.py é um bisturi digital propositalmente pequeno. Ele usa
apenas Pillow e NumPy. O modo principal é shape: observe a fotografia de origem
e descreva o objeto visível ou a região estrutural com um polígono normalizado.
Um segundo modo silhouette remove uma borda/fundo simples por distância de
cor. Não há dependência pesada de segmentação de imagem. O compilador
também escreve cuts/contact-sheet.jpg; inspecione-o antes de compor e ajuste
o polígono se o corte perder o assunto.
O compilador executa os cortes e vincula os PNGs transparentes resultantes à
receita com mask: "alpha":
python3 scripts/theme_to_recipe.py --concept <job>/concept.json \
--assets <job>/assets --recipe <job>/recipe.json \
--cutouts <job>/cuts --seed 11 --format poster
Descreva os cortes no conceito em cada motivo (cut) ou em um mapa cuts
indexado pelo id do motivo. Um motivo pode fornecer uma instrução ou uma lista de instruções, o
que produz vários fragmentos de uma fotografia:
"cut": [
{"mode": "shape", "shape": "0.00,0.00;1.00,0.00;1.00,0.46;0.00,1.00"},
{"mode": "shape", "shape": "0.00,0.79;0.34,0.60;1.00,0.73;1.00,1.00;0.00,1.00"}
]
Use shape para o contorno semântico que você vê na fotografia;
as coordenadas são normalizadas x,y;x,y;.... Use silhouette apenas quando o
objeto estiver sobre um fundo simples, como papel. Mantenha um ou dois recortes de papel geométricos/rasgados
como contraponto, mas as fotografias encontradas devem ser cortadas pelo conteúdo
primeiro. Consulte references/composition.md para o método de corte e
references/materials.md para fontes e máscaras alpha.
Etapa 4 — Renderize
python3 scripts/collage.py --recipe <job>/recipe.json --out <job>/final.png
O renderizador aplica fibra de papel, retícula de meio-tom, bordas rasgadas, registro de impressão, sombras projetadas, fita adesiva, marcas de lápis, granulação e uma lavagem quente unificadora. Ele é determinístico: a mesma receita com a mesma semente gera a mesma imagem. Renderize duas ou três sementes e escolha a melhor — bordas rasgadas e campos de faceta variam.
Etapa 5 — Verifique e depois explique
Sempre olhe para a imagem que você produziu (abra-a ou gere uma folha de contato)
antes de entregar. Verifique os antipadrões em references/composition.md:
muitas cores, sombra em todas as camadas, tudo a 0°, bordas todas rasgadas, tipo
menor que os recortes e, especialmente, uma fotografia ainda lida como uma janela retangular
inteira em vez de uma forma cortada de seu próprio conteúdo. Se o corte semântico
não for legível no tamanho de miniatura, volte para a Etapa 3. Se falhar, ajuste a
receita ou estratégia e renderize novamente.
Em seguida, entregue o PNG mais uma breve explicação da frase de emparelhamento, da
estratégia e por que os motivos foram escolhidos. Inclua as linhas de crédito de
SOURCES.json; reproduza os termos da licença quando necessário (CC BY-SA pode
exigir que a obra combinada seja compartilhada pela mesma licença). Aponte o usuário para
recipe-rationale.md para o registro completo de decisões.
Referência rápida
| Desejo | Comando |
|---|---|
| Verificar a instalação | python3 scripts/check_setup.py |
| Instalar dependências Python | bash install.sh |
| Ver todos os estilos integrados | python3 scripts/collage.py --list |
| Renderizar um predefinido | python3 scripts/collage.py --preset dada-montage --out out.png |
| Salvar um predefinido como receita editável | python3 scripts/collage.py --preset cubist-grid --out x.png --dump x.json |
| Escrever manualmente uma receita | python3 scripts/collage.py --recipe x.json --out x.png |
| Cortar um contorno observado manualmente | python3 scripts/visual_cutout.py --input foto.jpg --out corte.png --mode shape --shape "0,.1;1,0;.9,1;0,.9" --contact-sheet folha.jpg |
| Remover um fundo simples | python3 scripts/visual_cutout.py --input objeto.jpg --out corte.png --mode silhouette |
| Testar uma pesquisa de imagem | python3 scripts/source_assets.py --query-only "lua cratera" |
| Testar um conceito offline | python3 scripts/source_assets.py --concept c.json --out-dir a --offline |
Arquivos nesta skill
requirements.txt declara Pillow e NumPy. install.sh (macOS/Linux) e
install.ps1 (Windows) os instalam e executam scripts/check_setup.py.
scripts/check_setup.py verifica todos os arquivos incluídos, a versão do Python, resolução
de fontes, um teste de fumaça do renderizador e um teste de fumaça de recorte. scripts/collage.py
é o renderizador (Pillow + NumPy, sem rede). scripts/visual_cutout.py corta
polígonos observados manualmente e silhuetas de fundo simples (Pillow + NumPy, sem rede). scripts/source_assets.py é o pesquisador/baixador do Commons
(biblioteca padrão apenas). scripts/theme_to_recipe.py compila um conceito em uma receita
e executa os comandos leves de corte de conteúdo.
references/movements.md é o mapa de decisões histórico-artístico com fontes.
references/materials.md documenta estoques de papel, fontes, bordas e mesclagens.
references/composition.md documenta sistemas de layout e antipadrões.
references/prompts.md fornece padrões de prompt para quando um modelo texto-para-imagem é
mais adequado que o renderizador.
references/concept-schema.md é o contrato JSON do conceito.
assets/ é o local opcional para imagens de origem fornecidas pelo usuário.
Um exemplo histórico completo (tema → conceito → ativos obtidos → receita →
racional → PNG final) está no diretório examples/demo/ do repositório; ele mostra
o pipeline anterior de recorte retangular e é mantido como um exemplo do renderizador, não
como o fluxo de trabalho atual de corte de conteúdo. O próprio repositório é o pacote
instalável: SKILL.md, references/, scripts/, os instaladores e assets/
ficam na raiz. dist/collage.skill é um ZIP exatamente desses arquivos, com os
mesmos caminhos na raiz do arquivo.