PopNowAPI
Obtenir une clé API

P-Video 2 Pro API

par Pruna AI

Clips de 5 à 15 secondes avec son, à partir d’un texte, d’images clés ou de clips de référence

pruna-ai/p-video-2-pro/reference-to-video
  • Jusqu’à 768p
  • Clips de 5 à 15 s
  • Image de début et de fin
  • 7 formats d’image
  • Créer une vidéo
  • Image vers vidéo
  • Références vers vidéo

Appelez-le avec le nom de modèle pruna-ai/p-video-2-pro/reference-to-video sur POST /jobs/createTask, à partir de 0,09 $US.

Nom du modèlepruna-ai/p-video-2-pro/reference-to-video
EndpointPOST https://api.popnow.ai/api/v1/jobs/createTask
# 1. Create the task. Keep the Idempotency-Key if you retry after a network error.
export IDEMPOTENCY_KEY="$(uuidgen)"
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: $IDEMPOTENCY_KEY" \
  -d '{
  "model": "pruna-ai/p-video-2-pro/reference-to-video",
  "input": {
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "aspect_ratio": "auto",
    "resolution": "768p",
    "generation_mode": "speed",
    "duration_seconds": 5
  }
}'

# 2. Copy data.taskId from the response, then poll until state is succeeded, failed, canceled or expired.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

L’input est construit à partir du schéma ci-dessous : il passe la validation tel quel. Remplacez le prompt et les liens par les vôtres.

Prix

OptionUSD par seconde
generation_mode costresolution 480p0,018 $US
generation_mode speedresolution 480p0,024 $US
generation_mode costresolution 768p0,03 $US
generation_mode speedresolution 768p0,042 $US

Facturation en USD · Toutes les options et leur prix : GET /models/pruna-ai/p-video-2-pro/reference-to-video

Limites

Durée du clip
5–15 s
Résolutions
480p · 768p
Formats d’image
auto · 16:9 · 9:16 · 4:3 · 3:4 · 3:2 +2
Audio de référence
3
Vidéos de référence
3

Paramètres

Ces champs viennent du schéma avec lequel nous vérifions chaque requête. Les champs qui n’y figurent pas sont refusés.

  • promptstringObligatoire

    Say what the shot should take from each reference. Refer to reference videos as video 1, video 2 and to audio clips as audio 1, audio 2, numbered in upload order.

    Plage
    1 – … chars
  • image_urlstringFacultatifModifie le prix

    L’image de départ.

    Plage
    image/jpeg, image/png, image/webp, image/gif
  • last_image_urlstringFacultatifModifie le prix

    Image finale facultative, pour que le clip se termine exactement où vous voulez.

    Plage
    image/jpeg, image/png, image/webp, image/gif
  • reference_video_urlsarray<string>FacultatifModifie le prix

    Des clips dont le mouvement, la caméra ou le style doivent être suivis.

    Plage
    1 – 3 items · video/mp4, video/webm, video/quicktime, video/x-m4v
  • reference_audio_urlsarray<string>FacultatifModifie le prix

    Un son à reproduire : une voix, une musique ou un rythme.

    Plage
    1 – 3 items · audio/mpeg, audio/wav, audio/mp4, audio/aac +3
  • aspect_ratiostringFacultatif

    La forme du cadre : large, carrée ou verticale.

    Par défaut
    "auto"
    Valeurs acceptées
    "auto""16:9""9:16""4:3""3:4""3:2""2:3""1:1"
  • resolutionstringFacultatifModifie le prix

    Taille de sortie. Plus c’est grand, plus c’est net et plus c’est cher.

    Par défaut
    "768p"
    Valeurs acceptées
    "480p""768p"
  • generation_modestringFacultatifModifie le prix

    cost is cheaper and slower, speed (the default) is faster at the same quality.

    Par défaut
    "speed"
    Valeurs acceptées
    "cost""speed"
  • keep_reference_audiobooleanFacultatif

    Use the reference audio as the soundtrack instead of generating new sound. Needs exactly one audio clip.

    Par défaut
    false
  • duration_secondsintegerFacultatifModifie le prix

    La durée du clip. Facturée à la seconde.

    Par défaut
    5
    Plage
    5 – 15
  • prompt_optimization_modestringFacultatif

    Let the service rewrite and expand the prompt first: off follows it word for word, turbo is a quick rewrite, max a fuller one. Does not change the price.

    Par défaut
    "off"
    Valeurs acceptées
    "off""turbo""max"
  • seedintegerFacultatif

    Le même nombre donne un résultat reproductible.

    Plage
    0 – 2147483647
