Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and

### Changed

- Source Vault: the access number is now **Nº404** everywhere (nav, phone menu, header seal, stats, end credits, unlock intro). With the stems uploaded, the "SOON" / "UPLOADING SOON" placeholders are gone: the STEMS stat counts the stems (220, each as WAV + MIDI), ALL STEMS shows its total size once the release answers, each track's stems tab shows its stem count, the intro line reads "full stems as WAV and MIDI", and a failed download now says UNAVAILABLE · TRY AGAIN instead of NOT UPLOADED YET.
- Intros: the readout card in both the site intro and the vault's unlock now matches the vault gate: no box, the four viewfinder corner ticks, the rain fading to dark behind it, a blinking tag (RECOVERY · ARCHIVE_404 / KEY ACCEPTED · SOURCE VAULT), a small title (RECOVERING FILES. / DECRYPTING VAULT.) and a gradient bar that fills with the 00 → 20 count.
- Source Vault on phones: the chapter buttons wrap onto two rows instead of running off the screen, and the vault now always opens at the top after unlocking (typing the key had left the page scrolled down).
- Source Vault stems: the remastered stems are in. Each track's zip holds its WAV stems and MIDI files (10–12 stems per track, every one as WAV + MIDI), and the stem lists now match the real files. ALL STEMS hands over the 20 track zips one after another (a chapter zip would pass GitHub's 2 GB per-file cap). The per-stem WAV / MIDI chips are labels now, not mock-up buttons.
Expand Down
26 changes: 14 additions & 12 deletions src/vault/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ function unlockSequence() {
const line = (i, extra = "") => {
$("#viBar").style.width = (i / 20) * 100 + "%";
$("#viCount").textContent = `${pad(i)}/20`;
return `<div><b>&gt;</b> KEY ACCEPTED · <span class="ok">ACCESS Nº004</span></div><div><b>&gt;</b> DECRYPTING <i>${pad(i)}/20</i>${i ? `<span class="e-icard-t">${titles[i - 1]}_STEMS.ZIP</span>` : ""}</div>${extra}`;
return `<div><b>&gt;</b> KEY ACCEPTED · <span class="ok">ACCESS Nº404</span></div><div><b>&gt;</b> DECRYPTING <i>${pad(i)}/20</i>${i ? `<span class="e-icard-t">${titles[i - 1]}_STEMS.ZIP</span>` : ""}</div>${extra}`;
};
const lines = $("#viLines");
term.classList.remove("out");
Expand Down Expand Up @@ -541,7 +541,7 @@ function rowHTML(t) {
</div>
<div class="tab" data-pane="stems">
<div class="stems">${t.stems.map((s) => `<div class="stem"><span>${s.name.toUpperCase()}</span><span class="fmt">${s.wav ? "<i>WAV</i>" : ""}${s.mid ? "<i>MIDI</i>" : ""}</span></div>`).join("")}</div>
<div class="boxbar"><span class="count">${esc(t.asset.toUpperCase())} · WAV + MIDI${STEMS_READY ? "" : " · UPLOADING SOON"}</span><button class="holo" data-dl="${t.slug}">↓ DOWNLOAD STEMS${SIZES[t.asset] ? " · " + mb(SIZES[t.asset]) : ""}</button></div>
<div class="boxbar"><span class="count">${esc(t.asset.toUpperCase())} · ${t.stems.length} STEMS · WAV + MIDI</span><button class="holo" data-dl="${t.slug}">↓ DOWNLOAD STEMS${SIZES[t.asset] ? " · " + mb(SIZES[t.asset]) : ""}</button></div>
</div>
<div class="tab" data-pane="analysis"><div class="an">
<div class="card"><div class="k">LENGTH</div><div class="v">${t.durationText}</div><div class="s">${t.duration.toFixed(1)} s, read from the remastered file.</div></div>
Expand Down Expand Up @@ -852,8 +852,9 @@ async function download(slug) {
r = null;
}
if (!r || !r.ok) {
const why = r && r.status === 401 ? "KEY NOT ACCEPTED · LOCK AND UNLOCK AGAIN" : "NOT UPLOADED YET";
st(r && r.status === 401 ? "LOCKED" : "PENDING", "var(--amber)");
const why =
r && r.status === 401 ? "KEY NOT ACCEPTED · LOCK AND UNLOCK AGAIN" : "UNAVAILABLE · TRY AGAIN";
st(r && r.status === 401 ? "LOCKED" : "NO SIGNAL", "var(--amber)");
log.innerHTML += `<br />&gt; ${esc(f.label)} · <em>${why}</em>`;
continue;
}
Expand Down Expand Up @@ -1238,25 +1239,26 @@ async function stemsApi(body) {
async function loadSizes() {
try {
const r = await stemsApi({});
if (!r.ok) return;
const d = await r.json();
SIZES = d.sizes || {};
STEMS_READY = d.ready;
if (r.ok) {
const d = await r.json();
SIZES = d.sizes || {};
STEMS_READY = d.ready;
}
} catch {
/* offline: sizes just stay hidden */
}
const total = TRACKS.reduce((n, t) => n + (SIZES[t.asset] || 0), 0);
$("#stemTotal").textContent = STEMS_READY && total ? mb(total) : "SOON";
$("#allSize").textContent = STEMS_READY && total ? mb(total) : "SOON";
$("#allSize").textContent = STEMS_READY && total ? mb(total) : "—";
if (STEMS_READY) render();
}
function applyData(d) {
if (loaded) return;
loaded = true;
TRACKS = d.tracks;
parsePrompts(d.prompts);
$("#stemTotal").textContent = "SOON";
$("#allSize").textContent = "SOON";
// every stem comes as WAV + MIDI; the zip sizes arrive from the release (loadSizes)
$("#stemTotal").textContent = TRACKS.reduce((n, t) => n + t.stems.length, 0);
$("#allSize").textContent = "…";
$("#masterBox").textContent = MASTER;
$("#palette").innerHTML = PSTYLES.map(
(p) =>
Expand Down
18 changes: 9 additions & 9 deletions vault/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ <h1 id="gate-h">ACCESS <span class="grad">REQUIRED.</span></h1>
</div>
<div class="nright">
<span class="e-split e-split-nav"
><span class="e-split-bk" aria-label="Access number 004">Nº004</span
><span class="e-split-bk" aria-label="Access number 404">Nº404</span
><button class="e-split-dl" id="lockBtn">LOCK ↺</button></span
><button
class="e4-burger"
Expand Down Expand Up @@ -179,7 +179,7 @@ <h1 id="gate-h">ACCESS <span class="grad">REQUIRED.</span></h1>
</nav>
<div class="vm-ft">
<span class="e-split e-split-menu"
><span class="e-split-bk">Nº004</span><button class="e-split-dl" data-lock>LOCK ↺</button></span
><span class="e-split-bk">Nº404</span><button class="e-split-dl" data-lock>LOCK ↺</button></span
><span class="e-split e-split-menu"
><button class="e-split-dl" data-dl="all">↓ ALL STEMS</button></span
>
Expand All @@ -189,18 +189,18 @@ <h1 id="gate-h">ACCESS <span class="grad">REQUIRED.</span></h1>
<div class="ruler" id="ruler" aria-hidden="true" hidden></div>
<div class="vault" id="vault" hidden>
<header class="hero">
<div class="seal seam reveal" aria-label="Access number 004, issued 7 October 2026">
<small>SOURCE VAULT · ACCESS</small><big class="grad">Nº 004</big
<div class="seal seam reveal" aria-label="Access number 404, issued 7 October 2026">
<small>SOURCE VAULT · ACCESS</small><big class="grad">Nº 404</big
><small>ISSUED 07.10.26 · ARCHIVE_404</small>
</div>
<div class="eyebrow reveal"><b>——</b> ARCHIVE_404 / SOURCE FILES / PRIVATE</div>
<h1 class="reveal">THE SOURCE <span class="grad">VAULT.</span></h1>
<div class="band reveal">
<div class="b-lede">
<p class="lede">
Every track's full stems, the exact Suno prompt that built it in every production style, and the
lyrics in their original and Suno-optimised forms. Each full song plays here, with its length,
tempo and key measured from the final remasters.
Every track's full stems as WAV and MIDI, the exact Suno prompt that built it in every
production style, and the lyrics in their original and Suno-optimised forms. Each full song
plays here, with its length, tempo and key measured from the final remasters.
</p>
</div>
<div class="b-spec">
Expand All @@ -227,7 +227,7 @@ <h1 class="reveal">THE SOURCE <span class="grad">VAULT.</span></h1>
</div>
<div>
<dt>ACCESS</dt>
<dd class="grad">Nº004</dd>
<dd class="grad">Nº404</dd>
</div>
</dl>
</div>
Expand Down Expand Up @@ -303,7 +303,7 @@ <h1 class="reveal">THE SOURCE <span class="grad">VAULT.</span></h1>
</div>
<div class="e-cr">
<span class="e-cr-r">Source vault</span
><span class="e-cr-s">ACCESS Nº004 · ISSUED 07.10.26 · 20 FILES</span>
><span class="e-cr-s">ACCESS Nº404 · ISSUED 07.10.26 · 20 FILES</span>
</div>
<div class="e-cr vf-logo">
<span
Expand Down
Loading