CommunityImagengithub.com

2016judea/image-riff

Convierte una o más imágenes de referencia en arte original usando su propio lenguaje visual y lo adapta a la superficie deseada.

¿Qué es image-riff?

Esta skill define el *método* para transformar imágenes de referencia en arte original que hereda su lenguaje visual, pero compone escenas completamente nuevas. Se apoya en la skill `make-art` como motor (API, flags y configuraciones). El proceso se estructura en un prompt de tres partes fijas (STEM, SUJETO, COLA) que permiten generar láminas comparables y controlables. La skill enfatiza la entrega completa: no solo generar imágenes, sino recortarlas al tamaño correcto para el destino (banners de YouTube, avatares de Instagram, etc.), documentar cada ronda (README, prompts exactos, rankings) y conservar las rondas descartadas como conocimiento reutilizable. También incluye guías específicas para tratar con fotografías de base (más difíciles que ilustraciones), evitar bordes no deseados añadidos por el motor, y evaluar la legibilidad en tamaños reales (especialmente para iconos y avatares pequeños). Es útil para diseñadores, creadores de contenido o cualquier agente que necesite generar variaciones artísticas coherentes a partir de una o más referencias visuales, con control sobre la fidelidad, la composición y el formato final.

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

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

image-riff — arte original en un lenguaje visual prestado

El motor, su clave API, sus banderas y sus trampas viven en la skill make-art. Lea esa primero. Esta skill es el método: cómo convertir una imagen de referencia en un conjunto de opciones reales, y cómo colocarlas en la superficie para la que realmente están hechas.

Listo no son cuatro imágenes bonitas. Listo es: N láminas generadas, cada fotograma revisado, clasificado con crítica honesta, los recortes de destino realizados, y el trabajo depositado en la carpeta fuente a continuación. Una ejecución que se detiene en «aquí hay cuatro imágenes» le entrega al usuario los dos últimos trabajos.

Dónde aterriza el trabajo

art/<slug-fuente>/
  README.md                 título con fecha, el brief, una tabla rango -> lámina, y POR QUÉ ganó la elegida
  1-<slug>.jpg ...          las finales, maestros a resolución completa, numerados POR RANGO
  upload-1024/              los entregables con el tamaño real, cuando la superficie necesita un tamaño específico
  small-size-test.png       la prueba, cuando la legibilidad en tamaño decidió
  prompts/                  los prompts de las finales exactamente como se enviaron
  candidates/<ronda>/       las rondas que perdieron, cada una con su propio prompts/

<slug-fuente> es el cuerpo de trabajo, no la fecha. Si ya existen carpetas hermanas, siga su convención.

  • El README no es opcional. La carpeta se revisa en frío, semanas después. Sin él, una carpeta de JPEG numerados no puede decir cuál se envió, cuál fue rechazado o por qué.
  • Conserve las rondas perdedoras. candidates/ es donde está el conocimiento reutilizable.
  • Conserve los prompts textualmente. Son las instrucciones de reproducción y la procedencia.
  • Numere las finales por rango, no por orden de generación. El nombre del archivo es donde el ranking sobrevive después de que la conversación desaparece.
  • Mantenga el arte generado fuera de una biblioteca de fotos personal a menos que se le pida; se mezcla con fotografías reales.

Haga dos preguntas, luego invierta

A aproximadamente $0.24 por imagen 4K, una tirada de cuatro láminas cuesta alrededor de $1: lo suficientemente barato como para que dos preguntas sean toda la puerta de entrada, lo suficientemente caro como para que cero preguntas sean un desperdicio. Ambas respuestas cambian cada lámina, por lo que ninguna se puede inferir:

  1. ¿Para qué es? Decide el aspecto y si dejar espacio negativo para texto.
  2. ¿Qué tan lejos de la base? Reproducción fiel <-> reinterpretación salvaje.

Pregunte en el eje subjetivo; decida el técnico usted mismo.

El prompt tiene tres partes, y solo una varía

Constrúyalo en código, un archivo por tema:

STEM    (idéntico para cada lámina)  — el lenguaje de renderizado, leído de la imagen
SUJETO  (la única variable)          — un párrafo, una composición
COLA    (idéntico para cada lámina)  — geometría + los negativos

Una plantilla STEM, como movimientos en lugar de palabras:

Use la imagen adjunta estrictamente como ancla de estilo y color. Reproduzca su lenguaje de renderizado exacto: <período + medio>, <cómo se aplica el color>, <comportamiento de la línea>, <técnica de textura / sombreado>, <pigmentos nombrados, 2-3 máximo, más el pequeño acento>, <qué hace la luz>. NO copie el tema de la imagen adjunta. Componga algo nuevo.

