プロ仕様の次世代AIファーストベクターグラフィックツール
「Illustmaker」(イラストメーカー)

コード1行で、ベクターデザインが動き出す。
AIエージェント・サーバーサイド・cron、どこからでも叩けるシンプルな HTTP JSON API(全102メソッド)。
あなたが思い描いたことをすべて実現してくれます。

エンドポイントPOST https://asi.co.jp/illustmaker/api/mcp.php
Content-Typeapplication/json
形式{ "method": "...", "params": {...}, "session": "..." }
レスポンス{ "ok": true, ... } または { "ok": false, "error": "..." }
バージョン1.0.0
llms.txt/illustmaker/llms.txt

クイックスタート

1. セッション作成

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -d '{"method":"illust.create_session","params":{"width":800,"height":600,"bg":"#ffffff"}}'
{
  "ok": true,
  "session": "abc123def456",
  "state": {"docW":800,"docH":600,"docBg":"#ffffff","objects":[]},
  "open_url": "https://asi.co.jp/illustmaker/?s=abc123def456"
}

2. オブジェクト追加

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -d '{
    "method": "illust.add_object",
    "session": "abc123def456",
    "params": {"type":"ellipse","x":200,"y":150,"w":400,"h":300,"fill":"#4a9eff"}
  }'

3. SVG書き出し

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -d '{"method":"illust.export_svg","session":"abc123def456"}'

4. ブラウザで開く(ユーザーに編集してもらう)

open_url をブラウザで開けば、ユーザーは続きを手作業で編集できます。

認証 / API キー

API は匿名でも利用可能ですが、レート制限が厳しめ(30 req/分)です。継続利用には API キーの取得を推奨します。

API キーの取得

curl -X POST https://asi.co.jp/illustmaker/api/keys.php \
  -H 'Content-Type: application/json' \
  -d '{"action":"issue","email":"you@example.com","purpose":"my_project"}'
{
  "ok": true,
  "api_key": "im_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "tier": "free",
  "rate_limit_per_min": 100
}

取得した API キーは 1 度しか表示されません。安全な場所に保管してください。

利用

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: im_xxxxxxxxxx' \
  -d '{"method":"illust.health"}'

レート制限階層

tier制限取得方法
anon30 req/minAPI キー不要
free100 req/min上記の発行エンドポイント
pro600 req/minお問い合わせ

状態確認・取り消し

# info
curl -X POST https://asi.co.jp/illustmaker/api/keys.php -H 'Content-Type: application/json' \
  -d '{"action":"info","key":"im_xxx"}'
# revoke
curl -X POST https://asi.co.jp/illustmaker/api/keys.php -H 'Content-Type: application/json' \
  -d '{"action":"revoke","key":"im_xxx"}'

制限

リクエストボディ最大 1MB
セッションあたりオブジェクト数最大 5,000
セッションファイルサイズ最大 5MB
batch_render の行数最大 1,000
レート制限anon 30 / free 100 / pro 600 req/min
セッション保管期間最終更新から 7 日(cronで自動削除)
import_from_urlパブリックIP・80/443ポートのみ。リダイレクト追跡なし。5MB上限

ユースケース

食品ラベルを100枚量産

1テンプレ + CSV/JSONで100商品分のラベルを2秒で生成。 食品工場・飲食店・クラフトビールのVariable Data Printingに。

  1. テンプレ作成: create_session → 枠線/ロゴ/カラーバー add_object
  2. 変数テキスト追加: {{name}}{{net}}{{expiry}}
  3. 商品DB/CSVから配列抽出
  4. batch_render with output:"pdf-imposition"A4面付けPDFを一発生成
  5. そのまま印刷業者へ入稿可

価格POPをPDFで一括書出

スーパーの特売POP・飲食店の値札・小売店のショーカード。 価格と商品名のCSVから30個一気にPDF化。

  1. POPテンプレ作成(赤い「特価」リボン + 商品画像 + 価格)
  2. POSデータ or CSV から商品名・通常価格・特売価格を配列に
  3. batch_render で印刷PDFまで一気通貫

記事ごとのOGP画像を生成

