ComfyUIのAPIでACE-Step音楽生成をPythonから実行する

前回はComfyUI上でACE-Stepを動かして音楽を作りました。

パレイド
簡単にローカルで試せる音楽生成AI: ComfyUIでACE-Stepを使う
ComfyUIのテンプレートを使い、ACE-Stepでインストゥルメンタル/歌入り音楽を生成して保存するまでを、迷わずできる形でまとめます。

同じワークフローをそのまま「APIで叩ける形」にして、Pythonから実行できる状態にします。

API用JSONの書き出しから実行、完了確認、出力ファイルの取得までを試してみましょう。

ComfyUIのAPIでできること

ComfyUIは、画面からのノード操作に加えて、HTTP APIとWebSocketを提供します。

ワークフロー実行は基本的に POST /prompt でキューに投入し、進捗は /ws で受け取り、結果は /history/{prompt_id} で確認する流れです。

これらの主要ルートは公式ドキュメントにまとまっています。
Routes – ComfyUI

API用のJSONをエクスポートする

ComfyUIには、通常のワークフローJSONエクスポートとは別に、API実行向けに最適化されたJSON形式があります。

利用したいワークフローを開いた状態で、UIのアイコンメニューから「ファイル」→「エクスポート (API)」を選択します。

API用のJSONエクスポートをメニューから選ぶ。

適宜、ファイル名をつけて保存します。

ファイル名をつけて保存

外部からのAPI呼び出しはこのJSONを使うと簡単です。

Pythonで入力パラメータを差し替えてPOSTする

公式ドキュメントでは、/prompt にワークフローをPOSTして実行キューに入れる流れが説明されています。

画像の例が多いのですが、ACE-Stepの場合は、曲調タグや歌詞を入力するノードのinputsを差し替えます。

保存したAPI用JSONを開き、画面上のノードのタイトル”TextEncodeAceStepAudio“で検索すると、入力内容が入ったノードが見つかります。

  ...
  "74:14": {
    "inputs": {
      "tags": "medieval fantasy, night, campfire, calm, healing,\nbackground music, ambient, lute, flute, soft strings, pad, bell\n",
      "lyrics": "[instrumental]",
      "lyrics_strength": 0.9900000000000002,
      "clip": [
        "74:40",
        1
      ]
    },
    "class_type": "TextEncodeAceStepAudio",
    "_meta": {
      "title": "TextEncodeAceStepAudio"
    }
  }
  ...

利用環境や入力した内容によって、タグは変わる可能性があります。

ChatGPTなど生成AIにJSONを見せてコードを書いて貰う方法も有効ですが、AIはよくタグ指定を間違うので目視して確かめることをお勧めします。

実行は、ComfyUIが起動した状態で POST /prompt を呼び出し、成功時はレスポンスとしてprompt_idが返ります。

import json
import uuid
import requests

server = "http://127.0.0.1:8188"
client_id = str(uuid.uuid4())

with open("workflow_api.json", "r", encoding="utf-8") as f:
    prompt = json.load(f)

# 例:ノードID 74:14内の曲調タグ"tags"、歌詞"lyrics"を指定。JSONに合わせて差し替える
prompt["74:14"]["inputs"]["tags"] = "lofi, warm, mellow, jazz"
prompt["74:14"]["inputs"]["lyrics"] = "[instrumental]"

payload = {"prompt": prompt, "client_id": client_id}
r = requests.post(f"{server}/prompt", json=payload, timeout=60)
r.raise_for_status()
prompt_id = r.json()["prompt_id"]

これで画面上のUIにプロンプトを入力し、実行ボタンを押したと同じ処理となり、ComfyUIサーバ側でワークフローが実行されます。

環境によりますが生成には数分程度かかるため、生成が終わったタイミングでダウンロードを行う必要があります。

今回のようにローカルでのComfyUI実行であれば、終わった頃にComfyUIの出力フォルダを直接覗く方法もシンプルです。

完了確認はWebSocketかGETで行う

生成が終わったかどうかを知る方法は2つあります。

確実なのは WebSocket (/ws) で進捗メッセージを受け取り、最後に実行完了の通知”executed”を待つ方法です。ただWebSocketは少し複雑な実装になるため、別の記事で取り扱います。

パレイド
ComfyUI APIでWebSocket進捗を確認しながらACE-Step音楽生成を行う
ComfyUIのWebSocket APIを使い、ACE-Step音楽生成の進捗をリアルタイムに受け取りながらPythonで処理する基本構造と実装例を整理します。

ACE-Stepは比較的短時間で生成が完了するため、WebSocketでの接続は省略し、GET /history/{prompt_id} をポーリングしても良いでしょう。

出力ファイルはhistoryから辿ってviewで取り出す

完了後は /history/{prompt_id} のレスポンスに、保存されたファイル名やディレクトリ情報が入ります。

そこから GET /view でファイルを取得できます。公式のドキュメントでは画像向けの説明が中心ですが、公式Routesでは「view an image」として実装参照の案内があり、用途に応じてパラメータ指定で取り出します)。

まとめ

ComfyUIのAPI利用は、ComfyUIで作ったACE-StepワークフローをAPI形式で書き出し、Pythonから POST /prompt で実行し、**GET /history/{prompt_id}**(必要なら /ws)で完了と出力を確認する流れです。

ここまでできると、プロンプトを変えながらの連続生成や、夜間バッチの「自動ガチャ」も可能になります。

次回はこの土台を使って、プロンプト候補の生成と実行を一気通貫にして効率化します。

パレイド
ComfyUI APIでACE-Step音楽生成を自動化する全体像まとめ
ComfyUIとACE-StepをPythonからAPI操作する一連の流れを整理し、生成・進捗確認・ダウンロードまでを迷わず実装できる形でまとめます。
パレイド
ComfyUI APIで生成した音楽ファイルをダウンロードする方法
ComfyUIのAPIを使い、生成済みジョブの履歴から音楽ファイルを特定し、/viewエンドポイント経由で安全にダウンロードする手順を整理します。
パレイド
VOICEVOX のインストール方法と初期設定 — Windows/Mac対応ガイド
VOICEVOX は、YouTubeでも人気の無料テキスト読み上げ/合成音声ソフトウェアです。 この記事では、WindowsとMacでのダウンロードからインスト…
[NEXT] TECH · 其の4250
Stable Audio 3 Medium を RTX 4070 + ComfyUI で動かす|380 秒生成と VRAM 崖の現在地
[NEXT] TECH · 其の4203
Anima Base v1.0 と Turbo LoRA を比べる — M5 Air で 7-8 倍、ただし同 seed でも別の画が出る