CommunityImagegithub.com

image-riff — œuvre originale dans un langage visuel emprunté

Transformez une ou plusieurs images de référence en œuvres originales qui reprennent leur langage visuel, puis adaptez-les à la surface de destination prévue.

Qu'est-ce que image-riff — œuvre originale dans un langage visuel emprunté ?

Cette compétence (skill) permet de générer des œuvres originales à partir d'images de référence en reproduisant fidèlement leur langage visuel (style, couleurs, texture, technique) tout en créant des compositions totalement nouvelles. Elle s'appuie sur le moteur `make-art` et fournit une méthodologie complète : analyse de l'image source, construction du prompt en trois parties (STEM, SUBJECT, TAIL), génération de plusieurs planches (généralement quatre) avec des points de vue variés, puis classement, critique et découpage adapté à la surface finale (bannière YouTube, avatar de chaîne, couverture, etc.). Elle insiste sur la conservation des prompts exacts, des rounds perdus et une documentation rigoureuse via un README. Elle est conçue pour Claude Code (ou tout agent capable d'exécuter des commandes shell et Python) et est particulièrement utile pour les designers, créateurs de contenu et artistes numériques souhaitant explorer des variations créatives à partir d'une référence unique. Le coût indicatif est d'environ 0,24 $ par image 4K, ce qui rend la génération rapide et économique.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/image-riff

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait image-riff — œuvre originale dans un langage visuel emprunté ?

Le moteur, sa clé API, ses drapeaux et ses pièges se trouvent dans la compétence make-art. Lisez-la d'abord. Cette compétence est la méthode : comment transformer une image de référence en un ensemble d'options réelles, et comment les positionner sur la surface à laquelle elles sont destinées.

Fait ne signifie pas quatre belles images. Fait signifie : N planches générées, chaque image examinée, classée avec une critique honnête, les recadrages de destination effectués, et le travail déposé dans le dossier source ci-dessous. Un essai qui s'arrête à « voici quatre images » laisse les deux dernières tâches à l'utilisateur.

Où le travail est déposé

art/<source-slug>/
  README.md                 titre daté, le brief, un tableau classement -> planche, et POURQUOI le gagnant a été choisi
  1-<slug>.jpg ...          les finales, masters pleine résolution, numérotés PAR CLASSEMENT
  upload-1024/              les livrables aux dimensions réelles, lorsque la surface nécessite une taille spécifique
  small-size-test.png       la preuve, lorsque la lisibilité à une taille donnée a tranché
  prompts/                  les prompts exacts des finales, tels qu'envoyés
  candidates/<round>/       les rounds perdus, chacun avec son propre dossier prompts/

<source-slug> est le corps de l'œuvre, pas la date. Si des dossiers frères existent déjà, respectez leur convention.

  • Le README n'est pas facultatif. Le dossier sera relu à froid, des semaines plus tard. Sans lui, un dossier de JPEG numérotés ne peut pas dire quelle image a été retenue, laquelle a été rejetée, ni pourquoi.
  • Conservez les rounds perdus. candidates/ est l'endroit où se trouve la connaissance réutilisable.
  • Conservez les prompts textuellement. Ce sont les instructions de reproduction et la provenance.
  • Numérotez les finales par classement, pas par ordre de génération. Le nom du fichier est l'endroit où le classement survit une fois la conversation terminée.
  • Gardez les œuvres générées en dehors d'une photothèque personnelle sauf demande expresse ; elles se mélangeraient avec de vraies photographies.

Posez deux questions, puis dépensez

À environ 0,24 $ par image 4K, une série de quatre planches coûte environ 1 $ : assez peu cher pour que devenir un véritable garde-fou, assez cher pour que zéro question soit un gaspillage. Les deux réponses changent à chaque planche, donc aucune ne peut être déduite :

  1. À quoi cela sert-il ? Décide le format et s'il faut laisser de l'espace négatif pour du texte.
  2. À quelle distance de la base ? Reproduction fidèle <-> réinterprétation sauvage.

Interrogez sur l'axe subjectif ; décidez vous-même de l'axe technique.

Le prompt a trois parties, et une seule varie

Construisez-le en code, un fichier par sujet :

