final-cut-pro
Apple Final Cut Pro FCPXML format reference. Covers project structure, timeline creation, clip references, effects, and transitions. Use when generating FCP projects or understanding FCPXML structure.
What this skill does
plugin: video-editing
updated: 2026-01-20
# Apple Final Cut Pro XML (FCPXML)
Production-ready patterns for generating FCPXML projects compatible with Final Cut Pro 10.4+.
## FCPXML Version Compatibility
| FCP Version | FCPXML Version | Key Features |
|-------------|----------------|--------------|
| 10.4+ | 1.8+ | Compound clips, roles |
| 10.5+ | 1.9 | Enhanced color |
| 10.6+ | 1.10 | HDR support |
| 10.7+ | 1.11 | Object tracking |
**Recommendation:** Use version 1.9 for broad compatibility.
## Basic Project Structure
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fcpxml>
<fcpxml version="1.9">
<resources>
<!-- Media references -->
<format id="r1" name="FFVideoFormat1080p24"
frameDuration="1/24s" width="1920" height="1080"/>
<asset id="a1" name="clip1" src="file://{ABSOLUTE_PATH}/clip1.mov"
start="0s" duration="120s" hasVideo="1" hasAudio="1">
<media-rep kind="original-media" src="file://{ABSOLUTE_PATH}/clip1.mov"/>
</asset>
</resources>
<library location="file://{USER_MOVIES}/MyLibrary.fcpbundle/">
<event name="Event 2024-01-15">
<project name="My Project">
<sequence format="r1" duration="300s">
<spine>
<!-- Timeline clips go here -->
</spine>
</sequence>
</project>
</event>
</library>
</fcpxml>
```
## Key Elements Reference
### Format Definition
Define the timeline format (resolution, frame rate):
```xml
<!-- 1080p @ 24fps -->
<format id="r1" name="FFVideoFormat1080p24"
frameDuration="1/24s" width="1920" height="1080"/>
<!-- 4K @ 30fps -->
<format id="r2" name="FFVideoFormat4KUHD30p"
frameDuration="1001/30000s" width="3840" height="2160"/>
<!-- 1080p @ 29.97fps (NTSC) -->
<format id="r3" name="FFVideoFormat1080p2997"
frameDuration="1001/30000s" width="1920" height="1080"/>
```
### Asset Definition
Reference media files:
```xml
<asset id="a1" name="Interview_001"
src="file://{ABSOLUTE_PATH}/interview.mov"
start="0s" duration="600s"
hasVideo="1" hasAudio="1"
format="r1">
<media-rep kind="original-media"
src="file://{ABSOLUTE_PATH}/interview.mov"/>
</asset>
```
### Clip Placement on Timeline
```xml
<spine>
<!-- First clip: starts at 0, uses full duration -->
<asset-clip name="Interview Opening"
ref="a1"
offset="0s"
start="0s"
duration="30s"/>
<!-- Second clip: starts after first (offset=30s) -->
<asset-clip name="B-Roll"
ref="a2"
offset="30s"
start="10s"
duration="15s"/>
<!-- Third clip: starts at 45s -->
<asset-clip name="Interview Conclusion"
ref="a1"
offset="45s"
start="120s"
duration="20s"/>
</spine>
```
**Key timing attributes:**
- `offset` - Position on timeline (where clip starts in sequence)
- `start` - In-point within source media
- `duration` - How long the clip plays
### Gap (Empty Space)
```xml
<spine>
<asset-clip ref="a1" offset="0s" duration="30s"/>
<!-- 5 second gap -->
<gap name="Gap" offset="30s" duration="5s"/>
<asset-clip ref="a2" offset="35s" duration="30s"/>
</spine>
```
### Transitions
```xml
<spine>
<asset-clip ref="a1" offset="0s" duration="30s"/>
<!-- Cross dissolve between clips -->
<transition name="Cross Dissolve"
offset="29s"
duration="2s">
<filter-video ref="r10" name="Cross Dissolve"/>
</transition>
<asset-clip ref="a2" offset="29s" duration="30s"/>
</spine>
```
### Video Layers (Connected Clips)
```xml
<spine>
<!-- Main video (layer 0) -->
<asset-clip ref="a1" offset="0s" duration="60s">
<!-- Picture-in-picture on layer 1 -->
<asset-clip ref="a2" offset="10s" duration="15s" lane="1">
<adjust-transform position="200 150" scale="0.3 0.3"/>
</asset-clip>
</asset-clip>
</spine>
```
### Titles and Text
```xml
<title name="Chapter Title"
offset="0s"
duration="5s"
ref="r5">
<text>
<text-style ref="ts1">Welcome to the Video</text-style>
</text>
</title>
```
### Markers
```xml
<asset-clip ref="a1" offset="0s" duration="120s">
<!-- To-do marker -->
<marker start="15s" duration="1/24s" value="TODO: Add B-roll here"/>
<!-- Chapter marker -->
<chapter-marker start="30s" duration="1/24s" value="Chapter 2: Setup"/>
<!-- Standard marker -->
<marker start="45s" duration="1/24s" value="Key moment"/>
</asset-clip>
```
## Complete Project Template
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fcpxml>
<fcpxml version="1.9">
<resources>
<!-- Timeline format -->
<format id="r1" name="FFVideoFormat1080p24"
frameDuration="1/24s" width="1920" height="1080"/>
<!-- Title effect -->
<effect id="r10" name="Basic Title" uid=".../Titles.localized/Bumper:Opener.localized/Basic Title.localized/Basic Title.moti"/>
<!-- Media assets -->
<asset id="a1" name="clip_001"
src="file://{ABSOLUTE_PATH}/clip1.mov" start="0s" duration="120s"
hasVideo="1" hasAudio="1" format="r1">
<media-rep kind="original-media" src="file://{ABSOLUTE_PATH}/clip1.mov"/>
</asset>
<asset id="a2" name="clip_002"
src="file://{ABSOLUTE_PATH}/clip2.mov" start="0s" duration="90s"
hasVideo="1" hasAudio="1" format="r1">
<media-rep kind="original-media" src="file://{ABSOLUTE_PATH}/clip2.mov"/>
</asset>
</resources>
<library location="file://{USER_MOVIES}/MyLibrary.fcpbundle/">
<event name="Import Event">
<project name="Assembled Project" uid="generated-uuid-here">
<sequence format="r1" duration="180s" tcStart="0s" tcFormat="NDF">
<spine>
<!-- Opening title -->
<gap name="Title Gap" offset="0s" duration="5s">
<title ref="r10" offset="0s" duration="5s" lane="1">
<text>
<text-style ref="ts1" font="Helvetica" fontSize="72" fontColor="1 1 1 1">
Project Title
</text-style>
</text>
</title>
</gap>
<!-- First clip -->
<asset-clip name="Opening" ref="a1"
offset="5s" start="10s" duration="60s">
<!-- Fade in -->
<adjust-volume>
<keyframe time="0s" value="0dB"/>
</adjust-volume>
</asset-clip>
<!-- Cross dissolve -->
<transition name="Cross Dissolve"
offset="64s" duration="2s"/>
<!-- Second clip -->
<asset-clip name="Middle Section" ref="a2"
offset="64s" start="0s" duration="90s"/>
</spine>
</sequence>
</project>
</event>
</library>
</fcpxml>
```
## Timing Calculations
### Frame Duration Reference
| Frame Rate | frameDuration |
|------------|---------------|
| 24 fps | 1/24s |
| 25 fps | 1/25s |
| 30 fps | 1/30s |
| 29.97 fps | 1001/30000s |
| 23.976 fps | 1001/24000s |
| 60 fps | 1/60s |
### Time Format
FCPXML uses rational time notation:
- Seconds: `30s` (30 seconds)
- Frames: `24/24s` (24 frames at 24fps = 1 second)
- Fractional: `1001/30000s` (for NTSC timing)
`Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.