Lay the party logo over the background

Centred, spanning 60% of the screen width, on the poster's layer so the
video frame and the stills still pass in front of it. The file lives in
assets/ with the posters, so it has to be kept out of the background
rotation — it is the one image there that is never a background.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9v2Xoa6eoeGYpK6gp95k9
This commit is contained in:
simon
2026-08-10 23:46:19 +02:00
co-authored by Claude Opus 5
parent 0683acd69e
commit 7706fe46c6
6 changed files with 47 additions and 2 deletions
+10 -1
View File
@@ -115,6 +115,15 @@ export const DEFAULT_ANIMATION = AUTO_ANIMATION;
const ASSET_DIR = join(dirname(fileURLToPath(import.meta.url)), 'assets');
const IMAGE_TYPES = new Set(['.jpg', '.jpeg', '.png', '.webp', '.avif']);
// The party's logo, laid over every background. Lives in assets/ with the
// posters, so it has to be kept out of the rotation below — it is the one
// image there that is never a background of its own.
const LOGO_FILE = 'logo.png';
export const LOGO_SRC = `/assets/${LOGO_FILE}`;
// How much of the screen's width the logo spans, centred.
export const LOGO_WIDTH = 0.6;
function readBackgrounds() {
let files;
try {
@@ -125,7 +134,7 @@ function readBackgrounds() {
return Object.fromEntries(
files
.filter((file) => IMAGE_TYPES.has(extname(file).toLowerCase()))
.filter((file) => file !== LOGO_FILE && IMAGE_TYPES.has(extname(file).toLowerCase()))
.sort()
.map((file) => {
const key = file.slice(0, -extname(file).length);