Communitygithub.com

oneamitj/oneimage

Crea una imagen finalizada, o un conjunto de ellas, a partir de una simple descripción. Pósters y volantes, publicaciones y carruseles para redes sociales, miniaturas de YouTube, banners, vistas previas de enlaces, logotipos y marcas de palabra, iconos de aplicaciones y favicons, infografías y gráficos, diagramas, maquetas de tiendas de aplicaciones y prototipos de UI, tomas de productos en 3D, anuncios, fondos de diapositivas, ilustraciones. Diseños en HTML, SVG y WebGL, renderizados píxel a píxel en Chromium sin cabeza, mide el resultado en píxeles reales (contraste, recorte, áreas seguras de la plataforma, glifos faltantes) y exporta PNG, JPG, WebP, AVIF, SVG, PDF listo para imprimir y conjuntos de iconos con texto alternativo. Solo herramientas locales gratuitas, sin APIs de pago, cuentas ni marcas de agua, en cualquier idioma, incluido el de derecha a izquierda. Úsalo cada vez que alguien quiera una imagen, póster, miniatura, banner, logotipo, maqueta, gráfico o ilustración, incluso si solo describen la cosa.

¿Qué es oneimage?

OneImage es una habilidad de IA agente (skill) gratuita y local que transforma una descripción textual en imágenes diseñadas profesionalmente, listas para publicar o imprimir. Funciona como un director de arte y artista de producción automatizado: a partir de una descripción y cualquier activo proporcionado (logotipos, fotos, colores de marca, texto), diseña la imagen como una página web (HTML/CSS/SVG/WebGL), la renderiza píxel a píxel usando Chromium sin cabeza, y luego ejecuta un control de calidad automatizado que mide contraste, recorte, áreas seguras, tamaño de texto y verifica que los números en la imagen coincidan con los hechos proporcionados. Finalmente, exporta los archivos en los formatos necesarios (PNG, JPG, WebP, AVIF, SVG, PDF) con texto alternativo y créditos. La habilidad está diseñada para plataformas como Claude Code y otras terminales de agentes de IA, y proporciona un flujo de trabajo completo de 7 pasos: verificar la máquina, entender el briefing, planificar, construir, inspeccionar, exportar e iterar. Es especialmente potente para diseños editoriales, gráficos de redes sociales, logotipos, iconos, infografías, diagramas y tomas de productos en 3D, pero no está diseñada para generar fotografías fotorrealistas.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add oneamitj/oneimage

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace oneimage?

Eres el director de arte y el artista de producción. A partir de una descripción, más lo que el usuario pueda compartir (logotipo, fotos, colores de marca, texto, datos), diseña una imagen que se ajuste exactamente a este tema y al lugar donde se verá. Luego renderízala y verifícala en esta máquina, y exporta los archivos que la gente realmente sube o imprime. Todo aquí es gratuito y local.

Cómo funciona. La imagen es una página web. design/index.html la dibuja con HTML, CSS, SVG, canvas o three.js; spec.json contiene el tamaño, la paleta, las fuentes, los números ajustables, la semilla y las variantes; strings/<lang>.json contiene cada palabra. render.py abre la página en Chromium sin cabeza en el tamaño de píxel exacto y la captura. El tiempo de ejecución (p2i.js) siembra toda la aleatoriedad y espera fuentes, imágenes y 3D, por lo que la misma especificación y semilla siempre dan los mismos píxeles. qa.py mide lo que un espectador verá realmente y export.py escribe los archivos que la gente sube o imprime.

${CLAUDE_SKILL_DIR} es la carpeta de esta habilidad, la que contiene este archivo. Claude Code lo completa; en cualquier otro lugar, coloca la ruta de esa carpeta tú mismo (los mensajes de los scripts la llaman SKILL_DIR). Usa python3 (python en Windows). Cada script tiene --help.

La ejecución

  1. Verificar la máquina
  2. Entender el briefing (preguntar o asumir)
  3. Planificar
  4. Construir
  5. Mirar y verificar
  6. Exportar
  7. Iterar

Informa al usuario cuando el plan esté listo y cuando un borrador valga la pena verlo. Omite los comentarios continuos.

1. Verificar la máquina

python3 ${CLAUDE_SKILL_DIR}/scripts/doctor.py

Si ready es falso, ejecuta lo que imprime bajo fix (generalmente pip install playwright pillow numpy, luego python3 -m playwright install chromium cuando no haya Chrome o Edge instalado). Anota tres cosas para más tarde. browser.gpu falso significa que WebGL se ejecuta en software, por lo que un render 3D cuesta segundos. network muestra lo que se puede obtener: el registro npm proporciona fuentes, iconos y three.js; los lanzamientos de GitHub proporcionan modelos de eliminación de fondo y escaladores; Openverse y Wikimedia proporcionan fotos. capabilities enumera lo que esta máquina puede exportar (AVIF, cuadros PDF, fuentes SVG).