ブログ100本のSNS用サムネを一気に統一感のあるデザインで生成。 タイトル+著者名の差し替えだけ。

  1. 1200x630のテンプレ作成(背景+ブランドロゴ+変数タイトル)
  2. ブログDBから {title, author} 配列抽出
  3. batch_render with output:"png-zip" でPNG一括取得
  4. 各記事ページに自動配置

ロゴA/Bテスト用に10案生成

同じ会社名で配色違い/フォント違いを10案生成 → 並べて比較 → 良い案を選んでブラッシュアップ。

  1. テンプレ作成(会社名 + ロゴマーク)
  2. suggest_palette で12テーマ × suggest_font で8用途 から組合せ取得
  3. batch_render で配色違い10案を一括生成
  4. クライアント/Slack/Notion に並べて比較

データ→グラフSVG自動図解

売上CSV/JSONをAIに渡して棒グラフ/円グラフ/折れ線を直接SVGで描画。 プレゼン資料にそのまま埋め込み。

  1. データ配列をAIに渡して「これを棒グラフのSVGに」とプロンプト
  2. AIがプロパティ計算→ add_object(rect)と add_text でグラフ要素配置
  3. export_pdf でプレゼン用PDF

名刺・チケット連番量産

イベントチケット・QR入り受付票・名刺など、 連番+個別情報の量産。

  1. テンプレ作成(QRコード位置 + 連番フィールド + 個人情報フィールド)
  2. {{name}}{{qr_url}}{{seat_no}} 変数テキスト追加
  3. 参加者DBから配列抽出
  4. batch_render with imposition で1枚A4に10券面付け → 印刷

商品カタログ印刷

EC/卸の商品カタログを商品DBから自動組版。 画像+型番+価格+特徴の4要素を全商品分。

  1. カタログ1ページ分のテンプレ作成
  2. illust.import_from_url で商品画像URLから取得
  3. 商品DB全件をループ → batch_render
  4. A4縦に2x4=8商品配置で印刷

メソッド詳細

サイドナビのカテゴリと連動。 全メソッドは llms.txt でも一覧可。

illust.health no-session

サーバー疎通確認。

{"method": "illust.health"}
{"ok": true, "version": "1.0.0", "methods": 10}

illust.create_session no-session

新規セッションを作成。share_id とオープン用URLを返す。

params

widthnumber16〜16384、デフォルト 800
heightnumber16〜16384、デフォルト 600
bgstring背景色 (HEX/none)、デフォルト "#ffffff"
{
  "method": "illust.create_session",
  "params": {"width": 1200, "height": 630, "bg": "#000"}
}
{"ok":true, "session":"...", "state":{...}, "open_url":"..."}

illust.set_document

ドキュメントサイズ・背景の変更。

{"method":"illust.set_document","session":"...","params":{"width":1080,"height":1080}}

illust.add_object

オブジェクトを追加。typerect/ellipse/text/path/line/poly/star/image/raw

params 共通

typestring必須
x, y, w, hnumber位置・サイズ
fillstring色値(HEX/rgb/named/none)
strokestring線色
strokeWidthnumber線幅
rotationnumber度数
namestringレイヤー名

type 別の追加プロパティ

texttext, fontSize, fontFamily, fontWeight, letterSpacing, lineHeight
path/poly/starnodes: [{x,y,hIn,hOut}], closed: bool
linex1, y1, x2, y2
imagehref: "data:image/png;base64,..." or URL
rawrawSvg: "<path d=\"...\"/>"(サニタイズされる)

illust.add_svg

SVG文字列をパースしてオブジェクト化して投入。

{"method":"illust.add_svg","session":"...","params":{"svg":"<svg><circle cx='50' cy='50' r='30' fill='red'/></svg>"}}

illust.list_objects

現在のオブジェクト一覧(id/type/位置/サイズ/色)。

illust.update_object

特定オブジェクトのプロパティを部分更新。

{"method":"illust.update_object","session":"...","params":{"id":"o1","patch":{"fill":"#ef4444","rotation":15}}}

illust.delete_objects

指定IDのオブジェクトを削除。

{"method":"illust.delete_objects","session":"...","params":{"ids":["o1","o3"]}}

