P-Video-Edit

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.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesPrompt upsampling
How settings.promptUpsampling rewrites your instruction before Pruna P-Video-Edit runs it, what it invents when a prompt is thin, and why a precise instruction barely notices it.
Introduction
The instruction you send is not always the instruction that runs. settings.promptUpsampling defaults to true, so unless you turn it off the model expands your text before acting on it, filling in whatever you left unsaid.
What it fills in is not always what you would have written. Below, one instruction, "Make the mug blue", run both ways against the same clip. Both turn the mug blue. Only one of them adds steam.
Make the mug blue.
Make the mug blue.
Nobody asked for a hot drink. The expanded prompt decided that a mug in warm morning light ought to be steaming, and the model rendered what the expansion described. This guide covers the flag, what it invents on a thin instruction, what it does to a precise one, and how to choose.
The flag
settings.promptUpsampling is a boolean that defaults to true, so you are opting out rather than in.
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 green ceramic mug on the desk to a matte cobalt blue, keeping its shape, its handle and the shadow it casts. Keep the laptop, the notebook, the potted plant, the desk, the daylight and the camera move unchanged.',
inputs: {
video: 'https://vm.runware.ai/video/os/a14d18/ws/2/vi/9d4b7e02-3a58-4c16-8e75-2f1c6d9a3b47.mp4'
},
settings: {
promptUpsampling: false
},
seed: 774213,
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 green ceramic mug on the desk to a matte cobalt blue, keeping its shape, its handle and the shadow it casts. Keep the laptop, the notebook, the potted plant, the desk, the daylight and the camera move unchanged.",
"inputs": {
"video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9d4b7e02-3a58-4c16-8e75-2f1c6d9a3b47.mp4"
},
"settings": {
"promptUpsampling": False
},
"seed": 774213,
"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": "a8d2f593-4c17-4e60-b921-5f3a7c8d1e04",
"model": "prunaai:p-video@edit",
"positivePrompt": "Change only the green ceramic mug on the desk to a matte cobalt blue, keeping its shape, its handle and the shadow it casts. Keep the laptop, the notebook, the potted plant, the desk, the daylight and the camera move unchanged.",
"inputs": {
"video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9d4b7e02-3a58-4c16-8e75-2f1c6d9a3b47.mp4"
},
"settings": {
"promptUpsampling": false
},
"seed": 774213,
"deliveryMethod": "async"
}
]'runware run prunaai:p-video@edit \
positivePrompt="Change only the green ceramic mug on the desk to a matte cobalt blue, keeping its shape, its handle and the shadow it casts. Keep the laptop, the notebook, the potted plant, the desk, the daylight and the camera move unchanged." \
inputs.video=https://vm.runware.ai/video/os/a14d18/ws/2/vi/9d4b7e02-3a58-4c16-8e75-2f1c6d9a3b47.mp4 \
settings.promptUpsampling=false \
seed=774213 \
deliveryMethod=async{
"taskType": "videoInference",
"taskUUID": "a8d2f593-4c17-4e60-b921-5f3a7c8d1e04",
"model": "prunaai:p-video@edit",
"positivePrompt": "Change only the green ceramic mug on the desk to a matte cobalt blue, keeping its shape, its handle and the shadow it casts. Keep the laptop, the notebook, the potted plant, the desk, the daylight and the camera move unchanged.",
"inputs": {
"video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9d4b7e02-3a58-4c16-8e75-2f1c6d9a3b47.mp4"
},
"settings": {
"promptUpsampling": false
},
"seed": 774213,
"deliveryMethod": "async"
}[
{
"taskType": "videoInference",
"taskUUID": "a8d2f593-4c17-4e60-b921-5f3a7c8d1e04",
"videoUUID": "1f6c3a84-7d29-4b05-9e13-8a2d5c7f0b91",
"videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/1f6c3a84-7d29-4b05-9e13-8a2d5c7f0b91.mp4"
}
]The expanded prompt is not returned in the response, so you cannot read what actually ran. That is the practical reason to care: with the flag on, a result you did not expect has a cause you cannot inspect.
What it invents on a thin instruction
"Make the mug blue" specifies one property of one object and leaves the rest of the frame open. Upsampling reads that as room to elaborate, and elaboration means adding, not just clarifying. The steam is the whole lesson: it is coherent, it is well rendered, and it is a change nobody requested.
That cuts both ways. When the instruction is genuinely sparse and the extra invention is welcome, the flag saves you the writing. When the instruction is sparse because the user typed it quickly and expects one thing to change, the flag quietly widens the edit.
Invented content is the failure mode to watch for, not degraded quality. The steam looks correct, holds across every frame, and would pass an automated check. The only thing wrong with it is that it was not asked for, which makes it the kind of error that reaches production.
What it does to a precise instruction
A scoped instruction already answers the questions upsampling exists to answer. The target is named, the change is named, and a preserve clause fences the rest, leaving very little for the expansion to add.
Change only the green ceramic mug on the desk to a matte cobalt blue, keeping its shape, its handle and the shadow it casts. Keep the laptop, the notebook, the potted plant, the desk, the daylight and the camera move unchanged.
Change only the green ceramic mug on the desk to a matte cobalt blue, keeping its shape, its handle and the shadow it casts. Keep the laptop, the notebook, the potted plant, the desk, the daylight and the camera move unchanged.
These two are near enough to identical that the flag stops mattering. No steam appears in either, and the laptop, the notebook and the plant come back the same in both. A well-scoped instruction does not need protecting from the upsampler, because it has already done the upsampler's job.
The useful conclusion is not that the flag is dangerous. It is that the flag's influence is inversely proportional to how much you wrote. A detailed instruction makes the setting nearly irrelevant, and a thin one hands it the casting vote.
Deciding which way to set it
The rule of thumb runs on who wrote the instruction, not on how precise it is. The split is not precise-versus-thin, since a precise instruction is barely affected either way. It is about what a thin instruction should do. If a user types "make the mug blue" and your product promises exactly that, turn the flag off and take the literal reading. If they type it expecting the model to make the shot nicer, leave it on.
Where your own code composes the prompt, turn it off and write the detail yourself. A template that emits a target, a change and a preserve clause is doing the same job with the advantage that you can read it, version it, and pair it with a pinned seed for the most repeatable configuration available, as covered in draft mode.
Tips
-
Know that it defaults on. Every call you have not configured is running a rewritten version of your prompt.
-
Watch for additions, not distortions. The tell is a well-rendered element that nobody requested, so compare against the source rather than judging the result on its own.
-
Turn it off when "only" means only. A short instruction plus the default is where unrequested content appears.
-
Do not rely on it to protect a scoped edit. A precise instruction comes back the same either way, so the flag is not the lever to reach for when an edit misses.
-
Turn it off for templated prompts. If your code already emits a target, a change and a preserve clause, the rewrite adds unpredictability rather than detail.
-
Do not expect to see the rewrite. The expanded prompt never comes back in the response, so keep your own prompt as the record of what you asked for.