// the find
VideoFlint/Cabbage
A video composition framework build on top of AVFoundation. It's simple to use and easy to extend.
Cabbage is a Swift wrapper around AVFoundation's composition APIs that hides the painful parts — specifically the time range bookkeeping that breaks every time you reorder clips or add a transition. You build a Timeline by dropping resources in, then hand it to CompositionGenerator to get back an AVPlayerItem or AVExportSession. It's for iOS developers building video editing features who don't want to write the AVComposition glue themselves.
The Timeline abstraction is the right call — AVFoundation's native APIs require you to manually track and update time ranges on every mutation, and Cabbage handles that bookkeeping. The resource model is genuinely extensible: subclassing Resource or ImageResource to add a custom source type is a clean few-method contract, not a rewrite. Keyframe-based video configuration for transform and opacity is something you'd otherwise have to wire up yourself against AVVideoCompositionInstruction. Reverse playback via AVAssetReverseImageResource is a nice inclusion that would cost a week of AVAssetReader plumbing otherwise.
The last commit was November 2023 and it still requires Swift 4.x syntax in the README and targets iOS 9 — both of which are years out of date. There are no tests at all, which matters when you're dealing with CMTime arithmetic bugs that only surface on specific frame rates. The CocoaPods installation path is the primary one documented, but SPM support exists via Package.swift without any real documentation — you're on your own figuring out how to import it. Transitions are present but the built-in options are minimal and the extension path requires understanding AVFoundation internals anyway, which somewhat undercuts the point of using a wrapper.