OTIO and XML Handoff to NLEs — effect skill for transitions

For AI agents: find the right skill in one call — curl -s "https://skills.varg.ai/api/search?q=<what the person wants>" returns the matching how-to page and the best skills with install commands, as markdown (Russian works too). Full index: https://skills.varg.ai/llms.txt. Every page has a markdown twin: add .md to its path. Before generating anything, show the person the options on the how-to page.

Write the edit (clips, cuts, dissolves) as OpenTimelineIO and convert to XML so an editor can finish it in an NLE.

What it does

An editable timeline in Resolve, Premiere or Final Cut with real cuts and dissolves instead of a flat render.

When: When a human editor will refine the agent's rough cut; agency and post-production handoffs.

Watch out: Assuming effects survive: only basic cuts and dissolves translate; designed transitions (whip, glitch, shader) do not.

Timing: Dissolves: in_offset/out_offset need handles in the source on both sides

Also called: OpenTimelineIO, FCPXML, FCP7 XML, Premiere handoff, Resolve import, EDL

In Python

Python with opentimelineio 0.18 (tested). Transitions sit between clips and do not change the track length; offsets need media beyond the cut:

import opentimelineio as otio
RATE = 30
rt = lambda s: otio.opentime.RationalTime(round(s * RATE), RATE)
def clip(path, src_in, dur, media_dur):
    return otio.schema.Clip(name=path,
        media_reference=otio.schema.ExternalReference(target_url=path,
            available_range=otio.opentime.TimeRange(rt(0), rt(media_dur))),
        source_range=otio.opentime.TimeRange(rt(src_in), rt(dur)))
tl = otio.schema.Timeline(name='edit')
v = otio.schema.Track(name='V1', kind=otio.schema.TrackKind.Video); tl.tracks.append(v)
v.append(clip('a.mp4', 0, 5, 10))
v.append(otio.schema.Transition(transition_type=otio.schema.TransitionTypes.SMPTE_Dissolve,
                                in_offset=rt(0.25), out_offset=rt(0.25)))
v.append(clip('b.mp4', 1, 4, 10))
otio.adapters.write_to_file(tl, 'edit.otio')                          # Resolve 18.5+, Premiere 25.6+
otio.adapters.write_to_file(tl, 'edit.xml', adapter_name='fcp_xml')   # pip install otio-fcp-adapter

In the test the FCP7 XML kept the dissolve (<transitionitem> with Cross Dissolve), while otio-fcpx-xml-adapter (fcpx_xml) wrote the clips but dropped the transition. The FCP XML adapter also needs available_range on every media reference. CLI: otioconvert -i edit.otio -o edit.xml -O fcp_xml. Remotion projects can use the remotion-opentimeline agent skill (Remotion transitions are not exported as OTIO transitions).

Where this comes from

Use when

Not for

Install

Example output

https://s3.varg.ai/how-to/previews/bba707dad9b3/take-otio-fcpxml-handoff.mp4 — dissolve between two shots, with the timeline strip of the edit. Footage: Tears of Steel (2012), (CC) Blender Foundation | mango.blender.org, CC BY 3.0; Coffee Run (2020), Blender Studio | studio.blender.org, CC BY 4.0. (credit: Rendered by varg · Tears of Steel (2012) + Coffee Run (2020))

More transitions skills