STEM    (identique pour chaque planche) — le langage de rendu, lu sur l'image
SUBJECT (la seule variable)             — un paragraphe, une composition
TAIL    (identique pour chaque planche) — géométrie + les négatifs

Un modèle de STEM, exprimé en mouvements plutôt qu'en mots :

Utilisez l'image jointe strictement comme ancre de style et de couleur. Reproduisez son langage de rendu exact : <période + médium>, <comment la couleur est posée>, , <texture / technique d'ombrage>, <pigments nommés, 2-3 max, plus le petit accent>, <ce que fait la lumière>. Ne COPIEZ PAS le sujet de l'image jointe. Composez quelque chose de nouveau.

SUBJECT :

Et le TAIL :

composition , à fond perdu bord à bord. Pas de bordure, pas de cadre, pas de texture de papier, pas de marge blanche. Pas de texte, pas de lettrage, pas de signature, pas de logo.

Une base photographique est le cas le plus difficile : testez en 2K avant de dépenser pour une série. « Reproduire le langage de rendu, changer le sujet » produit fiablement de l'art à partir d'une base stylisée (une case de bande dessinée, une estampe). À partir d'une photographie, il peut exécuter parfaitement et pourtant décevoir. Posez une troisième question lorsque la base est une photographie — ce résultat doit-il ressembler à une photographie ou à autre chose ? — et dépensez une ou deux planches 2K avant quatre planches 4K.

Lorsque la base est une photographie, les emplacements du STEM changent mais son rôle reste le même. Remplacez les emplacements liés à la marque par les six choses qu'un appareil photo décide : <stock + format>, <réponse des ombres>, <qualité et angle de la lumière>, <palette, 3-4 couleurs nommées plus l'accent principal>, <grain / halation / vignette>, <ce qu'elle N'EST PAS>. Le dernier emplacement est le plus important, car le comportement par défaut du moteur pour tout prompt photographique est le numérique contemporain : dites pas de HDR, pas d'ombres relevées, pas de netteté numérique, pas de teinte cinématographique bleu-vert et orange. Une clause comme « noirs profonds écrasés qui ne retiennent aucun détail d'ombre » peut être la ligne la plus importante du prompt.