illust.export_svg

サーバーサイドでSVG文字列を生成して返す。

{"ok":true, "svg":"<svg xmlns=...>...</svg>"}

illust.batch_render バッチ量産 5モード

テンプレートに {{var_name}} 変数を埋め込み、データ配列で展開。SVG/PNG/PDF面付け まで1コマンドで生成。 食品ラベル・価格POP・商品タグ・OGP画像量産に。

output モード一覧

svgdefaultSVG文字列配列を返す(互換性のため filename 含まず)
svg-zipZIP全SVGを1個のZIPにまとめてbase64で返す
pngPNG配列ImageMagick経由でラスター化、 各PNGをbase64で配列返却。dpi 72-600指定可
png-zipZIP全PNGを1個のZIPに
pdf-impositionPDFA4等の用紙にcols×rowsで面付け配置した印刷可能PDF。 真のベクター埋め込み(TCPDF)

パラメータ

dataarray必須。 各要素は変数オブジェクト e.g. {"name":"濃口醤油","net":"500ml"}
outputstring上記5モード。 default "svg"
filename_templatestringZIP内ファイル名テンプレ e.g. "{{name}}"濃口醤油.svg{{i}} は連番
dpinumberpng/png-zip用。 72(web)〜600(印刷)、 default 96
impositionobjectpdf-imposition用。 {paper:"A4"|"A3"|"letter", cols:N, rows:M, margin_mm:5, gap_mm:3}

セットアップ(共通)

// 1. テンプレ作成 — テキストに {{var}} を含める
{"method":"illust.add_object","session":"...","params":{
  "type":"text","text":"商品名: {{name}}","x":50,"y":80,"fontSize":36
}}

使い分け例

A) SVG-ZIP — 個別SVGをZIPで一括取得

{"method":"illust.batch_render","session":"...","params":{
  "output": "svg-zip",
  "filename_template": "{{name}}",
  "data":[
    {"name":"濃口醤油","net":"500ml"},
    {"name":"薄口醤油","net":"500ml"}
  ]
}}
{"ok":true, "count":2, "output":"svg-zip",
 "filename":"illustmaker-batch-20260525-115500.zip",
 "zip_base64":"UEsDBBQAAAA...", "size":1352}

B) PNG (高DPI印刷用)

{"method":"illust.batch_render","session":"...","params":{
  "output":"png-zip", "dpi":300,
  "filename_template":"label-{{i}}",
  "data":[{"name":"商品A"}, {"name":"商品B"}, ...]
}}

C) A4面付けPDF — 印刷業者にそのまま渡せる

{"method":"illust.batch_render","session":"...","params":{
  "output": "pdf-imposition",
  "imposition": {
    "paper": "A4",
    "cols": 2,
    "rows": 4,
    "margin_mm": 10,
    "gap_mm": 5
  },
  "data": [/* 100件 */]
}}
{"ok":true, "count":100, "output":"pdf-imposition",
 "paper":"A4", "cols":2, "rows":4, "pages":13,
 "filename":"illustmaker-imposed-20260525-115500.pdf",
 "pdf_base64":"JVBERi0xLjcK...", "size":54320}

クライアント側 (ブラウザ)

ヘルパー IM.batchRender() + IM.batchSave() でZIP/PDFが即自動ダウンロード:

IM.batchRender("session-id",
  [{name:"濃口醤油"}, {name:"薄口醤油"}, ...],
  {output:"pdf-imposition", imposition:{cols:2, rows:4}}
).then(IM.batchSave);
// → ブラウザDLが自動発火

追加メソッド (v2.0+)

v2.0 以降で 10 → 64メソッドに拡張。 セッション管理・整列・量産・配色提案・外部取得・ギャラリー連携・**マスク/シンボル/ブレンド/パスファインダー**・**印刷入稿PDF(トンボ・塗り足し)**・**部品/テンプレライブラリ**・**BYOK画像生成/AI Vision批評** まで対応。

セッション管理

