CommunityImagengithub.com

devgabrielmarcondes/draw-anything

Dibuja o copia exactamente cualquier imagen con matemáticas. Usa vectorización Bézier, series de Fourier (epiciclos), funciones de distancia con signo (SDF), ecuaciones implícitas/paramétricas/polares, la fórmula de Tupper y otros métodos. Genera imágenes y animaciones para redes sociales y editores de video (Reels, TikTok, Shorts, YouTube, .mov/.webm transparentes), además de ecuaciones para Desmos o GLSL.

¿Qué es draw-anything?

Este skill de agente IA permite crear representaciones matemáticas precisas de imágenes, desde copias exactas hasta dibujos originales. Admite múltiples métodos como vectorización Bézier para copias fieles, series de Fourier para animaciones de epiciclos, funciones de distancia con signo (SDF) para formas rellenas, ecuaciones paramétricas/polares para espirales y curvas, y la fórmula de Tupper para arte pixelado. El flujo de trabajo incluye: recibir una solicitud del usuario (o una imagen), seleccionar automáticamente el mejor método, generar una vista previa rápida para ajustar proporciones y colores, y producir el archivo final en formatos optimizados para redes sociales (Reels, TikTok, YouTube) y editores de video (Premiere, DaVinci, After Effects). Los scripts están en una carpeta `scripts/` y se ejecutan con argumentos comunes como `--size`, `--theme` y `--transparent`. Está diseñado para creadores de contenido y editores de video que necesitan arte matemático visualmente atractivo, ya sea para overlays animados, miniaturas, o contenido educativo. El skill prioriza la precisión (mide IoU y desviación de bordes) y ofrece opciones avanzadas como modo de centro de línea para trazos editables, animaciones de un solo trazo, y salida con canal alfa.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/devgabrielmarcondes/draw-anything/tree/HEAD/skills/draw-anything

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

Dibuja Cualquier Cosa

Transforma una solicitud en un dibujo matemático y entrega las matemáticas junto con él. Los usuarios suelen ser creadores de contenido y editores de video. Proporciona archivos en el formato correcto y explica el método en palabras sencillas.

Procedimiento

  1. Identifica el tema, el destino (Reels, post, YouTube, superposición de video), si es estático o animado, y los colores. Si faltan datos, usa valores predeterminados (cuadrado, tema oscuro). Informa al usuario de los valores predeterminados. No hagas muchas preguntas.
  2. Selecciona el método (tabla a continuación). Si el usuario nombra un método, úsalo.
  3. Si el usuario proporciona una imagen, cópiala con trace_image.py. Una copia es más precisa que un dibujo nuevo.
  4. Si no hay imagen, crea la geometría tú mismo (ver "Dibujar sin una imagen").
  5. Haz una vista previa rápida (540 px, pocos fotogramas). Obsérvala con el visor de imágenes. Corrige las proporciones, el encuadre y los colores. Repite esto hasta que el resultado sea bueno.
  6. Genera el archivo final en el tamaño solicitado.
  7. Coloca los archivos en la carpeta de salida y preséntalos. Da una respuesta breve: método, parámetros principales y un pie de foto listo.

Selección de método

SolicitudMétodoScript
Copiar una imagen (dibujo, logotipo, letras, silueta, ilustración, foto)Bézier (Potrace), Fourier por contorno para animacióntrace_image.py
Nombre, firma, nuevo contorno, "dibujado por círculos"Fourierfourier_draw.py
Formas rellenas: icono, mascota, logotipo, escena, patrón, mandalaSDFsdf.py (biblioteca)
Ecuación como tema, curva famosa, región rellenaImplícitacurves.py
Espiral, rosa, Lissajous, espirógrafoParamétrica/polarcurves.py
Arte pixelado, "fórmula que se dibuja a sí misma"Tuppertupper.py
Fractal, planta, campo de flujoOtrotu propio código (references/methods.md §7)

Fourier por sí solo no puede copiar esquinas afiladas exactamente (efecto Gibbs). Para una copia exacta, usa Bézier. Usa Fourier para la animación.

Scripts

Todos los scripts están en scripts/. Ejecuta un script con --help para ver todas las opciones. Opciones comunes: --size (reels, post, square, youtube, thumb, 4k o WxH), --theme (dark, light, neon, blueprint, paper), --transparent. Dependencias: numpy, matplotlib, Pillow, imageio/ffmpeg, OpenCV, scikit-image, potracer (el script lo instala con pip si falta).

Copiar una imagen:

python scripts/trace_image.py drawing.jpg --svg d.svg --png d.png --desmos d.txt
python scripts/trace_image.py drawing.jpg --anim d.mp4 --anim-style fourier --centerline --size reels
python scripts/trace_image.py sketch.png --centerline --svg sketch.svg      # trazos editables
python scripts/trace_image.py logo.png --mode color --colors 5 --svg logo.svg
python scripts/trace_image.py photo.jpg --mode edges --anim lines.mp4
  • --mode ink (predeterminado): arte lineal, logotipos, letras, siluetas, capturas de pantalla. Encuentra imágenes claras sobre fondo oscuro y elimina barras negras.
  • --mode color --colors N: ilustraciones, impresiones, pinturas, iconos, fotos. Usa 12–16 colores para obras de arte y fotos. Añade --lines para impresiones, cómics y arte con tinta: agrega capas superiores para los contornos oscuros finos y los pequeños detalles claros (espuma, estrellas, reflejos). --detail 1 conserva más detalles pequeños.
  • --mode edges: convierte una foto en un dibujo lineal.
  • --centerline: para arte lineal, bocetos, escritura a mano y firmas. Cada trazo se convierte en una ruta SVG editable con su ancho de trazo (como una línea de bolígrafo en Illustrator/Figma/Inkscape). Las uniones, cruces y esquinas afiladas se reparan, las partes rectas se convierten en líneas exactas y los extremos del trazo (redondo/cuadrado) se determinan a partir de la tinta. Anula con --cap y --join. Sin --centerline, el SVG tiene contornos rellenos (mejor para logotipos, letras, siluetas).
  • --anim-style pen dibuja las curvas Bézier y luego muestra el relleno. --anim-style fourier usa una cadena de epiciclos para cada contorno o trazo. En modo color, los epiciclos dibujan los contornos de región más largos (--max-strokes, predeterminado 800) y luego el vector de color se desvanece.
  • --keep-colors conserva los colores originales (modo ink). --detail N ignora manchas pequeñas. --smooth 0 mantiene esquinas afiladas.
  • El script imprime la precisión (IoU) y la desviación de bordes en píxeles. Para trazos, la desviación de bordes es el valor más relevante: una media inferior a ~0.8 px es una copia muy precisa.
  • El script imprime la precisión. Valores buenos: más del 95% para siluetas y logotipos, 88–92% para contornos finos, 80–88% para --centerline (cada trazo tiene un ancho). Los píxeles de borde disminuyen el IoU. En modo edges, el valor no es útil. Si el valor es bajo, observa la copia y ajusta --threshold o --detail.
  • Muestra la copia junto al original antes de crear la animación.

Fourier: cada contorno separado obtiene su propia serie, por lo tanto no hay líneas que conecten las partes. --single-line da el estilo de "un solo trazo de bolígrafo".

python scripts/fourier_draw.py --text "Ana" --terms 300 --anim ana.mp4 --size reels --png ana.png
python scripts/fourier_draw.py --svg-path "M100 30 C 160 -20 220 60 100 170 C -20 60 40 -20 100 30 Z" \
       --terms 40 --png heart.png --desmos heart.txt

Entradas: --svg-path, --svg-file, --text, --points (JSON). Salidas: --png (--fill), --anim, --svg, --desmos (t de 0 a 1), --json.

SDF: impórtalo como biblioteca en un script corto.

import sys; sys.path.insert(0, "<skill-folder>/scripts")
from sdf import *
P = grid("square", scale=1.2)
body = ellipse(P, 0.6, 0.45)
ears = triangle(mirror_x(P), (0.15, 0.25), (0.5, 0.15), (0.45, 0.72))
cat = smooth_union(body, ears, 0.06)
eyes = circle(translate(mirror_x(P), 0.22, 0.05), 0.07)
render([(cat, "#2b2d42", {"shadow": (0.02, -0.03, 0.05)}), (eyes, "#ffd23f")], "cat.png", theme="paper")

El docstring de sdf.py enumera las primitivas, operaciones y opciones de capa. Animación: animate(lambda t: [layers], "out.mp4", frames=120). Para Shadertoy/GLSL, lee references/glsl.md.

Curvas: la variable a va de 0 a 1 durante la animación. Usa ::#hex para establecer un color.

python scripts/curves.py --region "(x**2+y**2-1)**3 - x**2*y**3::#e63946" \
       --range -1.6,1.6,-1.3,1.5 --caption '$(x^2+y^2-1)^3 = x^2y^3$' --png heart.png
python scripts/curves.py --polar "1+0.3*cos(7*th+6.283*a)" --anim flower.mp4 --size reels

Tupper:

python scripts/tupper.py encode --text "HELLO" --png tupper.png --out k.txt
python scripts/tupper.py encode --ascii drawing.txt --png art.png --out k.txt   # '#' y '.'
python scripts/tupper.py classic --png formula.png

Encode se verifica a sí mismo con la fórmula real. Proporciona la k completa en el archivo .txt.

Salida para editores de video

  • Redes sociales: .mp4 (H.264). Slack, correo electrónico, README: .gif (máximo 540 px).
  • Superposición en metraje: usa --transparent con .mov (ProRes 4444 con alfa), .webm (VP9 con alfa) o un nombre de carpeta (secuencia PNG). Premiere, DaVinci, After Effects y Final Cut aceptan el .mov. Si un editor no acepta video alfa, usa la secuencia PNG.
  • Un bucle es perfecto si la animación usa a solo en sin/cos(2π·a).
  • Para más consejos (áreas seguras, duraciones, ideas de series), lee references/creator-playbook.md.

Dibujar sin una imagen

  • Divide el sujeto en 3 a 8 formas simples (gato = elipse + 2 triángulos + círculos).
  • Usa mirror_x para sujetos simétricos.
  • Para Fourier, escribe una ruta SVG cerrada en un cuadro de 0–200 con curvas C.
  • Para Tupper, dibuja el mapa de bits en ASCII (17 filas, 106 columnas como máximo).
  • Asegúrate de que una persona pueda identificar el sujeto inmediatamente en cada vista previa.

Límites

Diseña diseños originales, el arte y los logotipos del propio usuario, formas genéricas y obras de dominio público. No copies ni rastrees personajes, mascotas, logotipos u obras de arte que pertenezcan a otras personas, incluso si el usuario proporciona la imagen. No hagas versiones "similares" de ellos. Ofrece un diseño original. Copia fotos de personas reales solo si el usuario posee la foto o tiene permiso.

Respuesta

Mantén la respuesta breve: qué dibujaste, el método y por qué (una oración), los parámetros principales (términos, ecuación, k corta) y un pie de foto listo. Ofrece una variación útil en una línea.

Skills relacionados