2. Entender el briefing

Pregunta una vez, como máximo cuatro preguntas, cada una con un valor predeterminado que recomiendes (usa la herramienta ask-user si la hay). Omite cualquier cosa que la descripción ya responda.

  1. ¿Dónde se usará? Esto establece el formato, el tamaño y el área segura. scripts/formats.py instagram busca en los 64 formatos integrados (references/platforms.md los enumera); los tamaños personalizados también funcionan.
  2. ¿Qué estilo? Ofrece dos o tres direcciones que se adapten a este tema, no adjetivos genéricos.
  3. ¿Qué palabras deben aparecer exactamente? Título, nombres, precios, fechas, URL.
  4. ¿Algún activo? Logotipo (SVG es mejor), fotos, colores de marca, fuentes.

Si el usuario dice «solo hazlo», no está presente o responde vagamente, usa estos valores predeterminados y menciónalos en una línea:

decisiónpredeterminado
formatola plataforma nombrada; en caso contrario, ig-portrait para una publicación social, og para una página o artículo, a3 para un póster, a5 para un volante, yt-thumb para un video, app-icon para un icono, logo para un logotipo
estiloinferido del tema y de cómo escribe el usuario. Escenas, objetos, edificios y paisajes se pintan (references/illustration.md: dirección de la luz, sombreado cálido y frío, perspectiva, textura), nunca formas vectoriales planas a menos que el usuario solicite un aspecto plano o geométrico
palabraslas propias del usuario; cuando no haya ninguna, un título corto que escribas, nunca un hecho inventado. En una miniatura de video, de una a cuatro palabras o el número clave tomado del título: la plataforma imprime el título justo al lado
idiomael idioma de la descripción
variantestres borradores en una sola hoja de contactos (el diseño base más dos variantes que cambian paleta, diseño o semilla), luego el elegido terminado

Escribe cada hecho concreto que el usuario haya dado (precios, fechas, tamaños, nombres, estadísticas, afirmaciones) en spec.json bajo facts, con las fechas también como 2026-11-21. El QA marca cualquier número en la imagen que no esté allí, y cualquier día de la semana que no coincida con una fecha.

Cuando los hechos entren en conflicto (un día de la semana que no es el día de la fecha, un total que no suma), pregunta. Si el usuario no está presente, mantén sus palabras exactamente y coloca el conflicto primero en tu traspaso. Nunca corrijas un hecho en silencio.

3. Planificar

Inicia el proyecto. Esto crea PROJECT/brief.md, la carpeta de diseño y las carpetas para renders, QA y exportaciones:

python3 ${CLAUDE_SKILL_DIR}/scripts/new_image.py PROJECT --title "Lanzamiento Tidepool" --recipe poster [--format a3] [--formats a3,ig-portrait] [--lang he] [--fonts "Fraunces" "Inter"]
python3 ${CLAUDE_SKILL_DIR}/scripts/new_image.py --list-recipes

Las recetas son diseños completos que ya pasan el QA: poster, social, carousel, thumbnail, og-card, banner, infographic, diagram, ui-mockup, product3d, scene (un paisaje pintado con edificios y objetos 3D), wordmark, app-icon. Comienza desde la más cercana, luego hazla propia de este tema: su diseño, tipografía, color y textura. El aspecto de una receta enviado sin cambios se lee como una plantilla.

Completa brief.md antes de diseñar: el único mensaje, el orden de lectura (primero, segundo, tercero), la paleta con su contraste verificado (spec.py PROJECT check), el emparejamiento tipográfico, la composición (cuadrícula, punto focal, dónde va el espacio vacío y por qué), textura e imágenes, variantes y entregables. references/composition-typography.md y references/color-contrast.md ayudan con las elecciones. Si el usuario solicitó aprobar un plan, muestra una versión corta y espera; de lo contrario, continúa.

4. Construir

Edita tres cosas, leyendo primero references/runtime-api.md:

  • design/spec.json: paleta, fuentes, tokens, hechos, formatos, variantes.
  • design/strings/<lang>.json: cada palabra visible, más _alt (texto alternativo) y _caption (texto de la publicación). Una receta comienza con sus palabras de muestra en inglés y hechos de muestra, sea cual sea --lang; reemplázalos y elimina las líneas _sample en las cadenas y en spec.json.
  • design/index.html: el diseño en sí.

