{#if working}
Review import
{:else if pickedFile}
Listen to a set recording
{:else if door === "youtube"}
Import a DJ set from YouTube
{:else if door === "ytplaylist"}
Import a playlist from a link
{:else}
Paste a tracklist
{/if}
Listening identifies the tracks by sound. If the set came with a
tracklist, paste it too — it names the exact version played
where the ear can only name the release it matched, and fills
stretches nothing recognized. Leave it empty to listen purely by ear.
Optional. Only timestamped lines count — the stamp anchors each
name to its place in the mix.
{#if error}
{error}
{/if}
{:else if door === "youtube"}
{#if scanning}
{scanLabel}
{#if scanning.hit}
{scanning.hit}
{/if}
{:else}
Paste a set's link. Fetch tracklist reads the video's own
chapters, description, or a commented tracklist — free and instant.
Listen downloads the audio and identifies the tracks by
sound: a few minutes, and unreleased material stays an honest ID.
e.key === "Enter" && previewYoutube()}
/>
{#if tool?.present}
yt-dlp {tool.version ?? ""}{tool.managed ? "" : " (from PATH)"}
{:else}
Listening needs the downloader tool:
{/if}
·
{#if runtimeKind === "deno"}
deno
{:else if runtimeKind}
runtime: {runtimeKind}
{:else}
and a JS runtime:
{/if}
·
{#if error}
{error}
{/if}
{/if}
{:else if door === "ytplaylist"}
Paste a playlist link from YouTube, Spotify,
Apple Music, TIDAL, or Deezer — every
track arrives named by the service's own listing. Read
straight off the playlist's public page; nothing is
downloaded and no account is involved.
Ctrl+C, then paste below — every track comes over,
however many there are.
{/if}
One track per line. Timestamps make it a setlist —
00:00 Artist - Title keeps its place in the mix.
Track links work too: in Spotify (or Apple Music, TIDAL,
Deezer) select every track and copy, then paste here — that path
has no length limit, unlike a playlist link.
{#if pasteHasLinks && !parsing}
Track links detected — each is read from its own public page.
{/if}
{#if linkProgress}
{#if linkProgress.waiting}
The service is throttling — waiting a minute, then
carrying on from {linkProgress.done} of {linkProgress.total}…
{:else}
Reading track {linkProgress.done} of {linkProgress.total}…
{/if}