Public URL and pasted-text imports¶
Open Playlist Engine can normalize a public playlist URL or pasted track list into the same private preview used by local playlist-file imports. After preview and selection, tracks enter the standard match, review, progress, and write pipeline.
Workflow¶
- Choose Public playlist URL or Pasted track list as the source.
- Enter the URL or text and create a preview.
- Review normalized tracks and line-level warnings.
- Select tracks, connect a supported target provider, and start the migration.
The preview is owner-scoped and lease-backed. It captures the normalized source before the job is queued, so retries or later changes to the remote playlist cannot silently change the selected input.
Supported public URLs¶
| Source | Accepted shape | Source access |
|---|---|---|
| Spotify | https://open.spotify.com/playlist/{id} and locale-prefixed /intl-xx/playlist/{id} |
Requires a connected Spotify source account; Spotify may restrict playlists the account does not own or collaborate on |
| YouTube Music | https://music.youtube.com/playlist?list={id} and equivalent youtube.com playlist URLs |
Public playlists use an unauthenticated reader; private or unavailable playlists request a YouTube Music connection |
| Apple Music | https://music.apple.com/{storefront}/playlist/{slug}/{id} |
Uses the configured MusicKit developer token; no Music User Token is required for public catalog playlists |
| Tidal | https://tidal.com/browse/playlist/{uuid}, https://listen.tidal.com/browse/playlist/{uuid}, or /playlist/{uuid} |
Requires a connected Tidal source account |
| Open Playlist Engine | https://{allowed-host}/share/{token} |
The host must be in OPE_IMPORT_OPEN_PLAYLIST_HOSTS or match the HTTPS OPE_PUBLIC_BASE_URL host |
The application does not scrape arbitrary web pages. URLs must match an exact provider host and path recognized by the import resolver.
Pasted text¶
Blank lines and lines beginning with # are ignored. Unicode and duplicate tracks
are preserved. Common row forms include:
Artist - Title
Artist<TAB>Title<TAB>Album<TAB>ISRC
artist<TAB>title<TAB>album<TAB>isrc
Title without an artist
Headered tabular input can use tabs, commas, semicolons, or pipes. Missing titles and overlong rows are reported as line-level errors and skipped; title-only rows remain selectable with a missing-artist warning.
Limits¶
| Setting | Default | Purpose |
|---|---|---|
OPE_IMPORT_MAX_TEXT_BYTES |
262144 |
Maximum pasted-text input |
OPE_IMPORT_MAX_ITEMS |
1000 |
Maximum normalized tracks |
OPE_IMPORT_MAX_LINE_CHARS |
2000 |
Maximum characters per input row |
OPE_IMPORT_MAX_FIELD_CHARS |
500 |
Maximum characters per parsed field |
OPE_IMPORT_MAX_URL_CHARS |
2048 |
Maximum source URL length |
OPE_IMPORT_MAX_RESPONSE_BYTES |
2000000 |
Maximum remote response |
OPE_IMPORT_MAX_REDIRECTS |
3 |
Maximum remote redirects |
OPE_IMPORT_HTTP_TIMEOUT_S |
10 |
Remote request timeout |
OPE_IMPORT_OPEN_PLAYLIST_HOSTS |
Empty | Additional HTTPS hosts allowed to serve Open Playlist Engine shares |
Change these values in .env; see the
configuration guide.
Network safety¶
Open Playlist Engine share imports reject URL credentials, non-default ports, IP-literal hosts, localhost, private, link-local, or reserved DNS answers, redirects outside the allowlist, compressed bodies, excessive redirects, and oversized responses. DNS is validated immediately before connecting, and the HTTPS socket is pinned to the validated public address.
Provider URLs are parsed locally against strict HTTPS host and path allowlists. Spotify and Tidal access remains bound to the connected account rather than bypassing provider controls.
For binary playlist uploads and their retention behavior, see Local playlist-file imports.