// Stable video_name -> RGB hash (12-color palette). const PALETTE: ReadonlyArray = [ [231, 76, 60], [52, 152, 219], [46, 204, 113], [241, 196, 15], [155, 89, 182], [230, 126, 34], [26, 188, 156], [233, 30, 99], [3, 169, 244], [205, 220, 57], [255, 87, 34], [121, 85, 72], ]; const cache = new Map(); export function videoColorRGB( name: string | null | undefined, ): readonly [number, number, number] { const key = name ?? ""; const hit = cache.get(key); if (hit) return hit; let h = 0; for (let i = 0; i < key.length; i++) { h = ((h << 5) - h + key.charCodeAt(i)) | 0; } const idx = ((h % PALETTE.length) + PALETTE.length) % PALETTE.length; const c = PALETTE[idx]; cache.set(key, c); return c; }