PopNowAPI
Odbierz klucz API

P-Video 2 Pro API

od Pruna AI

Klipy 5–15 sekund z dźwiękiem, z tekstu, klatek lub klipów referencyjnych

pruna-ai/p-video-2-pro/reference-to-video
  • Do 768p
  • Klipy 5–15 s
  • Pierwsza i ostatnia klatka
  • Proporcje obrazu: 7
  • Utwórz wideo
  • Obraz w wideo
  • Wideo z referencji

Wywołujesz go nazwą modelu pruna-ai/p-video-2-pro/reference-to-video w POST /jobs/createTask, od 0,09 USD.

Nazwa modelupruna-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"

input jest zbudowany ze schematu poniżej, więc przechodzi walidację bez zmian. Zamień prompt i linki na własne.

Cena

OpcjaUSD za sekundę
generation_mode costresolution 480p0,018 USD
generation_mode speedresolution 480p0,024 USD
generation_mode costresolution 768p0,03 USD
generation_mode speedresolution 768p0,042 USD

Rozliczenie w USD · Wszystkie opcje i ceny: GET /models/pruna-ai/p-video-2-pro/reference-to-video

Limity

Długość klipu
5–15 s
Rozdzielczości
480p · 768p
Proporcje obrazu
auto · 16:9 · 9:16 · 4:3 · 3:4 · 3:2 +2
Audio referencyjne
3
Wideo referencyjne
3

Parametry

Te pola pochodzą z tego samego schematu, którym sprawdzamy każde żądanie. Pola spoza listy są odrzucane.

  • promptstringWymagane

    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.

    Zakres
    1 – … chars
  • image_urlstringOpcjonalneZmienia cenę

    Obraz, od którego zaczynasz.

    Zakres
    image/jpeg, image/png, image/webp, image/gif
  • last_image_urlstringOpcjonalneZmienia cenę

    Opcjonalna ostatnia klatka, żeby klip skończył się dokładnie tam, gdzie chcesz.

    Zakres
    image/jpeg, image/png, image/webp, image/gif
  • reference_video_urlsarray<string>OpcjonalneZmienia cenę

    Klipy, których ruch, kamerę lub styl ma powtórzyć wynik.

    Zakres
    1 – 3 items · video/mp4, video/webm, video/quicktime, video/x-m4v
  • reference_audio_urlsarray<string>OpcjonalneZmienia cenę

    Dźwięk do dopasowania: głos, muzyka lub rytm.

    Zakres
    1 – 3 items · audio/mpeg, audio/wav, audio/mp4, audio/aac +3
  • aspect_ratiostringOpcjonalne

    Kształt kadru: szeroki, kwadratowy albo pionowy.

    Domyślnie
    "auto"
    Dozwolone wartości
    "auto""16:9""9:16""4:3""3:4""3:2""2:3""1:1"
  • resolutionstringOpcjonalneZmienia cenę

    Rozmiar wyniku. Większy jest ostrzejszy i droższy.

    Domyślnie
    "768p"
    Dozwolone wartości
    "480p""768p"
  • generation_modestringOpcjonalneZmienia cenę

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

    Domyślnie
    "speed"
    Dozwolone wartości
    "cost""speed"
  • keep_reference_audiobooleanOpcjonalne

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

    Domyślnie
    false
  • duration_secondsintegerOpcjonalneZmienia cenę

    Długość klipu. Płacisz za każdą sekundę.

    Domyślnie
    5
    Zakres
    5 – 15
  • prompt_optimization_modestringOpcjonalne

    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.

    Domyślnie
    "off"
    Dozwolone wartości
    "off""turbo""max"
  • seedintegerOpcjonalne

    Ta sama liczba daje powtarzalny wynik.

    Zakres
    0 – 2147483647
Surowy JSON Schema
{
  "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"
}

Odpowiedzi, odpytywanie i callbacki

Wszystkie modele działają tak samo: utwórz zadanie, a potem odpytuj je albo poczekaj na callback.

Najpierw cena

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
  }
}'

Przed uruchomieniem wyślij tę samą treść żądania do POST /jobs/quote, aby zobaczyć szacowaną i maksymalną opłatę w USD. Wycena nie uruchamia zadania ani nie obciąża salda.

Przyjęte

HTTP
HTTP/1.1 202 Accepted

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

HTTP 202 oznacza przyjęcie zadania: maksymalna kwota w USD pozostaje zarezerwowana do rozliczenia. Po przyjęciu zadania rezerwujemy maksymalną kwotę wyceny na saldzie API. Po zakończeniu naliczamy opłatę za rzeczywiste użycie, nie wyższą niż rezerwacja, i zwalniamy resztę. Jeśli zadanie się nie powiedzie, rezerwacja zostaje zwolniona.

Sprawdź status

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

Odpytuj co kilka sekund, stopniowo wydłużając odstęp, i przestań, gdy state ma wartość succeeded, failed, canceled lub expired.

Gotowe zadanie

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"
}

Pobierz plik z url przed expiresAt. Potrzebujesz później nowego linku? Poproś o niego przez POST /common/download-url.

Weryfikacja callbacku

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
});

Gdy ustawisz callBackUrl, wyślemy ci gotowe zadanie. Zanim mu zaufasz, sprawdź podpis na surowym ciele żądania.