Schéma JSON brut
{
  "additionalProperties": false,
  "properties": {
    "aspect_ratio": {
      "default": "auto",
      "description": "Output aspect ratio; auto adapts to the references.",
      "enum": [
        "auto",
        "16:9",
        "9:16",
        "4:3",
        "3:4",
        "3:2",
        "2:3",
        "1:1"
      ],
      "type": "string"
    },
    "duration_seconds": {
      "default": 5,
      "description": "Output length in whole seconds, from 5 to 15. Billed per second.",
      "maximum": 15,
      "minimum": 5,
      "type": "integer"
    },
    "generation_mode": {
      "default": "speed",
      "description": "cost is cheaper and slower, speed (the default) is faster at the same quality.",
      "enum": [
        "cost",
        "speed"
      ],
      "type": "string"
    },
    "image_url": {
      "contentMediaType": [
        "image/jpeg",
        "image/png",
        "image/webp",
        "image/gif"
      ],
      "description": "Optional opening frame. Adds a small per-image charge.",
      "format": "uri",
      "type": "string"
    },
    "keep_reference_audio": {
      "default": false,
      "description": "Use the reference audio as the soundtrack instead of generating new sound. Needs exactly one audio clip.",
      "type": "boolean"
    },
    "last_image_url": {
      "contentMediaType": [
        "image/jpeg",
        "image/png",
        "image/webp",
        "image/gif"
      ],
      "description": "Optional closing frame. Adds a small per-image charge.",
      "format": "uri",
      "type": "string"
    },
    "prompt": {
      "description": "Say what the shot should take from each reference. Refer to reference videos as video 1, video 2 and to audio clips as audio 1, audio 2, numbered in upload order.",
      "minLength": 1,
      "type": "string"
    },
    "prompt_optimization_mode": {
      "default": "off",
      "description": "Let the service rewrite and expand the prompt first: off follows it word for word, turbo is a quick rewrite, max a fuller one. Does not change the price.",
      "enum": [
        "off",
        "turbo",
        "max"
      ],
      "type": "string"
    },
    "reference_audio_urls": {
      "items": {
        "contentMediaType": [
          "audio/mpeg",
          "audio/wav",
          "audio/mp4",
          "audio/aac",
          "audio/ogg",
          "audio/opus",
          "audio/flac"
        ],
        "format": "uri",
        "type": "string"
      },
      "maxItems": 3,
      "minItems": 1,
      "type": "array"
    },
    "reference_video_urls": {
      "items": {
        "contentMediaType": [
          "video/mp4",
          "video/webm",
          "video/quicktime",
          "video/x-m4v"
        ],
        "format": "uri",
        "type": "string"
      },
      "maxItems": 3,
      "minItems": 1,
      "type": "array"
    },
    "resolution": {
      "default": "768p",
      "description": "Output resolution. 768p costs more per second than 480p.",
      "enum": [
        "480p",
        "768p"
      ],
      "type": "string"
    },
    "seed": {
      "description": "Random seed for controlled comparisons, not a frame-identical guarantee.",
      "maximum": 2147483647,
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "prompt"
  ],
  "type": "object"
}

Réponses, interrogation et callbacks

Tous les modèles fonctionnent de la même façon : créez une tâche, puis interrogez-la ou attendez le callback.

Connaître le prix d’abord

cURL
curl -X POST https://api.popnow.ai/api/v1/jobs/quote \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "pruna-ai/p-video-2-pro/reference-to-video",
  "input": {
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "aspect_ratio": "auto",
    "resolution": "768p",
    "generation_mode": "speed",
    "duration_seconds": 5
  }
}'

Avant l’exécution, envoyez le même corps de requête à POST /jobs/quote pour connaître les frais estimés et leur plafond en USD. Le devis ne lance aucune tâche et ne débite pas votre solde.

Acceptée

HTTP
HTTP/1.1 202 Accepted

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued"
  },
  "request_id": "req_example_create"
}

