live
MODEL IDprunaai:p-video@2-pro

P-Video-2-Pro

Pruna AI
by

P-Video-2-Pro is Pruna AI's quality-tier video generation model built on MiniMax H3, creating clips from text or from a first frame with an optional last frame. It handles multi-beat camera moves, heavy physics like water, fire, and fabric, coherent full-body motion, and two-shot dialogue with lip sync, generating audio with every clip. It offers a speed or quality recipe, three levels of prompt expansion, durations from 5 to 15 seconds, and 480p or 768p output at 24 FPS.

P-Video-2-Pro

Writing prompts for full shots and sequences

How to write prompts for Pruna P-Video-2-Pro, from a quick exploring prompt to a timed multi-shot brief, and what the three prompt expander levels change.

Introduction

A P-Video-2-Pro prompt has up to 10,000 characters to work with, which is room for a short script rather than a caption. That room is what lets one request carry a whole sequence: which shot comes first, what each one shows, where it cuts, and what the result sounds like.

Three shots with a time cue on each, one soundtrack

A promo for a boutique seaside hotel, three shots. Shot one, for the first four seconds: a wide shot of an empty infinity pool at dawn, the water perfectly still and the sea beyond it turning pink, the camera drifting slowly to the right. Shot two, for the next four seconds: a close-up of a woman in a white robe pushing open tall wooden shutters, morning light flooding across her face as she smiles at the view. Shot three, for the final four seconds: a medium shot from the pool edge as she, now in a navy swimsuit with the robe left on a lounger, dives into the water, ripples spreading toward the camera. Photoreal hospitality advertising cinematography, soft warm dawn light throughout, no text, no logos. Audio: gentle waves and early birdsong running across all three shots, the creak of the shutters opening, a clean splash as she dives, no music, no voice.

Three shots, cut in the order the prompt gives, with one soundtrack of water and birds running under both cuts. This guide covers the layers a full prompt carries, when a short prompt is the better tool, how far time cues go, how to ask for cuts, and what the prompt expander does to each of them.

What a full prompt carries

A full prompt is a stack of layers, and each layer answers a question the model would otherwise answer for you. The kitchen brief used later in this guide, broken into its parts:

A father in a gray henley and his six-year-old daughter in yellow pajamas stand at a kitchen counter making pancakes, He pours batter into a pan while she stands on a step stool beside him and drops blueberries onto it, then they look at each other and laugh, A bright family kitchen with white cabinets and a window over the sink, Medium shot at counter height, the camera drifting slowly closer, Soft morning sunlight from the window behind them, Photoreal lifestyle stock footage, natural skin texture, no text, no logos, no brand names on packaging, Audio: batter sizzling in the pan, their quiet laughter, a spoon tapping a bowl, no music, no spoken words
SubjectActionSettingCameraLightingStyleExclusionAudio

Leave out the camera layer and the model picks a framing. Leave out the audio layer and it invents a track, because every clip comes back with sound and there is no switch to turn it off. Dialogue and audio covers that layer in depth.

The exclusion layer earns its place on commercial work. "No brand names on packaging" is there because a kitchen is full of packaging, and a stock clip with a readable cereal box in the background cannot be licensed. Write the exclusions for the scene you are actually shooting.

Order matters less than presence, but keeping one order across a project, scene first, then camera and light, then sound, makes two prompts easy to compare when you change a single layer.

Short prompts for exploring, full briefs for finals

The same kitchen idea at both lengths, on one seed:

The short prompt still comes back looking finished, because the prompt expander is on by default and writes the missing layers before generation. What it writes is its own choice of kitchen, wardrobe, light and framing. The full brief puts the gray henley and the bowl of blueberries in the shot because it asked for them.

Explore with the short version while the idea is still moving, and switch to a full brief once you know what the shot is. The brief is what stops details drifting between one version of the clip and the next.

