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

Removing objects from video

How to remove an object or a person from a clip with Pruna P-Video-Edit, naming the target and the surface that continues behind it so the fill holds for every frame.

Introduction

Removing something from a video is harder than removing it from a photo, and the reason is arithmetic. A still needs one patch of invented background. A clip needs a new patch for every frame, each one consistent with the last and tracking correctly as the shot goes on.

P-Video-Edit handles a removal as a scoped edit. You name the object and the surface that belongs behind it, and the model reconstructs the background across the whole clip while the rest of the frame keeps its own pixels.

Source clip, as the shoot came back
Two objects named in one instruction

Remove only the cardboard moving box on the rug and the black laundry basket beside the armchair, and continue the oak floor and the rug pattern where they stood. Keep the sofa, the coffee table, the armchair, the curtains, the daylight and the camera move unchanged.

The rug pattern runs unbroken where the box sat, and it stays unbroken as the camera pushes past it, which is the part a still image never has to get right. This guide covers the request, naming the target and its fill, removing people, clearing burned-in text, and the footage that makes a removal hard.

The request

A removal is an ordinary edit. There is no separate task type and no mask input, so the instruction carries the whole job.

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: 'Remove only the cardboard moving box on the rug and the black laundry basket beside the armchair, and continue the oak floor and the rug pattern where they stood. Keep the sofa, the coffee table, the armchair, the curtains, the daylight and the camera move unchanged.',
  inputs: {
    video: 'https://vm.runware.ai/video/os/a14d18/ws/2/vi/7b2e9c14-5d83-4a06-9e2f-1c4d7a8b3059.mp4'
  },
  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": "Remove only the cardboard moving box on the rug and the black laundry basket beside the armchair, and continue the oak floor and the rug pattern where they stood. Keep the sofa, the coffee table, the armchair, the curtains, the daylight and the camera move unchanged.",
            "inputs": {
                "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/7b2e9c14-5d83-4a06-9e2f-1c4d7a8b3059.mp4"
            },
            "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": "d3f8b2c7-6a41-4e59-b087-2c9d5e1a4f63",
      "model": "prunaai:p-video@edit",
      "positivePrompt": "Remove only the cardboard moving box on the rug and the black laundry basket beside the armchair, and continue the oak floor and the rug pattern where they stood. Keep the sofa, the coffee table, the armchair, the curtains, the daylight and the camera move unchanged.",
      "inputs": {
        "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/7b2e9c14-5d83-4a06-9e2f-1c4d7a8b3059.mp4"
      },
      "deliveryMethod": "async"
    }
  ]'
runware run prunaai:p-video@edit \
  positivePrompt="Remove only the cardboard moving box on the rug and the black laundry basket beside the armchair, and continue the oak floor and the rug pattern where they stood. Keep the sofa, the coffee table, the armchair, the curtains, the daylight and the camera move unchanged." \
  inputs.video=https://vm.runware.ai/video/os/a14d18/ws/2/vi/7b2e9c14-5d83-4a06-9e2f-1c4d7a8b3059.mp4 \
  deliveryMethod=async
{
  "taskType": "videoInference",
  "taskUUID": "d3f8b2c7-6a41-4e59-b087-2c9d5e1a4f63",
  "model": "prunaai:p-video@edit",
  "positivePrompt": "Remove only the cardboard moving box on the rug and the black laundry basket beside the armchair, and continue the oak floor and the rug pattern where they stood. Keep the sofa, the coffee table, the armchair, the curtains, the daylight and the camera move unchanged.",
  "inputs": {
    "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/7b2e9c14-5d83-4a06-9e2f-1c4d7a8b3059.mp4"
  },
  "deliveryMethod": "async"
}
Response
[
  {
    "taskType": "videoInference",
    "taskUUID": "d3f8b2c7-6a41-4e59-b087-2c9d5e1a4f63",
    "videoUUID": "9a4c7e21-3b58-4d16-8f70-5e2a9c1d4b83",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9a4c7e21-3b58-4d16-8f70-5e2a9c1d4b83.mp4"
  }
]

Naming the target and its fill

A removal instruction has two jobs. It has to identify the object precisely enough to find it, and it has to say what belongs where the object was. Skipping the second half leaves the model guessing at the direction of floorboards or the run of a pattern, and a wrong guess in a video wobbles from frame to frame in a way a still would hide.

"Clean up" is a judgment the model will happily make, and its idea of clutter includes the cushions and the styling props that were put there on purpose. The anchored instruction removes two things because it named those two things and nothing else, then pinned the rest with a preserve clause.

