SoulStream Setup
SoulStream
    {#each STEPS as s, i (s.id)}
  1. {#if i < step}{:else}{/if} {s.label}
  2. {/each}
{d ? `SoulStream ${d.version}` : ""}
Everything here lives in Settings too.
{#key step}
{#if cur.id === "welcome"}

{d?.installed_version ? "Set SoulStream up again" : "Welcome to SoulStream"}

{#if d?.installed_version} SoulStream {d.installed_version} is already on this computer. This installs the latest release in its place and keeps your music and settings. About a minute, no admin prompt. {:else} Your library on your own disk, music from people on Soulseek, and a community that runs on a peer you own. Your alpha key, two short questions, then about a minute to download and install — no admin prompt, and your music never lives inside the program. {/if}

    {#each STEPS.slice(1, 4) as s (s.id)}
  • {s.label}
  • {/each}
{:else if cur.id === "key"}

Your alpha key

SoulStream is in a closed alpha. This key — one per tester, able only to read the private repository — is how Setup fetches the app and how the app finds updates later. It goes to the Windows Credential Manager, not a plain file. Nothing installs without it.

Alpha key {#if keyOk}accepted{:else if verifying}checking…{/if}
{#if keyOk} SoulStream {keyOk.version} is what it will install{#if keyOk.installer_size} — {(keyOk.installer_size / 1e6).toFixed(1)} MB{/if}. Paste another key to replace it. {:else} Paste the key you were given (it starts with github_pat_) and press Verify. Setup asks GitHub whether the key can read the release. {/if}
{ if (e.key === "Enter") { e.stopPropagation(); verify(); } }} />
{:else if cur.id === "library"}

Where does your music live?

Downloads land in this folder, it is always shared on Soulseek, and albums are filed into it by the format below. Files already in it are never moved.

Library folder
{libraryDir || "Not chosen yet"}
Album folder format
Use {"{artist}"}, {"{album}"}, {"{date}"} or {"{year}"}; "\" starts a subfolder.
{#each PRESETS as [v, l] (v)} {/each}
{:else if cur.id === "look"}

How the window is drawn

Both can be changed any time in Settings.

Dark glass
Whatever is behind the window glows through the app's dark surfaces with a live blur (Windows acrylic). Menus and dialogs stay solid.
{glass ? "dark glass" : "solid"}
Loudness normalization
Every track plays at roughly the same level (−14 LUFS). Off plays each file as recorded.
{loudness ? "on" : "off"}
{:else if cur.id === "install"}

{phase.phase === "failed" ? "That did not go through" : "Installing SoulStream"}

{#if phase.phase === "failed"} {phase.detail} {:else if phase.phase === "downloading"} Downloading {phase.detail}{pct != null ? ` · ${pct}%` : "…"} {:else if phase.phase === "verifying"} {phase.detail} {:else if phase.phase === "installing"} {phase.detail} Nothing to click; this takes a moment. {:else} {phase.detail || "Starting…"} {/if}

  • Alpha key{keyOk ? `accepted · SoulStream ${keyOk.version}` : "not set"}
  • Library{libraryDir}
  • Window{glass ? "dark glass" : "solid"}
{:else}

SoulStream is ready

Installed to {installedAt}. It lives in your Start menu now; your music stays where you chose.

    {#each [ ["key", "Alpha key", keyOk ? "accepted" : "set"], ["folder-open", "Library", libraryDir], ["eye", "Window", glass ? "dark glass" : "solid"], ["volume", "Loudness", loudness ? "normalized" : "as recorded"], ] as [icon, what, value], i (what)}
  • {what} {value}
  • {/each}
{/if}
{/key}
{#if step > 0 && cur.id !== "done" && !installing} {/if} {#if error && cur.id !== "install"}{error}{/if} {#if cur.id === "welcome"} {:else if cur.id === "key"} {:else if cur.id === "look"} {:else if cur.id === "install"} {#if phase.phase === "failed"} {/if} {:else if cur.id === "done"} {:else} {/if}