Introduction
P-Video 2 Pro Text to video turns a written brief into a clip of 5 to 15 seconds at 480p or 768p, in seven aspect ratios from 16:9 to 9:16. Pruna built P-Video 2 Pro for speed: in our tests a 5-second clip took about 10 to 20 seconds to generate. Every clip comes back with a soundtrack the model generates in the same pass, and there is no content filter on the prompt or the result.
Choose a P-Video 2 Pro mode by starting material
| What you have at the start | Mode |
|---|---|
| a written scene or script | P-Video 2 Pro Text to video (you are here) |
| an opening frame, and optionally a closing frame | P-Video 2 Pro Image to video |
| a clip to borrow motion from, or a voice or music track | P-Video 2 Pro Reference to video |
Key features & highlights
Three generation modes
generation_mode trades price against speed and quality. cost is the cheapest per second and a little slower, speed (the default) is faster at the same picture quality, and quality renders a higher-quality clip at a higher price.
Sound on every clip
The model writes the soundtrack itself: ambience, effects and any line you put in quotes. There is no switch and no extra charge for it.
Uncensored
No filter on prompts or results. In our tests prompts up to the Strong level rendered as written; requests at the highest levels came back toned down, which is a limit of the model, not a refusal.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Describe the subject, the action, the camera and the sound. Put spoken lines in quotes and the sound on its own line. at least 1 characters |
aspect_ratio | No | 16:9 (default), 9:16, 4:3, 3:4, 3:2, 2:3 or 1:1. It does not change the price. |
resolution | No | 480p or 768p (default 768p). 768p costs more per second. |
generation_mode | No | cost (cheapest, a little slower), speed (default, faster at the same quality) or quality (best picture, highest price). |
duration_seconds | No | Whole seconds, 5 to 15 (default 5). Drives the price. |
prompt_optimization_mode | No | off (default) sends your prompt word for word; turbo and max let the service rewrite it first. Does not change the price. |
seed | No | Keeps runs comparable while you change the prompt. It does not promise a frame-identical clip. |
Pricing
Billed per second of output. The price per second depends on the resolution (480p or 768p) and the generation mode: cost is the cheapest, speed costs more, quality the most. Prompt expansion, aspect ratio, seed and the closing frame do not change the price. A failed request is not charged.
| Resolution | Generation mode: cost | Generation mode: speed | Generation mode: quality |
|---|---|---|---|
| $0.012 / second | $0.024 / second | $0.048 / second |
| $0.03 / second | $0.042 / second | $0.09 / second |
Use cases
Fast drafts
Clips come back in seconds, so you can try five versions of a shot in the time other models take for one. Draft at 480p in cost mode, then rerun the prompt you like at 768p.
Short scenes with a spoken line
Describe the action, then put the line in quotes and the ambience after Sound:. One clear line per clip lands best.
Vertical clips for social
Choose 9:16 or 3:4 and frame the subject in the middle of the shot; the model composes for the vertical frame.
Prompt guide & pro tips
Write it in the order it happens
Subject and wardrobe, action, camera move, light, then a separate Sound: line.
Keep prompt expansion off for exact wording
prompt_optimization_mode is off by default, so the prompt goes to the model word for word. turbo and max let the service rewrite it first, which can add detail but may also change what you asked for.
Pick the mode last
Find the framing in cost mode, then switch to speed for faster turnaround or quality for the final render.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "pruna-ai/p-video-2-pro/text-to-video",
"input": {
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"resolution": "768p",
"aspect_ratio": "16:9",
"generation_mode": "speed",
"duration_seconds": 5,
"prompt_optimization_mode": "off"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.