SUJETO:

Y la COLA:

Composición , sangrado completo de borde a borde. Sin borde, sin marco, sin textura de papel, sin margen blanco. Sin texto, sin letras, sin firma, sin logotipo.

Una base fotográfica es el caso más difícil: pruebe a 2K antes de gastar en una tirada. «Reproduzca el lenguaje de renderizado, cambie el tema» produce arte de forma fiable a partir de una base estilizada (una viñeta de cómic, un grabado). A partir de una fotografía puede ejecutar perfectamente y aun así decepcionar. Haga una tercera pregunta cuando la base sea una fotografía — ¿debería esto terminar pareciendo una fotografía, o algo más? — y gaste una o dos láminas 2K antes de cuatro 4K.

Cuando la base es una fotografía, las ranuras del STEM cambian pero su función no. Intercambie las ranuras de creación de marcas por las seis cosas que decide una cámara: <stock + formato>, , <calidad y ángulo de la luz>, <paleta, 3-4 colores nombrados más el acento>, <grano / halación / viñeteado>, . La última ranura importa más, porque el valor predeterminado del motor para cualquier prompt fotográfico es digital contemporáneo: diga sin HDR, sin sombras elevadas, sin claridad digital, sin grado cinematográfico teal-and-orange. Una cláusula como «negros profundamente aplastados que no guardan ningún detalle de sombra» puede ser la línea más importante del prompt.

También lea la base en busca de su sujeto implícito, no solo su renderizado (ej., un lugar privado, visto desde arriba, sin nadie dentro). Nómbrelo en una oración antes de escribir cualquier SUJETO; ponga invariantes como ninguna persona visible en el encuadre en la COLA.

Por qué está construido así:

  • La imagen lleva el estilo; el STEM solo nombra lo que está visiblemente allí. Describa la creación de marcas que puede ver — líneas de contorno negras duras de grosor variable, sombreado visible de puntos ben-day, mezclas mecánicas aerografiadas únicamente, sin luz fotográfica. Nombrar la técnica evita que el modelo la modernice.
  • «NO copie el sujeto... componga algo nuevo» es crucial. Sin eso obtiene una variación de la base. Con eso obtiene composiciones originales en el lenguaje de la base, y las mejores citan la base en lugar de repetirla.
  • Nombre pigmentos y limite el acento. Diga «pequeño» sobre el acento específicamente, o se apodera del encuadre.
  • Los negativos no son relleno. El motor añade un borde de papel/riso por iniciativa propia; cuatro negativos en la COLA no cuestan nada.
  • STEM + COLA idénticos hace que el conjunto sea comparable. Cada diferencia entre láminas es una que usted pidió.

Los sujetos deben ser VENTAJAS, no decoraciones

La decisión creativa más importante. Cuatro sujetos que difieren en dónde está la cámara:

láminaventajaejemplo
spiremirando directamente hacia arriba por un eje verticaluna torre que se eleva de un mar de nubes, estrechándose en perspectiva
wreckmirando a través de una llanura vacíaun naufragio medio enterrado, una pequeña figura caminando hacia él
descentmirando abruptamente hacia abajo a través de nubesun océano de placas hacia un horizonte curvo, una figura cayendo
mandalamirando a un patrón puro, sin horizonteuna roseta simétrica, de esquina a esquina

Las láminas se entregan por su ventaja: una columna vertical sobrevive a un recorte de banner letterbox; una sola silueta contra el cielo sobrevive a un recorte de avatar cuadrado. Cuatro láminas que difieren solo en mobiliario se recortan de la misma manera: una opción con cuatro disfraces. Una idea por lámina.

Clasifique contra el brief — luego diga cuál quiere cada SUPERFICIE

Dos ordenaciones separadas. Clasifique honestamente contra la base y nombre la lámina que se desvió; luego agregue una línea por superficie de destino diciendo qué lámina quiere esa superficie y por qué el recorte lo hace así. La lámina que clasifique última en fidelidad puede ser el banner correcto. Un rango bajo no es un veto; es un eje.

Corte los recortes. Cada superficie tiene una geometría.

Entregue archivos con el tamaño del destino, no de las láminas fuente.

Banner de canal de YouTube — una subida 16:9; YouTube sirve un sector diferente por dispositivo.

  • Almacenado / TV: 2560x1441.
  • Barra de escritorio: 2560x424, el ~29.4% vertical central (superior 35.3% -> inferior 64.7%). Todo lo que debe verse vive en esa banda.
  • Una lámina alta 9:16 tiene ~3 veces la altura que necesita un recorte 16:9: elija la banda, no acepte el centro por defecto.

