Draw Anything(なんでも描画)
リクエストを数学的な描画に変換し、その数式も一緒に提供します。ユーザーは多くの場合、コンテンツクリエイターや動画編集者です。正しい形式でファイルを提供し、手法をわかりやすく説明します。
手順
- 主題、出力先(Reels、投稿、YouTube、動画オーバーレイ)、静止画か動画か、色を確認します。情報が不足している場合はデフォルト(正方形、ダークテーマ)を使用します。デフォルト値はユーザーに伝えます。質問は最小限にしてください。
- 下の表から手法を選択します。ユーザーが手法を指定した場合はそれを使用します。
- ユーザーから画像が与えられた場合、
trace_image.pyでトレースします。トレースの方が新規描画よりも正確です。 - 画像がない場合は、自分でジオメトリを作成します(「画像なしで描画する」を参照)。
- 高速プレビュー(540px、フレーム数少なめ)を生成し、画像ビューアで確認します。プロポーション、フレーミング、色を調整し、満足のいく結果が得られるまで繰り返します。
- 要求されたサイズで最終ファイルを生成します。
- ファイルを出力フォルダに配置し、提示します。手法、主なパラメータ、すぐに使えるキャプションを含む短い返信を行います。
手法の選択
| リクエスト | 手法 | スクリプト |
|---|---|---|
| 画像のトレース(描画、ロゴ、文字、シルエット、イラスト、写真) | ベジェ(Potrace)+輪郭ごとにフーリエでアニメーション | trace_image.py |
| 名前、サイン、新しい輪郭、「円で描く」 | フーリエ | fourier_draw.py |
| 塗りつぶし形状:アイコン、マスコット、ロゴ、シーン、パターン、曼荼羅 | SDF | sdf.py(ライブラリ) |
| 方程式そのものを主題に、有名な曲線、塗りつぶし領域 | 陰関数 | curves.py |
| 螺旋、バラ曲線、リサジュー図形、スピログラフ | 媒介変数/極方程式 | curves.py |
| ピクセルアート、「自分自身を描く公式」 | Tupper | tupper.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:線画、スケッチ、手書き文字、サインに適しています。各ストロークが、その線幅を持つ1つの編集可能なSVGパスになります(Illustrator/Figma/Inkscapeのペン線として)。接合部、交差部、鋭い角は修復され、直線部分は正確な線になり、ストロークの端(丸/角)はインクから検出されます。上書きするには--capと--joinを使用します。--centerlineなしの場合、SVGは塗りつぶし輪郭になります(ロゴ、文字、シルエットに最適)。--anim-style pen:ベジェ曲線を描画してから塗りつぶしを表示します。--anim-style fourier:各輪郭またはストロークに対して1つのエピサイクルチェーンを使用します。カラーモードでは、エピサイクルは最も長い領域の輪郭(--max-strokes、デフォルト800)を描画し、その後カラーベクトルがフェードインします。--keep-colors:元の色を保持します(インクモード)。--detail Nで小さな点を無視します。--smooth 0で鋭い角を保持します。- スクリプトは精度(IoU)とエッジ偏差(ピクセル単位)を出力します。ストロークの場合、エッジ偏差の方が優れた指標です:平均が約0.8px未満なら非常に正確なコピーです。
- スクリプトは精度を出力します。良好な値:シルエットとロゴで95%以上、細い輪郭で88~92%、
--centerlineで80~88%(各ストロークは1つの幅を持ちます)。エッジピクセルはIoUを低下させます。エッジモードではこの値は参考になりません。値が低い場合は、コピーを確認して--thresholdまたは--detailを調整してください。 - アニメーションを作成する前に、コピーをオリジナルと並べて表示してください。
フーリエ: 各輪郭は独立した級数を持つため、パーツ間に線はつながりません。--single-line で「1本のペンストローク」スタイルになります。
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 のdocstringには、プリミティブ、操作、レイヤーオプションの一覧があります。アニメーション: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 Pro、DaVinci Resolve、After Effects、Final Cut Proは.movに対応しています。編集ソフトがアルファ動画に対応していない場合はPNGシーケンスを使用してください。 - アニメーションが
aを sin/cos(2π·a) の中でのみ使用する場合、ループはシームレスになります。 - 詳しいヒント(安全領域、尺、シリーズのアイデア)については
references/creator-playbook.mdを参照してください。
画像なしで描画する
- 主題を3~8個の単純な形状に分割します(猫=楕円+2つの三角形+円)。
- 対称な主題には
mirror_xを使用します。 - フーリエの場合は、0~200のボックス内でC曲線を使った閉じたSVGパスを記述します。
- Tupperの場合は、ASCIIでビットマップを描画します(最大17行、106列)。
- 各プレビューで誰が見てもすぐに主題が識別できるようにしてください。
制限事項
オリジナルのデザイン、ユーザー自身のアートやロゴ、一般的な形状、パブリックドメインの作品を描画します。他人に帰属するキャラクター、マスコット、ロゴ、アート作品を、ユーザーが画像を提供した場合でも、トレースまたはコピーしないでください。それらの「類似」バージョンも作成しないでください。オリジナルのデザインを提案してください。実在の人物の写真は、ユーザーがその写真を所有しているか許可を得ている場合にのみコピーしてください。
返信
返信は簡潔に:何を描いたか、手法とその理由(1文)、主なパラメータ(項数、方程式、短いkの値)、すぐに使えるキャプション。有用なバリエーションを1行で1つ提案します。