diff --git a/services/remotion/src/compositions/FlexStory.tsx b/services/remotion/src/compositions/FlexStory.tsx index e6ed27d..7850a5e 100644 --- a/services/remotion/src/compositions/FlexStory.tsx +++ b/services/remotion/src/compositions/FlexStory.tsx @@ -6,6 +6,7 @@ import { FONT } from "../lib/fonts"; import { useLayout } from "../lib/aspect"; import { getBlock } from "../scenes/registry"; import { withDefaults, clampDuration } from "../scenes/types"; +import { FinishPass, GRADE_FILTER } from "../scenes/chrome"; /** * FlexStory — the scene sequencer. A template is `scenes: SceneInstance[]`; this @@ -78,7 +79,7 @@ export const FlexStory: React.FC = (props) => { }); return ( - + {music ? ); }; diff --git a/services/remotion/src/scenes/chrome.tsx b/services/remotion/src/scenes/chrome.tsx index a62c387..e090142 100644 --- a/services/remotion/src/scenes/chrome.tsx +++ b/services/remotion/src/scenes/chrome.tsx @@ -79,6 +79,28 @@ export const Vignette: React.FC = () => ( ); +/** + * FinishPass — a shared cinematic colour grade applied over the whole composited + * frame: a contrast/saturation/lift grade (backdrop-filter), a subtle duotone tint + * pulled from the brand palette, and a soft top light-bloom. Layered ON TOP of the + * blocks' own grain/vignette so it lifts every block at once. One component = the + * quality floor for the whole catalogue. + */ +export const FinishPass: React.FC<{ colors: SceneColors; intensity?: number }> = ({ colors, intensity = 1 }) => ( + <> + {/* split-tone: cool shadows (multiply) + warm highlights (screen) — headless-safe */} + + + {/* soft brand duotone + top light bloom */} + + + +); + +/** The headless-safe colour grade — applied as a CSS `filter` on the content root + * (backdrop-filter does NOT render in headless Chrome). Pair with . */ +export const GRADE_FILTER = "contrast(1.08) saturate(1.14) brightness(1.01)"; + export const ProgressDots: React.FC<{ index: number; total: number; colors: SceneColors; L: Layout }> = ({ index, total, colors, L }) => (
{Array.from({ length: total }).map((_, k) => (