Community이미지github.com

draw-anything

이미지를 수학적인 방법으로 그리거나 정확하게 복사합니다. 베지어 곡선, 푸리에 급수(에피사이클), 부호 거리 함수(SDF), 음함수/매개변수/극방정식, Tupper 공식 등 다양한 방식을 지원하며, 소셜 미디어 및 영상 편집용 파일(투명 .mov/.webm 포함)과 Desmos 수식, GLSL 코드를 제공합니다.

draw-anything란 무엇인가요?

이 스킬은 사용자의 요청(예: "수학으로 그려줘", "푸리에로", "Desmos로")에 따라 이미지나 애니메이션을 수학적으로 생성합니다. 이미지 복사가 필요한 경우 `trace_image.py` 스크립트로 베지어 곡선을 이용해 정확하게 복사하고, 애니메이션이 필요하면 푸리에 급수로 각 외곽선을 에피사이클로 표현합니다. 도형 채우기에는 SDF, 특정 곡선에는 음함수/매개변수 방정식, 픽셀 아트에는 Tupper 공식을 사용합니다. 모든 스크립트는 Python 기반이며 numpy, matplotlib, Pillow 등 표준 라이브러리와 potracer, OpenCV를 활용합니다. 출력 형식은 MP4, GIF, 투명 MOV/WebM, SVG, PNG, Desmos 수식, GLSL 등으로 다양하며, 사용자에게 간단한 설명과 함께 주요 매개변수와 캡션을 제공합니다.

지원 대상~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에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Draw Anything

요청을 수학적 그림으로 변환하고, 그 수학적 설명을 함께 제공합니다. 사용자는 주로 콘텐츠 제작자와 영상 편집자입니다. 올바른 형식의 파일을 제공하고, 사용된 방법을 간단한 언어로 설명합니다.

절차

  1. 주제, 대상(Reels, 게시물, YouTube, 영상 오버레이), 정적 또는 애니메이션 여부, 색상을 파악합니다. 정보가 부족하면 기본값(정사각형, 어두운 테마)을 사용합니다. 사용자에게 기본값을 알려줍니다. 많은 질문은 하지 않습니다.
  2. 방법을 선택합니다(아래 표 참조). 사용자가 특정 방법을 언급하면 그 방법을 사용합니다.
  3. 사용자가 이미지를 제공하면 trace_image.py로 복사합니다. 복사본이 새로운 그림보다 더 정확합니다.
  4. 이미지가 없으면 직접 지오메트리를 만듭니다("이미지 없이 그리기" 참조).
  5. 빠른 미리보기(540px, 적은 프레임)를 만듭니다. 이미지 뷰어로 확인하고 비율, 구도, 색상을 보정합니다. 결과가 좋을 때까지 이 과정을 반복합니다.
  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.8px 미만이면 매우 정확한 복사입니다.
  • 스크립트는 정확도를 출력합니다. 좋은 값: 실루엣과 로고의 경우 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, "<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")

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

인코딩은 실제 수식으로 자체 검증합니다. 전체 k 값을 .txt 파일에 제공하세요.

영상 편집자를 위한 출력

  • 소셜 미디어: .mp4 (H.264). Slack, 이메일, README: .gif (최대 540px).
  • 영상 위에 오버레이: --transparent 옵션과 함께 .mov (알파 채널이 있는 ProRes 4444), .webm (알파 채널이 있는 VP9) 또는 폴더 이름(PNG 시퀀스)을 사용하세요. Premiere, DaVinci, After Effects 및 Final Cut은 .mov를 지원합니다. 편집기가 알파 비디오를 지원하지 않으면 PNG 시퀀스를 사용하세요.
  • 애니메이션이 a를 sin/cos(2π·a)에만 사용하면 무한 루프가 끊김 없이 재생됩니다.
  • 더 많은 팁(안전 영역, 지속 시간, 시리즈 아이디어)은 references/creator-playbook.md를 읽으세요.

이미지 없이 그리기

  • 대상을 3~8개의 간단한 도형으로 나눕니다(고양이 = 타원 + 삼각형 2개 + 원).
  • 대칭인 대상에는 mirror_x를 사용합니다.
  • 푸리에의 경우, 0–200 상자 안에 C 곡선으로 닫힌 SVG 경로를 작성합니다.
  • Tupper의 경우, 비트맵을 ASCII로 그립니다(최대 17행, 106열).
  • 각 미리보기에서 사람이 대상을 즉시 식별할 수 있는지 확인합니다.

제한 사항

원본 디자인, 사용자 자신의 작품과 로고, 일반적인 도형 및 공개 도메인 작품을 그립니다. 타인의 캐릭터, 마스코트, 로고 또는 저작물을 복사하거나 추적하지 마십시오. 사용자가 이미지를 제공한 경우에도 마찬가지입니다. "유사한" 버전을 만들지 마십시오. 원본 디자인을 제안하십시오. 실제 인물의 사진은 사용자가 해당 사진을 소유하거나 사용 허가를 받은 경우에만 복사하십시오.

답변

답변은 간결하게 유지하십시오: 무엇을 그렸는지, 방법과 그 이유(한 문장), 주요 매개변수(항, 방정식, 짧은 k 값) 및 바로 사용할 수 있는 캡션. 유용한 변형 한 가지를 한 줄로 제안하십시오.

관련 스킬