By: Michael Lynch <git@mtlynch.io>
Split convert package by abstraction level The convert package mixed four altitudes: a storage abstraction, image primitives, fs-to-storage transform pipelines, and ffmpeg primitives. Separate them to match the layout the upload work (slice-3) builds on: - mediastore: MediaWriter/LocalWriter/WriteFile plus a generic WriteConverted helper that consolidates the temp-file-and-write pipeline previously duplicated in convert and importers. - images: pure image primitives (GenerateSquareThumbnail, ResizeToWidth). - imagepipe: GenerateAndWriteSquareThumbnail/GenerateAndWriteResized, rebuilt on mediastore.WriteConverted + images primitives. - convert: now only ffmpeg primitives (video, avif); stdlib-only imports. Migrate all call sites (importers, the import-from-tinybeans main) accordingly. s3.Writer needs no change since it satisfies the interface implicitly. This is the layout half of the slice-3 refactoring, applied to master in isolation. The slice-3-only helpers that serve upload functionality (mediastore.WriteProduced, images.Dimensions, images.Reencode) are intentionally deferred to slice-3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>