Lisez également la base pour son sujet implicite, pas seulement son rendu (par exemple un lieu privé, vu d'en haut, sans personne). Nommez-le en une phrase avant d'écrire un quelconque SUBJECT ; mettez les invariants comme aucun personne visible dans le cadre dans le TAIL.

Pourquoi c'est construit ainsi :

  • L'image porte le style ; le STEM ne nomme que ce qui est visiblement présent. Décrivez la marque que vous pouvez voir — lignes de contour noires et dures d'épaisseur variable, ombrage visible par points de trame ben-day, mélanges mécaniques aérographiés uniquement, pas de lumière photographique. Nommer la technique empêche le modèle de la moderniser.
  • « Ne COPIEZ PAS le sujet… composez quelque chose de nouveau » est crucial. Sans cela, vous obtenez une variation de la base. Avec cela, vous obtenez des compositions originales dans le langage de la base, et les meilleures d'entre elles citent la base plutôt que de la répéter.
  • Nommez les pigments, et limitez l'accent. Dites « petit » spécifiquement pour l'accent, sinon il envahit le cadre.
  • Les négatifs ne sont pas des formules toutes faites. Le moteur ajoute de lui-même une bordure papier/riso ; quatre négatifs dans le TAIL ne coûtent rien.
  • Un STEM + TAIL identiques rend l'ensemble comparable. Chaque différence entre les planches est une différence que vous avez demandée.

Les sujets doivent être des POINTS DE VUE, pas des décorations

La décision créative la plus importante. Quatre sujets qui diffèrent par l'endroit où se trouve la caméra :

planchepoint de vueexemple
flècheregardant droit vers le haut le long d'un axe verticalune tour s'élevant d'une mer de nuages, se rétrécissant en perspective
épaveregardant à travers une plaine videune épave à moitié enterrée, une minuscule figure marchant vers elle
descenteregardant abruptement vers le bas à travers des nuagesun océan de plaques jusqu'à un horizon courbe, une figure tombant au loin
mandalaregardant un motif pur, sans horizonune rosace symétrique, d'un coin à l'autre

Les planches sont livrées pour leur point de vue : une colonne verticale survit à un recadrage en bannière letterbox ; une silhouette unique contre le ciel survit à un recadrage carré d'avatar. Quatre planches qui ne diffèrent que par le mobilier se recadrent toutes de la même manière — une option dans quatre costumes. Une idée par planche.

Classez par rapport au brief — puis dites laquelle chaque SURFACE veut

Deux classements séparés. Classez honnêtement par rapport à la base et nommez la planche qui a dérivé ; puis ajoutez une ligne par surface de destination indiquant quelle planche cette surface veut et pourquoi le recadrage le justifie. La planche que vous classez dernière en fidélité peut être la bonne bannière. Un classement bas n'est pas un veto ; c'est un axe.

Effectuez les recadrages. Chaque surface a une géométrie.

Livrez des fichiers aux dimensions de la destination, pas des planches source.

Bannière de chaîne YouTube — un seul upload 16:9 ; YouTube sert une tranche différente par appareil.

  • Stockée / TV : 2560x1441.
  • Bandeau desktop : 2560x424, le ~29,4 % vertical du milieu (haut 35,3 % -> bas 64,7 %). Tout ce qui doit être vu se trouve dans cette bande.
  • Une planche haute 9:16 a environ 3x la hauteur nécessaire pour un recadrage 16:9 : choisissez la bande, n'acceptez pas le milieu par défaut.

Avatar de chaîne — carré, servi de 900x900 jusqu'à 88x88. Jugez à 88 px.

Pour lire ce qu'une chaîne sert réellement :

UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36"
curl -sL -A "$UA" "https://www.youtube.com/@<channel>" | grep -o '"banner".\{0,400\}'
# le fcrop64 hex est quatre fractions 16 bits de 0xffff : gauche, haut, droite, bas
python3 -c "h='00005a57ffffa5a8'; print([round(int(h[i:i+4],16)/0xffff,4) for i in range(0,16,4)])"

Pour d'autres surfaces, mesurez l'actif réellement servi avant de recadrer ; ne vous fiez pas à une fiche technique mémorisée.

Mécanique

  • Une image de base collée n'est pas sur le disque. Extrayez-la du base64 du transcript de la session (make-art a l'extrait de code), puis regardez-la avant de dépenser une génération 4K sur la mauvaise image.
  • Générez la série en parallèle, un appel shell par planche. Quatre planches 4K arrivent en ~2 minutes.
  • --out foo.png peut écrire un JPEG. Vérifiez le mime affiché et renommez.
  • Regardez vous-même chaque image avant l'utilisateur, et vérifiez la bordure papier plutôt que de l'estimer visuellement : un bord quasi blanc asymétrique est du ciel ou un nuage touchant le fond perdu, pas un cadre.

Quand il n'y a pas d'image de base

Le même prompt en trois parties fonctionne sans ancre : le STEM devient un style maison que vous définissez. Donnez-lui une ancre thématique tirée du matériel de l'utilisateur (une collection de citations, un tableau d'humeur) pour qu'il ne soit pas générique.

Icônes et avatars : le test en petite taille est le seul test

Le classement peut s'inverser entre la taille réelle et la taille réelle. Construisez la planche contact avant d'avoir un avis : réduisez à la taille d'affichage réelle, recadrez en cercle comme le fait l'application, puis agrandissez au plus proche voisin pour voir ce qui survit.

from PIL import Image, ImageDraw
for s in (110, 44, 32) :                      # IG : profil / ligne de DM / cercle fil+story
    small = Image.open(f"{n}.jpg").convert("RGB").resize((s, s), Image.LANCZOS)
    mask = Image.new("L", (s*4, s*4), 0)
    ImageDraw.Draw(mask).ellipse((0, 0, s*4-1, s*4-1), fill=255)
    out = Image.new("RGB", (s, s), (245, 245, 247))
    out.paste(small, (0, 0), mask.resize((s, s), Image.LANCZOS))
    out.resize((s*5, s*5), Image.NEAREST).save(f"{n}_{s}.png")   # NEAREST = voir les pixels