illust.list_sessions全セッション一覧(最大100、 新しい順) → {count, sessions:[{session, docW, docH, objectCount, updated_at, size}]}
illust.session_infoセッションメタ情報(サイズ・更新時刻・オブジェクト数)
illust.clone_sessionセッション複製(テンプレ流用)。 オブジェクトID再採番
illust.delete_sessionセッション削除
illust.copy_to_session{target, ids} 別セッションにオブジェクトコピー

オブジェクト操作

illust.get_object{id} → 単一オブジェクトの完全データ
illust.clear_objects全オブジェクト削除
illust.add_image{url} でサーバー側fetch→data URI埋込 / {href} で直接
illust.duplicate_objects{ids, dx, dy} 複製(オフセット指定)
illust.group_objects{ids, name?} フォルダ化
illust.align_objects{ids, kind} 整列。 kind: left/right/center-h/top/bottom/center-v/dist-h/dist-v
illust.set_layer_order{ids, action} 重ね順。 action: front/back/forward/backward

保存・読込

illust.save_projectstate全体をJSON化 → {project_base64, filename}。 .json として保存可
illust.load_project{project_base64 | project_json} stateを完全置換

単発書出(batch_renderじゃない1枚もの用)

illust.export_png{dpi?} 72-600 → PNG base64
illust.export_jpeg{dpi?, quality?} 50-100 → JPEG base64
illust.export_pdf真のベクターPDF(TCPDFでSVG埋込)
illust.export_optimized_svgSVGO相当の軽量化。 {original_size, optimized_size, reduction_pct} も返す

テキスト

illust.measure_text{text, fontSize, fontFamily?, letterSpacing?}{width, height, baseline}(全角/半角判定の近似値)
illust.replace_text{find, replace} 全テキスト一括置換
illust.set_text_style{ids?, style:{fontSize, fontFamily, fill, ...}} 一括スタイル変更
illust.text_to_pathテキストを raw SVG として凍結(真のアウトライン化はクライアント側で getBBox / opentype.js が必要)
illust.list_fontsシステムフォント + 人気Google Fonts一覧
illust.set_font{name} Google Fontsをセッションに登録(実ロードはクライアント側で)

配色・フォント提案

illust.extract_palette既存オブジェクトから色抽出 → {palette:[{color, count}], unique_count}
illust.suggest_palette{theme} → 5色配色。 themes: warm/cool/pastel/mono/vivid/和/夏/秋/冬/春/natural/tech
illust.suggest_font{purpose} → 推奨フォント5本。 purposes: logo/heading/body/japanese-logo/japanese-body/casual/serious/tech

外部リソース

illust.import_from_url{url, x?, y?, w?, h?} HTTP(S) URL からSVG/画像取得して配置(5MB上限)

セッション完成後、AIから直接公開ギャラリーに投稿・閲覧・リミックス・コメントできます。

gallery.submit{session, title, description?, category?, tags?, author_name?, parent_id?} セッションを公開投稿。サーバー側でSVG/PNG/projectJSONを自動生成。
{id, slug, url, png_url}
gallery.list{sort?, category?, tag?, q?, limit?} 公開作品一覧。sort:"new"|"popular"category:"icon|logo|illustration|character|ui|pattern|other"
gallery.get{slug} 作品詳細(タイトル/作者/タグ/PNG/SVG/projectURL等)
gallery.remix{slug} 親作品を読み込んだ新セッションを作成 → {session, open_url, parent_id, object_count}。 そのまま illust.update_object 等で改造可
gallery.list_comments{slug} コメント一覧(parent_id で1階層スレッド構造)
gallery.comment{slug, body, author_name?, parent_id?} コメント投稿。parent_id で返信

マスク(クリップ・不透明)

rect/ellipse/path 全シェイプをマスクとして使用できます(v3.0 から rect/ellipse 対応)。

illust.clip_mask{session, mask_id, content_ids} 最前面のオブジェクトの形状でコンテンツをクリップ。マスク元は削除される
illust.release_clip{session, ids} クリップ解除
illust.opacity_mask{session, mask_id, content_ids} 不透明マスク(白=不透明・黒=透明・グラデ可)
illust.release_opacity_mask{session, ids} 不透明マスク解除

テキストオンパス

