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.
{
"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"]
}curl -sS https://cutconvert.com/api/edit/export \
-H "Content-Type: application/json" \
--data @request.json \
-o edit.zippremiere/
Edit 09 minimal.xml
report.jsonWith 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.
npm install @cutconvert/editimport { 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 | |
|---|---|
| Captions | Text generator clips on the top track |
| Titles | Text generator clips |
| Stroke and box | Neither |
| Bold | Not carried |
| Audio fades | Cross Fade (+3dB) at the clip's edge |
| Sound under a cross dissolve | Cross Fade (+3dB) |
Media with no path | Offline, by name |
| Picture and sound | Linked clips; stereo sound is two mono clips |
| Sound at −96 dB or lower | Level 0 (−∞ dB) |
| Track names | Not carried: tracks are numbered V1… and A1… |
| Start timecode | Carried |
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 opening | To 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.
More for developers
- Edit API overviewThe call, the four editors, the free tier and pricing.
- Generate a CapCut draft from codeCaptions become CapCut captions on a caption track, each in its own look.
- Create a DaVinci Resolve project from codeCaptions are Text+ clips with their outline and box, and track names are kept.
- Generate FCPXML for Final Cut Pro programmaticallyCaptions are Basic Titles with their outline, and audio fades are the clip's own fade handles.
- Edit JSON formatEvery field and rule of the document you send.
- API referenceThe call, the zip, report.json, errors and pricing.
Questions about the Edit API: [email protected]