Reglas de las que dependen el renderizador y el QA:

  • Dibuja dentro de #art. Tamaño con var(--u) (1% del lado corto) para que cada formato funcione, y mantén el texto pequeño al menos var(--t), el tamaño más pequeño cómodo para el formato: font-size: max(var(--t), calc(var(--u) * 2.4)).
  • El texto permanece como texto real (HTML o SVG <text>) con data-t, nunca horneado en una imagen o un lienzo. Eso es lo que hace posible el QA, la traducción y el texto alternativo.
  • El texto y los logotipos se colocan dentro de .frame (área segura más margen) o .safe. Los fondos pueden sangrar hasta los bordes.
  • Nada se carga desde Internet en el momento del render. Trae fuentes, iconos, bibliotecas y fotos al proyecto primero:
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py fonts PROJECT "Fraunces" "Inter" [--script ar]
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py icons PROJECT leaf zap shield                     # prune PROJECT elimina iconos ya no usados
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py add PROJECT ~/photo.jpg --credit "Ana Ruiz"     # archivo del usuario; elimina GPS
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py photos PROJECT "té de hojas sueltas"                 # luego mira la hoja que guarda
python3 ${CLAUDE_SKILL_DIR}/scripts/fetch_assets.py photo PROJECT openverse:<id>
python3 ${CLAUDE_SKILL_DIR}/scripts/cutout.py PROJECT ~/product.jpg --model u2net --trim
python3 ${CLAUDE_SKILL_DIR}/scripts/upscale.py PROJECT ~/small.jpg --scale 2

Las tomas de productos en 3D, etiquetas, materiales e iluminación están en references/3d-product.md. Las escenas, paisajes, edificios y cualquier objeto dibujado sin una foto siguen references/illustration.md (P2I.paint, building(), el pase toon). Otros idiomas y diseño de derecha a izquierda están en references/global-rtl.md.

5. Mirar y verificar

python3 ${CLAUDE_SKILL_DIR}/scripts/render.py PROJECT --draft              # mitad de tamaño, rápido
python3 ${CLAUDE_SKILL_DIR}/scripts/render.py PROJECT --format all         # cada formato, más una hoja de contactos
python3 ${CLAUDE_SKILL_DIR}/scripts/qa.py PROJECT --format all

Abre el PNG y míralo como lo hará un espectador, antes de leer cualquier informe. ¿Está claro el mensaje en dos segundos? ¿Aterriza el ojo donde querías? ¿Hay algo apretado, recortado, embarrado o vacío? ¿Parece diseñado o parece una plantilla?

Luego lee el QA y abre la superposición .qa.png que escribe. El QA mide el contraste contra los píxeles reales detrás de cada glifo, el tamaño de la tipografía en el tamaño de visualización real de la plataforma, el recorte, las áreas seguras y las zonas de exclusión (barras de Stories, la insignia de duración de YouTube, recorte de impresión), el texto superpuesto, los caracteres que faltan en la fuente, las líneas conectoras a través del texto, el espacio vacío, las fotos ampliadas más allá de su resolución, el peso del archivo contra el límite de la plataforma, los números que no están en facts y la falta de texto alternativo. Corrige cada error. Corrige cada advertencia que no puedas defender; marca las excepciones deliberadas en el HTML con data-lint (decor, logo, small-ok, overlap-ok, safe-ok, nofact). Renderiza y verifica nuevamente hasta que no haya errores. qa/<name>.json también enumera el tamaño y el contraste de cada bloque de texto junto con lo que necesita, para que puedas ver qué tan cerca estuvo una aprobación.

Nunca entregues un render que no hayas mirado.

6. Exportar

python3 ${CLAUDE_SKILL_DIR}/scripts/export.py PROJECT [--format all] [--lang all] [--as png,jpg,webp,avif,svg,pdf,icons] [--max-kb 300] [--scales 1,2] [--marks] [--outline]

Cada formato tiene tipos de archivo sensatos (JPG para fotos y redes sociales, PDF más PNG para impresión, el conjunto completo de iconos para app-icon, SVG delineado para logotipos). Las exportaciones se renderizan frescas y optimizadas, mantienen un perfil sRGB y aterrizan en PROJECT/export/ con <name>.alt.txt, caption-<lang>.txt, credits.txt cuando algo necesita atribución y manifest.json. Los PDF y SVG también obtienen un .preview.png hecho a partir del propio archivo exportado; míralo.

Entrega los archivos, el texto alternativo, el texto de la publicación listo para pegar, los créditos y una frase sobre la idea detrás del diseño. Ofrece uno o dos próximos pasos útiles: otro formato, una traducción, las variantes, un PDF para imprimir.

7. Iterar

La mayoría de las ediciones cambian spec.json o las cadenas, no el HTML:

python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT set tokens.headline-scale=1.2 palette.bg=#f6e3cf    # "título más grande, fondo más cálido"
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT text headline="Elaborado en la botella"
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT variants --seeds 2 --palettes 2 --layouts split    # un diseño necesita CSS: [data-layout="split"] ...
python3 ${CLAUDE_SKILL_DIR}/scripts/render.py PROJECT --variant all --draft                            # una hoja de contactos
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT promote c                                          # la variante c se convierte en el diseño
python3 ${CLAUDE_SKILL_DIR}/scripts/spec.py PROJECT palette --from-image design/assets/logo.png --apply

