Community图像github.com

devgabrielmarcondes/draw-anything

用数学方法绘制或精确复制任何图像。支持贝塞尔矢量、傅里叶级数(旋轮线)、符号距离函数(SDF)、隐式/参数/极坐标方程、Tupper公式等多种方法,输出适用于社交媒体和视频编辑器的图像与动画。

draw-anything 是什么?

该技能可将任何图像或创意请求转化为基于数学方程的绘图与动画。它支持多种方法:贝塞尔曲线(通过Potrace)用于精确复制;傅里叶级数(旋轮线)用于“一笔画”动画;符号距离函数(SDF)用于填充形状;隐式、参数和极坐标方程用于曲线绘制;Tupper公式用于像素艺术。技能会生成矢量图(SVG)、动画(MP4、MOV、WebM)以及Desmos可读的方程。如果用户提供图像,它会自动追踪并复制;如果没有图像,它会指导用户将主体分解为简单的几何形状。输出针对社交媒体(Reels、TikTok、Shorts)和视频编辑器(Premiere、DaVinci、Final Cut)进行了优化,支持透明背景。技能会检查版权,拒绝复制他人受保护的IP。

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

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

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

绘制任何事物

将请求转化为数学绘图,并提供伴随的数学公式。用户通常是内容创作者和视频编辑。以正确的格式提供文件,并用简单的语言解释方法。

流程

  1. 确定主题、目标平台(Reels、帖子、YouTube、视频叠加)、静态或动画以及颜色。如果数据缺失,使用默认值(正方形、深色主题)。告知用户默认值。不要问太多问题。
  2. 选择方法(下表)。如果用户指定了方法,则使用它。
  3. 如果用户提供了图像,使用 trace_image.py 复制它。复制比新绘制更准确。
  4. 如果没有图像,自己构建几何形状(参见“无图像绘制”)。
  5. 制作快速预览(540 像素,少量帧)。使用图像查看器查看。修正比例、构图和颜色。重复此过程直到结果满意。
  6. 以所需尺寸制作最终文件。
  7. 将文件放入输出文件夹并呈现给用户。给出简短回复:方法、主要参数和现成的标题。

方法选择

请求方法脚本
复制图像(绘图、标志、文字、剪影、插图、照片)贝塞尔(Potrace),每轮廓傅里叶用于动画trace_image.py
名字、签名、新轮廓、“由圆圈绘制”傅里叶fourier_draw.py
填充形状:图标、吉祥物、标志、场景、图案、曼陀罗SDFsdf.py(库)
方程作为主体、著名曲线、填充区域隐式curves.py
螺旋、玫瑰曲线、利萨茹图形、旋轮线参数/极坐标curves.py
像素艺术、“自我绘制的公式”Tuppertupper.py
分形、植物、流场其他你自己的代码(references/methods.md §7)

仅使用傅里叶无法精确复制锐角(吉布斯效应)。对于精确复制,使用贝塞尔。对于动画,使用傅里叶。

脚本

所有脚本位于 scripts/ 目录。运行脚本时使用 --help 查看所有选项。常见选项: --size(reels, post, square, youtube, thumb, 4k 或 WxH),--theme(dark, light, neon, blueprint, paper),--transparent。 依赖项:numpy, matplotlib, Pillow, imageio/ffmpeg, OpenCV, scikit-image, potracer(如果缺失,脚本会用 pip 自动安装)。

