MODEL IDprunaai:p-video@edit
live

P-Video-Edit

Pruna AI
by Pruna AI

P-Video-Edit is Pruna AI's instruction-based video editing model for changing an existing clip while preserving its motion, scene structure, and audio. Give it a source video and a text instruction to make attribute, object, or environment edits; up to four reference images can guide identity, style, or other supported changes. A draft mode supports faster iteration before rendering the final edit at full quality.

P-Video-Edit

Draft mode and reproducible reruns

How to use settings.draft in Pruna P-Video-Edit to preview an edit at a lower rate before committing, and how seed makes the run you approved repeatable.

Introduction

Most of the edits you run are edits you will throw away. The wording was not quite right, the colour was not the one the client meant, or the idea was worth trying and not worth keeping. Paying full rate to find that out gets expensive when the bill is per second of output and the clip is long, as editing video sets out.

settings.draft exists for that part of the work. It renders the same edit at lower quality and roughly half the cost, fast enough to iterate against, so the full-quality run happens once you already know what you are asking for.

The source clip every edit below starts from

The same instruction run twice, once each way:

Draft, for the decision

Change only the mustard-yellow velvet upholstery of the armchair to deep teal velvet. Preserve the seams, the buttoning and the pile of the fabric. Keep the grey throw, the oak floor, the wall, the daylight and the camera move unchanged.

Full quality, for delivery

Change only the mustard-yellow velvet upholstery of the armchair to deep teal velvet. Preserve the seams, the buttoning and the pile of the fabric. Keep the grey throw, the oak floor, the wall, the daylight and the camera move unchanged.

This guide covers the flag, what draft actually trades away, the iteration loop it is built for, and how seed makes a run repeatable.

The flag

settings.draft is a boolean and it defaults to false, so every call is full quality unless you say otherwise.

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@edit',
  positivePrompt: 'Change only the mustard-yellow velvet upholstery of the armchair to deep teal velvet. Preserve the seams, the buttoning and the pile of the fabric. Keep the grey throw, the oak floor, the wall, the daylight and the camera move unchanged.',
  inputs: {
    video: 'https://vm.runware.ai/video/os/a14d18/ws/2/vi/4c7e2a90-8b15-4d63-a2f7-9e1c5d3b8074.mp4'
  },
  settings: {
    draft: true
  },
  seed: 1840572,
  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@edit",
            "positivePrompt": "Change only the mustard-yellow velvet upholstery of the armchair to deep teal velvet. Preserve the seams, the buttoning and the pile of the fabric. Keep the grey throw, the oak floor, the wall, the daylight and the camera move unchanged.",
            "inputs": {
                "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4c7e2a90-8b15-4d63-a2f7-9e1c5d3b8074.mp4"
            },
            "settings": {
                "draft": True
            },
            "seed": 1840572,
            "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": "f2b6d419-5c83-4a07-9e51-3d8a2c7f0b64",
      "model": "prunaai:p-video@edit",
      "positivePrompt": "Change only the mustard-yellow velvet upholstery of the armchair to deep teal velvet. Preserve the seams, the buttoning and the pile of the fabric. Keep the grey throw, the oak floor, the wall, the daylight and the camera move unchanged.",
      "inputs": {
        "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4c7e2a90-8b15-4d63-a2f7-9e1c5d3b8074.mp4"
      },
      "settings": {
        "draft": true
      },
      "seed": 1840572,
      "deliveryMethod": "async"
    }
  ]'