HTTP 202 signifie que la tâche est acceptée : le plafond en USD reste réservé jusqu’au décompte final. À l’acceptation d’une tâche, le montant maximal du devis est réservé sur votre solde API. À la fin, la facturation suit l’usage réel, sans dépasser ce montant, et le reste est libéré. En cas d’échec, le montant réservé est libéré.

Vérifier l’état

cURL
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

Interrogez toutes les quelques secondes en espaçant progressivement, et arrêtez dès que state vaut succeeded, failed, canceled ou expired.

Tâche terminée

JSON
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "pruna-ai/p-video-2-pro/reference-to-video",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "url": "https://cdn.popnow.ai/tasks/task_01k3m8x9q2z4v7n5p6r8s0t1w3/output.mp4?signature=FROM_RESPONSE",
          "expiresAt": "2026-10-17T12:20:00Z",
          "mime": "video/mp4",
          "width": 1280,
          "height": 720,
          "durationSeconds": 5
        }
      ]
    },
    "settled": true
  },
  "request_id": "req_example_record"
}

Téléchargez depuis l’url avant expiresAt. Besoin d’un nouveau lien plus tard ? Demandez-le à POST /common/download-url.

Vérifier un callback

Node.js
import { createHash, createHmac, timingSafeEqual } from "node:crypto";
import express from "express";

const app = express();
// express.raw keeps the exact bytes that were signed; express.json would not match.
app.post("/hooks/popnow", express.raw({ type: "application/json" }), (req, res) => {
  const timestamp = req.header("X-Webhook-Timestamp");
  const signature = req.header("X-Webhook-Signature") ?? "";
  const body = JSON.parse(req.body.toString("utf8"));
  const taskId = body.data?.taskId ?? body.task_id;
  const digest = createHash("sha256").update(req.body).digest("hex");
  const expected = createHmac("sha256", process.env.POPNOW_WEBHOOK_SECRET)
    .update(`${taskId}.${timestamp}.${digest}`)
    .digest("base64");
  const ok = expected.length === signature.length && timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
  // Check the signature first, then reject anything older than five minutes.
  if (!ok || Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return res.status(401).end();
  res.status(200).end(); // answer fast, then fetch the task and store its files
});

Avec une callBackUrl, nous vous envoyons la tâche terminée. Vérifiez la signature sur le corps brut avant de lui faire confiance.

Envoyer un fichier local

cURL
curl -X POST https://api.popnow.ai/api/v1/common/upload-url \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contentType": "image/png", "bytes": 482113}'

# PUT the file bytes to data.uploadUrl with every header in data.headers, then commit it:
curl -X POST https://api.popnow.ai/api/v1/files/$FILE_ID/commit \
  -H "Authorization: Bearer $POPNOW_API_KEY"
# The commit returns a popnow://f/... reference. Put it in any image, video or
# audio field of the task input instead of a public https URL.

Les liens https publics fonctionnent tels quels. Les fichiers locaux passent d’abord par upload-url et commit.

À propos de P-Video 2 Pro

Clips de 5 à 15 secondes avec son, à partir d’un texte, d’images clés ou de clips de référence.

Appelez-le avec le nom de modèle pruna-ai/p-video-2-pro/reference-to-video sur POST /jobs/createTask, à partir de 0,09 $US.

Paramètres de requête

ParamètreRequisDescription
aspect_ratioNonLa forme du cadre : large, carrée ou verticale. auto · 16:9 · 9:16 · 4:3 · 3:4 · 3:2 · 2:3 · 1:1 · Par défaut: auto
duration_secondsNonLa durée du clip. Facturée à la seconde. ≥ 5 · ≤ 15 · Par défaut: 5
generation_modeNoncost is cheaper and slower, speed (the default) is faster at the same quality. cost · speed · Par défaut: speed
image_urlNonL’image de départ.
keep_reference_audioNonUse the reference audio as the soundtrack instead of generating new sound. Needs exactly one audio clip. Par défaut: false
last_image_urlNonImage finale facultative, pour que le clip se termine exactement où vous voulez.
promptOuiSay what the shot should take from each reference. Refer to reference videos as video 1, video 2 and to audio clips as audio 1, audio 2, numbered in upload order.
prompt_optimization_modeNonLet the service rewrite and expand the prompt first: off follows it word for word, turbo is a quick rewrite, max a fuller one. Does not change the price. off · turbo · max · Par défaut: off
reference_audio_urlsNonUn son à reproduire : une voix, une musique ou un rythme.
reference_video_urlsNonDes clips dont le mouvement, la caméra ou le style doivent être suivis.
resolutionNonTaille de sortie. Plus c’est grand, plus c’est net et plus c’est cher. 480p · 768p · Par défaut: 768p
seedNonLe même nombre donne un résultat reproductible. ≥ 0 · ≤ 2147483647

Tarifs

Les prix sont en USD. L’API utilise un solde distinct en dollars américains. Les crédits du site ne peuvent pas être utilisés pour l’API ni convertis en solde API, et le solde API ne peut pas être converti en crédits du site. À l’acceptation d’une tâche, le montant maximal du devis est réservé sur votre solde API. À la fin, la facturation suit l’usage réel, sans dépasser ce montant, et le reste est libéré. En cas d’échec, le montant réservé est libéré.

OptionUSD par seconde
generation_mode cost · resolution 480p0,018 $US
generation_mode speed · resolution 480p0,024 $US
generation_mode cost · resolution 768p0,03 $US
generation_mode speed · resolution 768p0,042 $US

Avant l’exécution, envoyez le même corps de requête à POST /jobs/quote pour connaître les frais estimés et leur plafond en USD. Le devis ne lance aucune tâche et ne débite pas votre solde.

Démarrage rapide de l'API

Appeler l’API P-Video 2 Pro en trois étapes

  1. Créer une clé API. Connectez-vous à PopNow et créez une clé dans la console API. Les clés commencent par sk-popnow-. Les appels API utilisent votre solde distinct en dollars américains.
  2. Envoyer la requête. Envoyez POST /jobs/createTask avec model pruna-ai/p-video-2-pro/reference-to-video et un objet input conforme au tableau des paramètres. La réponse renvoie aussitôt un ID de tâche.
  3. Récupérer le résultat. Interrogez GET /jobs/recordInfo avec l’ID de tâche, ou passez une callBackUrl et nous y envoyons le résultat. Téléchargez les liens de sortie quand la tâche réussit.
# 1. Create the task. Keep the Idempotency-Key if you retry after a network error.
export IDEMPOTENCY_KEY="$(uuidgen)"
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: $IDEMPOTENCY_KEY" \
  -d '{
  "model": "pruna-ai/p-video-2-pro/reference-to-video",
  "input": {
    "prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
    "aspect_ratio": "auto",
    "resolution": "768p",
    "generation_mode": "speed",
    "duration_seconds": 5
  }
}'

