Ferramentas para LangChain e LangGraph
Dê aos seus agentes de LangChain e LangGraph ferramentas para criar imagens, vídeos, músicas e voz com o PopNow. Cada cobrança é cotada em USD antes de rodar.
langchain-popnow dá aos agentes de LangChain e LangGraph ferramentas que criam imagens, vídeos, músicas e voz com modelos do PopNow, e ferramentas que listam modelos, consultam tarefas e verificam o saldo da API. Uma única chave de API cobre todos os modelos, do Nano Banana e Seedream ao MiniMax H3, Kling, Suno e Gemini TTS.
Cada chamada paga é cotada primeiro em USD. Uma ferramenta paga chamada sem max_usd só retorna o preço: nada é criado e nada é cobrado. O pacote é de código aberto sob licença MIT (GitHub) e é construído sobre o SDK oficial de Python.
Resumo
| Pacote | langchain-popnow no PyPI |
| Instalação | pip install -U langchain-popnow |
| Requisitos | Python 3.10 ou mais recente, langchain-core 0.3.15 ou mais recente |
| Chave | POPNOW_API_KEY, uma chave sk-popnow- do console de API |
| Cobrança | USD do seu saldo da API, separado. As ferramentas pagas cotam primeiro e só executam com max_usd |
| Ferramentas | Geração de imagem, vídeo, música e voz, qualquer modelo pelo ID, lista de modelos, consulta de tarefas e saldo (lista completa) |
| Código-fonte | github.com/popnow-ai/langchain-popnow |
Configuração
Instale o pacote
pip install -U langchain-popnowCrie uma chave de API
Crie uma chave no console de API. Vale a pena dar ao seu agente uma chave própria com um limite de gasto diário baixo: assim você pode revogá-la sem mexer nas suas outras integrações. O saldo da API começa em $0; adicione fundos em Cobrança da API.
Coloque a chave no seu ambiente
As ferramentas leem a chave de POPNOW_API_KEY:
export POPNOW_API_KEY="sk-popnow-..."Você também pode passar api_key="sk-popnow-..." para qualquer ferramenta ou para PopNowToolkit. POPNOW_BASE_URL substitui o host da API (padrão https://api.popnow.ai).
Cote e depois execute
Chame uma ferramenta paga uma vez sem max_usd para obter o preço, e depois de novo com max_usd igual a esse preço:
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"}], ...}Quando um agente chama a ferramenta com um ToolCall, a ferramenta retorna um ToolMessage cujo content é o resumo JSON acima e cujo artifact é o registro completo da tarefa ou da cotação no PopNow.
Ferramentas
| Classe da ferramenta | Nome da ferramenta | O que faz | Modelo padrão | Cobrança |
|---|---|---|---|---|
PopNowImageGeneration | popnow_image_generation | Texto para imagem, ou edita as imagens passadas em image_urls | google/nano-banana-2.1/text-to-image (edição: google/nano-banana-2.1/edit) | Paga, cotada primeiro |
PopNowVideoGeneration | popnow_video_generation | Texto para vídeo, ou anima a imagem em image_url | minimax/h3/text-to-video (imagem: minimax/h3/image-to-video) | Paga, cotada primeiro |
PopNowMusicGeneration | popnow_music_generation | Canções e instrumentais, com letra opcional | suno/v6/text-to-audio | Paga, cotada primeiro |
PopNowSpeech | popnow_text_to_speech | Texto para fala em muitas vozes | google/gemini-3.8-flash-tts/text-to-speech | Paga, cotada primeiro |
PopNowCreateTask | popnow_create_task | Qualquer modelo do PopNow pelo ID, com o input próprio dele | Escolhido pelo agente | Paga, cotada primeiro |
PopNowListModels | popnow_list_models | IDs dos modelos e tarifas em USD; com model, os campos de entrada desse modelo | Grátis | |
PopNowGetTask | popnow_get_task | Recolhe o resultado de uma tarefa que ainda está em andamento | Grátis | |
PopNowCheckBalance | popnow_check_balance | Saldo da API disponível e reservado, em USD | Grátis |
PopNowToolkit().get_tools() retorna as oito com uma única configuração compartilhada.
As ferramentas de geração aceitam os campos comuns (prompt, aspect_ratio, resolution, duration_seconds, voice_id e assim por diante), um model opcional para escolher outro modelo do PopNow, e extra_input para qualquer campo que popnow_list_models listar para aquele modelo. Os IDs de modelo seguem o padrão <maker>/<model>/<task> descrito em Modelos.
Como funciona a aprovação
As tarefas do PopNow são assíncronas: cota-se, cria-se pelo preço aprovado e depois se espera o resultado. As ferramentas seguem o mesmo fluxo do servidor MCP para desenvolvedores:
- Cotação. O agente chama uma ferramenta paga sem
max_usd. A ferramenta pede uma cotação ao PopNow e retornastatus: "needs_confirmation"comcost_usd. Nada é criado nem reservado. - Aprovação. O agente mostra o preço ao usuário. Depois da aprovação, chama a ferramenta de novo com os mesmos argumentos, mais
max_usdigual aocost_usdcotado. - Execução. Se a cotação atual estiver dentro de
max_usd, a tarefa é criada com essa cotação travada e a ferramenta espera o resultado. Se o preço subiu, a ferramenta retorna um novoneeds_confirmatione nada é cobrado.
Os resultados contêm links de download assinados, que expiram, e um URI popnow://g/<task>/<n> que não expira e pode ser passado a outra ferramenta do PopNow, por exemplo para animar uma imagem gerada. Um vídeo longo pode ainda estar em execução quando o wait_timeout (padrão de 600 segundos) termina: nesse caso a ferramenta retorna status: "running" com um task_id, e popnow_get_task recolhe o resultado depois. Tarefas com falha ou expiradas liberam a reserva e não custam nada.
Limites de gasto
Defina-os em qualquer ferramenta paga ou em PopNowToolkit:
| Configuração | Efeito |
|---|---|
max_usd_per_call="1.00" | Teto rígido. Uma cotação acima dele retorna status: "over_limit", mesmo que o agente tenha passado um max_usd maior |
auto_approve_usd="0.05" | Para pipelines sem supervisão: cotações iguais ou abaixo deste valor são executadas sem max_usd. O padrão None significa que cada chamada paga precisa de aprovação |
allow_model_override=False | O agente não pode trocar o model configurado para a ferramenta |
Os limites de gasto e a lista de modelos permitidos da chave de API, definidos no console de API, também se aplicam.
Uso com um agente do LangChain
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)O agente pode rodar em qualquer modelo de chat que o LangChain suporte, inclusive os modelos de chat do PopNow pelo endpoint compatível com OpenAI https://api.popnow.ai/v1.
Uso com LangGraph
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 continua funcionando no LangGraph 1.x; projetos novos podem usar langchain.agents.create_agent, como no exemplo acima. Para uma etapa de aprovação humana rigorosa, combine as ferramentas com o HumanInTheLoopMiddleware do LangChain ou com um interrupt do LangGraph.
Mais exemplos
Encontre um modelo e os seus campos
Listar modelos é grátis. Com model, a ferramenta retorna os campos de entrada e os preços desse modelo:
from langchain_popnow import PopNowListModels
PopNowListModels().invoke({"modality": "video", "search": "kling"})
PopNowListModels().invoke({"model": "kling/3.0/image-to-video"})Anime uma imagem com um modelo escolhido
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",
})Narrações sem aprovar cada linha
Uma narração custa uma fração de centavo, então um pipeline pode aprovar sozinho cotações pequenas:
from langchain_popnow import PopNowSpeech
speech = PopNowSpeech(auto_approve_usd="0.02")
speech.invoke({"text": "Welcome back to the channel!", "voice_id": "Kore"})Qualquer modelo pelo ID
PopNowCreateTask envia o input próprio de um modelo, exatamente como em Tarefas:
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",
})Todas as ferramentas também rodam de forma assíncrona: await tool.ainvoke(...).
Preços
Listar modelos, ler tarefas e consultar o saldo são grátis. As ferramentas de geração cobram a tarifa em USD do modelo do seu saldo da API: uma tarefa reserva o preço cotado quando é aceita e liquida a cobrança real ao terminar. Tarefas com falha ou expiradas não custam nada.
popnow_list_models retorna as tarifas em USD de cada modelo. O preço de cada modelo está em Modelos e na página de cada um; o índice de preços de IA também os lista. Como funcionam as cotações, as reservas e os reembolsos: Cobrança e cotações.
Erros comuns
| O que você vê | Por quê | Como resolver |
|---|---|---|
needs_confirmation em toda chamada | O agente nunca envia max_usd | Peça no prompt do sistema que ele mostre o preço e chame de novo com max_usd depois da aprovação, ou defina auto_approve_usd para valores pequenos |
over_limit | A cotação passa de max_usd_per_call | Suba o teto, ou escolha um modelo ou uma configuração mais barata |
401 | A chave está ausente ou foi revogada | Verifique POPNOW_API_KEY ou passe api_key |
40201 | Saldo da API insuficiente para a reserva da tarefa | Adicione fundos em Cobrança da API |
40202 | A chave ultrapassaria o limite de gasto dela | Aumente o limite dessa chave no console de API |
40301 | A chave não pode chamar este modelo | Adicione o modelo à lista de modelos permitidos da chave |
status: "running" | A tarefa passou do wait_timeout | Chame popnow_get_task com o task_id |
A lista completa está em Erros.
Funciona com LangGraph?
Sim. As ferramentas são ferramentas padrão do LangChain, então create_react_agent, ToolNode e grafos personalizados do LangGraph podem chamá-las. Combine-as com um interrupt do LangGraph se uma pessoa precisar aprovar cada preço.
Um agente pode gastar meu saldo sem perguntar?
Não por padrão. Uma ferramenta paga chamada sem max_usd só retorna uma cotação. O gasto sem aprovação só acontece se você definir auto_approve_usd, e max_usd_per_call junto com os limites de gasto da chave continuam valendo.
Quais modelos as ferramentas podem usar?
Qualquer modelo de imagem, vídeo ou áudio do catálogo. As ferramentas de geração têm padrões sensatos; passe model para escolher outro, ou use PopNowCreateTask com qualquer ID de modelo. popnow_list_models lista os IDs de dentro do agente.
Existe uma versão em JavaScript?
Para TypeScript e JavaScript, use o provedor do Vercel AI SDK ou o SDK de JavaScript.
Relacionados
Provedor do Vercel AI SDK
generateImage, generateSpeech, transcribe e modelos de chat em TypeScript.
Servidor MCP para desenvolvedores
O mesmo fluxo de cotação e aprovação para Claude Code, Cursor e Codex.
Cobrança e cotações
Como uma tarefa reserva, liquida e reembolsa USD.
langchain-popnow no GitHub
Código-fonte, issues e o changelog.
Receitas e skills salvas
Execute receitas e fluxos salvos pela API ou pelo MCP. Solicite uma cotação, aprove o orçamento em USD, acompanhe cada etapa e retome execuções pausadas com a chave de API original.
AI SDK
Use modelos do PopNow com o Vercel AI SDK 7: generateImage, generateSpeech, transcribe e modelos de chat, cobrados em USD com uma única chave de API.

