CommunityImagemgithub.com

Desenhar Tudo (draw-anything)

Desenha ou copia imagens usando matemática: vetorização Bézier, séries de Fourier (epiciclos), SDF, equações implícitas, paramétricas, polares, fórmula de Tupper e outros. Gera animações e imagens para redes sociais (Reels, TikTok, Shorts, YouTube), com fundo transparente (.mov/.webm), equações para o Desmos e código GLSL.

O que é Desenhar Tudo (draw-anything)?

Esta skill transforma descrições textuais ou imagens de entrada em representações matemáticas visuais, como animações de Fourier (epiciclos), curvas paramétricas, campos de SDF (Signed Distance Functions) e arte ASCII via fórmula de Tupper. Ela é útil para criadores de conteúdo, video editors e educadores que querem demonstrar conceitos matemáticos de forma visual, gerando arquivos prontos para publicação (MP4, GIF, SVG, PNG) e para plataformas como Desmos e Shadertoy/GLSL. A skill detecta automaticamente o melhor método para cada pedido (por exemplo, Fourier para animações com círculos girando, Bézier para cópias exatas de logotipos, SDF para formas preenchidas) e permite ajustes finos de parâmetros como número de termos, cores e estilo. Suporta a geração de loops contínuos, sobreposições com canal alpha e legendas prontas para redes sociais, tudo com foco em originalidade e respeito a direitos autorais.

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

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Desenhar Tudo (Draw Anything)

Transforma um pedido em um desenho matemático e fornece a matemática junto. Os usuários geralmente são criadores de conteúdo e editores de vídeo. Gere arquivos no formato correto e explique o método em palavras simples.

Procedimento

  1. Identifique o assunto, o destino (Reels, post, YouTube, sobreposição de vídeo), estático ou animado, e as cores. Se faltar algum dado, use os padrões (quadrado, tema escuro). Informe ao usuário os padrões. Não faça muitas perguntas.
  2. Selecione o método (tabela abaixo). Se o usuário nomear um método, use-o.
  3. Se o usuário fornecer uma imagem, copie-a usando trace_image.py. Uma cópia é mais precisa que um novo desenho.
  4. Se não houver imagem, crie a geometria você mesmo (veja "Desenhar sem imagem").
  5. Faça uma prévia rápida (540 px, poucos quadros). Visualize-a no visualizador de imagens. Corrija as proporções, o enquadramento e as cores. Repita até o resultado ficar bom.
  6. Gere o arquivo final no tamanho solicitado.
  7. Coloque os arquivos na pasta de saída e apresente-os. Dê uma resposta curta: método, parâmetros principais e uma legenda pronta.

Seleção de método

PedidoMétodoScript
Copiar uma imagem (desenho, logotipo, letreiramento, silhueta, ilustração, foto)Bézier (Potrace), Fourier por contorno para animaçãotrace_image.py
Nome, assinatura, novo contorno, "desenhado por círculos"Fourierfourier_draw.py
Formas preenchidas: ícone, mascote, logotipo, cena, padrão, mandalaSDFsdf.py (biblioteca)
Equação como assunto, curva famosa, região preenchidaImplícitacurves.py
Espiral, rosa, Lissajous, espirógrafoParamétrica/polarcurves.py
Pixel art, "fórmula que se desenha"Tuppertupper.py
Fractal, planta, campo de fluxoOutroseu próprio código (references/methods.md §7)

Fourier sozinho não consegue copiar cantos vivos exatamente (efeito Gibbs). Para uma cópia exata, use Bézier. Use Fourier para a animação.

Scripts

Todos os scripts estão em scripts/. Execute um script com --help para todas as opções. Opções comuns: --size (reels, post, square, youtube, thumb, 4k ou LxA), --theme (dark, light, neon, blueprint, paper), --transparent. Dependências: numpy, matplotlib, Pillow, imageio/ffmpeg, OpenCV, scikit-image, potracer (o script instala com pip se estiver faltando).