Une magnifique planche à 110 px peut être une tache illisible à 44 px. Géométrie Instagram : téléchargez en carré (1024x1024 fonctionne), rendu en cercle, ~110 px sur le profil, 44 px dans une ligne de DM, 32 px dans un fil ou un cercle de story. Jugez à 32.

Quatre contraintes qui font la différence, toutes invisibles en pleine taille :

  1. Trois couleurs plates, et pas plus. Chaque couleur supplémentaire est un ton moyen, et les tons moyens se confondent.
  2. Rien de plus fin que 1/40 du cadre. Dites-le dans le prompt sous forme de nombre.
  3. L'emblème doit occuper >=85 % de la largeur. Indiquez-le en majuscules ; sinon, le moteur centre une marque modeste dans beaucoup de terrain vide.
  4. La couleur chaude appartient au FOND, pas à un reflet. Un reflet spéculaire ne vaut rien à 32 px ; un champ plat d'une couleur chaude arrête le pouce. Les instructions de brillance métallique deviennent de la boue une fois réduites.

Deux choses que le moteur ajoute de sa propre initiative

  • Ne mentionnez jamais le recadrage circulaire dans le prompt. Il dessinera le cercle. Dites plutôt : « un fond plat et ininterrompu s'étend jusqu'aux quatre bords du carré ; l'emblème est contenu bien à l'intérieur des trois quarts centraux », et mettez pas de cercle, pas d'anneau, pas de médaillon, pas de forme englobante dans le TAIL.
  • Il ajoute une vignette radiale sauf interdiction. Exigez « chaque remplissage absolument plat — pas de dégradé, pas de vignette, pas d'assombrissement radial aux coins ou sur les bords. »

Ne créditez jamais l'image de base à partir d'une description de style

Une phrase de style que vous avez écrite (« dans la tradition de Moebius ») n'est pas une attribution ; ne la laissez pas devenir un crédit en aval. Si un crédit va n'importe où de public, demandez le véritable artiste. Un crédit erroné sur un véritable artiste est pire qu'aucun crédit.

Plusieurs images de base

--image est répétable, donc plusieurs ancres sont possibles mais moins testées. Dites dans le prompt quelle image fournit quoi (« l'image 1 est la couleur et le langage de lignes ; l'image 2 est la structure ») et traitez la première série comme un probe.

Voir aussi

brand-direction-plates (la série inverse : plusieurs LANGUAGES sur un seul sujet) · make-art (le moteur, les drapeaux, l'extraction de collage, le probe de bordure).

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/mcp-stack

Which free MCP server or framework to reach for, and its traps — finance/gov data (SEC EDGAR, Yahoo, SAM.gov, USAspending), web research (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/brand (Canva, Inkscape, Penpot, Figma, Orshot, Hugging Face image gen, vectorizing, charts), data/spatial (DuckDB spatial, live ArcGIS layers, OpenStreetMap/Overpass, Census, MapLibre), and ops (PostHog, iMessage, context7 docs). Use when making a social post, OG card, poster, logo/vector, chart, map, or brand asset; when querying parquet/geojson/duckdb or a city's open-data layer; when an MCP "needs authentication" or fails; or when asked "what tools do we have", "is there an MCP for X", "should we add X".

2016judea/records-request

Get a specific record out of a US government office by public-records request — "request the assessor's model", "file a data practices request", "FOIA this", "open records request", "can we just ask the county for it", "who do I write to at <county>", "chase that request", "did they ever answer". Covers checking the website first, finding the right office and statute, the carve-out paragraph that makes a request answerable instead of refused, web-form traps (hidden character caps, WAFs that reject apostrophes), chasing (there is usually no deadline), whether what comes back may be republished, and parsing multi-year tables without silent errors.

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

2016judea/vertical-market-agent

Build a chat agent that knows one industry in one metro better than any general model because it carries a precomputed digest of real public records (or a mined review corpus) and can pull live records mid-conversation — finding the moat, building a byte-stable substrate, enumerating what the records can't, the data traps that produce plausible wrong numbers, deterministic math in tools, measured prompt cost and cache TTL, shipping as an ad destination, an off-sector ending, and a precomputed spatial "what is this next to" layer. Use when building a vertical AI agent grounded in records rather than general knowledge.

Skills associés