Skip to content

Interchange capability matrix

What each interchange format can carry, per concept. The tables below are generated from the same JSON the C++ capability tables are generated from, so a row here is the behavior, not a description of it.

The world is closed. A concept a format does not list is refused on import and reported as a loss on export -- support is something a format declares, never something it gets by default.

A row changes away from none only through a decision made on the document model's own merits. Turning rows green to widen a format's reach is not a reason to add a model feature.

Concepts

Concept Observable in a document Meaning
unknown format-only A construct the reader could not classify. No format lists it, so it always refuses.
track.flat yes A track holding clips directly, with no children.
track.group format-only A track that contains other tracks (folder/group/nested scope).
track.video format-only A track whose content is picture rather than audio or notes.
clip.musical yes A clip anchored to musical time (canonical ticks).
clip.absolute yes A clip anchored to absolute time (samples at a rational rate).
clip.note yes Clip content that is a set of note events.
clip.media yes Clip content that references a media asset.
clip.gain yes Per-clip gain applied to the clip's content.
clip.fades yes Per-clip fade in and fade out durations.
clip.crossfade format-only An overlap between two adjacent clips authored as one transition item.
clip.warp format-only A time-warp map deforming clip content against timeline time.
clip.launch yes Non-arrangement clip playback (scenes, launcher grids).
gap.explicit format-only A gap between clips authored as a first-class item rather than absence.
tempo.single yes One tempo governing the whole document.
tempo.map yes Tempo changing over the document at more than one point.
meter.single yes One time signature governing the whole document.
meter.map yes Time signature changing over the document at more than one point.
marker yes A named point or range on the timeline.
timecode.origin yes The wall-clock timecode the document's zero position represents.
media.provenance format-only Where a media asset came from: source timecode, reel or tape name, original locator.
mixer.track-gain yes Static per-track gain.
mixer.track-pan yes Static per-track pan position.
mixer.sends format-only Track routing to busses and auxiliary sends.
automation.device-param yes An automation lane targeting a device parameter.
automation.track-gain yes An automation lane targeting a track's gain.
automation.track-pan yes An automation lane targeting a track's pan.
device.placement yes A device occupying a slot in a track's chain, by identity.
device.payload format-only A device's type and saved parameter state.
effect.timewarp format-only An effect that remaps time rather than processing content.
take.lane yes An alternate recording lane holding takes alongside the arrangement.
take.comp yes A composite assembled by selecting segments across takes.
track.freeze yes A sealed offline render standing in for a track's live output.
asset.sealed-hash yes Media identity derived from a content hash of the actual bytes.
asset.embedded-media yes Media bytes carried inside the document package.
asset.referenced-media yes Media referenced by locator, stored outside the document.
sequence.multiple yes More than one sequence in the document.
sequence.nested yes A clip whose content is another sequence.
content.registered yes Typed extension clip content serialized through the schema registry.
content.opaque yes Uninterpreted clip content carried in a validated envelope.
edit-rate.non-audio format-only Positions at a rate that does not convert exactly to the document's rate.
context.chord-scale yes A sequence-owned lane of chord and scale statements that other items read while compiling.
context.groove yes A sequence-owned groove: a swing setting and a repeating table of per-step timing and accent that other items read while compiling.
clip.note-modifier yes Per-note playback modifiers: probability, pass condition, and ratchet.

DAWproject

Format id dawproject. Writer registered: yes.

Import