Try in Playground
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'prunaai:p-video@2-pro',
  positivePrompt: 'A father in a gray henley and his six-year-old daughter in yellow pajamas stand at a kitchen counter making pancakes. He pours batter into a pan while she stands on a step stool beside him and drops blueberries onto it, then they look at each other and laugh. A bright family kitchen with white cabinets and a window over the sink. Medium shot at counter height, the camera drifting slowly closer. Soft morning sunlight from the window behind them. Photoreal lifestyle stock footage, natural skin texture, no text, no logos, no brand names on packaging. Audio: batter sizzling in the pan, their quiet laughter, a spoon tapping a bowl, no music, no spoken words.',
  width: 1344,
  height: 768,
  duration: 8,
  seed: 8150364,
  deliveryMethod: 'async'
})
import asyncio
import os

from runware import Runware


async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "prunaai:p-video@2-pro",
            "positivePrompt": "A father in a gray henley and his six-year-old daughter in yellow pajamas stand at a kitchen counter making pancakes. He pours batter into a pan while she stands on a step stool beside him and drops blueberries onto it, then they look at each other and laugh. A bright family kitchen with white cabinets and a window over the sink. Medium shot at counter height, the camera drifting slowly closer. Soft morning sunlight from the window behind them. Photoreal lifestyle stock footage, natural skin texture, no text, no logos, no brand names on packaging. Audio: batter sizzling in the pan, their quiet laughter, a spoon tapping a bowl, no music, no spoken words.",
            "width": 1344,
            "height": 768,
            "duration": 8,
            "seed": 8150364,
            "deliveryMethod": "async"
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "0c7e4b92-5a13-4f68-9d21-3b8a6e1f7c45",
      "model": "prunaai:p-video@2-pro",
      "positivePrompt": "A father in a gray henley and his six-year-old daughter in yellow pajamas stand at a kitchen counter making pancakes. He pours batter into a pan while she stands on a step stool beside him and drops blueberries onto it, then they look at each other and laugh. A bright family kitchen with white cabinets and a window over the sink. Medium shot at counter height, the camera drifting slowly closer. Soft morning sunlight from the window behind them. Photoreal lifestyle stock footage, natural skin texture, no text, no logos, no brand names on packaging. Audio: batter sizzling in the pan, their quiet laughter, a spoon tapping a bowl, no music, no spoken words.",
      "width": 1344,
      "height": 768,
      "duration": 8,
      "seed": 8150364,
      "deliveryMethod": "async"
    }
  ]'
runware run prunaai:p-video@2-pro \
  positivePrompt="A father in a gray henley and his six-year-old daughter in yellow pajamas stand at a kitchen counter making pancakes. He pours batter into a pan while she stands on a step stool beside him and drops blueberries onto it, then they look at each other and laugh. A bright family kitchen with white cabinets and a window over the sink. Medium shot at counter height, the camera drifting slowly closer. Soft morning sunlight from the window behind them. Photoreal lifestyle stock footage, natural skin texture, no text, no logos, no brand names on packaging. Audio: batter sizzling in the pan, their quiet laughter, a spoon tapping a bowl, no music, no spoken words." \
  width=1344 \
  height=768 \
  duration=8 \
  seed=8150364 \
  deliveryMethod=async
{
  "taskType": "videoInference",
  "taskUUID": "0c7e4b92-5a13-4f68-9d21-3b8a6e1f7c45",
  "model": "prunaai:p-video@2-pro",
  "positivePrompt": "A father in a gray henley and his six-year-old daughter in yellow pajamas stand at a kitchen counter making pancakes. He pours batter into a pan while she stands on a step stool beside him and drops blueberries onto it, then they look at each other and laugh. A bright family kitchen with white cabinets and a window over the sink. Medium shot at counter height, the camera drifting slowly closer. Soft morning sunlight from the window behind them. Photoreal lifestyle stock footage, natural skin texture, no text, no logos, no brand names on packaging. Audio: batter sizzling in the pan, their quiet laughter, a spoon tapping a bowl, no music, no spoken words.",
  "width": 1344,
  "height": 768,
  "duration": 8,
  "seed": 8150364,
  "deliveryMethod": "async"
}
Response
[
  {
    "taskType": "videoInference",
    "taskUUID": "0c7e4b92-5a13-4f68-9d21-3b8a6e1f7c45",
    "videoUUID": "8f2d6a17-4c39-4e80-b5d1-7a3e9c2b6f08",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/8f2d6a17-4c39-4e80-b5d1-7a3e9c2b6f08.mp4"
  }
]

