Files
party-player/config.js
T
simonandClaude Opus 5 a6fd6e802a Add a drag-and-resize animation
A drawn pointer grabs the frame near its top edge, drags it across the
screen, lets go, then takes hold of one corner and pulls the frame to a
new size. Moves ease in and overshoot slightly before settling, and the
paths bow, so the motion reads as a hand rather than a tween.

The resize pins the opposite corner and keeps the aspect ratio locked —
a stretched video would read as broken, not as someone resizing — and
clamps the width to the room left before the corner leaves the screen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tg15tLAuT6NrCE1ZxKVgDB
2026-08-09 22:34:26 +02:00

52 lines
2.0 KiB
JavaScript

// Central knobs for the party player.
export const PORT = Number(process.env.PORT) || 3000;
// Seconds of overlap between the outgoing and incoming video.
// Audio and video crossfade over this whole window.
export const OVERLAP_SECONDS = 5;
// How fast the player switches when the user jumps around manually.
export const HARD_CUT_SECONDS = 0.4;
// The video frame takes up this fraction of the screen. Keep this below 0.5:
// the corners animation puts a frame-sized image in all four corners, which
// only stays overlap-free while two frames fit side by side.
export const FRAME_SCALE = 0.3;
// Pixels per second the frame drifts across the screen.
export const BOUNCE_SPEED = 90;
// The corners animation: seconds between screenshots.
export const CORNER_INTERVAL_SECONDS = 5;
// Gap between the frame and the screen edge, as a fraction of the short side.
export const CORNER_MARGIN = 0.025;
// The drag animation resizes the frame to somewhere between these multiples of
// the normal frame size. Above 1 the frame grows past FRAME_SCALE, which is
// fine — nothing else is on screen while this animation runs.
export const DRAG_MIN_SCALE = 0.55;
export const DRAG_MAX_SCALE = 1.6;
// The frame animations, keyed by the id sent over the socket. The names must
// match the registry in public/player/motion.js, which supplies the code.
export const ANIMATIONS = {
bounce: { label: 'Bounce' },
corners: { label: 'Corners' },
drag: { label: 'Drag & resize' },
};
// Cycle a fresh random animation on every track change. Anything else pins the
// player to that one animation, which is what the queue page's buttons are for.
export const AUTO_ANIMATION = 'auto';
export const DEFAULT_ANIMATION = AUTO_ANIMATION;
// Selectable fullscreen backgrounds, keyed by the id sent over the socket.
export const BACKGROUNDS = {
pink: { label: 'Pink', src: '/assets/PLAKAT_A2_pink_426x600mm.png' },
plain: { label: 'Classic', src: '/assets/PLAKAT_A2_426x600mm.png' },
};
export const DEFAULT_BACKGROUND = 'pink';