PopNowAPI ドキュメント
連携
本文

LangChain と LangGraph のツール

LangChain と LangGraph のエージェントに、PopNow で画像・動画・音楽・音声を作るツールを渡します。有料の呼び出しは米ドルで見積もられ、承認後に実行されます。

langchain-popnow は、LangChain と LangGraph のエージェントに、PopNow のモデルで画像・動画・音楽・音声を作るツールを提供します。モデル一覧、タスクの取得、API 残高の確認を行うツールも含まれます。1 つの API キーで、Nano Banana や Seedream から MiniMax H3、Kling、Suno、Gemini TTS まですべてのモデルを使えます。

有料の呼び出しはすべて、まず米ドルで見積もられます。max_usd を指定せずに有料ツールを呼ぶと、価格が返されるだけです。何も作成されず、課金も発生しません。このパッケージは MIT ライセンスのオープンソースで(GitHub)、公式の Python SDK を基に作られています。

概要

パッケージPyPI の langchain-popnow
インストールpip install -U langchain-popnow
動作環境Python 3.10 以降、langchain-core 0.3.15 以降
キーPOPNOW_API_KEY。API コンソールで作成した sk-popnow- キー
課金別に用意された API 残高から米ドルで引き落とされます。有料ツールは先に見積もりを返し、max_usd を付けたときだけ実行されます
ツール画像・動画・音楽・音声の生成、任意のモデル ID での呼び出し、モデル一覧、タスクの取得、残高の確認(全一覧)
ソースgithub.com/popnow-ai/langchain-popnow

セットアップ

パッケージをインストールする

pip install -U langchain-popnow

API キーを作成する

API コンソールでキーを作成します。エージェント用に専用のキーを用意し、1 日の利用上限を低めに設定しておくのがおすすめです。そうすれば、ほかの連携に影響を与えずにそのキーだけを無効化できます。API 残高は $0 から始まります。API の課金でチャージしてください。

環境変数にキーを設定する

ツールは POPNOW_API_KEY からキーを読み取ります。

export POPNOW_API_KEY="sk-popnow-..."

