ComfyUI APIで生成した音楽ファイルをダウンロードする方法

AIテキスト

前回の記事では、ComfyUIのAPIを利用して、ACE-Stepによる音楽生成の進捗をWebSocketで受け取る方法を紹介しました。

今回はその続きとして、生成が完了した音楽ファイルをAPI経由でダウンロードする方法を試します。

ComfyUIのAPI構成を整理する

ComfyUIのAPIは、生成ジョブの投入、進捗確認、生成結果の取得をHTTPベースで行う仕組みです。

生成結果そのものは即時に返ってくるわけではなく、まず /prompt によってジョブを投入し、完了後に /history/{prompt_id} で出力情報を確認します。

実ファイルの取得は、その履歴情報をもとに /view エンドポイントを使って行います。

この流れは公式ドキュメントのサーバールート一覧でも説明されており、ComfyUIのAPI利用の基本となる考え方です。
https://docs.comfy.org/development/comfyui-server/comms_routes

historyから出力ファイルを特定する

/history/{prompt_id} をGETすると、そのジョブで実行されたノードと出力結果がJSONで返ってきます。

prompt_id には、ジョブ投入時に返されるIDを渡します。

ACE-Stepの場合、音楽ファイルは audio タイプの出力として記録されます。ここで取得できる情報には、ファイル名、保存サブフォルダ、出力タイプが含まれます。

この段階では「どのファイルが生成されたか」を特定するだけで、次に実データを取得します。

/viewエンドポイントでダウンロードする

特定したファイルは /view エンドポイントを使ってダウンロードします。

公式ドキュメントでは画像取得の例が示されていますが、音声ファイルも同様に取得できます。

以下は、historyから最初の音楽ファイルを1つダウンロードする処理を抜粋したPythonコード例です。事前に /prompt による生成ジョブが完了している前提になります。

import requests

COMFY_BASE = "http://127.0.0.1:8188"
COMFY_HISTORY = f"{COMFY_BASE}/history"
COMFY_VIEW = f"{COMFY_BASE}/view"

def download_first_audio(prompt_id: str, out_path: str):
    r = requests.get(f"{COMFY_HISTORY}/{prompt_id}", timeout=30)
    r.raise_for_status()
    hist = r.json()
    entry = hist.get(prompt_id, {})
    outputs = entry.get("outputs")

    for out in outputs.values():
        if not isinstance(out, dict):
            continue
        if "audio" in out and out["audio"]:
            item = out["audio"][0]
            filename = item.get("filename")
            if not filename:
                continue
            params = {
                "filename": filename,
                "type": item.get("type", "output")
            }
            if item.get("subfolder"):
                params["subfolder"] = item["subfolder"]

            vr = requests.get(COMFY_VIEW, params=params, timeout=60)
            vr.raise_for_status()
            with open(out_path, "wb") as f:
                f.write(vr.content)
            return out_path

    raise RuntimeError("audio file not found in history")

このように、ComfyUIのAPIでは「履歴で確認してから取得する」という二段階構成が基本です。

出力ファイル削除に関する注意点

現在のローカルComfyUIには、API経由で output フォルダ内の生成ファイルを削除するための標準エンドポイントは用意されていません

これは公式ドキュメントやルート一覧にも明示的に記載されておらず、削除操作は想定外とされています。GithubのIssueでも同様の指摘があり、将来的な対応が検討されています。

そのため、ローカル環境で不要なファイルを整理したい場合は、OSレベルでのファイル操作や、定期的なクリーンアップスクリプトで対応します。

このためAPI経由でダウンロードするよりも、ComfyUIの出力フォルダにアクセスしてファイルを直接操作する方が効率的な場合もあり、OSのファイル操作で処理を行う方法も構成によっては現実的なオプションとなります。

なおComfyUI Cloudなどのクラウド提供環境では、ユーザーデータ削除用のAPIが別途用意されており、ローカル版とは仕様が異なります。
https://docs.comfy.org/development/cloud/api-reference

まとめ

ComfyUI APIで生成した音楽ファイルは、/history/{prompt_id} で出力情報を確認し、/view を使ってダウンロードするのが基本手順です。

生成と取得を分離した設計を理解しておくことで、Pythonなど外部ツールからでも安全に自動処理を組めます。

次回は、これらの取得処理をバッチ化し、複数ジョブをまとめて扱う実践的な構成を解説します。

タイトルとURLをコピーしました