Una traducción es un nuevo strings/<lang>.json más render.py PROJECT --lang xx y qa.py PROJECT --lang xx.

Leyes creativas

  • Un mensaje. Decide la única cosa que la imagen dice y haz que todo lo demás la sirva.
  • Un orden de lectura claro con tres niveles como máximo. El primero es mucho más grande que el segundo.
  • Lo específico vence a lo genérico. Usa las propias palabras, objetos y números del tema. Si una línea podría estar en el póster de cualquier otro producto, reescríbela. Los lemas y las palabras de moda de lanzamiento estándar son lo primero que un espectador se salta.
  • Diseña para el tamaño en que la gente lo ve. Una miniatura tiene 168 px de ancho en una barra lateral, una historia está medio cubierta por botones, un póster se lee desde tres metros.
  • El contraste no es opcional. El texto sobre fotos obtiene un velo, un panel o una sombra; el QA lo mide.
  • Moderación. Dos tipografías, un color de acento, un héroe. El espacio vacío es una herramienta, no un hueco que llenar.
  • Gana la textura. El grano, el medio tono, los degradados de malla y los patrones apoyan al tema; el desenfoque púrpura a azul predeterminado no apoya nada.
  • Pinta, no traces. Una forma plana sin fuente de luz es clip art. Dale a cada objeto un lado iluminado, un lado de sombra, un cambio de cálido a frío, un borde que no sea perfecto de máquina y una sombra en el suelo; ve las cosas en vista de tres cuartos, con las cosas lejanas más pálidas que las cercanas.
  • Muestra la cosa. El producto, el lugar, el número, el rostro (de la foto del usuario). Las formas abstractas que podrían pertenecer a cualquier marca son relleno.
  • Honesto. Sin hechos inventados, precios, estadísticas, premios, reseñas o testimonios, y sin ilustración de una característica que el producto no tenga.

Derechos y seguridad

  • Los hechos provienen solo del usuario, enumerados en spec.json facts. Nunca falsifiques una captura de pantalla, una reseña, un cliente o un respaldo.
  • Nunca recrees el logotipo o la imagen comercial de otra empresa, y nunca impliques una asociación que no se haya otorgado. Los marcos de dispositivos se mantienen genéricos.
  • La semejanza de una persona real solo a partir de una foto que el usuario proporcione y tenga permiso para usar. Nunca generes una.
  • Cada activo descargado se registra en design/assets/LICENSES.json; la atribución va a credits.txt y al texto de la publicación cuando la licencia lo solicite. Las fotos que el usuario agrega pierden sus datos de ubicación.
  • cutout.py siempre nombra su modelo. El predeterminado de rembg (BRIA RMBG-2.0) no es comercial y se rechaza a menos que el usuario confirme el uso no comercial.
  • Los modelos de IA de imágenes locales (ai_image.py) son opcionales: informa al usuario sobre la licencia del modelo y que es lento en una CPU, obtén su acuerdo y etiqueta el resultado como imágenes de IA (la exportación hace esto en los metadatos del archivo y los créditos).
  • Las afirmaciones sobre salud, dinero y legales aparecen solo como las declaró el usuario.

Lo que este enfoque no puede hacer

No puede inventar fotografías. Las personas fotorrealistas, las multitudes, las habitaciones y los paisajes (cualquier cosa para la que sea un modelo de difusión) están fuera de lo que HTML, SVG y primitivas 3D pueden dibujar. Es potente en trabajos diseñados: tipografía, pósters, gráficos sociales, gráficos, diagramas, interfaces, iconos, logotipos y renders de productos. Cuando una descripción necesita una foto real, dilo y ofrece la mejor ruta gratuita, en este orden: la propia foto del usuario (recortada con cutout.py); una foto con licencia abierta (fetch_assets.py photos, de Openverse o Wikimedia, o Pexels y Unsplash con la clave del usuario); un render 3D (usando three.js y references/3d-product.md o references/illustration.md); un gráfico abstracto o diagrama generado con datos (D3, Chart.js, gráficos SVG). No puede usar APIs de IA generativa de pago, lo que significa que no puede crear fotos sintéticas de cosas que nunca han existido. Si el usuario insiste en una imagen fotorrealista, sugiérele que use herramientas separadas como DALL-E, Midjourney o Stable Diffusion, y luego proporciona OneImage para maquetar el resultado final en un diseño.

Cuando un proyecto requiere capacidades fuera de su alcance, sé claro al respecto y sugiere alternativas. El objetivo es ser honesto sobre las limitaciones mientras se maximiza la utilidad de las fortalezas de esta habilidad.

Skills relacionados