OptionalautoAuto-save interval in milliseconds
OptionalcanWhether THIS client is allowed to persist the composition file (i.e. it
owns the file server-side). When false, the editor is a pure follower:
no auto-save, no manual save, no save-on-unmount, and the header save
affordance is hidden. Local edits still render optimistically but are
expected to be proxied elsewhere (e.g. to the owner) and reconciled via
the external-reload path — which, for a non-persister, is never blocked by
local "unsaved" state. Defaults to true (the standalone/owner case).
OptionalcolorsCustom colors
OptionalenableEnable audio passthrough
OptionalenableEnable auto-save
OptionalenableEnable drag-and-drop reorder
OptionalenableEnable timeline markers/comments on clip players
OptionalenableEnable recording feature
OptionalenableEnable regions on clip players
OptionalfileExisting file ID for updates
OptionalfileFile storage location
OptionaliconsCustom icons
OptionalinitialInitial composition to load
OptionallabelsCustom labels
OptionalmaxMaximum number of clips allowed
OptionalmaxMaximum container height
OptionalmaxMaximum recording duration in seconds
OptionalonCalled after auto-save completes
OptionalonCalled when composition changes
OptionalonCalled when a clip is added
OptionalonCalled when the LOCAL user edits a clip's annotations (adds/edits/removes a
comment/marker or region). Not fired for edits applied via
ClipCompositionRef.applyClipMutation (those are already remote), so
a host can broadcast local mutations without an echo loop. Use for
collaborative sync — proxy the mutation to the file owner, who replays it
via applyClipMutation and persists.
OptionalonCalled when a clip is removed
OptionalonClose callback — renders a close button in the title bar
OptionalonGeneral error callback
OptionalonOptional handler for an "Import media" toolbar button rendered next to
the recorder toggle — lets users add EXISTING audio/video files as
clips instead of recording new ones. The component doesn't own a file
browser: the consumer opens its own picker here and adds each chosen
file via ClipCompositionRef.addClip (which drives onClipAdded
/ onChange exactly like a fresh recording). Only shown while the
composition is editable and under maxClips. Omit to hide the button.
OptionalonOptional handler for an "Open existing" affordance rendered in the title bar (left of the title field). Useful when the editor was opened on a fresh blank file and the user wants a way back to a file picker. Omit to hide the button.
OptionalonCalled when a save error occurs
OptionalonCalled when the composition title changes
OptionalownerLegacy: a single name to render under every clip. Kept only as a
fallback when resolveClipOwnerName isn't provided AND the
clip lacks a createdByName. Prefer resolveClipOwnerName —
clips can be recorded by different participants (e.g. a student
recording into a teacher's composition), so a single file-owner
name is wrong for those clips.
OptionalreadRead-only mode
OptionalresolvePer-clip owner-name resolver. Called for each clip to produce the
name shown next to its duration (e.g. "0:11 — Bilbo"). Receives
the full ClipItem so the consumer can look the owner up
however it likes — typically by joining clip.fileId against a
userFiles slice and resolving the file's userId to a display
name (covers the case where a clip's recorder differs from the
composition's owner). Return undefined to fall back through
clip.createdByName → ownerName.
OptionalshowShow header with title
OptionalshowShow toolbar
OptionalstylesCustom styles
OptionalsxMUI sx styling prop
OptionaltitleTitle for the composition
Props for the ClipComposition main component.