SDK, bibliothèques et outils
Clients officiels pour Python, JavaScript, Go, PHP et Java, une CLI, un serveur MCP pour les agents IA et des extensions pour les outils que vous utilisez déjà. Tout est open source.
Démarrage rapide
Installez le client, définissez POPNOW_API_KEY et générez votre première image.
pip install popnow
export POPNOW_API_KEY="sk-popnow-..."from popnow import PopNow
client = PopNow() # reads POPNOW_API_KEY
task = client.images.generate(
model="google/nano-banana-2.1/text-to-image",
prompt="A small red fox curled up in a teacup, soft morning light",
)
print(task.state, task.urls[0])
client.files.download(task.assets[0], "fox.png")npm install popnow
export POPNOW_API_KEY="sk-popnow-..."import { PopNow } from "popnow";
const popnow = new PopNow(); // reads POPNOW_API_KEY
const task = await popnow.jobs.createAndWait({
model: "google/nano-banana-2.1/text-to-image",
input: { prompt: "A small red fox curled up in a teacup, soft morning light" },
});
console.log(task.state, task.output?.assets?.[0]?.url);go get github.com/popnow-ai/popnow-go
export POPNOW_API_KEY="sk-popnow-..."package main
import (
"context"
"log"
popnow "github.com/popnow-ai/popnow-go"
)
func main() {
ctx := context.Background()
client, err := popnow.New(popnow.Options{}) // reads POPNOW_API_KEY
if err != nil {
log.Fatal(err)
}
request := popnow.CreateTaskInput{
Model: "google/nano-banana-2.1/text-to-image",
Input: map[string]any{"prompt": "A small red fox curled up in a teacup, soft morning light"},
}
// One idempotency key per piece of work: a resend returns the original task.
task, err := client.CreateTask(ctx, request, "fox-teacup-1", popnow.CreateTaskOptions{})
if err != nil {
log.Fatal(err)
}
final, err := client.WaitForTerminal(ctx, task.TaskID, popnow.WaitOptions{})
if err != nil {
log.Fatal(err)
}
for _, asset := range final.ReadyAssets() {
log.Println(final.State, asset.URL)
}
}composer require popnow/popnow
export POPNOW_API_KEY="sk-popnow-..."<?php
require __DIR__ . '/vendor/autoload.php';
use PopNow\Client;
$client = new Client(); // reads POPNOW_API_KEY
$task = $client->createTask(
model: 'google/nano-banana-2.1/text-to-image',
input: ['prompt' => 'A small red fox curled up in a teacup, soft morning light'],
idempotencyKey: Client::idempotencyKey(),
waitSeconds: 60,
);
if (!Client::isTerminal($task)) {
$task = $client->waitForTerminal($task['taskId']);
}
foreach (Client::readyAssets($task) as $asset) {
echo $asset['url'], "\n";
}// build.gradle.kts
implementation("ai.popnow:popnow-java:0.1.0")import ai.popnow.*;
import java.util.Map;
import java.util.UUID;
public class Quickstart {
public static void main(String[] args) {
PopNowClient client = PopNowClient.builder().apiKeyFromEnvironment().build(); // POPNOW_API_KEY
CreateTaskRequest request = CreateTaskRequest.of("google/nano-banana-2.1/text-to-image",
Map.of("prompt", "A small red fox curled up in a teacup, soft morning light"));
// createTask + waitForTerminal; the key makes a resend return the original task
TaskRecord task = client.run(request, UUID.randomUUID().toString());
System.out.println(task.state());
for (TaskAsset asset : task.assets()) {
asset.url().ifPresent(System.out::println);
}
}
}npm install -g @popnow/cli
export POPNOW_API_KEY="sk-popnow-..."popnow jobs create \
--model google/nano-banana-2.1/text-to-image \
--input-json '{"prompt":"A small red fox curled up in a teacup, soft morning light"}' \
--waitexport POPNOW_API_KEY="sk-popnow-..."curl -X POST https://api.popnow.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $POPNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"model": "google/nano-banana-2.1/text-to-image",
"input": {
"prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
"aspect_ratio": "16:9",
"resolution": "1k",
"output_format": "png"
}
}'Authentification
Envoyez votre clé comme jeton Bearer. Les clés commencent par sk-popnow- et peuvent être limitées à certains modèles et à certaines adresses IP, avec des plafonds de dépenses journalier, mensuel et total.
Clés APIcurl https://api.popnow.ai/api/v1/models \
-H "Authorization: Bearer $POPNOW_API_KEY"Toutes les bibliothèques et tous les outils
Tout est sur GitHub, sous github.com/popnow-ai.
Langages
- popnow-go
Client Go avec requêtes typées, aides d’attente et itérateurs.
go get github.com/popnow-ai/popnow-goGitHubpkg.go.dev - popnow-java
Client Java pour Java 17 et versions ultérieures, Kotlin et autres langages JVM.
GitHubMaven Central
Outils et extensions
- popnow-api
Fichier OpenAPI avec des exemples curl, Python et Node.js, ainsi qu’un workflow n8n.
GitHub - popnow-comfyui
Nœuds personnalisés ComfyUI qui exécutent les modèles PopNow dans votre graphe.
GitHubComfy Registry - popnow-bot
Bot Telegram et Discord auto-hébergé pour les images, les vidéos et les effets vidéo, avec limites de dépenses.
GitHubDocker Hub
Pour les agents IA et les assistants de code
- Serveur MCP
Ajoutez https://api.popnow.ai/mcp à Claude, ChatGPT, Cursor ou tout autre client MCP, et laissez-le générer des images et des vidéos pour vous.
https://api.popnow.ai/mcp - Agent Skills
Des skills pour Claude Code, Codex et d’autres agents de code qui connaissent l’API, les modèles et les prix.
SKILL.md - llms.txt
Une carte en texte brut de l’API et de la documentation, à l’usage des modèles de langage.
/llms.txt - Spécification OpenAPI
L’API complète au format OpenAPI, pour les générateurs de code et les clients d’API.
openapi.yaml
Conçu pour la production
- Devis
Établissez le prix d’une requête sans l’exécuter, puis transmettez le devis pour créer la tâche.
POST /jobs/quote - Clés d’idempotence
Réessayez sans risque : la même clé renvoie la tâche d’origine au lieu de facturer deux fois.
Idempotency-Key - Webhooks signés
Recevez la tâche terminée sur votre serveur, signée pour que vous puissiez vérifier qu’elle vient bien de nous.
X-Webhook-Signature - Limites de débit
Jusqu’à 1 000 requêtes toutes les 10 secondes par compte. Une réponse 429 indique le délai d’attente.
429 · Retry-After
Commencez à créer en quelques minutes
Une seule clé pour chaque modèle, un solde en USD que vous rechargez au besoin, et un prix exact avant chaque exécution.