illust.text_on_path{session, text_id, path_id, offset?} テキストをパス曲線に沿わせる。startOffset 指定可("50%" or px)
illust.release_text_on_path{session, text_id} 通常テキストに戻す

シンボル(マスター・インスタンス)

illust.save_symbol{session, ids, name} 選択オブジェクトをシンボル化
illust.list_symbols{session} シンボル一覧
illust.create_symbol_instance{session, symbol_id, x, y} インスタンスを座標に配置

パスファインダー・ブレンド

illust.pathfinder{session, ids[2+], op: union|intersect|subtract|exclude} ブーリアン演算。サーバー側で marching squares による高精度処理
illust.blend{session, id_a, id_b, steps} 2オブジェクト間にN段階の中間オブジェクトを生成。形状・色を補間

印刷入稿対応(プロ向け)

印刷会社へそのまま入稿できるPDFを出力。トンボ・塗り足し・レジストレーションマーク対応。

illust.export_print_pdf{session, bleed_mm?, trim_marks?, registration_marks?, color_space?} 印刷入稿PDF出力。
・bleed_mm: 塗り足し (デフォルト3mm)
・trim_marks: トンボ自動付与
・registration_marks: 4色レジマーク
illust.preflight_check{session, bleed_mm?} プリフライト診断 → {score: 0-10, issues, warnings, recommended_actions}。塗り足し漏れ・テキスト未アウトライン・RGB→CMYK警告

ライブトレース(画像→ベクター)

illust.live_trace{session, image_id, threshold?, turd_size?, opt_tolerance?, fill?, replace_image?} ラスター画像オブジェクトを potrace でベクター化。手書きスケッチからロゴ起こし等

部品・テンプレートライブラリ

サーバー側に高品質な部品(アイコン・フレーム・装飾)とテンプレート(名刺・チラシ・ロゴ等)を保持。AIから検索・利用可能。

illust.library_search{q?, category?, limit?} 部品検索。category: icon|frame|decoration
illust.library_use{session, slug, x, y, w?, h?} 選んだ部品をセッションに配置
illust.template_list{category?, limit?} テンプレ一覧。category: business-card|flyer|logo|banner|card|coupon
illust.template_render{slug, vars} テンプレから新セッション生成。{{name}} {{title}} 等の変数を自動置換

BYOK 画像生成・AI Vision批評

ユーザー自身のAPIキーで画像生成・AI批評を実行。ASIサーバーはキーを保管しません(透過プロキシ)。

illust.generate_image{session, prompt, api_key, provider: openai|recraft, model?, size?, x, y, w, h} 画像生成AIで画像挿入
illust.critique{session, api_key, provider: anthropic|openai, model?, criteria?} 現在のセッションをPNG化 → Vision LLMで批評 → {score, summary, issues, strengths}

グラデーションメッシュ (v4.0)

バイリニア補間による滑らかな2D色グラデーション。4隅色 or N×Mグリッドの全色指定可能。

illust.add_mesh_gradient{session, x, y, w, h, cols?, rows?, detail?, corners?, colors?} 滑らかな2Dカラーグラデーション。detail(8-60)で滑らかさ調整。576〜3600ポリゴンで描画

ブランドキット保存 (v4.0)

パレット・フォント・アセットURLをひとまとめにブランド資産として保存。匿名 owner_fp(ip+ua hash)ベース。

illust.brand_save{name, palette[], fonts[], assets[], kit_id?} ブランドキット保存。kit_id指定で上書き
illust.brand_list自分のブランドキット一覧
illust.brand_delete{kit_id} ブランドキット削除

ライブ共有 (v4.0)

編集中のセッションをURLで共有。閲覧者は /illustmaker/live/{token} で3秒polling閲覧。30日有効。mode='comment'で発行すれば閲覧者は座標付きコメント可。

illust.share_create{session, mode: view|comment, label?} 共有リンク発行。返り値{token, url}
illust.share_list自分が発行した共有リンク一覧
illust.share_delete{token} 共有リンク無効化
illust.share_view{token} 公開エンドポイント(認証不要)。token から現状SVGを返す

ライブ共有コメント (v4.1)