どのツールや PopNowToolkit にも api_key="sk-popnow-..." を渡すこともできます。POPNOW_BASE_URL を指定すると API のホストを上書きできます(既定値は https://api.popnow.ai)。

見積もりを取得してから実行する

有料ツールを、まず max_usd を指定せずに 1 回呼び出して価格を取得します。その後、max_usd にその価格を設定して、もう一度呼び出します。

Python
from langchain_popnow import PopNowImageGeneration

tool = PopNowImageGeneration()

# 1. Quote: returns the price, starts nothing.
print(tool.invoke({"prompt": "A small red fox curled up in a teacup, soft morning light"}))
# {"status": "needs_confirmation", "model": "google/nano-banana-2.1/text-to-image", "cost_usd": "0.048", ...}

# 2. Approved: creates the task and waits for it.
print(tool.invoke({"prompt": "A small red fox curled up in a teacup, soft morning light", "max_usd": "0.048"}))
# {"status": "succeeded", "task_id": "...", "cost_usd": "0.048", "outputs": [{"url": "https://...", "uri": "popnow://g/.../0"}], ...}

エージェントが ToolCall でツールを呼び出すと、ツールは ToolMessage を返します。その content は上記の JSON の要約で、artifact には PopNow のタスクまたは見積もりの完全なレコードが入ります。

ツール

ツールクラスツール名機能既定のモデル課金
PopNowImageGenerationpopnow_image_generationテキストから画像を生成します。image_urls で渡した画像を編集することもできますgoogle/nano-banana-2.1/text-to-image(編集: google/nano-banana-2.1/edit)有料。先に見積もり
PopNowVideoGenerationpopnow_video_generationテキストから動画を生成します。image_url の画像を動かすこともできますminimax/h3/text-to-video(画像から: minimax/h3/image-to-video)有料。先に見積もり
PopNowMusicGenerationpopnow_music_generation歌とインストゥルメンタル。歌詞は任意ですsuno/v6/text-to-audio有料。先に見積もり
PopNowSpeechpopnow_text_to_speechさまざまな声でテキストを読み上げますgoogle/gemini-3.8-flash-tts/text-to-speech有料。先に見積もり
PopNowCreateTaskpopnow_create_taskモデル ID で任意の PopNow モデルを呼び出します。入力はそのモデル自身の input ですエージェントが選択有料。先に見積もり
PopNowListModelspopnow_list_modelsモデル ID と米ドルの料金。model を指定すると、そのモデルの入力項目を返します無料
PopNowGetTaskpopnow_get_taskまだ実行中のタスクの結果を取得します無料
PopNowCheckBalancepopnow_check_balance利用可能な API 残高と保留中の API 残高(米ドル)無料

PopNowToolkit().get_tools() を使うと、共通の設定で 8 つすべてのツールが返されます。

生成系のツールは、共通の項目(prompt、aspect_ratio、resolution、duration_seconds、voice_id など)、別のモデルを選ぶための任意の model、そして popnow_list_models がそのモデル向けに一覧した任意の項目を渡す extra_input を受け付けます。モデル ID は モデルで説明している <maker>/<model>/<task> の形式に従います。

承認の流れ

PopNow のタスクは非同期です。見積もり、承認された価格での作成、結果の待機という順に進みます。これらのツールは、開発者向け MCP サーバーと同じ流れに従います。

  1. 見積もり。 エージェントは max_usd を付けずに有料ツールを呼びます。ツールは PopNow に見積もりを依頼し、status: "needs_confirmation" と cost_usd を返します。このとき、何も作成されず、保留もされません。
  2. 承認。 エージェントは価格をユーザーに提示します。承認されたら、同じ引数に、見積もられた cost_usd を max_usd として加えて、もう一度ツールを呼びます。
  3. 実行。 現在の見積もりが max_usd 以内であれば、その見積もりを固定してタスクが作成され、ツールは結果を待ちます。価格が上がっていた場合、ツールは新しい needs_confirmation を返し、何も課金されません。

結果には、期限切れになる署名付きのダウンロード URL と、期限切れにならない popnow://g/<task>/<n> の URI が含まれます。この URI は別の PopNow ツールに渡せ、たとえば生成した画像を動かすことに使えます。長い動画は wait_timeout(既定値は 600 秒)が過ぎても実行中のことがあります。その場合、ツールは status: "running" と task_id を返し、後で popnow_get_task で結果を取得できます。失敗したタスクや期限切れのタスクは保留を解放し、課金されません。

支出のガード

これらは、有料ツールや PopNowToolkit のどれにでも設定できます。

設定効果
max_usd_per_call="1.00"上限を強制します。見積もりがこれを超えると status: "over_limit" を返します。エージェントがより大きい max_usd を渡していてもです
auto_approve_usd="0.05"無人で動くパイプライン向けです。この金額以下の見積もりは、max_usd がなくても実行されます。既定値の None では、有料の呼び出しすべてに承認が必要です
allow_model_override=Falseエージェントが、ツールに設定された model から別のモデルに切り替えることはできません

API コンソールで設定した API キーの利用上限とモデルの許可リストも、同じように適用されます。

LangChain のエージェントで使う

Python
from langchain.agents import create_agent
from langchain_popnow import PopNowToolkit

tools = PopNowToolkit(max_usd_per_call="1.00").get_tools()

agent = create_agent(
    model="anthropic:claude-sonnet-4-6",
    tools=tools,
    system_prompt=(
        "You create media with PopNow tools. Paid tools return a price first: "
        "show it to the user and only call again with max_usd after they approve."
    ),
)

result = agent.invoke({"messages": [{"role": "user", "content": "Make a 9:16 clip of a vintage car on a coastal road"}]})
print(result["messages"][-1].content)

このエージェントは、LangChain が対応する任意のチャットモデルで動かせます。OpenAI 互換のエンドポイント https://api.popnow.ai/v1 経由の PopNow のチャットモデルも使えます。

LangGraph で使う

Python
from langchain.chat_models import init_chat_model
from langgraph.prebuilt import create_react_agent
from langchain_popnow import PopNowToolkit

model = init_chat_model("anthropic:claude-sonnet-4-6")
agent = create_react_agent(model, PopNowToolkit(max_usd_per_call="1.00").get_tools())

for step in agent.stream(
    {"messages": [{"role": "user", "content": "Write a short lo-fi track for a cooking video and tell me the price first"}]},
    stream_mode="values",
):
    step["messages"][-1].pretty_print()

create_react_agent は LangGraph 1.x でも引き続き使えます。新しいプロジェクトでは、上で示した langchain.agents.create_agent を使ってください。人による承認を必ず挟みたい場合は、これらのツールと LangChain の HumanInTheLoopMiddleware、または LangGraph の interrupt を組み合わせてください。

その他の例

モデルと入力項目を調べる

モデルの一覧取得は無料です。model を指定すると、そのモデルの入力項目と価格が返されます。

Python
from langchain_popnow import PopNowListModels

PopNowListModels().invoke({"modality": "video", "search": "kling"})
PopNowListModels().invoke({"model": "kling/3.0/image-to-video"})

選んだモデルで画像を動かす

Python
from langchain_popnow import PopNowVideoGeneration

PopNowVideoGeneration().invoke({
    "prompt": "Gentle waves, slow push-in",
    "image_url": "https://example.com/beach.jpg",
    "model": "kling/3.0/image-to-video",
    "duration_seconds": 5,
    "max_usd": "0.50",
})

行ごとに承認しなくてよいナレーション

ナレーションの費用は 1 セントの数分の 1 程度なので、パイプラインは少額の見積もりを自動で承認できます。

Python
from langchain_popnow import PopNowSpeech

speech = PopNowSpeech(auto_approve_usd="0.02")
speech.invoke({"text": "Welcome back to the channel!", "voice_id": "Kore"})

モデル ID で任意のモデルを使う

PopNowCreateTask は、モデル自身の input をそのまま送ります。タスクと同じ書き方です。

Python
from langchain_popnow import PopNowCreateTask

PopNowCreateTask().invoke({
    "model": "alibaba/z-image-turbo/text-to-image",
    "input": {"prompt": "A paper boat on a puddle, overcast street, photo", "aspect_ratio": "1:1"},
    "max_usd": "0.02",
})

すべてのツールは非同期でも実行できます。await tool.ainvoke(...) と書きます。

料金

モデルの一覧取得、タスクの読み取り、残高の確認は無料です。生成系のツールは、モデルの米ドル料金を API 残高から課金します。タスクは受け付けられた時点で見積もり額を保留し、完了すると実際の料金で精算されます。失敗したタスクや期限切れのタスクは課金されません。

popnow_list_models は、各モデルの米ドル料金を返します。各モデルの価格はモデルのページと、各モデルのページに掲載されています。AI 価格指数にも一覧があります。見積もり、保留、返金の仕組みは課金と見積もりを参照してください。

よくあるエラー

表示原因対処
毎回 needs_confirmation になるエージェントが max_usd を渡していないシステムプロンプトで、価格を先に提示し、承認後に max_usd を付けて再度呼ぶよう指示する。小額なら auto_approve_usd を設定する
over_limit見積もりが max_usd_per_call を超えている上限を引き上げるか、より安いモデルや設定を選ぶ
401キーがないか、無効化されているPOPNOW_API_KEY を確認するか、api_key を渡す
40201タスクの保留額に対して API 残高が足りないAPI の課金でチャージする
40202そのキーの利用上限を超えてしまうAPI コンソールでそのキーの上限を引き上げる
40301そのキーではこのモデルを呼び出せないモデルをキーの許可リストに追加する
status: "running"タスクが wait_timeout を超えたtask_id を指定して popnow_get_task を呼ぶ

完全な一覧はエラーにあります。

LangGraph でも使えますか?

はい。これらのツールは標準の LangChain ツールなので、create_react_agent、ToolNode、独自の LangGraph グラフから呼び出せます。料金ごとに人の承認が必要なら、LangGraph の interrupt と組み合わせてください。

エージェントが承認なしに残高を使ってしまうことはありますか?

既定では、ありません。max_usd を指定せずに有料ツールを呼ぶと、返されるのは見積もりだけです。承認なしで支払いが発生するのは auto_approve_usd を設定したときだけで、その場合も max_usd_per_call とキーの利用上限は適用されます。

ツールでどのモデルを使えますか?

カタログにある画像・動画・音声モデルであれば、どれでも使えます。生成系のツールには適切な既定値が設定されています。別のモデルを使うには model を渡すか、PopNowCreateTask でモデル ID を指定してください。popnow_list_models を使えば、エージェントの中からモデル ID を一覧できます。

JavaScript 版はありますか?

TypeScript と JavaScript では、Vercel AI SDK プロバイダーか JavaScript SDKを使ってください。

このページの内容