Copiar uma imagem:

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      # traços editáveis
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 (padrão): arte linear, logotipos, letreiramento, silhuetas, capturas de tela. Ele identifica imagens claras em fundo escuro e remove barras pretas.
  • --mode color --colors N: ilustrações, impressões, pinturas, ícones, fotos. Use 12–16 cores para obras de arte e fotos. Adicione --lines para impressões, quadrinhos e arte com nanquim: adiciona camadas superiores para contornos finos escuros e pequenos detalhes claros (espuma, estrelas, realces). --detail 1 mantém mais pequenos detalhes.
  • --mode edges: transforma uma foto em um desenho linear.
  • --centerline: para arte linear, esboços, caligrafia e assinaturas. Cada traço se torna um caminho SVG editável com sua largura de traço (como uma linha de caneta no Illustrator/Figma/Inkscape). Junções, cruzamentos e cantos vivos são reparados, partes retas se tornam linhas exatas e as extremidades do traço (redonda/quadrada) são identificadas a partir da tinta. Substitua com --cap e --join. Sem --centerline, o SVG tem contornos preenchidos (melhor para logotipos, letreiramento, silhuetas).
  • --anim-style pen desenha as curvas Bézier e depois mostra o preenchimento. --anim-style fourier usa uma cadeia de epiciclos para cada contorno ou traço. No modo colorido, os epiciclos desenham os contornos de região mais longos (--max-strokes, padrão 800) e então o vetor de cores aparece gradualmente.
  • --keep-colors mantém as cores originais (modo ink). --detail N ignora pequenos pontos. --smooth 0 mantém cantos vivos.
  • O script imprime a acurácia (IoU) e o desvio de borda em pixels. Para traços, o desvio de borda é o valor mais relevante: uma média abaixo de ~0,8 px é uma cópia muito precisa.
  • O script imprime a acurácia. Bons valores: mais de 95% para silhuetas e logotipos, 88–92% para contornos finos, 80–88% para --centerline (cada traço tem uma largura). Pixels de borda diminuem o IoU. No modo edges, o valor não é útil. Se o valor for baixo, observe a cópia e ajuste --threshold ou --detail.
  • Mostre a cópia ao lado do original antes de fazer a animação.

Fourier: cada contorno separado recebe sua própria série, portanto nenhuma linha conecta as partes. --single-line dá o estilo "traço único de caneta".

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). Saídas: --png (--fill), --anim, --svg, --desmos (t de 0 a 1), --json.

SDF: importe como biblioteca em um script curto.

import sys; sys.path.insert(0, "<pasta-da-skill>/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")

O docstring do sdf.py lista as primitivas, operações e opções de camada. Animação: animate(lambda t: [layers], "out.mp4", frames=120). Para Shadertoy/GLSL, leia references/glsl.md.

Curvas: a variável a vai de 0 a 1 durante a animação. Use ::#hex para definir uma cor.

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 "OLÁ" --png tupper.png --out k.txt
python scripts/tupper.py encode --ascii drawing.txt --png art.png --out k.txt   # '#' e '.'
python scripts/tupper.py classic --png formula.png

O encode verifica a si mesmo com a fórmula real. Forneça o k completo no arquivo .txt.

Saída para editores de vídeo

  • Redes sociais: .mp4 (H.264). Slack, email, README: .gif (máximo 540 px).
  • Sobreposição em vídeo: use --transparent com .mov (ProRes 4444 com alpha), .webm (VP9 com alpha) ou um nome de pasta (sequência PNG). Premiere, DaVinci, After Effects e Final Cut aceitam o .mov. Se um editor não aceitar vídeo com alpha, use a sequência PNG.
  • Um loop é contínuo se a animação usar a apenas em sin/cos(2π·a).
  • Para mais dicas (áreas seguras, durações, ideias de séries), leia references/creator-playbook.md.

Desenhar sem imagem

  • Divida o assunto em 3 a 8 formas simples (gato = elipse + 2 triângulos + círculos).
  • Use mirror_x para assuntos simétricos.
  • Para Fourier, escreva um caminho SVG fechado em uma caixa 0–200 com curvas C.
  • Para Tupper, desenhe o bitmap em ASCII (17 linhas, 106 colunas no máximo).
  • Certifique-se de que uma pessoa possa identificar o assunto imediatamente em cada prévia.

Limites

Desenhe designs originais, a própria arte e logotipos do usuário, formas genéricas e obras de domínio público. Não copie nem trace personagens, mascotes, logotipos ou obras de arte que pertençam a outras pessoas, mesmo quando o usuário fornecer a imagem. Não crie versões "similares" deles. Ofereça um design original. Copie fotos de pessoas reais apenas se o usuário possuir a foto ou tiver permissão.

Resposta

Mantenha a resposta curta: o que você desenhou, o método e porquê (uma frase), os parâmetros principais (termos, equação, k curto) e uma legenda pronta. Ofereça uma variação útil em uma linha.

Habilidades Relacionadas