Skip to content
CutConvert

Write Premiere Pro XML from Node, the browser or one API call

To write a Premiere Pro XML from Node, send an Edit JSON document to the Edit API with the target premiere, or pass it to writePremiereXml in the open package @cutconvert/edit once it's on npm. Both give the same FCP7 XML (xmeml), which Premiere imports with File > Import.

Premiere Pro 26.5.2 imported all nine test sequences, and its saved project matched every picture and sound edit.

Updated

3 exports a month without a key, 10 with a free one. API pricing

What you get for Premiere Pro

The premiere/ folder of the zip holds one .xml named after the document. In Premiere Pro, choose File > Import and pick it.

Once it's on npm, the open package writes the same file in Node 18 and later or in any browser with ES2022. It reads no files, makes no network calls and has no dependencies.

Premiere's XML is the Final Cut Pro 7 interchange format. Apple's reference for it is the Final Cut Pro 7 XML Interchange Format.

The code

With the Edit API

The same call as on the overview, with only premiere in targets.

request.json
{
  "edit": {
    "cutconvert": "edit/1",
    "name": "Edit 09 minimal",
    "timeline": { "fps": 25, "width": 1280, "height": 720 },
    "media": [
      { "id": "silent", "name": "silent-25.mp4", "duration": 30.0, "fps": 25, "width": 1280, "height": 720 }
    ],
    "video": [
      { "clips": [{ "media": "silent", "start": 0, "in": 2, "out": 12 }] }
    ]
  },
  "targets": ["premiere"]
}
Terminal
curl -sS https://cutconvert.com/api/edit/export \
  -H "Content-Type: application/json" \
  --data @request.json \
  -o edit.zip
edit.zip
premiere/
  Edit 09 minimal.xml
report.json

With the open package, writePremiereXml

writePremiereXml takes the document as JSON text or an object and returns the XML and its warnings. When the document isn't valid it throws, and the error lists every problem.

@cutconvert/edit isn't on npm yet. We'll publish it soon. Until then, npm install won't find it.

Terminal
npm install @cutconvert/edit
export.mjs
import { readFile, writeFile } from 'node:fs/promises';
import { writePremiereXml } from '@cutconvert/edit';

const edit = await readFile('episode-41.edit.json', 'utf8');
const { xml, warnings } = writePremiereXml(edit, { name: 'episode-41' });
await writeFile('episode-41.xml', xml);
for (const warning of warnings) console.warn(warning.code, warning.message);

The package's documentation covers validateEdit, editToSequences and the warnings.

What carries over to Premiere Pro

When a loss depends on the document, report.json also warns, with a code and a sentence. A caption's bold, outline or box, which Premiere's Text clips can't hold, comes back as xmeml-title-decoration.

Premiere Pro
CaptionsText generator clips on the top track
TitlesText generator clips
Stroke and boxNeither
BoldNot carried
Audio fadesCross Fade (+3dB) at the clip's edge
Sound under a cross dissolveCross Fade (+3dB)
Media with no pathOffline, by name
Picture and soundLinked clips; stereo sound is two mono clips
Sound at −96 dB or lowerLevel 0 (−∞ dB)
Track namesNot carried: tracks are numbered V1… and A1…
Start timecodeCarried

Compare all four editors

Checked in Premiere Pro 26.5.2

We opened the test documents' projects in the editor on October 29, 2026, on macOS, then read back what it kept from its own project file or export.

  • Every picture and sound start, end and in point matched, with speed changes on picture and sound, dissolves with sound crossfades, and fades.
  • Captions are Text generator clips with their text, size, colour and place. Premiere drops bold, outline and box.
  • Stereo sound comes in as two mono clips on two tracks.

Relinking media with no path

A document can name a file with no path. Each editor then opens the edit with that file's clips offline, under the file's name, until you link them. This is what Premiere Pro 26.5.2 shows.

On openingTo relink
Nothing: the XML imports with the clips offline.Link Media on the offline clips (not checked here).

Limits

  • Premiere's Text generators hold no bold, outline or box, so captions lose them. report.json warns with xmeml-title-decoration.
  • Premiere doesn't carry track names. It numbers its tracks V1 and A1.
  • We haven't checked relinking media with no path by Link Media in Premiere.
  • A call is at most 25 MB, media included, and the document on its own at most 8 MB. A document places up to 20,000 clips, captions and titles in all, and a video clip whose file has sound counts twice.
  • Version 1 of the format leaves out variable speed, nested timelines, transitions other than cross dissolve, effects, colour, multicam, still images, scale or opacity keyframes, marker colours, and trimming media on the server.

FAQ

How do I open the XML in Premiere Pro?

Choose File > Import and pick the .xml. In Premiere Pro 26.5.2 it imported with no dialogs as a sequence.

Can I write the XML without calling an API?

Yes, with the open package @cutconvert/edit once it's on npm. Its writePremiereXml runs in Node or a browser, and on 696 test documents it wrote the same XML as the Edit API, byte for byte. It's MIT licensed.

Are captions editable in Premiere?

Yes. Each caption is a Text generator clip on the top track, with its text, size, colour and place. Bold, outline and box aren't carried, because Premiere's Text generators hold none of them.

Why is stereo sound two clips?

Premiere brings stereo sound in from XML as two mono clips on two tracks, linked to the picture.

What happens to media with no path?

The XML imports with the clips offline, by name. Select the offline clips and use Link Media. We haven't tried that step on these projects yet.

Questions about the Edit API: [email protected]