# Party Player A YouTube playlist player for parties. Two browser windows run side by side: - **Player** (`http://localhost:3000/`) — fullscreen poster background with a small video frame drifting diagonally and bouncing off the edges. Consecutive videos overlap in a 5 second audio/video crossfade, so there is never silence between tracks. - **Queue** (`http://localhost:3000/queue`) — add videos by URL, drag to reorder, delete, and see how much playtime is left. ## Run ```sh npm install npm start ``` Put the player on the projector/TV screen (F11 for fullscreen) and open the queue on a laptop or phone. On the same network, other devices reach both pages at `http://:3000`. **The player page opens behind a "Start" button.** Browsers block unmuted autoplay, so the first click is what unlocks audio. One click per session. ## Notes - No YouTube API key is needed. Titles come from YouTube's public oEmbed endpoint; durations are measured by a hidden muted player on the player page, which is why a freshly added video shows `–:––` for a moment (and keeps showing it while the player page is closed). Totals are prefixed with `≥` whenever a length is still unknown. - The queue is saved to `queue.json` on every change and restored at startup. - Settings live in `config.js`: overlap length, frame size, drift speed, port, and the selectable backgrounds. ## Adding animations `#frameMover` carries only the motion transform (see `public/player/motion.js`). `#frameSkin` inside it is the cosmetic layer, and the two video decks sit inside that. New effects should nest a fresh wrapper rather than sharing a transform with the bounce loop.