Skip to content

Support audio and image footage#95

Closed
barefootford wants to merge 1 commit into
mainfrom
feat/audio-image-media-type
Closed

Support audio and image footage#95
barefootford wants to merge 1 commit into
mainfrom
feat/audio-image-media-type

Conversation

@barefootford

@barefootford barefootford commented May 29, 2026

Copy link
Copy Markdown
Owner

Adds audio (music, voiceover) and still images as first-class footage alongside video — import them into a library, place them on the single timeline track, and export to Final Cut, Premiere, and Resolve.

A per-clip media_type (video | audio | image) drives it: the library infers it at import, and the exporter requires it to emit the right timeline element per kind. Stays single-track. Existing libraries migrate with scripts/005_migrate_add_media_type.rb.

@barefootford barefootford marked this pull request as draft May 30, 2026 08:16
@barefootford barefootford changed the title Support audio and image footage on the single track Support audio and image footage in libraries May 30, 2026
@barefootford barefootford force-pushed the feat/audio-image-media-type branch 4 times, most recently from 953e6ff to df7f5cb Compare May 30, 2026 20:44
@barefootford barefootford changed the title Support audio and image footage in libraries Support audio and image footage May 30, 2026
@barefootford barefootford force-pushed the feat/audio-image-media-type branch from df7f5cb to 7d4bdde Compare May 30, 2026 20:56
ButterCut treated every clip as a video file with both a video and an audio
stream. Bring audio (music, voiceover) and still images in as first-class
footage: import them into a library, place them on the single timeline track,
and export to Final Cut, Premiere, and Resolve.

A per-clip media_type (video | audio | image) drives it. The library infers it
from the file extension at import; the exporter threads it through to the
generators, which require it and emit the right timeline element per kind. One
discriminator covers what audio and images break — images carry no intrinsic
duration, audio has no video stream, and images have no audio stream.

- Library: stamp media_type on every clip, synthesize a duration for stills,
  and judge readiness per kind (audio and images need only a summary; audio's
  transcript is optional).
- Processing: build contact sheets for video only; summarize audio from its
  transcript and images from the image; skip stills in transcription.
- Export: require and validate media_type, fall back to sane defaults when a
  stream is absent, and give images a default 5s on-timeline duration
  (overridable per cut). FCP7 emits audio-only and still clipitems with correct
  per-track link indices; FCPX sets hasVideo/hasAudio per kind.

Timelines stay strictly single-track: an audio or image clip takes its own slot
and plays only during it.

Migrate existing libraries with scripts/005_migrate_add_media_type.rb, which
stamps every pre-existing clip media_type: video (idempotent).

249 specs pass; FCPX output validates against FCPXMLv1_8.dtd.
@barefootford barefootford force-pushed the feat/audio-image-media-type branch from 7d4bdde to 6fcb46f Compare June 7, 2026 19:47
@barefootford

Copy link
Copy Markdown
Owner Author

This is too much to add at once via ai. Going to break this off into two PRs.

Add image support (core)
Add audio support (pro)

@barefootford barefootford deleted the feat/audio-image-media-type branch June 7, 2026 20:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant