---
title: Resolution, aspect ratio, frame rate and length — P-Video-2 | Runware Docs
url: https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration
description: "How to size a Pruna P-Video-2 clip: the two mutually exclusive ways to state dimensions, the fourteen accepted pairs, what 48 fps buys, and what happens when you omit duration."
---
### [Introduction](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#introduction)

P-Video-2 accepts **seven aspect ratios at two resolution tiers**, which is fourteen exact output sizes and nothing in between. There is no arbitrary sizing here, and the parameters that get you to those sizes are mutually exclusive in a way that catches most people once.

The thing to understand before you pick one is that **a ratio is not a crop**. The same prompt on the same seed at two ratios does not frame more or less of one shot, it re-stages the scene:

[Watch video](https://runware.ai/docs/assets/aspect-16x9.D4DId9Bk.mp4)

*1280 × 704*

> **Prompt**: An unbranded matte black insulated water bottle standing upright and centred on a pale limestone plinth against a plain warm sand-coloured wall, the shadow of a monstera leaf drifting slowly across the wall and the bottle as if moved by air. Even soft daylight from the left. Photoreal product lifestyle cinematography, locked-off camera, no text.

[Watch video](https://runware.ai/docs/assets/aspect-9x16.CNLVGkQJ.mp4)

*704 × 1280*

> **Prompt**: An unbranded matte black insulated water bottle standing upright and centred on a pale limestone plinth against a plain warm sand-coloured wall, the shadow of a monstera leaf drifting slowly across the wall and the bottle as if moved by air. Even soft daylight from the left. Photoreal product lifestyle cinematography, locked-off camera, no text.

The set survives, the staging does not. Same bottle, same plinth, same leaf shadow, and **the subject sits at a different scale in the frame** with different amounts of wall around it. Neither is a crop of the other, and cropping one to get the other would throw away the composition the model built for that shape.

The practical rule is that **each placement is its own generation**, planned at the ratio it ships in. A campaign needing a landscape hero and a vertical cutdown is two runs, and the prompt for the vertical one should say what belongs in the extra height.

### [Two ways to say how big, and you must pick one](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#two-ways-to-say-how-big-and-you-must-pick-one)

`resolution` and the `width`/`height` pair both set the output size, and **the request is rejected if it carries both**. This is enforced in the schema rather than resolved by precedence.

```json
{ "resolution": "1080p" }

{ "width": 1920, "height": 1088 }
```

`resolution` takes `720p` or `1080p` and **defaults to `720p`**, so a request with neither is a 720p request. On its own it gives you the provider's default 16:9 framing at that tier, which is why the showcase above uses explicit pairs: **`width` and `height` are the only way to choose a non-16:9 shape in text-to-video**.

`width` and `height` are also required together. Sending one without the other fails, and the pair has to be one of the fourteen exactly.

> [!WARNING]
> Both of these are separately rejected alongside `inputs.frameImages`. With a first frame in the request you cannot state dimensions at all: the aspect comes from the still and `resolution` picks the tier. See [animating a still](https://runware.ai/docs/models/prunaai-p-video-2/guides/image-to-video).

### [The fourteen pairs](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#the-fourteen-pairs)

| Aspect | 720p | 1080p |
| --- | --- | --- |
| 16:9 | 1280 × 704 | 1920 × 1088 |
| 9:16 | 704 × 1280 | 1088 × 1920 |
| 4:3 | 1088 × 832 | 1664 × 1216 |
| 3:4 | 832 × 1088 | 1216 × 1664 |
| 3:2 | 1152 × 768 | 1792 × 1152 |
| 2:3 | 768 × 1152 | 1152 × 1792 |
| 1:1 | 960 × 960 | 1408 × 1408 |

Three things about that table are worth knowing, because none of them is what the parameter names suggest.

**The tier is a pixel budget, not an edge length.** Every 720p size lands near 0.9 megapixels and every 1080p size near 2.0, and the model spends that budget on whichever shape you asked for. That is why the 720p square is `960 × 960` and the 1080p square is `1408 × 1408`, neither of which contains the number in its own tier name. Reading one dimension tells you nothing: `1152` is the long edge of a 720p 3:2 clip and the short edge of a 1080p one.

**Every dimension is a multiple of 64**, which is where the odd numbers come from. The pairs are the nearest multiples of 64 to each ratio at each budget, so most of them are slightly off the ratio they are named after. 16:9 at 720p is `1280 × 704`, which is 1.82:1 rather than 1.78:1. The deviation runs up to about 3.7% at 1080p 3:2. Only four are exact: both squares, and 3:2 and 2:3 at 720p.

**The two tiers of one ratio are not the same shape.** 9:16 is `704 × 1280` at 720p and `1088 × 1920` at 1080p, which are 0.550 and 0.567. Stepping a clip up a tier reframes it slightly as well as resolving it, and the square is the only ratio where that does not happen.

> [!WARNING]
> None of the 16:9 sizes is exactly 16:9. Dropping a `1280 × 704` clip onto a `1920 × 1080` timeline will pillarbox or crop it, so a deliverable with a fixed target frame needs a scale-and-crop pass in your edit rather than a straight drop.

### [720p or 1080p](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#720p-or-1080p)

The tier decides how much detail lands in the frame. Both clips below start from **the same still**, which is the only way to make this comparison honestly, for reasons the callout after them explains:

![An overhead macro of a folded cream cable-knit jumper on a dark walnut surface, the cable twists and individual fibres sharply resolved](https://runware.ai/docs/assets/still-knit.DOZTZZCe_29tSpC.jpg)

*The shared first frame, square so both tiers keep the same shape*

> **Prompt**: An overhead macro photograph of a folded cream cable-knit wool jumper resting on a dark walnut surface, the cable twists and the individual wool fibres sharply resolved, filling the frame. Soft directional daylight raking from the left picking out the depth of the stitching. Photoreal knitwear detail photography, square framing, no hands, no people, no text.

[Watch video](https://runware.ai/docs/assets/tier-720.B4xNhLot.mp4)

*720p, 960 × 960*

> **Prompt**: The light rakes slowly across the fabric from left to right, lifting the texture of each cable as it passes and settling again. Nothing else moves and the camera holds still. Audio: quiet room tone, no music, no voice.

[Watch video](https://runware.ai/docs/assets/tier-1080.D9VZ7oCp.mp4)

*1080p, 1408 × 1408*

> **Prompt**: The light rakes slowly across the fabric from left to right, lifting the texture of each cable as it passes and settling again. Nothing else moves and the camera holds still. Audio: quiet room tone, no music, no voice.

On a knit close-up the tier is the whole point, because the fibre is the product. On a wide interior or a flat motion-design piece it is close to invisible, and you are paying a higher per-second rate for pixels the viewer's feed will re-compress anyway.

> [!WARNING]
> **A seed does not survive a change of shape.** Run the same text-to-video prompt at 720p and again at 1080p on one seed and you get two unrelated shots, not one shot at two resolutions. The same is true of changing `fps`, `duration`, or the aspect ratio: anything that alters the size of the output changes the generation itself.
> 
> The only thing that holds a composition across those changes is a first frame. Both clips above share one still, which is why the difference between them is detail rather than staging.

That has a direct cost consequence, and it is the opposite of what you would assume. **You cannot explore cheaply at 720p and then re-run the winner at 1080p**, because the winner will not come back. If the composition matters, either commit to the tier from the start, or lock the frame you approved and drive the final render from it as [an image-to-video request](https://runware.ai/docs/models/prunaai-p-video-2/guides/image-to-video).

A workable policy, given that 1080p costs roughly twice as much per second:

- **1080p** for anything where material, skin or fine surface is being sold. Product detail, garment texture, beauty, jewelry, food.
- **720p** for wides, interiors, illustrated and motion-design work, social cutdowns, and every draft.
- **720p for the whole exploration**, then commit. What you cannot do is re-run the approved 720p clip at 1080p and get it back, so if the exact shot matters, take the frame you approved and drive the final render from it.

### [24 or 48 frames](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#24-or-48-frames)

`fps` takes `24` or `48` and **defaults to `24`**. Doubling it doubles the frames the model has to produce, and what you get for that is motion clarity rather than picture quality. Both clips below run from one still, for the same reason the tier pair does:

![A sprinter in a navy vest and white shorts at full stride on a red running track, seen side-on with one spike about to strike the surface](https://runware.ai/docs/assets/still-sprint.CxgvLPVq_Z1p7mDp.jpg)

*The shared first frame for both frame rates*

> **Prompt**: A sprinter in a navy vest and white shorts at full stride on a red outdoor running track, caught mid-step with one spike about to strike the surface, arms driving, seen side-on at full body length. Bright hard midday sun, empty stadium seating softly out of focus behind. Photoreal sports photography, wide framing, no text.

[Watch video](https://runware.ai/docs/assets/fps-24.DFokq5_i.mp4)

*fps: 24*

> **Prompt**: He runs at full pace from left to right, arms driving and spikes striking the track surface. The camera pans smoothly to hold him centred in frame. Audio: track ambience and the rhythm of spikes on the surface, no music, no voice.

[Watch video](https://runware.ai/docs/assets/fps-48.Bh8bLEXc.mp4)

*fps: 48*

> **Prompt**: He runs at full pace from left to right, arms driving and spikes striking the track surface. The camera pans smoothly to hold him centred in frame. Audio: track ambience and the rhythm of spikes on the surface, no music, no voice.

At 24 the fast limbs smear into each other. At 48 each position is discrete. **Reach for 48 when something in frame moves faster than the frame rate can describe**: sport, a whip of fabric, a fast pan, water, anything you might want to slow down in post.

Check the result rather than assuming, because **48 fps asks the model for twice as many frames of a fast subject** and a stride cycle that steps unevenly is more obvious at the higher rate, not less. Where the motion is the deliverable, a 24 fps take with honest motion blur often beats a 48 fps one with a broken gait.

Stay at 24 for the rest, and specifically for anything that should read as film. **48 fps looks like broadcast or live video**, which is the right texture for a workout demo and the wrong one for a brand film. It is a look, not an upgrade.

> [!WARNING]
> Pruna report that **1080p combined with 48 fps can return black frames on some runs**. Until that is resolved, treat the two as an either-or: take the tier at 24, or take the frame rate at 720p. If you need both, check the output rather than shipping it unwatched.

### [How long](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#how-long)

`duration` is an integer from **1 to 20 seconds**, and it has no default. Leaving it out is not the same as passing a fallback: **the model chooses the length from the prompt**.

That is worth using deliberately. Two prompts describing actions of obviously different lengths, neither carrying a `duration`:

[Watch video](https://runware.ai/docs/assets/duration-auto-short.BaDAdTqg.mp4)

*One short action, no duration passed*

> **Prompt**: A single ripe strawberry drops into a glass of sparkling water and bubbles rush up around it. Photoreal beverage cinematography, locked-off macro camera, plain white background, no text. Audio: the plink of fruit hitting water and fizzing bubbles, no music, no voice.

[Watch video](https://runware.ai/docs/assets/duration-auto-long.r9ouylKm.mp4)

*A sequence of actions, no duration passed*

> **Prompt**: A woman in an apron unpacks a cardboard grocery box that sits on a kitchen island in front of her, lifting out one vegetable at a time and setting each one down in a neat row on the counter to the right of the box, until four vegetables stand in a line. She then lifts the empty box off the counter and sets it down on the floor beside her. Photoreal lifestyle cinematography, locked-off camera, soft daylight, no text. Audio: quiet kitchen tone, cardboard and produce handling, no music, no voice.

The prompt is the length hint. **A single event gets a short clip and a sequence of events gets a longer one**, so a prompt that lists four actions is asking for time whether or not you said so.

Forcing that same sequence into three seconds shows what the parameter costs when it fights the prompt:

[Watch video](https://runware.ai/docs/assets/duration-explicit.3k5A74DY.mp4)

*duration: 3, same prompt*

> **Prompt**: A woman in an apron unpacks a cardboard grocery box that sits on a kitchen island in front of her, lifting out one vegetable at a time and setting each one down in a neat row on the counter to the right of the box, until four vegetables stand in a line. She then lifts the empty box off the counter and sets it down on the floor beside her. Photoreal lifestyle cinematography, locked-off camera, soft daylight, no text. Audio: quiet kitchen tone, cardboard and produce handling, no music, no voice.

The actions do not get dropped, they get **rushed into a speed no hand moves at**. The fix is to match the two: either lengthen the duration or shorten the prompt to one action. The same principle governs spoken lines, where compression breaks lip sync first, as [native audio](https://runware.ai/docs/models/prunaai-p-video-2/guides/native-audio) covers.

Since billing runs per second of finished video, **duration is the single biggest lever on what a clip costs**. Twenty seconds costs four times five seconds. Explore at three to five, deliver at the length the edit needs.

> [!NOTE]
> `duration` is rejected when `inputs.audio` is present, because the track sets the length instead. That also means the 20-second ceiling applies to imported audio: a longer track needs cutting into sections. See [audio-driven generation](https://runware.ai/docs/models/prunaai-p-video-2/guides/audio-driven).

### [Choosing for the deliverable](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#choosing-for-the-deliverable)

**TypeScript**:

```typescript
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',
  positivePrompt: 'An unbranded matte black insulated water bottle standing upright and centred on a pale limestone plinth against a plain warm sand-coloured wall, the shadow of a monstera leaf drifting slowly across the wall and the bottle as if moved by air. Even soft daylight from the left. Photoreal product lifestyle cinematography, locked-off camera, no text.',
  width: 704,
  height: 1280,
  duration: 5,
  fps: 24,
  seed: 4408192,
  deliveryMethod: 'async'
})
```

**Python**:

```python
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",
            "positivePrompt": "An unbranded matte black insulated water bottle standing upright and centred on a pale limestone plinth against a plain warm sand-coloured wall, the shadow of a monstera leaf drifting slowly across the wall and the bottle as if moved by air. Even soft daylight from the left. Photoreal product lifestyle cinematography, locked-off camera, no text.",
            "width": 704,
            "height": 1280,
            "duration": 5,
            "fps": 24,
            "seed": 4408192,
            "deliveryMethod": "async"
        })

asyncio.run(main())
```

**cURL**:

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "f38a2c71-5d94-4b06-8e13-7a2c9d5f1b40",
      "model": "prunaai:p-video@2",
      "positivePrompt": "An unbranded matte black insulated water bottle standing upright and centred on a pale limestone plinth against a plain warm sand-coloured wall, the shadow of a monstera leaf drifting slowly across the wall and the bottle as if moved by air. Even soft daylight from the left. Photoreal product lifestyle cinematography, locked-off camera, no text.",
      "width": 704,
      "height": 1280,
      "duration": 5,
      "fps": 24,
      "seed": 4408192,
      "deliveryMethod": "async"
    }
  ]'
```

**CLI**:

```bash
runware run prunaai:p-video@2 \
  positivePrompt="An unbranded matte black insulated water bottle standing upright and centred on a pale limestone plinth against a plain warm sand-coloured wall, the shadow of a monstera leaf drifting slowly across the wall and the bottle as if moved by air. Even soft daylight from the left. Photoreal product lifestyle cinematography, locked-off camera, no text." \
  width=704 \
  height=1280 \
  duration=5 \
  fps=24 \
  seed=4408192 \
  deliveryMethod=async
```

**JSON**:

```json
{
  "taskType": "videoInference",
  "taskUUID": "f38a2c71-5d94-4b06-8e13-7a2c9d5f1b40",
  "model": "prunaai:p-video@2",
  "positivePrompt": "An unbranded matte black insulated water bottle standing upright and centred on a pale limestone plinth against a plain warm sand-coloured wall, the shadow of a monstera leaf drifting slowly across the wall and the bottle as if moved by air. Even soft daylight from the left. Photoreal product lifestyle cinematography, locked-off camera, no text.",
  "width": 704,
  "height": 1280,
  "duration": 5,
  "fps": 24,
  "seed": 4408192,
  "deliveryMethod": "async"
}
```

| Deliverable | Size | fps | Duration |
| --- | --- | --- | --- |
| Reels, TikTok, Shorts | 704 × 1280 | 24 | 5 to 8 |
| Feed post, square | 960 × 960 | 24 | 5 to 6 |
| PDP or listing loop | 1408 × 1408 or 1216 × 1664 | 24 | 3 to 5 |
| Product detail, texture | 1920 × 1088 | 24 | 5 |
| Site hero banner | 1920 × 1088 | 24 | 5 to 8 |
| Workout or technique demo | 704 × 1280 | 48 | 8 to 12 |
| Sport or fast action | 1280 × 704 | 48 | 5 to 8 |
| Draft of any of the above | keep the ratio, drop to 720p | 24 | 3 |

The last row needs the caveat from earlier. Dropping to 720p for a draft gets you a cheap look at what a prompt produces, but **it does not get you a preview of the 1080p version**, because the tier change regenerates the shot. Use the low tier to settle the prompt, the staging language and the length, then accept that the final run is its own take. When the exact composition has to carry through, [draft mode](https://runware.ai/docs/models/prunaai-p-video-2/guides/draft-mode) is the better lever, since it changes quality without changing the output shape.

### [Tips](https://runware.ai/docs/models/prunaai-p-video-2/guides/resolution-and-duration#tips)

1. **The tier is a pixel budget, not an edge.** 720p is about 0.9 MP and 1080p about 2.0, spent on whatever shape you asked for. The 720p square is 960 × 960, not 720 × 720.
    
2. **Pick `resolution` or the pair, never both.** They are mutually exclusive, and `resolution` alone gives you 16:9. Non-16:9 text-to-video needs `width` and `height`.
    
3. **Send `width` and `height` together.** One without the other is rejected, and the pair must be one of the fourteen.
    
4. **A seed does not survive a change of shape.** Different `resolution`, `fps`, `duration` or ratio means a different shot, not the same shot resized. Anchor with a first frame when the composition has to hold.
    
5. **48 fps is a look, not a quality setting.** It buys motion clarity and costs you the filmic texture. Use it for sport and fast movement, not for brand films, and watch the result: fast gaits step more visibly at the higher rate.
    
6. **Avoid 1080p with 48 fps for now.** Black frames have been reported on that combination. Take one or the other, or check every output.
    
7. **Omit `duration` when you want the model to pace the prompt.** A single action gets a short clip, a sequence gets a longer one, and the result is usually better matched than a number you guessed.
    
8. **Count the actions in your prompt before setting a duration.** Four actions in three seconds produces hands moving at impossible speed, not an edited-down version.
    
9. **Duration is your biggest cost lever.** Per-second billing means 20 seconds is four times 5. Explore short.