复制图像:

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      # 可编辑的描边
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(默认):线稿、标志、文字、剪影、截图。它会识别浅背景上的深色图像并移除黑色边框。
  • --mode color --colors N:插图、印刷品、绘画、图标、照片。对于艺术作品和照片,使用 12–16 种颜色。添加 --lines 用于印刷品、漫画和墨水艺术:它会为细的深色轮廓和小的浅色细节(泡沫、星星、高光)添加上层。--detail 1 保留更多小细节。
  • --mode edges:将照片转换为线条画。
  • --centerline:适用于线稿、草图、手写文字和签名。每个笔画成为一个可编辑的 SVG 路径,带有其描边宽度(如同 Illustrator/Figma/Inkscape 中的钢笔线条)。修复连接点、交叉点和锐角,直线部分变成精确的线条,笔画的端点(圆形/方形)从墨水中识别。可使用 --cap 和 --join 覆盖。不使用 --centerline 时,SVG 为填充轮廓(最适合标志、文字、剪影)。
  • --anim-style pen 绘制贝塞尔曲线,然后显示填充。--anim-style fourier 为每个轮廓或笔画使用一个旋轮线链。在彩色模式下,旋轮线先绘制最长的区域轮廓(--max-strokes,默认 800),然后颜色矢量淡入。
  • --keep-colors 保留原始颜色(墨水模式)。--detail N 忽略小斑点。--smooth 0 保留锐角。
  • 脚本会输出精度(IoU)和以像素为单位的边缘偏差。对于描边,边缘偏差是更好的指标:平均值低于约 0.8 像素是非常精确的复制。
  • 脚本会输出精度。良好值:剪影和标志大于 95%,细轮廓 88–92%,--centerline 80–88%(每个描边有一个宽度)。边缘像素会降低 IoU。在边缘模式下,该值不实用。如果值较低,检查复制结果并调整 --threshold 或 --detail。
  • 在制作动画之前,将复制结果与原始图像并排放置查看。

傅里叶: 每个单独的轮廓获得自己的级数,因此各部分之间没有线条连接。--single-line 提供“一笔画”风格。

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

输入:--svg-path,--svg-file,--text,--points(JSON)。输出:--png(--fill),--anim,--svg,--desmos(t 从 0 到 1),--json。

SDF: 在一个简短脚本中将其作为库导入。

import sys; sys.path.insert(0, "<技能文件夹>/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")

sdf.py 的文档字符串列出了图元、操作和图层选项。动画:animate(lambda t: [layers], "out.mp4", frames=120)。对于 Shadertoy/GLSL,请阅读 references/glsl.md。

曲线: 变量 a 在动画期间从 0 变为 1。使用 ::#hex 设置颜色。

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   # '#' 和 '.'
python scripts/tupper.py classic --png formula.png

编码过程会使用真实公式进行自我验证。在 .txt 文件中给出完整的 k 值。

为视频编辑器输出

  • 社交媒体:.mp4(H.264)。Slack、邮件、README:.gif(最大 540 像素)。
  • 叠加在素材上:使用 --transparent 配合 .mov(带 Alpha 通道的 ProRes 4444)、.webm(带 Alpha 通道的 VP9)或文件夹名称(PNG 序列)。Premiere、DaVinci、After Effects 和 Final Cut 都接受 .mov。如果编辑器不接受 Alpha 视频,请使用 PNG 序列。
  • 如果动画仅在 sin/cos(2π·a) 中使用 a,则循环是无缝的。
  • 有关更多技巧(安全区域、时长、系列创意),请阅读 references/creator-playbook.md。

无图像绘制

  • 将主体分解为 3 到 8 个简单形状(猫 = 椭圆 + 2 个三角形 + 圆形)。
  • 对称主体使用 mirror_x。
  • 对于傅里叶,在 0–200 的方框中写入一个封闭的 SVG 路径,使用 C 曲线。
  • 对于 Tupper,以 ASCII 格式(最多 17 行,106 列)绘制位图。
  • 确保每个人在每个预览图中都能立即识别出主体。

限制

绘制原创设计、用户自己的艺术作品和标志、通用形状以及公共领域作品。不要复制或追踪属于其他人的角色、吉祥物、标志或艺术作品,即使用户提供了图像。不要制作它们的“相似”版本。提供原创设计。仅在用户拥有照片或已获得许可的情况下,才复制真实人物的照片。

回复

保持回复简短:你绘制了什么、使用的方法及其原因(一句话)、主要参数(项数、方程、短 k 值)和现成的标题。在一行中提供一个有用的变体。

相关技能