-- Track which revision of the derivative pipeline produced an upload's preview/display. -- -- Rev 1 applies the EXIF orientation tag. Everything generated before it decoded the raw -- sensor pixels and re-encoded to JPEG (which writes no EXIF), so every portrait phone photo -- was stored sideways in the feed preview, the diashow display and the keepsake — while the -- untouched original still rendered upright. -- -- Existing rows default to 0 so the startup backfill can find and re-generate them exactly -- once; bump the constant in services/compression.rs if the pipeline ever changes again. ALTER TABLE upload ADD COLUMN IF NOT EXISTS derivatives_rev SMALLINT NOT NULL DEFAULT 0; -- Only image derivatives are affected — video thumbnails are extracted by ffmpeg, which -- already honours the rotation matrix. Mark them current so the backfill skips them. UPDATE upload SET derivatives_rev = 1 WHERE mime_type NOT LIKE 'image/%'; CREATE INDEX IF NOT EXISTS idx_upload_derivatives_rev ON upload (derivatives_rev) WHERE deleted_at IS NULL;