project
Source: project.js:21
Project file (de)serialization — the pure shape logic behind Save / Open Project.
Like automix.js, this owns ONLY data transformation (no DOM, no fs, no IPC) so it can be unit-tested in plain Node (test/project.test.js). The renderer gathers a state snapshot, hands it to build(), and writes the result; on open it reads JSON and runs it through parse() before rehydrating the session.
Loaded two ways (UMD-lite, matching automix.js): the Electron renderer loads it with a script tag, which attaches window.ProjectFile; Node tests require('../src/project.js') and use module.exports.
The file persists a session, never rendered output: which video + tracks are loaded, their levels and trim windows, the Music Start marker, the Music Level offset, and which track was active. Paths are the identity (session ids are minted fresh each load); transient runtime objects (blob URLs, audio elements, GainNodes, decoded peaks, LUFS) are deliberately omitted — they're rederived on restore.