Avatar de canal — cuadrado, servido de 900x900 hasta 88x88. Evalúe a 88px.

Para leer qué sirve realmente un canal:

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/@<canal>" | grep -o '"banner".\{0,400\}'
# fcrop64 hex son cuatro fracciones de 16 bits de 0xffff: izquierda, superior, derecha, inferior
python3 -c "h='00005a57ffffa5a8'; print([round(int(h[i:i+4],16)/0xffff,4) for i in range(0,16,4)])"

Para otras superficies, mida el recurso servido real antes de recortar; no confíe en una ficha técnica recordada.

Mecánica

  • Una imagen base pegada no está en disco. Extráigala del base64 de la transcripción de la sesión (make-art tiene el fragmento), luego mírela antes de gastar una generación 4K en la imagen equivocada.
  • Genere la tirada en paralelo, una llamada de shell por lámina. Cuatro láminas 4K aterrizan en ~2 minutos.
  • --out foo.png puede escribir un JPEG. Verifique el mime impreso y renombre.
  • Mire cada fotograma usted mismo antes que el usuario, y busque el borde de papel en lugar de juzgar a ojo: un borde casi blanco asimétrico que corre es cielo o nubes que tocan el sangrado, no un marco.

Cuando no hay imagen base

El mismo prompt de tres partes funciona sin ancla: el STEM se convierte en un estilo propio que usted define. Dele un ancla temática del material propio del usuario (una colección de citas, un tablero de inspiración) para que no sea genérico.

Iconos y avatares: la prueba de tamaño pequeño es la única prueba

La clasificación puede invertirse entre el tamaño completo y el tamaño real. Construya la hoja de contactos antes de tener una opinión: reduzca al tamaño de renderizado real, recorte en círculo como lo hace la aplicación, luego amplíe con vecino más cercano para ver qué sobrevive.

from PIL import Image, ImageDraw
for s in (110, 44, 32):                      # IG: perfil / fila DM / anillo feed+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 = ver los píxeles

Una lámina hermosa a 110px puede ser un borrón ilegible a 44px. Geometría de Instagram: subida cuadrada (1024x1024 funciona), renderizada como un círculo, ~110px en el perfil, 44px en una fila de DM, 32px en un anillo de feed o story. Evalúe a 32.

Cuatro restricciones que marcan la diferencia, todas invisibles a tamaño completo:

  1. Tres colores planos, y no más. Cada color extra es un tono medio, y los tonos medios se fusionan.
  2. Nada más delgado que 1/40 del encuadre. Dígalo en el prompt como un número.
  3. El emblema debe ocupar >=85% del ancho. Indíquelo en MAYÚSCULAS; de lo contrario, el motor centra una marca modesta en mucho terreno vacío.
  4. El color intenso pertenece al FONDO, no a un destello. Un brillo especular no vale nada a 32px; un campo plano completo de un color intenso detiene un pulgar. Las instrucciones de brillo metálico se leen como barro cuando se reducen.

Dos cosas que el motor añade por iniciativa propia

  • Nunca mencione el recorte circular en el prompt. Dibujará el círculo. Diga en su lugar: «el fondo plano ininterrumpido llega hasta los cuatro bordes del cuadrado; el emblema está contenido dentro de los tres cuartos centrales», y ponga sin círculo, sin anillo, sin redondel, sin forma envolvente en la COLA.
  • Añade una viñeta radial a menos que se lo prohiba. Exija «cada relleno absolutamente plano — sin degradado, sin viñeta, sin oscurecimiento radial en las esquinas o bordes.»

Nunca atribuya la imagen base a partir de una descripción de estilo

Una frase de estilo que usted escribió («en la tradición de Moebius») no es una atribución; no deje que se convierta en un crédito posteriormente. Si un crédito va a algún lugar público, pregunte por el artista real. Un crédito incorrecto a un artista real es peor que uno en blanco.

Más de una imagen base

--image es repetible, por lo que múltiples anclas son posibles pero menos probadas. Diga en el prompt qué imagen proporciona qué («la imagen 1 es el color y el lenguaje de línea; la imagen 2 es la estructura») y trate la primera tirada como una sonda.

Véase también

brand-direction-plates (la tirada inversa: varios LENGUAJES sobre un mismo tema) · make-art (el motor, las banderas, la extracción de pegado, la sonda de bordes).

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 relacionados