Fournisseur Vercel AI SDK
Utilisez les modèles PopNow avec le Vercel AI SDK 7 : generateImage pour images et retouche, generateSpeech, transcribe et modèles de chat, facturés en USD.
@popnow/ai-sdk-provider relie les modèles PopNow au Vercel AI SDK. Avec une seule clé API, vous appelez les modèles de génération et de retouche d’images avec generateImage, la synthèse vocale avec generateSpeech, la transcription avec transcribe, et les modèles de chat avec generateText et streamText. Tout est facturé en USD sur votre solde API distinct.
Le paquet est open source sous licence MIT (GitHub). Il nécessite AI SDK 7 (ai@^7) et Node.js 22 ou plus récent.
En un coup d’œil
| Fonction du AI SDK | Modèles PopNow | Fabrique |
|---|---|---|
generateImage | Texte vers image et retouche d’images : Nano Banana, GPT Image, Seedream, FLUX, Qwen Image et d’autres | popnow.image(id) |
generateSpeech | Synthèse vocale | popnow.speech(id) |
transcribe | Reconnaissance vocale | popnow.transcription(id) |
generateText, streamText | Modèles de chat via le point de terminaison compatible OpenAI | popnow(id), popnow.chat(id) |
Mise en place
Installer les paquets
npm install @popnow/ai-sdk-provider aiCréer une clé API
Créez une clé dans la console API. Les clés commencent par sk-popnow-. Le solde API démarre à $0 ; rechargez-le dans la Facturation API avant le premier appel payant.
Mettre la clé dans votre environnement
L’instance popnow par défaut lit POPNOW_API_KEY :
export POPNOW_API_KEY="sk-popnow-..."Gardez la clé côté serveur. Quiconque peut la lire peut dépenser votre solde API.
Générer une image
import { popnow } from '@popnow/ai-sdk-provider';
import { generateImage } from 'ai';
import fs from 'node:fs';
const { image } = await generateImage({
model: popnow.image('google/nano-banana-2.1/text-to-image'),
prompt: 'A cozy reading nook beside a rain-streaked window, warm lamp light',
aspectRatio: '16:9',
providerOptions: {
popnow: { resolution: '2k' },
},
});
await fs.promises.writeFile('nook.png', image.uint8Array);Réglages du fournisseur
Pour d’autres réglages, créez votre propre instance avec createPopNow :
import { createPopNow } from '@popnow/ai-sdk-provider';
const popnow = createPopNow({
apiKey: process.env.POPNOW_API_KEY, // default: POPNOW_API_KEY
baseURL: 'https://api.popnow.ai', // default: POPNOW_BASE_URL or https://api.popnow.ai
headers: { 'X-PopNow-Tags': 'my-app' }, // optional, sent with every request
});createPopNow accepte aussi une fonction fetch personnalisée.
Retoucher une image
Les modèles de retouche ont des IDs qui se terminent par /edit. Passez les images source, et un masque lorsque le modèle en accepte un, dans le prompt :
import { popnow } from '@popnow/ai-sdk-provider';
import { generateImage } from 'ai';
const { image } = await generateImage({
model: popnow.image('google/nano-banana-2.1/edit'),
prompt: {
text: 'Change the jacket to deep forest green; keep the face and background',
images: ['https://example.com/portrait.jpg'],
},
});Les URLs sont transmises telles quelles. Les images fournies en octets ou en base64 sont envoyées directement lorsqu’il s’agit de JPEG, PNG, WebP ou GIF d’au plus 1 MiB, et sont sinon envoyées à PopNow.
Comment les réglages correspondent à PopNow
Chaque modèle PopNow valide son input avec son propre JSON Schema et rejette les champs inconnus. Le fournisseur lit le schéma du modèle (GET /api/v1/models/{model}, mis en cache pendant dix minutes) et n’envoie un réglage que si le modèle possède le champ correspondant :
| Réglage du AI SDK | Champ d’entrée PopNow |
|---|---|
prompt | prompt |
aspectRatio | aspect_ratio |
size | width et height ; sinon réduit à aspect_ratio, avec un avertissement compatibility |
seed | seed |
n | num_outputs ou num_images ; pour les modèles qui n’ont aucun des deux, chaque image est une tâche distincte et le AI SDK en lance plusieurs |
images du prompt | image_urls, ou image_url pour les modèles à une seule image |
mask du prompt | mask_url |
Un réglage que le modèle ne possède pas est omis et signalé dans warnings comme unsupported. Tout autre champ du modèle va dans providerOptions.popnow, écrit exactement comme dans le schéma du modèle (snake_case), par exemple resolution, output_format ou quality. Ces valeurs remplacent les valeurs mappées.
Synthèse vocale
import { popnow } from '@popnow/ai-sdk-provider';
import { generateSpeech } from 'ai';
import fs from 'node:fs';
const { audio } = await generateSpeech({
model: popnow.speech('openai/tts-1/text-to-speech'),
text: 'Hello from PopNow.',
voice: 'nova',
speed: 1.1,
});
await fs.promises.writeFile('hello.mp3', audio.uint8Array);voice correspond à voice_id, outputFormat à output_format, et instructions, speed et language à des champs de même nom lorsque le modèle les possède. Le schéma de chaque modèle liste les voix qu’il accepte.
Transcription
import { popnow } from '@popnow/ai-sdk-provider';
import { transcribe } from 'ai';
import fs from 'node:fs';
const result = await transcribe({
model: popnow.transcription('openai/whisper-1/speech-to-text'),
audio: await fs.promises.readFile('meeting.mp3'),
providerOptions: { popnow: { language: 'en' } },
});
console.log(result.text, result.words);Les octets audio sont d’abord envoyés à PopNow (MP3 et WAV, jusqu’à 90 MiB). Une URL publique https:// (audio: new URL('https://...')) est transmise directement à PopNow, sans téléchargement.
Modèles de chat
PopNow sert les modèles de chat par une API compatible OpenAI à https://api.popnow.ai/v1. Le fournisseur utilise @ai-sdk/openai-compatible pour eux, avec la même clé API et le même solde :
import { popnow } from '@popnow/ai-sdk-provider';
import { generateText } from 'ai';
const { text } = await generateText({
model: popnow('anthropic/claude-haiku-5.5/chat'),
prompt: 'Suggest three names for a kite shop by the sea.',
});streamText fonctionne avec le même modèle :
import { popnow } from '@popnow/ai-sdk-provider';
import { streamText } from 'ai';
const result = streamText({
model: popnow('anthropic/claude-haiku-5.5/chat'),
prompt: 'Write a short welcome message for a kite shop.',
});
for await (const delta of result.textStream) process.stdout.write(delta);Les modèles de chat sont facturés au token, sans minimum par requête. Modèles de chat répertorie chaque modèle et les paramètres qu’il accepte.
IDs de modèle
Les IDs de modèle ont la forme <maker>/<model>/<task>, par exemple google/nano-banana-2.1/text-to-image, openai/tts-1/text-to-speech ou openai/whisper-1/speech-to-text. Les types TypeScript en suggèrent quelques-uns ; tout ID que votre clé peut appeler fonctionne. Modèles répertorie chaque modèle avec ses paramètres et ses prix. Pour les lister depuis du code, avec leurs schémas d’entrée :
curl "https://api.popnow.ai/api/v1/models?modality=image&includeSchema=1" \
-H "Authorization: Bearer $POPNOW_API_KEY"modality vaut image, video ou audio. Les modèles de chat sont listés à GET https://api.popnow.ai/v1/models.
Tarifs
Les prix sont en USD par image, par seconde ou par tranche de 1 000 caractères, selon le modèle, et figurent sur Modèles et sur la page de chaque modèle. L’indice des prix IA les liste aussi. Chaque tâche bloque son prix maximal sur votre solde API à son acceptation, puis règle le montant réel à la fin. Les tâches échouées ou expirées ne sont pas facturées. Détails : Facturation et devis.
Chaque entrée d’image dans providerMetadata.popnow.images porte le taskId, son costUsd (une chaîne décimale en USD) et indique si le débit est settled. Les résultats de synthèse et de transcription portent les mêmes champs dans providerMetadata.popnow.
Tâches, interrogation et nouvelles tentatives
La génération PopNow est asynchrone. Chaque appel crée une tâche, attend jusqu’à 60 secondes la réponse à la requête de création, interroge ensuite la tâche (d’abord toutes les 2 secondes, puis jusqu’à toutes les 15 secondes) jusqu’à son état final, et télécharge les fichiers de sortie depuis leurs liens signés. La clé API n’est jamais envoyée à ces liens.
Ces options vont dans providerOptions.popnow et ne sont pas envoyées au modèle :
| Option | Valeur par défaut | Signification |
|---|---|---|
pollIntervalMs | 2000 | Premier délai entre deux interrogations |
pollTimeoutMs | Échéance de la tâche plus deux minutes | Arrête l’attente après ce délai ; la tâche continue |
waitSeconds | 60 | Durée pendant laquelle la requête de création reste ouverte (de 0 à 60) |
idempotencyKey | Généré à chaque appel | Clé stable pour une génération logique |
metadata | Aucune | Vos propres étiquettes, enregistrées avec la tâche |
Chaque requête de création porte un Idempotency-Key. Les erreurs de connexion, les 429 et les réponses 5xx réessayables sont relancées deux fois avec la même clé, si bien qu’une nouvelle tentative ne lance jamais une seconde tâche. Lorsque vous passez votre propre idempotencyKey, les nouvelles tentatives du AI SDK (maxRetries) la réutilisent aussi. Voir Idempotence.
abortSignal arrête l’attente immédiatement. Une tâche déjà acceptée continue de tourner sur PopNow.
Erreurs
APICallError(de@ai-sdk/provider) pour les erreurs d’API. Le message contient le code métier PopNow, par exemple40201(solde API insuffisant) ou40301(la clé ne peut pas appeler ce modèle). Voir Erreurs.PopNowTaskErrorlorsqu’une tâche se termine enfailedouexpired. Elle exposetaskId,state,errorCode(par exemplecontent_rejected),errorMessageetcostUsd. Ces tâches ne sont pas facturées.PopNowTaskTimeoutErrorlorsquepollTimeoutMsest écoulé. Elle exposetaskId; la tâche continue de tourner.
import { popnow, PopNowTaskError } from '@popnow/ai-sdk-provider';
import { generateImage } from 'ai';
try {
await generateImage({
model: popnow.image('google/nano-banana-2.1/text-to-image'),
prompt: 'A lighthouse at dawn, watercolor',
});
} catch (error) {
if (PopNowTaskError.isInstance(error)) console.log(error.taskId, error.errorCode);
}Non inclus
- Vidéo. L’interface des modèles vidéo du AI SDK est encore expérimentale (
experimental_generateVideo), donc ce paquet ne l’implémente pas encore. Les modèles vidéo PopNow sont disponibles via l’API de tâches, les SDK officiels et les points de terminaison compatibles OpenAI Videos. - Embeddings.
embeddingModellèveNoSuchModelError.
Quelle version du AI SDK faut-il ?
AI SDK 7 (ai@^7) sur Node.js 22 ou plus récent. Installez les deux avec npm install @popnow/ai-sdk-provider ai.
Puis-je l’appeler depuis le navigateur ?
Pas avec votre clé API dans la page : quiconque peut lire la clé peut dépenser votre solde API. Appelez le AI SDK depuis une route serveur, comme un gestionnaire de route Next.js ou une server action, et envoyez le résultat au navigateur.
Prend-il en charge les modèles vidéo ?
Pas encore, car l’interface vidéo du AI SDK est expérimentale. Utilisez l’API de tâches ou le SDK JavaScript pour la vidéo.
Comment voir le coût d’un appel ?
Lisez providerMetadata.popnow : chaque tâche indique son taskId, son costUsd et si le débit est settled. La console API affiche l’usage par clé.
Voir aussi
Outils LangChain et LangGraph
Outils image, vidéo, musique et voix pour les agents Python.
Modèles de chat
Chaque modèle de chat, ses paramètres et son prix au token.
Modèles
IDs de modèle, schémas d’entrée et prix en USD.
popnow-ai-sdk-provider sur GitHub
Code source, tickets et journal des modifications.
LangChain
Outils pour agents LangChain et LangGraph créant images, vidéos, musiques et voix IA avec PopNow. Chaque appel payant fait d’abord l’objet d’un devis en USD.
n8n
Générez des images, des vidéos et de l’audio IA dans n8n avec le nœud HTTP Request intégré et l’API PopNow. JSON du workflow à importer, configuration de l’authentification, polling, webhooks et dépannage.

