04963c929a
From SPECTRUM_START_S the nodes stop following the lyric and behave as a spectrum analyser: every sung node is given one log-spaced frequency band (40 Hz–12 kHz), dealt out in a seeded shuffle, and sizes up and down with that band's amplitude. - spectrum.ts: band maths and every tunable. Levels come from @remotion/media-utils visualizeAudio on audio loaded by useWindowedAudioData (10 s windows, so the 227 MB WAV is never decoded whole; before the outro the window stays parked at its start). Bands average the FFT bins they span, or interpolate for bands narrower than a bin, so neighbouring bass nodes never move in lockstep. Level = (raw × GAIN × (f/40 Hz)^TREBLE_TILT)^CURVE with a release that looks back RELEASE_FRAMES frames at RELEASE_DECAY per frame. Defaults were calibrated on the release2 outro (nodes pinned at full size 0.6% of the time). The node→band mapping uses Remotion's seeded random() (BAND_SEED), not Math.random(), so render tabs and the Studio agree. - nodeAnimation.ts: SPECTRUM_PEAK and spectrumLook(level), alongside lightUp and switchOff, plus a levelExponential shaping curve. - Transect.tsx: hands each node over from its lyric look to its spectrum look over SPECTRUM_FADE_S. - package.json: declare @remotion/media-utils 4.0.522 (already installed as a dependency of the CLI; now pinned alongside the other Remotion packages). Verified: eslint + tsc clean on this commit's tree; outro stills show nodes sized by band level, so the windowed audio loads during renders. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u
34 lines
856 B
JSON
34 lines
856 B
JSON
{
|
|
"name": "ncmr-songs-videos",
|
|
"version": "0.1.0",
|
|
"description": "Video production templates for NCMR songs — Remotion project, ffmpeg helpers, and subtitle tools",
|
|
"private": true,
|
|
"license": "UNLICENSED",
|
|
"dependencies": {
|
|
"@remotion/cli": "4.0.522",
|
|
"@remotion/media-utils": "4.0.522",
|
|
"@remotion/tailwind-v4": "4.0.522",
|
|
"react": "19.2.3",
|
|
"react-dom": "19.2.3",
|
|
"remotion": "4.0.522",
|
|
"tailwindcss": "4.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@remotion/eslint-config-flat": "4.0.522",
|
|
"@types/react": "19.2.7",
|
|
"@types/web": "0.0.166",
|
|
"eslint": "9.19.0",
|
|
"prettier": "3.8.1",
|
|
"typescript": "5.9.3"
|
|
},
|
|
"scripts": {
|
|
"dev": "remotion studio",
|
|
"build": "remotion bundle",
|
|
"upgrade": "remotion upgrade",
|
|
"lint": "eslint src && tsc"
|
|
},
|
|
"sideEffects": [
|
|
"*.css"
|
|
]
|
|
}
|