---
title: Use DaVinci Resolve with invideo
description: Send an invideo timeline to DaVinci Resolve as a project file with its media, and bring a Resolve timeline back into invideo as an OTIO file.
---
DaVinci Resolve is Blackmagic Design's desktop editor, strong at color grading on its Color page, Fairlight audio and Fusion 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` `davinci` makes a project file for DaVinci Resolve. `import_timeline` takes a Resolve .otio or .xml back onto a branch.

## When to use both

Use both when part of your team works in DaVinci Resolve and part works in invideo. Common cases:

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

## Hand-off: from DaVinci Resolve into invideo

In Resolve, select the timeline in the media pool. Click **File**, then **Export**, then **Timeline**, and choose the OpenTimelineIO (.otio) type. An FCP 7 XML from the same menu also imports. Then click **File**, then **Media Management**, and copy the timeline's clips into one folder. Zip that folder stored, with no compression:

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

`./resolve-media` is the folder Media Management 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 .otio 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 file 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 Resolve, 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 DaVinci Resolve

Your agent runs `export` with `format` `davinci` on the branch you approved. The export card gives a project file and a zip of the media. In Resolve, click **File**, then **Import**, then **Timeline**, and pick the project file. Point Resolve at the unzipped media when it asks. [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 Resolve timeline 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 .otio 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 timeline in Resolve.
</Step>
</Steps>

The check, then the import, over MCP:

```json
{
  "url": "<branch-url>",
  "as": "<name>",
  "dry_run": true,
  "project_file_name": "timeline.otio",
  "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": "resolve-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 resolve-in --token <state_token>
invideo edit import <branch-url> timeline.otio media.zip \
  --idempotency-key "resolve-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 DaVinci Resolve

Stay in Resolve for a node-based grade on its Color page, Fusion compositing, 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 .drp project or a .drt file does not import. Export the timeline as .otio from Resolve 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. |
| "media_drive_link takes a link to a Google Drive folder" | Pass a Drive folder link that anyone with the link can read, or upload a zip instead. |
| "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 DaVinci Resolve vs invideo](/compare/davinci-resolve)
- [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 Premiere Pro with invideo](/integrations/premiere)