共有リンクを mode='comment' で発行すると、閲覧者がライブビューア上で座標付きコメントを投稿可能。社内レビュー・クライアントフィードバック・教育現場の質問板に。

illust.share_comment_post{token, body, author_name?, x?, y?} 閲覧者からのコメント投稿(公開エンドポイント・認証不要)。最大2000字。x/y省略で「全体への意見」。レート制限:20件/時間/閲覧者
illust.share_comment_list{token, include_resolved?} コメント一覧(公開エンドポイント)
illust.share_comment_resolve{comment_id, resolved} 共有リンクのオーナーのみ。解決マーク切替
illust.share_comment_delete{comment_id} 共有リンクのオーナーのみ。ソフト削除

リアルタイム共同編集 (v5.0)

共有リンクを mode='edit' で発行すると、複数人が /illustmaker/live/{token} から同時に図形描画・移動・削除できる完全共同編集モードに。HTTP long-polling + LWW(Last-Write-Wins)競合解決。参加者カーソル・選択範囲・編集ロックを表示。

illust.collab_join{token, actor_name?, actor_color?, actor_id?} 共同編集に参加。actor_id払出 + 初期状態 + last_seq返却
illust.collab_leave{token, actor_id} 離脱
illust.collab_op_submit{token, actor_id, op_type, payload} 操作投稿。op_type = add_object / update_object / delete_objects / set_document / reorder_objects / cursor / selection / lock_object / unlock_object
illust.collab_poll{token, actor_id, since} long-poll(最大25秒)。since以降のop配列・参加者・ロック一覧を返却
illust.collab_status{token} 軽量ステータス(参加者数・op数・最終seq)

AI ツール統合

Claude Desktop / Cursor / Cline (npm版)

公開中: @illustmaker/mcp

{
  "mcpServers": {
    "illustmaker": {
      "command": "npx",
      "args": ["-y", "@illustmaker/mcp"]
    }
  }
}

macOS / Homebrew で `failed to connect` になる場合: Claude Code 等は最小PATHでサブプロセスを起動するため `npx` が見つからないことがあります。下記のように 絶対パス を指定してください(パスは which npx で確認)。

{
  "mcpServers": {
    "illustmaker": {
      "command": "/usr/local/bin/npx",
      "args": ["-y", "@illustmaker/mcp"]
    }
  }
}

HTTP API直接呼出しでも利用可能。

ブラウザコンソールから(window.IM)

エディタを開いた状態で、ブラウザのDevToolsコンソールから window.IllustMaker(短縮: IM)で全機能にアクセス可能。

IM.api()                          // 全メソッド一覧
IM.newDocument({width:800,height:600})
IM.addRect({x:100,y:100,w:200,h:120,fill:"#4a9eff"})
IM.addText("Hello",{x:160,y:300,fontSize:48})
IM.exportSVG()                    // → string
IM.downloadSVG("logo.svg")

スキーマ

オブジェクト型

{
  "id": "o1",                    // 必須、英数字
  "type": "rect"|"ellipse"|"text"|"path"|"line"|"poly"|"star"|"image"|"raw",
  "name": "label",               // 表示名
  "x": 0, "y": 0, "w": 100, "h": 100,
  "rotation": 0,                 // 度
  "fill": "#000",                // 色 or {"stops":[...]}
  "stroke": "none",
  "strokeWidth": 0,
  "visible": true,
  "locked": false,
  // type 別:
  // text: text, fontSize, fontFamily, fontWeight, letterSpacing, lineHeight
  // path/poly/star: nodes:[{x,y,hIn,hOut}], closed
  // line: x1, y1, x2, y2
  // image: href
  // raw: rawSvg (サニタイズされる)
}

色値の許容形式

  • HEX: #000, #ffffff, #00000080 (8桁=アルファ含む)
  • RGB/RGBA: rgba(255, 0, 0, 0.5)
  • HSL: hsl(120, 50%, 50%)
  • 名前付き: red, blue, currentColor
  • 特殊: none, transparent
  • グラデーション: {"stops":[{"offset":0,"color":"#f00"},{"offset":1,"color":"#00f"}], "angle":0}