runware run prunaai:p-video@edit \
  positivePrompt="Change only the mustard-yellow velvet upholstery of the armchair to deep teal velvet. Preserve the seams, the buttoning and the pile of the fabric. Keep the grey throw, the oak floor, the wall, the daylight and the camera move unchanged." \
  inputs.video=https://vm.runware.ai/video/os/a14d18/ws/2/vi/4c7e2a90-8b15-4d63-a2f7-9e1c5d3b8074.mp4 \
  settings.draft=true \
  seed=1840572 \
  deliveryMethod=async
{
  "taskType": "videoInference",
  "taskUUID": "f2b6d419-5c83-4a07-9e51-3d8a2c7f0b64",
  "model": "prunaai:p-video@edit",
  "positivePrompt": "Change only the mustard-yellow velvet upholstery of the armchair to deep teal velvet. Preserve the seams, the buttoning and the pile of the fabric. Keep the grey throw, the oak floor, the wall, the daylight and the camera move unchanged.",
  "inputs": {
    "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4c7e2a90-8b15-4d63-a2f7-9e1c5d3b8074.mp4"
  },
  "settings": {
    "draft": true
  },
  "seed": 1840572,
  "deliveryMethod": "async"
}
Response
[
  {
    "taskType": "videoInference",
    "taskUUID": "f2b6d419-5c83-4a07-9e51-3d8a2c7f0b64",
    "videoUUID": "8e3a1c57-2f94-4b60-9a18-7c5e2a9d4f13",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/8e3a1c57-2f94-4b60-9a18-7c5e2a9d4f13.mp4"
  }
]

Turning it on halves the rate per second of output and roughly doubles the speed. Everything else about the request is identical, so the same call switches between the two modes on one boolean.

What draft trades away

The thing draft does not change is the one people assume it does. The output dimensions are identical in both modes, and so is the 25 fps frame rate. This model already snaps every result to a fixed size for its aspect ratio, capped at 848 pixels on the long edge, and the flag does not move that. A draft and a final of the same 16:9 source are both 848 × 480 files.

What you lose is rendering quality inside those frames. Fine texture goes soft and small detail is approximated rather than resolved, which is exactly the part of the picture a material decision turns on.

That shapes what a draft can answer. A draft settles composition-level questions, whether the right object changed, whether the preserve clause held, whether the colour reads. It cannot settle material questions, because the exact thing you would be judging is the detail draft mode approximates. Judge a boucle against a velvet at full quality, and judge whether you targeted the chair at all in draft.

The iteration loop

The loop the flag is built for is cheap exploration, then one expensive commit. Three materials explored in draft, one taken to full:

Three drafts plus one final costs less than three full-quality runs, and the saving grows with the length of the clip. Short sources make the loop cheaper still, so where a decision can be made on a 5-second cut of a 15-second master, testing on the cut is the bigger saving of the two.

A draft is worth running even when you intend only one edit. It is the cheapest way to find out that an instruction pointed at the wrong object, and that mistake costs a full render to discover any other way.

Reproducible reruns

Every call renders fresh, so the same instruction gives a different result each time unless you pin seed. The field takes an integer from 0 to 2147483647, and leaving it out draws a random one.

{
  "seed": 1840572
}

Two runs of one instruction on two seeds show how much moves when nothing else changes:

The edit is the same edit and the texture is not the same texture. That matters for a catalogue, where a set of variants has to look like one shoot, and a shared seed across a run of colourways is what keeps them consistent with each other.

A pinned seed also carries a draft decision into the final render. Approve a draft on a seed, drop settings.draft, keep the seed, and the full-quality version starts from the same place.

Treat a seed as a strong hint rather than a guarantee. It makes a rerun far closer than an unseeded one, and it is not a promise of an identical file, so store the output you approved rather than relying on regenerating it later.

Tips

  1. Draft first when the instruction is new. The question a first run answers is usually "did it change the right thing", and draft answers that at half the rate.

  2. Commit at full quality for anything you ship. Draft softens exactly the texture a viewer looks at in a product or material shot.

  3. Judge material at full quality only. A fabric or finish comparison made in draft is a comparison of two approximations.

  4. Pin a seed across a variant set. Colourways generated on one seed hold together as a set, where unseeded ones drift apart.

  5. Carry the seed from draft to final. Approve in draft, drop the flag, keep the number.

  6. Test on a short cut. Billing follows output length, so a decision made on a 5-second excerpt costs a third of the same decision made on a 15-second master.