# 2. Copy data.taskId from the response, then poll until state is succeeded, failed, canceled or expired.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

Remplacez le prompt et les liens par les vôtres. L'onglet API contient la référence pour la réponse, le polling et le callback.

Questions sur l’API P-Video 2 Pro

Combien coûte l’API P-Video 2 Pro ?

P-Video 2 Pro coûte à partir de 0,09 $US pour un clip de 5 secondes avec Références vers vidéo, sa tâche la moins chère. Prix par option : cost · 480p 0,018 $US par seconde, speed · 480p 0,024 $US par seconde, cost · 768p 0,03 $US par seconde, speed · 768p 0,042 $US par seconde. L’API utilise un solde distinct en dollars américains. Les crédits du site ne peuvent pas être utilisés pour l’API ni convertis en solde API, et le solde API ne peut pas être converti en crédits du site. À l’acceptation d’une tâche, le montant maximal du devis est réservé sur votre solde API. À la fin, la facturation suit l’usage réel, sans dépasser ce montant, et le reste est libéré. En cas d’échec, le montant réservé est libéré.

Quelles sont les limites de l’API P-Video 2 Pro · Références vers vidéo ?

Durée du clip: 5–15 s; Résolutions: 480p · 768p; Formats d’image: auto · 16:9 · 9:16 · 4:3 · 3:4 · 3:2 +2; Audio de référence: 3; Vidéos de référence: 3. Les requêtes hors de ces limites sont refusées avant tout débit.

En savoir plus sur P-Video 2 Pro