Settings

{#if !settings}

Loading…

{:else}

Account

Soulseek account
{settings.username ? `Signed in as ${settings.username}` : "Not signed in"} {#if settings.connected} · online{/if}
{#if app.connection !== "online"} {/if} {#if settings.has_password} {/if}

Your password is stored in the Windows Credential Manager, not in a plain file.

Appearance

Dark glass
Lets whatever is behind the window glow through the app's dark surfaces with a live blur (Windows acrylic). Cards, rows and highlights thin out with it; menus and dialogs stay solid so nothing gets hard to read.

Playback

Audio output
System default follows Windows when headphones or speakers change.
Normalize volume
Plays every track at roughly the same loudness (−14 LUFS, like Spotify), so quiet and loud masters stop needing the volume knob. A track is measured while it first streams and matched exactly from then on; until that finishes SoulStream will turn it down but never up, so a quiet intro can't make the chorus too loud.

Changes apply immediately and keep the current track near the same position.

Lyrics

Word-by-word fill Experimental
Fills each word as it is sung, karaoke-style. Still experimental: timing can drift on dense or echo-heavy songs. Off keeps the reliable line-by-line sync everywhere and pauses the background word analysis.
{#if settings.word_timing}
Precise word timing
Downloads an alignment model (MMS, ~1.26 GB, from Hugging Face) that listens to each lyric line and times every word against the actual singing, in most languages. Runs entirely on this computer, in the background, never against the playing track. Without it, word timing stays a lighter estimate. Already-timed songs re-prepare automatically the next time you open their lyrics.
{#if lyricModel?.present} Downloaded {:else} {/if}
{#if modelError}

Download failed: {modelError}

{/if} {#if lyricModel?.present}
Vocal isolation
Downloads a small separation model (UVR MDX-Net Voc FT, ~64 MB, from the Ultimate Vocal Remover project) that lifts the singing away from the band before words are timed — noticeably steadier timing on dense mixes. Same rules as above: runs on this computer, in the background, never against the playing track. Timed songs re-prepare the next time you open their lyrics.
{#if sepModel?.present} Downloaded {:else} {/if}
{#if sepError}

Download failed: {sepError}

{/if} {/if} {/if}

Streaming

Keep streamed tracks
Streamed songs stay in a private cache for instant replay — not in your library. Choose Forever to add everything you stream to the library instead.
Cache size limit
Oldest streamed tracks are removed first once the cache passes this size. Saved and downloaded music is never touched.

Retention counts from the last time a track was played. Tracks you save stay in your library regardless.

Library & downloads

Library folder
{settings.download_dir}

This is your downloaded-music library and is always shared. Folder changes apply after reconnecting.

Album folder format
Use {"{artist}"}, {"{album}"}, {"{date}"}, or {"{year}"}; "\" starts a subfolder. Full dates display as DD-MM-YYYY.
e.key === "Enter" && e.currentTarget.blur()} onchange={(e) => setLibraryLayout(e.currentTarget.value)} />

New downloads are organized into this format; existing files are not moved.

Sharing

Sharing keeps you a good citizen — leechers get banned. Your download folder is always shared ({settings.share_files} files indexed). Add extra folders below.

{#if settings.shared_folders.length > 0}
{#each settings.shared_folders as folder (folder)}
{folder}
{/each}
{/if}

Album artwork

Covers are resolved from Deezer, Apple, and the Cover Art Archive; the artwork shown in the catalog wins, at the highest resolution any source serves. One canonical image is used for the library, the embedded tags, and the album folder.

Art inside downloaded files
Replace whatever picture the uploader embedded with the canonical cover, or keep theirs when present.
Embedded cover size
Longest edge of the copy written into each audio file. The full-resolution original is always kept in the album folder and art cache.
Album folder cover
Write the canonical cover as cover.jpg and folder.jpg so Explorer and other players show the same artwork.
Re-fetch all album covers
Upgrade every library album to the canonical high-resolution cover — cache, embedded tags, and folder files. Roughly one album per second.
{#if albumRefreshResult}

{albumRefreshResult}

{/if}

Artist artwork

Hero renderer
Live GPU creates one native-4K master, then mip-filters it cleanly for every window size.

Live GPU applies crop ? EASU ? RCAS ? color/fade/grain once at 3840?2160. Resizing only re-samples that fixed master, preserving grain scale and avoiding baked-file latency.

Refresh artist portraits
Fetch portraits for artists already in your library.
{#if artistRefreshResult}

{artistRefreshResult}

{/if}

Source quality

Independent preferences for streaming and downloading. The ceiling and floor bound which peer files qualify; priority decides whether the resolver picks the best format or the fastest transfer among them.

{#each [ { key: "stream", label: "Streaming" }, { key: "download", label: "Downloads" }, ] as mode (mode.key)}
{mode.label} — maximum
Skip files above this ceiling (lossy-only avoids huge lossless transfers).
{mode.label} — minimum
Reject files below this floor. Lossy files must report a bitrate to qualify.
{mode.label} — priority
Fastest transfer estimates arrival time from file size ÷ peer speed (plus queue wait) and picks whatever lands soonest — a large FLAC from a fast peer can win. Only files inside your min/max window compete.
{/each}

Uploads

Upload slots
How many peers can download from you at once.
{settings.upload_slots}
{#if saving}

Saving…

{:else if savedFlash}

✓ Saved

{:else if saveError}

{saveError}

{/if} {/if}