Audio

A parallel timeline

Audio is a required root domain next to visual layers. A silent project still declares a sample rate and an empty track list.

{
  "audio": {
    "sampleRate": 48000,
    "tracks": [
      {
        "id": "music",
        "gainDb": -3,
        "pan": 0,
        "muted": false,
        "clips": [
          {
            "id": "music-clip",
            "assetId": "audio-001",
            "timing": { "start": 0, "duration": 30000 },
            "trim": { "start": 0, "duration": 30000 },
            "playbackRate": 1,
            "enabled": true,
            "fadeIn": { "duration": 250, "curve": "linear" },
            "fadeOut": { "duration": 500, "curve": "equal-power" }
          }
        ]
      }
    ]
  }
}

Time and mix rules

Clip timing is composition time; trim is source time. Playback rate is positive, pan is normalized to -1..1, and fade durations cannot exceed clip duration. An enabled false clip stays on the timeline while silencing its input.

Video audio

Embedded video audio stays on video.payload.audio so its visual trim and original audio identity move together.