---
title: Use Premiere Pro with invideo
description: Send an invideo timeline to Premiere Pro as a project file with its media, and bring a Premiere Pro sequence back into invideo as a timeline.
---
Premiere Pro is Adobe's desktop editor, strong at long-form cutting, Lumetri Color and the round trip to After Effects. invideo has the same timeline tools in the cloud, plus generation and agents that edit next to you, and the round trip below is for teams who work in both.

The project moves both ways as an editable timeline. `export` with `format` `premiere` makes a project file for Premiere Pro. `import_timeline` takes a Premiere Pro XML back onto a branch.

## When to use both

Use both when part of your team works in Premiere Pro and part works in invideo. Common cases:

- **Agent first, editor last.** Your agent builds the cut in invideo. An editor finishes it in Premiere Pro.
- **Editor first, agent next.** An editor cuts in Premiere Pro. Your agent adds captions, music, generated shots or more versions in invideo.
- **Back and forth.** An editor tweaks the agent's cut in Premiere Pro, and the agent brings the tweak back onto a branch.

## Hand-off: from Premiere Pro into invideo

In Premiere Pro, select the sequence. Click **File**, then **Export**, then **Final Cut Pro XML**. Premiere Pro saves an .xml file. Then click **File**, then **Project Manager**, and collect the files the sequence uses into one folder. Zip that folder stored, with no compression:

```bash
zip -0 -r media.zip ./collected-media
```

`./collected-media` is the folder Project Manager made. media.zip is the name you give the zip.

Then your agent brings the project in:

- **Check first.** `import_timeline` with `dry_run: true`, `project_file_name` and `media_file_name`. It checks the names and the timeline, and starts nothing.
- **Upload.** `start_upload` for the .xml and for the zip, a PUT of each file's bytes to its `upload_url`.
- **Import.** `import_timeline` on a branch URL, with `project_upload_id`, `media_upload_id` and an `idempotency_key`. For media in a Google Drive folder that anyone with the link can read, pass `media_drive_link` instead of the zip.

Every sequence in the .xml becomes a timeline. The branch's old state is kept as a checkpoint first. The media arrives in the background, so the agent reads the URL for its status. A file the project names that is not in the zip fails alone, and its clips keep their timing.

A rendered file works too. For an MP4 out of Premiere Pro, the agent uses `add_media` with `media_url`, or `start_upload` and then `add_media` with the `upload_id`. In a terminal, `invideo asset upload <project-url> <file>`.

## Hand-off: from invideo to Premiere Pro

Your agent runs `export` with `format` `premiere` on the branch you approved. The export card gives a project file and a zip of the media. In Premiere Pro, click **File**, then **Import**, and pick the project file. The sequence opens with its clips. [Export to Premiere Pro, DaVinci Resolve or Final Cut Pro](/how-to/export-to-premiere-resolve-final-cut) lists what to check after it opens.

## Steps

Edits and exports are free. Generation and transcripts cost credits. Paid stock costs a small credit charge, or one of your workspace's iStock licenses. Your agent runs a dry run first and tells you the price before it spends anything.

These steps bring a Premiere Pro sequence into invideo.

<Steps>
<Step title="Make a branch for the import">
The agent creates a branch with `timeline_history` and `action: "create_branch"`. Expected result: a `branch_url`. The import never goes onto main.
</Step>
<Step title="Check the file names">
The agent calls `import_timeline` on the branch URL with `dry_run: true`, `project_file_name` and `media_file_name`. Expected result: `status` `checked`, and a `next` that says to upload.
</Step>
<Step title="Upload the two files">
The agent calls `start_upload` for the .xml and for the zip, and PUTs each file's bytes to its `upload_url`. Expected result: two `upload_id` values.
</Step>
<Step title="Import onto the branch">
The agent calls `import_timeline` with `project_upload_id`, `media_upload_id` and an `idempotency_key`. Expected result: one timeline per sequence on the branch, and a checkpoint of the old state.
</Step>
<Step title="Check the import">
The agent reads the branch URL until the media has landed, then runs `check_timeline` and `capture` at a few cuts. Expected result: frames that match the sequence in Premiere Pro.
</Step>
</Steps>

The check, then the import, over MCP:

```json
{
  "url": "<branch-url>",
  "as": "<name>",
  "dry_run": true,
  "project_file_name": "cut.xml",
  "media_file_name": "media.zip"
}
```

```json
{
  "url": "<branch-url>",
  "as": "<name>",
  "project_upload_id": "<project-upload-id>",
  "media_upload_id": "<media-upload-id>",
  "idempotency_key": "premiere-import-v1"
}
```

`<branch-url>` is the `branch_url` from `timeline_history`. `<name>` is the name you chose with `register`. `<project-upload-id>` and `<media-upload-id>` are the `upload_id` values `start_upload` returns.

The same import from a terminal:

```bash
invideo agent register <project-url> --name <name>
export INVIDEO_AS=<name>
invideo edit show <edit-url>
invideo branch new <edit-url> --name premiere-in --token <state_token>
invideo edit import <branch-url> cut.xml media.zip \
  --idempotency-key "premiere-import-v1"
invideo edit check <branch-url>
```

`<project-url>` comes from `list_projects` or `invideo project new`. `<edit-url>` is the timeline's URL. `<state_token>` comes from `invideo edit show`. `<branch-url>` is the `branch_url` that `invideo branch new` returns. `invideo edit import` uploads both files itself and takes no `--dry-run`.

## When to stay in Premiere Pro

Stay in Premiere Pro when the finish needs After Effects compositions, or a master above 1080p straight from the timeline. invideo's `export` makes MP4 at 1080p or lower, and 4K and HDR go through a model after the export.

Move to invideo when you want an agent to do the edit, generation in the same project, or a person to review each change on a branch.

## If something goes wrong

| Symptom | Fix |
| --- | --- |
| `code` `import_format`: "it takes .xml, .otio" | A .prproj file does not import. Export **Final Cut Pro XML** from Premiere Pro and upload that. |
| `code` `several_timelines` | The URL reaches more than one timeline. Call again with one of the timeline URLs the message lists, on your branch. |
| "media_upload_id takes a .zip of the project's media" | Zip the media folder with `zip -0 -r`, then upload the .zip. |
| "Pass the project's media" | Pass `media_upload_id` or `media_drive_link` with the project. |
| "No upload with that id for this user" | Call `start_upload` again, PUT the bytes, and pass the new `upload_id`. |
| A clip has no media after the import | That file was not in the zip. Its clips keep their timing. Add the file to the zip and import again with a new `idempotency_key`. |
| Avoid: import onto the main timeline | Instead: create a branch first. The import replaces the branch it lands on. To undo, restore the checkpoint with `timeline_history` and `action: "restore"`. |
| Avoid: resend after a timeout | Instead: retry with the same `idempotency_key`. It finds the first import. |
| The export card says `completed` but lists only the project file | The media zip is still packing. Read the card again until the zip is listed. |

## Related

- [When to use Premiere Pro vs invideo](/compare/premiere-pro)
- [Export to Premiere Pro, DaVinci Resolve or Final Cut Pro](/how-to/export-to-premiere-resolve-final-cut)
- [Let a person tweak the cut your agent made in Premiere Pro or DaVinci Resolve](/how-to/creators/let-a-human-tweak-the-cut)
- [Deliver in 4K or HDR from an invideo cut](/how-to/film/4k-and-hdr-delivery)
- [Use DaVinci Resolve with invideo](/integrations/davinci-resolve)