# P-Video 2 Pro Reference — API Reference Model ID: `model_pruna-p-video-2-pro-reference` --- ## Authentication - **API_KEY** and **API_SECRET** are found in your [Scenario Project Settings](https://app.scenario.com/team&tab=api_keys) under API Keys. - Set them as environment variables `SCENARIO_SDK_API_KEY` and `SCENARIO_SDK_API_SECRET` — both SDKs pick them up by default. - For raw HTTP (cURL), use Basic Auth: `Authorization: Basic base64(":")`. ### Install the SDK - JavaScript / TypeScript: `npm install @scenario-labs/sdk` - Python: `pip install scenario-sdk` --- ## Generate **Endpoint:** `POST https://api.cloud.scenario.com/v1/generate/custom/model_pruna-p-video-2-pro-reference` ### Parameters | Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | `prompt` | string | yes | - | Describe the video. Refer to references by order: Image 1, Video 1, Audio 1, and so on. | | `referenceImages` | assetId[] | - | - | Images to guide subjects or style (up to 9 including first and last frames, max 20 MB each). Refer to them as Image 1, Image 2, and so on. At least one reference image, video, or frame is required. | | `referenceVideos` | assetId[] | - | - | Videos to guide motion (up to 3, each 2–15s and 15s in total, max 1920×1080, 60 fps and 100 MB each). Refer to them as Video 1, Video 2, and so on. Billed per second, up to the output duration. | | `referenceAudio` | assetId[] | - | - | Audio to guide the video (up to 3, 15s in total, max 50 MB each). Refer to them as Audio 1, Audio 2, and so on. Requires at least one reference image or video. | | `keepAudio` | boolean | - | `false` | Use the reference audio as the video's soundtrack and generate the video to match it. Requires exactly one reference audio. Shorter audio plays first and the model generates the rest; longer audio is cut to the duration. | | `image` | assetId | - | - | Soft opening keyframe. Counts as a reference image. | | `lastFrameImage` | assetId | - | - | Soft closing keyframe. Counts as a reference image. | | `duration` | number | - | `5` | Duration of the video in seconds. | | `aspectRatio` | string | - | `adaptive` | Aspect ratio of the video. Auto follows the references. | | `resolution` | string | - | `768p` | Resolution of the video. Reference video billing depends on this value. | | `mode` | string | - | `speed` | Generation recipe. Cost is the cheapest, speed is faster. | | `promptUpsampler` | string | - | `turbo` | Expand the prompt before generation. A first or last frame forces turbo even when off. | | `seed` | number | - | - | Random seed. Set for reproducible generation. | ### Example Requests **cURL** ```bash curl -X POST "https://api.cloud.scenario.com/v1/generate/custom/model_pruna-p-video-2-pro-reference" \ -H "Authorization: Basic $(echo -n ':' | base64)" \ -H "Content-Type: application/json" \ --data-binary @- <<'EOF' { "prompt": "A fantasy landscape", "keepAudio": false, "duration": 5, "aspectRatio": "adaptive", "resolution": "768p", "mode": "speed", "promptUpsampler": "turbo" } EOF ``` **Python** ```python import os from scenario_sdk import Scenario client = Scenario( api_key=os.environ.get("SCENARIO_SDK_API_KEY"), api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"), ) body = { "prompt": "A fantasy landscape", "keepAudio": False, "duration": 5, "aspectRatio": "adaptive", "resolution": "768p", "mode": "speed", "promptUpsampler": "turbo" } response = client.generate.run_model( model_id="model_pruna-p-video-2-pro-reference", body=body, ) print(response) ``` **JavaScript** ```javascript import Scenario from "@scenario-labs/sdk"; const client = new Scenario({ apiKey: process.env["SCENARIO_SDK_API_KEY"], apiSecret: process.env["SCENARIO_SDK_API_SECRET"], }); const body = { "prompt": "A fantasy landscape", "keepAudio": false, "duration": 5, "aspectRatio": "adaptive", "resolution": "768p", "mode": "speed", "promptUpsampler": "turbo" }; const response = await client.generate.runModel("model_pruna-p-video-2-pro-reference", { body }); console.info(response); ``` --- ## Retrieve Results After submitting a generation request, you receive a `jobId`. Poll the job until `job.status` is `"success"`. The generated asset IDs are in `job.metadata.assetIds`. **Endpoint:** `GET https://api.cloud.scenario.com/v1/jobs/{jobId}` ### Example Requests **cURL** ```bash curl -X GET "https://api.cloud.scenario.com/v1/jobs/" \ -H "Authorization: Basic $(echo -n ':' | base64)" ``` **Python** ```python job = client.jobs.retrieve(job_id="") print(job.status) print(job.metadata.asset_ids) ``` **JavaScript** ```javascript // Option 1 — wait on the response from runModel using the SDK helper const completed = await response.job.wait(); console.info(completed.status); console.info(completed.metadata?.assetIds); // Option 2 — retrieve a job by its ID const job = await client.jobs.retrieve(""); console.info(job.status); console.info(job.metadata?.assetIds); ``` **Example response:** ```json { "job": { "jobId": "job_abc123", "status": "success", "metadata": { "assetIds": [ "asset_abc123" ] } } } ``` > **Important:** Generated asset URLs are **temporary** and expire after a short period. Download and store any images you wish to keep before the URL expires. More info: [Content Delivery Network (CDN)](https://docs.scenario.com/get-started/documentation/content-delivery-network-cdn). --- *Generated by [Scenario](https://app.scenario.com)*