Que fait Collage ?
Vous recevez un sujet ou un corps de texte. Votre travail consiste à produire une œuvre d'art collage, et non une description de celle-ci. Travaillez de bout en bout : lire → extraire → trouver des images → composer → rendre → vérifier → expliquer.
Cette compétence est un dossier, pas un seul fichier
Une installation n'est complète que si SKILL.md, references/, scripts/, requirements.txt, install.sh, install.ps1 et scripts/check_setup.py sont tous présents dans le même répertoire. Si l'un d'eux manque, réinstallez l'ensemble du paquet au lieu de copier SKILL.md seul.
Étape 0 — Vérifier l'installation (à faire une fois)
python3 scripts/check_setup.py
Cela vérifie la version de Python, chaque fichier fourni, Pillow, NumPy, la résolution des polices, un test de rendu et un test de découpage de contenu. Si quelque chose manque :
bash install.sh # macOS / Linux : installe requirements.txt, puis relance la vérification
# Windows : powershell -ExecutionPolicy Bypass -File install.ps1
Les installateurs ont besoin d'une connexion réseau uniquement pour les paquets Python ; toutes les autres parties de la compétence fonctionnent hors ligne.
L'idée directrice vient du matériel de référence dans references/ : le collage est un assemblage de matériaux qui ont déjà une histoire (Rise Art, Artsy), et sa logique visuelle est 断裂 / 重组 / 融合 — fracture, réassemblage, fusion (UISDC). Ainsi, le livrable doit ressembler à du papier découpé collé puis re-scanné, et doit porter une idée formée par la réunion de deux choses dissemblables.
Ne demandez pas à l'utilisateur de prendre des décisions artistiques
Déduisez tout ce qui peut l'être : stratégie, palette, format, titre, motifs. Ne demandez que si le briefing est un seul mot ambigu sans contexte, ou si les propres assets de l'utilisateur sont clairement nécessaires. Par défaut, utilisez une affiche de 1200×1500 pixels, l'une des six stratégies ci-dessous, et une recherche d'images autonome.
Étape 1 — Lire et extraire (c'est l'étape créative ; c'est vous qui la faites)
Lisez le thème ou le passage de l'utilisateur et écrivez un petit fichier JSON de concept. Ne vous contentez pas de lister les noms du texte. Faites ceci :
- Identifiez la tension ou le mouvement dans le texte (ce qui change, ce qui s'oppose, ce qui revient, ce qui est perdu). Un collage a besoin de deux choses dissemblables.
- Écrivez une phrase d'appariement : "X rencontre Y, ce qui suggère Z." C'est l'argument de l'œuvre. Si vous ne pouvez pas l'écrire, vous n'avez pas compris le texte.
- Extrayez 2 à 4 motifs visuels qui peuvent porter cet argument. Pour chacun, écrivez une requête de recherche d'image concrète (l'anglais fonctionne le mieux sur Commons) et un
whyexpliquant ce qu'il apporte. Préférez les objets et textures photographiables aux noms abstraits. "mémoire" n'est pas un motif ; "un ticket de caisse fané", "une vague qui se brise", "une skyline nocturne" le sont. - Choisissez une stratégie dans
references/movements.mdqui correspond au registre émotionnel, et une palette de 2 à 4 couleurs. - Choisissez un titre (une courte phrase découpée dans un magazine, dans la langue de l'utilisateur ou en anglais) et éventuellement un sous-titre (une petite ligne monochrome).
Écrivez-le dans <job>/concept.json :
{
"theme": "潮汐与城市",
"headline": "TIDE / CITY",
"kicker": "A NOTE ON DISTANCE",
"statement": "La marée qui revient rencontre la ville endormie, suggérant un souvenir qui ne cesse de revenir.",
"strategy": "surrealism",
"palette": ["#16283a", "#d94f36", "#4a86a8", "#f0c94b"],
"motifs": [
{"id": "tide", "query": "breaking ocean wave water", "role": "hero",
"why": "la marée qui revient, la chose qui ne cesse de revenir"},
{"id": "city", "query": "city skyline night silhouette", "role": "ground",
"why": "la ville endormie, la chose fixe"},
{"id": "moon", "query": "moon crater lunar surface", "role": "satellite",
"why": "le témoin lointain, un objet impossible dans l'arche"}
]
}
strategy est l'un de cubism, dada, surrealism, pop, decollage, editorial. role est hero (un seul), ground ou satellite. Schéma complet : references/concept-schema.md.
Lorsque l'utilisateur fournit ses propres images, sautez l'étape 2 et écrivez un manifeste SOURCES.json pointant vers ces fichiers, avec license: "user-provided".
Étape 2 — Trouver des images sources de manière autonome
python3 scripts/source_assets.py --concept <job>/concept.json \
--out-dir <job>/assets --per-motif 1
Ceci recherche sur Wikimedia Commons, ne conserve que les résultats CC BY / BY-SA / CC0 / domaine public, ignore les fichiers avec des avertissements de droits de la personnalité, télécharge les vignettes et écrit <job>/assets/SOURCES.json avec l'auteur, la licence et la page source pour chaque image. Ne sautez pas ce manifeste — l'œuvre finie doit être attribuable. Utilisez --query-only "..." pour sonder un terme de recherche lorsqu'un motif donne de mauvais résultats, puis modifiez le concept et relancez.
Règles pour les bonnes requêtes : noms concrets, pas d'adjectifs esthétiques ("beau", "vintage"), 2 à 4 mots, évitez les requêtes qui ramènent des personnes. Si une image téléchargée s'avère être un portrait ou un diagramme, remplacez-la — vérifiez le résultat rendu à l'étape 5 plutôt que de vous fier au nom de fichier.
Si l'environnement n'a pas de réseau, dites-le et continuez avec les sources de papier procédurales (photo, newsprint, grid, wood, halftone), qui ne nécessitent aucun téléchargement. Le rendu se dégrade gracieusement lorsqu'un chemin d'asset est manquant.
Étape 3 — Découper les images selon leur contenu visible
Ce n'est pas optionnel. Un collage fini ne doit pas être un empilement de photographies rectangulaires entières avec des bords déchirés décoratifs. Regardez chaque image source et découpez la chose qui porte du sens : une silhouette, une main, un clavier, une bouche, une planche de pont, une diagonale sombre, un champ de bleu, une rangée de sièges, un tableau noir, un passage dans l'herbe. Recombinez ces fragments en forme d'image de sorte que la couture devienne un argument. Le guide pour débutants de Lydia Rink renforce la version physique : un scalpel/cutter est pour la découpe de précision autour des éléments ; disposez librement avant de coller ; laissez de l'espace négatif ; variez l'échelle ; utilisez des couches pour créer de la profondeur.
scripts/visual_cutout.py est un scalpel numérique délibérément petit. Il n'utilise que Pillow et NumPy. Le mode principal est shape : regardez la photographie source et décrivez l'objet visible ou la région structurelle avec un polygone normalisé. Un deuxième mode silhouette supprime un fond/bordure plain par distance de couleur. Il n'y a pas de dépendance lourde de segmentation d'image. Le compilateur écrit également cuts/contact-sheet.jpg ; inspectez-le avant de composer et ajustez le polygone si la découpe rate le sujet.
Le compilateur exécute les découpes et lie les PNG transparents résultants à la recette avec 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
Décrivez les découpes dans le concept sur chaque motif (cut) ou dans une map cuts indexée par l'id du motif. Un motif peut fournir une instruction ou une liste d'instructions, ce qui produit plusieurs fragments à partir d'une seule photographie :
"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"}
]
Utilisez shape pour le contour sémantique que vous voyez dans la photographie ; les coordonnées sont normalisées x,y;x,y;.... Utilisez silhouette uniquement lorsque l'objet repose sur un fond uni de type papier. Gardez un ou deux morceaux de papier géométriques/déchirés comme contrepoint, mais les photographies trouvées doivent d'abord être découpées par contenu. Voir references/composition.md pour la méthode de découpe et references/materials.md pour les sources et masques alpha.
Étape 4 — Rendu
python3 scripts/collage.py --recipe <job>/recipe.json --out <job>/final.png
Le rendu applique la fibre de papier, le tramage tramé, les bords déchirés, le repérage d'impression, les ombres portées, le ruban adhésif, les marques de crayon, le grain et un lavis chaud unifiant. Il est déterministe : même recette plus même graine donne la même image. Rendez deux ou trois graines et choisissez la meilleure — les bords déchirés et les champs de facettes varient.
Étape 5 — Vérifier, puis expliquer
Regardez toujours l'image que vous avez produite (ouvrez-la ou générez une planche contact) avant de livrer. Vérifiez les anti-patrons dans references/composition.md : trop de couleurs, ombre sur chaque couche, tout à 0°, bords entièrement déchirés, typographie plus petite que les chutes, et surtout une photographie qui se lit encore comme une fenêtre rectangulaire entière au lieu d'une forme découpée dans son propre contenu. Si la découpe sémantique n'est pas lisible à la taille d'une vignette, revenez à l'étape 3. Si elle échoue, ajustez la recette ou la stratégie et relancez le rendu.
Livrez ensuite le PNG ainsi qu'une brève explication de la phrase d'appariement, de la stratégie et des raisons pour lesquelles ces motifs ont été choisis. Incluez les lignes de crédit de SOURCES.json ; reproduisez les termes de licence lorsque requis (CC BY-SA peut exiger que l'œuvre combinée soit partagée à l'identique). Indiquez à l'utilisateur recipe-rationale.md pour le journal des décisions complet.
Référence rapide
| Action | Commande |
|---|---|
| Vérifier l'installation | python3 scripts/check_setup.py |
| Installer les dépendances Python | bash install.sh |
| Voir tous les styles intégrés | python3 scripts/collage.py --list |
| Rendre un préréglage | python3 scripts/collage.py --preset dada-montage --out out.png |
| Sauvegarder un préréglage comme recette modifiable | python3 scripts/collage.py --preset cubist-grid --out x.png --dump x.json |
| Écrire une recette à la main | python3 scripts/collage.py --recipe x.json --out x.png |
| Découper un contour observé à la main | python3 scripts/visual_cutout.py --input photo.jpg --out cut.png --mode shape --shape "0,.1;1,0;.9,1;0,.9" --contact-sheet sheet.jpg |
| Supprimer un fond uni | python3 scripts/visual_cutout.py --input object.jpg --out cut.png --mode silhouette |
| Sonder une recherche d'image | python3 scripts/source_assets.py --query-only "moon crater" |
| Tester un concept hors ligne | python3 scripts/source_assets.py --concept c.json --out-dir a --offline |
Fichiers dans cette compétence
requirements.txt déclare Pillow et NumPy. install.sh (macOS/Linux) et install.ps1 (Windows) les installent et exécutent scripts/check_setup.py. scripts/check_setup.py vérifie chaque fichier fourni, la version de Python, la résolution des polices, un test de rendu et un test de découpe. scripts/collage.py est le rendu (Pillow + NumPy, sans réseau). scripts/visual_cutout.py découpe des polygones observés à la main et des silhouettes simples sur fond uni (Pillow + NumPy, sans réseau). scripts/source_assets.py est le moteur de recherche/téléchargement Commons (stdlib uniquement). scripts/theme_to_recipe.py compile un concept en recette et exécute les commandes de découpe de contenu légères. references/movements.md est la carte de décision historico-artistique avec sources. references/materials.md documente les stocks de papier, sources, bords et mélanges. references/composition.md documente les systèmes de mise en page et les anti-patrons. references/prompts.md donne des modèles de prompt pour lorsqu'un modèle texte-à-image est plus adapté que le rendu. references/concept-schema.md est le contrat JSON du concept. assets/ est l'emplacement optionnel pour les images sources fournies par l'utilisateur.
Un exemple historique complet (thème → concept → assets sourcés → recette → justification → PNG final) se trouve dans le répertoire examples/demo/ du dépôt ; il montre le pipeline antérieur de chutes rectangulaires et est conservé comme exemple de rendu, et non comme le flux de travail actuel de découpe de contenu. Le dépôt lui-même est le paquet installable : SKILL.md, references/, scripts/, les installateurs et assets/ se trouvent à la racine. dist/collage.skill est un ZIP de ces fichiers exactement, avec les mêmes chemins à la racine de l'archive.