#!/usr/bin/env node // scorodeon — a little theatre where the score plays (score + ὠδεῖον). // // v2: a SCROLLING DYNAMIC CANVAS, built on the same machinery as the pop // preview-score videos (node-canvas frames → spawnFFmpegEncode): the // track's data flies by a FIXED CENTER LINE — every lane's events scroll // right→left, light up as they cross the line, and a minimap of the whole // composition rides the bottom so you never lose the shape of the piece. // // Any aspect ratio: lanes squash to fill whatever frame you ask for. // Default is vertical 1080x1920 — insta-story ready. `--zoom` sets how // many seconds of music are visible across the width. // // Input is a generic score JSON any lane can emit: // { title, artist?, dur, // movements?: [{name, sub?, t0, t1, level?}], // chords?: [{t, dur, name}], // arc?: [v0..1 per second], // goldenSec?: , // lanes: [{name, color, events: [{t, dur, pitch?, g?}]}], // ribbons?: [{name, color, env: [v0..1 per second]}] } // // Usage: // node pop/bin/scorodeon.mjs