Timing inside a clip

A prompt that lists events in order leaves the model to decide when each one happens, and a time cue in the prompt only nudges that decision. The same stroller demo with and without one, both eight seconds on one seed with the expander off. The cued prompt asks for six still seconds and the reveal in the last two:

The untimed stroller opens at about three and a half seconds. The cued one opens at about four, not at six, and spends its first second being wheeled into place despite "nothing moves". A single action lands near the middle of the clip whatever the cue asks for.

So put exact timing in the edit. A reveal that has to land on the last beat of a bumper is a trim: generate the clip, find the moment and cut the head so it lands where the edit needs it. Keep time cues for the rough order and pacing of a sequence, where a second either way does no harm.

Cue in whole seconds and keep every cue inside the duration you send. A prompt that describes twelve seconds of events in an eight-second clip leaves the model to compress them.

Asking for cuts

Describe several things happening and the model decides whether they are one take or several. Number the shots and give each its own framing, and they come back as an edit. Both clips run on one seed with the expander off:

The numbered prompt cuts wide, close, then the raised arm, in the order written, and splits the ten seconds into shots of roughly two, three and a half and four seconds. The described version stays one continuous take and only reaches the raised arm in the last second.

Numbering sets the order. How long each shot runs is still the model's call, even with time cues: the hero at the top of this guide asks for four seconds a shot and gets roughly three, three and six. When shot lengths have to be exact, generate each shot as its own clip and cut them in the edit. Give each shot its own framing as well, since two shots at the same framing read as a jump rather than an edit, and write the soundtrack once for the whole sequence, saying it continues across the cuts.

Prompt length

The cap is 10,000 characters, roughly 1,500 words. The full kitchen brief above is about 110 words, and it specifies everything the shot needs. Spend the rest of the budget on a sequence with a paragraph per shot, not on describing one frame five different ways.

The prompt expander

settings.promptUpsampling rewrites the prompt before generation and takes three levels: off uses the prompt as written, turbo is the default fast expansion, and max is the most detailed.

{
  "settings": {
    "promptUpsampling": "off"
  }
}

One short prompt at all three levels, same seed:

With nine words to work from, the level decides how far the scene travels from them. off and turbo both return a red scooter on an ordinary daytime street, framed differently. max rewrites the scene into a rain-soaked street at dusk with neon reflecting in the pavement, and none of that was in the nine words.

turbo and max also rewrite differently on every call, so the same request sent twice comes back as two different clips even with the seed pinned. Turn the expander off and the same request and seed return a byte-identical file.

With a full brief there is much less left to fill in. The kitchen brief at turbo and at off, same seed:

The more layers you write, the less the level matters, because the expander has fewer gaps to fill. Leave turbo on while you explore with short prompts. Once a shot is locked into a full brief, compare off and turbo on that brief before you scale it to a set, and keep whichever holds your details.

Tips

  1. Write every layer you care about. Subject, action, setting, camera, light, style, exclusions and audio. Each one you skip is a choice the model makes.

  2. Always write the audio layer. Sound comes back with every clip, so "no music" is an instruction, not a comment.

  3. Explore short, deliver full. A short prompt with the expander on is fast for ideas. A full brief with the expander off is what keeps a final repeatable.

  4. Trim for exact timing. A time cue nudges a moment by a second or so. When a reveal has to land on a beat, cut the clip in the edit.

  5. Number your shots. "First shot… Cut to a second shot…" with a different framing on each produces an edit. Unnumbered moments may or may not cut.

  6. Spend the 10,000 characters on shots. A paragraph per shot is a good use of the budget. Five descriptions of one frame is not.

  7. Match the expander level to the prompt. The shorter the prompt, the more the level decides. Compare levels on your own brief before scaling a set.