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
- 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.
- Selecione o método (tabela abaixo). Se o usuário nomear um método, use-o.
- Se o usuário fornecer uma imagem, copie-a usando
trace_image.py. Uma cópia é mais precisa que um novo desenho. - Se não houver imagem, crie a geometria você mesmo (veja "Desenhar sem imagem").
- 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.
- Gere o arquivo final no tamanho solicitado.
- 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
| Pedido | Método | Script |
|---|---|---|
| Copiar uma imagem (desenho, logotipo, letreiramento, silhueta, ilustração, foto) | Bézier (Potrace), Fourier por contorno para animação | trace_image.py |
| Nome, assinatura, novo contorno, "desenhado por círculos" | Fourier | fourier_draw.py |
| Formas preenchidas: ícone, mascote, logotipo, cena, padrão, mandala | SDF | sdf.py (biblioteca) |
| Equação como assunto, curva famosa, região preenchida | Implícita | curves.py |
| Espiral, rosa, Lissajous, espirógrafo | Paramétrica/polar | curves.py |
| Pixel art, "fórmula que se desenha" | Tupper | tupper.py |
| Fractal, planta, campo de fluxo | Outro | seu 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--linespara impressões, quadrinhos e arte com nanquim: adiciona camadas superiores para contornos finos escuros e pequenos detalhes claros (espuma, estrelas, realces).--detail 1manté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--cape--join. Sem--centerline, o SVG tem contornos preenchidos (melhor para logotipos, letreiramento, silhuetas).--anim-style pendesenha as curvas Bézier e depois mostra o preenchimento.--anim-style fourierusa 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-colorsmantém as cores originais (modo ink).--detail Nignora pequenos pontos.--smooth 0manté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--thresholdou--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
--transparentcom.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
aapenas 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_xpara 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.