Wysyłanie pliku lokalnego

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.

Publiczne linki https działają bez zmian. Pliki lokalne przechodzą najpierw przez upload-url i commit.

O modelu P-Video 2 Pro

Klipy 5–15 sekund z dźwiękiem, z tekstu, klatek lub klipów referencyjnych.

Wywołujesz go nazwą modelu pruna-ai/p-video-2-pro/reference-to-video w POST /jobs/createTask, od 0,09 USD.

Parametry żądania

ParametrWymaganyOpis
aspect_ratioNieKształt kadru: szeroki, kwadratowy albo pionowy. auto · 16:9 · 9:16 · 4:3 · 3:4 · 3:2 · 2:3 · 1:1 · Domyślnie: auto
duration_secondsNieDługość klipu. Płacisz za każdą sekundę. ≥ 5 · ≤ 15 · Domyślnie: 5
generation_modeNiecost is cheaper and slower, speed (the default) is faster at the same quality. cost · speed · Domyślnie: speed
image_urlNieObraz, od którego zaczynasz.
keep_reference_audioNieUse the reference audio as the soundtrack instead of generating new sound. Needs exactly one audio clip. Domyślnie: false
last_image_urlNieOpcjonalna ostatnia klatka, żeby klip skończył się dokładnie tam, gdzie chcesz.
promptTakSay 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_modeNieLet 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 · Domyślnie: off
reference_audio_urlsNieDźwięk do dopasowania: głos, muzyka lub rytm.
reference_video_urlsNieKlipy, których ruch, kamerę lub styl ma powtórzyć wynik.
resolutionNieRozmiar wyniku. Większy jest ostrzejszy i droższy. 480p · 768p · Domyślnie: 768p
seedNieTa sama liczba daje powtarzalny wynik. ≥ 0 · ≤ 2147483647

Ceny

Ceny podano w USD. API korzysta z oddzielnego salda w dolarach amerykańskich. Kredytów strony nie można używać w API ani zamieniać na saldo API. Nie można też zamieniać salda API na kredyty strony. Po przyjęciu zadania rezerwujemy maksymalną kwotę wyceny na saldzie API. Po zakończeniu naliczamy opłatę za rzeczywiste użycie, nie wyższą niż rezerwacja, i zwalniamy resztę. Jeśli zadanie się nie powiedzie, rezerwacja zostaje zwolniona.

OpcjaUSD za sekundę
generation_mode cost · resolution 480p0,018 USD
generation_mode speed · resolution 480p0,024 USD
generation_mode cost · resolution 768p0,03 USD
generation_mode speed · resolution 768p0,042 USD

Przed uruchomieniem wyślij tę samą treść żądania do POST /jobs/quote, aby zobaczyć szacowaną i maksymalną opłatę w USD. Wycena nie uruchamia zadania ani nie obciąża salda.

Szybki start z API

Wywołaj API P-Video 2 Pro w trzech krokach

  1. Utwórz klucz API. Zaloguj się do PopNow i utwórz klucz w konsoli API. Klucze zaczynają się od sk-popnow-. Wywołania korzystają z oddzielnego salda w dolarach amerykańskich.
  2. Wyślij żądanie. Wyślij POST /jobs/createTask z model pruna-ai/p-video-2-pro/reference-to-video i obiektem input zgodnym z tabelą parametrów. Odpowiedź od razu zwraca ID zadania.
  3. Odbierz wynik. Odpytuj GET /jobs/recordInfo po ID zadania albo podaj callBackUrl, a wyślemy tam wynik. Gdy zadanie się powiedzie, pobierz pliki z linków wyjściowych.
# 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"

Podmień prompt i linki na własne. Odniesienie do odpowiedzi, odpytywania i callbacku znajdziesz na karcie API.

Pytania o API P-Video 2 Pro

Ile kosztuje API P-Video 2 Pro?

P-Video 2 Pro kosztuje od 0,09 USD za klip 5-sekundowy – najtańsze zadanie to „Wideo z referencji”. Ceny według opcji: cost · 480p 0,018 USD za sekundę, speed · 480p 0,024 USD za sekundę, cost · 768p 0,03 USD za sekundę, speed · 768p 0,042 USD za sekundę. API korzysta z oddzielnego salda w dolarach amerykańskich. Kredytów strony nie można używać w API ani zamieniać na saldo API. Nie można też zamieniać salda API na kredyty strony. Po przyjęciu zadania rezerwujemy maksymalną kwotę wyceny na saldzie API. Po zakończeniu naliczamy opłatę za rzeczywiste użycie, nie wyższą niż rezerwacja, i zwalniamy resztę. Jeśli zadanie się nie powiedzie, rezerwacja zostaje zwolniona.

Jakie limity ma API P-Video 2 Pro · Wideo z referencji?

Długość klipu: 5–15 s; Rozdzielczości: 480p · 768p; Proporcje obrazu: auto · 16:9 · 9:16 · 4:3 · 3:4 · 3:2 +2; Audio referencyjne: 3; Wideo referencyjne: 3. Żądania poza tymi limitami są odrzucane, zanim cokolwiek zostanie pobrane.

Więcej o P-Video 2 Pro