Two anchors identify a target. Use a property that separates it from its neighbours ("the black laundry basket", not "the basket") and a position in the frame or against a fixed object ("beside the armchair", "on the rug in front of the sofa"). When a clip contains two similar objects the property does the work, and when it contains one of each the position is enough.

A small target on a moving product is the same job at a smaller scale, and it is the everyday one for listing footage.

Source, a price tag still attached
Tag and string removed

Remove only the white cardboard price tag and its string from the laces, and continue the laces and the mesh upper behind it. Keep the shoe, the display stand, its rotation speed, the background and the studio lighting unchanged.

The tag is small, but it swings on its own while the shoe turns, so it covers a different part of the laces in every frame. That works in your favour, and it is worth being precise about why, because two separate things decide how hard a removal is.

The first is whether the footage ever shows what is behind the object. Anything that moves, the target or the camera, keeps exposing its own background, and the model rebuilds from real pixels. The second is how much has to be invented and held steady. A swinging tag uncovers a few centimetres of lace, where a person crossing a room uncovers a wall.

Movement helps you on the first and costs you on the second, and the size of the object decides which one dominates. A small moving target is the easiest case in this guide, and a large moving one is the hardest.

Removing people

A person is the most requested removal and the case where those two variables pull hardest against each other. A body in motion exposes its own background, which helps, and it exposes a lot of it, which does not. The instruction shape does not change. Name the person, name what continues behind them, and hold the rest.

The two removals come from one source and are not equally difficult. The parked scooter never moves, so the background behind it is a fixed patch that only has to survive the camera's own drift. The walker crosses the frame, so the wall and the pavement behind him have to be invented continuously and match what the previous frame established. Watch the wall behind him rather than the space he vacated, since that is where a failure shows.

Removing burned-in text

On-screen copy is an object like any other, and it is the easiest kind to remove, because a static caption sits flat over the picture and never moves, so the patch behind it is identical in every frame.

Source clip with burned-in captions
Both strings named, both removed cleanly

Remove only the "SUMMER SALE" caption and the "40% OFF TODAY" line from the upper part of the frame, and reconstruct the wall and the room behind them naturally. Keep the woman, her face, her hands, the bottle, the sofa, the room, the daylight and the camera unchanged.

The naming rule tightens here: quote the exact characters, and quote any line you want kept. Asking for a category instead, along the lines of every caption or all the overlays, is the same mistake as asking to clean up the room, and it goes the same way.

Removing copy is reliable. Rewriting it is not. Asking the model to render replacement wording gives you the right font in the right place with the spelling wrong, and it does not improve with rephrasing. Strip the text here and composite the new wording in your own pipeline, where the fonts and the spelling are yours.

When the background is never revealed

The tag and the walker sat at either end of the second variable. This section removes the first one entirely. Nothing in the clip below moves at all, not the box and not the camera, so the footage never shows what is behind the object.

Take that away and the job changes. The clip below is locked off and nothing in it moves, so the floor under the box is never seen in any frame. The model has to invent the grid.

Locked-off shot, nothing moves
The grout lines where the box was

Remove only the cardboard box sitting on the rug, and continue the rug's repeating geometric pattern underneath it so the pattern runs unbroken across the whole rug. Keep the rug, its colours, the floor, the daylight and the framing unchanged.

Straight lines are the strict test, because a grout line either continues true or it does not, and there is no ambiguity in between. Follow the grout lines through the patch where the box was, rather than judging the floor as a whole.

This is the variable worth controlling at the shoot. A slow drift costs nothing and reveals the background you will later want removed, which is why a locked-off tripod is the hardest footage to clean up afterwards.

Where a removal is genuinely too large, the honest alternative is to reframe. Changing what surrounds the subject is a different instruction with a much higher hit rate than deleting a dominant object, and it is covered in editing video.

Tips

  1. Name the fill, not just the target. Say what continues behind the object. Patterned rugs, floorboards and brickwork rebuild far more cleanly when the instruction says what belongs there.

  2. Anchor the target twice. A distinguishing property plus a position in the frame is what separates the object you mean from the one beside it.

  3. Close with a preserve clause. List the furniture, the subject, the light and the camera. A removal instruction that stops after the removal invites the model to tidy things you wanted kept.

  4. Prefer moving cameras. A shot with parallax reveals real background behind the object and gives the reconstruction something to copy.

  5. Check the vacated background, not the gap. Failures show up as the fill shifting between frames, so watch the surface behind where the object was across the whole clip.

  6. Batch removals in one instruction. Naming two objects in a single call costs one render, where two passes cost two, and billing runs per second of output either way.