Concept Level Detail
unknown none not declared
track.flat full
track.group none nested group tracks
track.video none not declared
clip.musical full
clip.absolute none seconds-timed lanes, clips, and notes
clip.note full
clip.media full
clip.gain none per-clip gain
clip.fades none per-clip fades
clip.crossfade none not declared
clip.warp none warped clip content
clip.launch none scenes and clip-launcher content
gap.explicit none not declared
tempo.single full
tempo.map none tempo changing after bar 1
meter.single full
meter.map none time signature changing after bar 1
marker none arrangement markers
timecode.origin none not declared
media.provenance none not declared
mixer.track-gain none channel volume
mixer.track-pan none channel pan
mixer.sends none not declared
automation.device-param none automation lanes
automation.track-gain none volume automation lanes
automation.track-pan none pan automation lanes
device.placement none device chains
device.payload none plugin state
effect.timewarp none not declared
take.lane none not declared
take.comp none not declared
track.freeze none not declared
asset.sealed-hash full
asset.embedded-media none not declared
asset.referenced-media full package-relative locator retained verbatim; identity sealed to the resolved bytes
sequence.multiple none not declared
sequence.nested none not declared
content.registered none not declared
content.opaque none not declared
edit-rate.non-audio none not declared
context.chord-scale none chord and scale context lanes
context.groove none groove templates and swing
clip.note-modifier none per-note probability, conditions, and ratchets

Export

Concept Level Becomes Loss class Detail
unknown drop dropped not declared
track.flat full
track.group drop dropped not declared
track.video drop dropped not declared
clip.musical full
clip.absolute degrade clip.musical approximated sample-anchored clips are re-expressed in beats against the tempo map; positions that are not exact land on the nearest tick
clip.note full
clip.media full
clip.gain drop dropped the writer does not emit a clip gain, so an authored clip gain is dropped and the clip exports at unity
clip.fades drop dropped the writer does not emit clip fades, so authored fade-in and fade-out shapes are dropped and the clip exports with hard edges
clip.crossfade drop dropped not declared
clip.warp drop dropped not declared
clip.launch drop dropped not declared
gap.explicit drop dropped not declared
tempo.single full
tempo.map drop dropped not declared
meter.single full
meter.map drop dropped not declared
marker drop dropped the writer does not emit markers or regions, so every named point and range on the timeline is dropped
timecode.origin drop dropped the writer does not emit a session timecode origin, so the exported document starts at zero and every timecode reference shifts
media.provenance drop dropped not declared
mixer.track-gain drop dropped the writer does not emit a channel volume, so an authored track gain is dropped and the track exports at unity
mixer.track-pan drop dropped the writer does not emit a channel pan, so an authored track pan is dropped and the track exports centred
mixer.sends drop dropped not declared
automation.device-param drop dropped device identity does not survive without a device payload, so its automation has no target
automation.track-gain drop dropped a volume automation lane has no export target while channel volume itself is dropped
automation.track-pan drop dropped a pan automation lane has no export target while channel pan itself is dropped
device.placement drop dropped devices are identity-only in the document; DAWproject requires a device type to place one
device.payload drop dropped not declared
effect.timewarp drop dropped not declared
take.lane degrade clip.media flattened the active comp is flattened into arrangement clips; alternate takes are dropped
take.comp degrade clip.media flattened comp segment boundaries become clip boundaries; the selection is no longer editable
track.freeze drop dropped DAWproject has no freeze concept; the authored track is exported and the sealed render is dropped
asset.sealed-hash full
asset.embedded-media drop dropped the writer references media by package-relative path and does not embed bytes, so an embedded asset is exported as a reference the receiving DAW must resolve
asset.referenced-media full
sequence.multiple degrade track.flat flattened only the root sequence is written; other sequences are dropped
sequence.nested drop dropped not declared
content.registered roundtrip-only
content.opaque roundtrip-only
edit-rate.non-audio drop dropped not declared
context.chord-scale drop dropped not declared
context.groove drop dropped not declared
clip.note-modifier drop dropped DAWproject notes carry no probability, pass condition, or ratchet; the notes are written and play unconditionally once

Adding a format

  1. Write core/interchange/capabilities/<format>.json declaring an enumerator, a display_name, a writer flag, and the import and export rows the format supports.
  2. Regenerate: capability_emit.py --emit concepts|tables|docs, or let the drift gate print the diff.
  3. Write the reader and writer in their own target, deriving every refusal from import_supports and every loss from the export rows.

Nothing in core/interchange changes.