Skip to content

Deprecate web-ui repo#2463

Merged
Silverarmor merged 63 commits intospotDL:devfrom
phcreery:datastar
Mar 8, 2026
Merged

Deprecate web-ui repo#2463
Silverarmor merged 63 commits intospotDL:devfrom
phcreery:datastar

Conversation

@phcreery
Copy link
Copy Markdown
Contributor

This removed the need for a second repo for the web content by making all HTML SSG using Jinja and Datastar.

The old API routes are not being used now but I left them in place since they are quite useful.

After merging and releasing, the old https://github.com/spotDL/web-ui/ can be archived.

phcreery and others added 30 commits August 4, 2025 20:59
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…uld result in them being saved to a None/None directory. The root cause was that the directory was being generated before the songs metadata was fully fetched from YT music. album_artist and album_name were None when the directory was created, leading to an invlaid directory structure, and any M3U created after to not point to the correctt directories. The fix was entirely in downloader.py.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
As our dependencies yt-dlp, ytmusicapi no longer support py3.9, spotDL also will drop support.
yt-dlp/yt-dlp#13858
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
- Replaced broken search.azlyrics.com URL
- Changed Request Headers to avoid bot detection
@Silverarmor Silverarmor changed the base branch from master to dev August 24, 2025 03:58
@Silverarmor
Copy link
Copy Markdown
Member

Hi @phcreery thanks for your efforts on this.
Can you split the different changes up?
e.g. the documentation edits into a different PR.

Please also get pylint, black, mypy and isort to pass.

@Silverarmor Silverarmor marked this pull request as draft August 30, 2025 01:10
@phcreery phcreery marked this pull request as ready for review August 30, 2025 03:24
@Silverarmor
Copy link
Copy Markdown
Member

Pylint

************* Module spotdl.utils.web
spotdl/utils/web.py:7:0: W0611: Unused dataclass imported from dataclasses (unused-import)
spotdl/utils/web.py:11:0: W0611: Unused Callable imported from typing (unused-import)
spotdl/utils/web.py:26:0: W0611: Unused Song imported from spotdl.types.song (unused-import)
************* Module spotdl.web.utils
spotdl/web/utils.py:1:0: C0114: Missing module docstring (missing-module-docstring)
spotdl/web/utils.py:3:0: C0411: standard import "typing.Optional" should be placed before first party imports "spotdl.utils.web.app_state", "spotdl.types.options.DownloaderOptions"  (wrong-import-order)
************* Module spotdl.web.api
spotdl/web/api.py:1:0: C0114: Missing module docstring (missing-module-docstring)
************* Module spotdl.web.routes
spotdl/web/routes.py:120:0: C0301: Line too long (127/100) (line-too-long)
spotdl/web/routes.py:167:0: C0301: Line too long (104/100) (line-too-long)
spotdl/web/routes.py:214:0: C0301: Line too long (124/100) (line-too-long)
spotdl/web/routes.py:216:0: C0301: Line too long (101/100) (line-too-long)
spotdl/web/routes.py:242:0: C0301: Line too long (124/100) (line-too-long)
spotdl/web/routes.py:244:0: C0301: Line too long (101/100) (line-too-long)
spotdl/web/routes.py:245:0: C0301: Line too long (111/100) (line-too-long)
spotdl/web/routes.py:325:0: C0116: Missing function or method docstring (missing-function-docstring)
************* Module spotdl.download.progress_handler
spotdl/download/progress_handler.py:104:0: C0115: Missing class docstring (missing-class-docstring)
spotdl/download/progress_handler.py:119:4: C0116: Missing function or method docstring (missing-function-docstring)
spotdl/download/progress_handler.py:127:4: C0116: Missing function or method docstring (missing-function-docstring)
spotdl/download/progress_handler.py:136:4: C0116: Missing function or method docstring (missing-function-docstring)
spotdl/download/progress_handler.py:140:4: C0116: Missing function or method docstring (missing-function-docstring)

@Silverarmor
Copy link
Copy Markdown
Member

Hmm. I think we've lost some functionality to search via link. https://open.spotify.com/track/3xkHsmpQCBMytMJNiDf3Ii?si=b94091fb120e4ce7
I'm okay with the visual changes (dark mode etc.). I'll admit I'm not the expert on the Web UI, I never use it and didn't contribute to it's development.

current version

(Automatically starts download upon searching a link)
image

Traceback
INFO:     Started server process [33672]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://localhost:8800 (Press CTRL+C to quit)
INFO:     ::1:51988 - "GET / HTTP/1.1" 200 OK
INFO:     ::1:51988 - "GET /assets/index-CqL-qAH-.js HTTP/1.1" 200 OK
INFO:     ::1:57614 - "GET /assets/index-DRB2_ZPb.css HTTP/1.1" 200 OK
INFO:     ('::1', 50144) - "WebSocket /api/ws?client_id=d442cc68-e4e9-47d4-a83f-846446a318a6" [accepted]
INFO:     Client d442cc68-e4e9-47d4-a83f-846446a318a6 connected
INFO:     connection open
INFO:     ::1:51988 - "GET /api/version HTTP/1.1" 200 OK
INFO:     ::1:57614 - "GET /api/settings?client_id=d442cc68-e4e9-47d4-a83f-846446a318a6 HTTP/1.1" 200 OK
INFO:     ::1:57614 - "GET / HTTP/1.1" 200 OK
INFO:     ::1:51988 - "GET /assets/index-DRB2_ZPb.css HTTP/1.1" 200 OK
INFO:     ('::1', 55879) - "WebSocket /api/ws?client_id=93697bae-2f9f-47c8-8e45-2eb673209c6b" [accepted]
INFO:     Client 93697bae-2f9f-47c8-8e45-2eb673209c6b connected
INFO:     connection open
INFO:     ::1:51988 - "GET /api/version HTTP/1.1" 200 OK
INFO:     ::1:50825 - "GET /favicon.ico HTTP/1.1" 200 OK
INFO:     ::1:57614 - "GET /api/settings?client_id=93697bae-2f9f-47c8-8e45-2eb673209c6b HTTP/1.1" 200 OK
INFO:     ::1:50825 - "GET /api/url?url=https:%2F%2Fopen.spotify.com%2Ftrack%2F3xkHsmpQCBMytMJNiDf3Ii%3Fsi%3Db94091fb120e4ce7 HTTP/1.1" 200 OK

on phcreery:datastar

image
Traceback
INFO:     Started server process [33620]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://localhost:8800 (Press CTRL+C to quit)
INFO:     ::1:64243 - "GET / HTTP/1.1" 200 OK
INFO:     ::1:64243 - "GET /spotdl.svg HTTP/1.1" 200 OK
INFO:     ::1:64243 - "GET /spotdl.svg HTTP/1.1" 200 OK
INFO:     ::1:64243 - "GET /client/load?datastar=%7B%22client_id%22%3A%2239b1441540ca4f81943f5a5934a1615e%22%7D HTTP/1.1" 200 OK
INFO:     Loading client...
ERROR:    Client 39b1441540ca4f81943f5a5934a1615e not found
WARNING:  Client 39b1441540ca4f81943f5a5934a1615e not found, creating new client...
INFO:     Client 2468d91da741453e8a60073ecfcec7f3 connected
INFO:     ::1:57332 - "GET /client/component/search-input-rotating-placeholder?datastar=%7B%22client_id%22%3A%2239b1441540ca4f81943f5a5934a1615e%22%2C%22search_term%22%3A%22%22%2C%22loading%22%3Afalse%7D HTTP/1.1" 200 OK
INFO:     Loading rotating-placeholder...
INFO:     ::1:56035 - "GET /client/component/settings-content?datastar=%7B%22client_id%22%3A%222468d91da741453e8a60073ecfcec7f3%22%2C%22search_term%22%3A%22%22%2C%22loading%22%3Afalse%7D HTTP/1.1" 200 OK
INFO:     [2468d91da741453e8a60073ecfcec7f3] Loading settings view...
INFO:     ::1:56035 - "GET /favicon.ico HTTP/1.1" 200 OK
INFO:     ::1:58243 - "GET /search?q=https://open.spotify.com/track/3xkHsmpQCBMytMJNiDf3Ii?si=b94091fb120e4ce7 HTTP/1.1" 200 OK
INFO:     [2468d91da741453e8a60073ecfcec7f3] Unloading client...
INFO:     Client 2468d91da741453e8a60073ecfcec7f3 will disconnect in 15 seconds of inactivity
INFO:     ::1:58243 - "GET /spotdl.svg HTTP/1.1" 200 OK
INFO:     ::1:61194 - "GET /client/load?datastar=%7B%22client_id%22%3A%222468d91da741453e8a60073ecfcec7f3%22%7D HTTP/1.1" 200 OK
INFO:     Loading client...
INFO:     Client 2468d91da741453e8a60073ecfcec7f3 connected
INFO:     ::1:58243 - "GET /client/component/search-input-rotating-placeholder?datastar=%7B%22client_id%22%3A%222468d91da741453e8a60073ecfcec7f3%22%2C%22search_term%22%3A%22%22%2C%22loading%22%3Afalse%7D HTTP/1.1" 200 OK
INFO:     Loading rotating-placeholder...
INFO:     ::1:53027 - "GET /client/search?datastar=%7B%22client_id%22%3A%222468d91da741453e8a60073ecfcec7f3%22%2C%22search_term%22%3A%22https%3A%2F%2Fopen.spotify.com%2Ftrack%2F3xkHsmpQCBMytMJNiDf3Ii%3Fsi%3Db94091fb120e4ce7%22%2C%22loading%22%3Afalse%7D HTTP/1.1" 200 OK
INFO:     Loading search...
INFO:     [2468d91da741453e8a60073ecfcec7f3] Search term: https://open.spotify.com/track/3xkHsmpQCBMytMJNiDf3Ii?si=b94091fb120e4ce7
INFO:     [2468d91da741453e8a60073ecfcec7f3] Unloading client...

@phcreery
Copy link
Copy Markdown
Contributor Author

Let me spend some more time and I can bring back the direct download function and the dark theme

@Silverarmor
Copy link
Copy Markdown
Member

Cheers. Obviously I'm not the expert on the Web UI, xnetcat implemented most of it but is very busy and not around atm. Very grateful for all his work. Happy to merge changes you think are best for the project.
Not super worried about the dark mode/UI, was just testing and think we should keep functionality the same at a minimum with link downloads.

Let me know if you need anything from me :). Don't worry about tests failing, the test suite is a bit of a mess atm, I haven't had time to figure out why some tests seem to just timeout - again, I didn't implement pytest and so am not an expert! Doing my best to keep the core spotDL functionality working and (relatively!) bug free.
Thanks again.

@phcreery
Copy link
Copy Markdown
Contributor Author

This is ready for review

@Silverarmor Silverarmor merged commit 49f6e3a into spotDL:dev Mar 8, 2026
0 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants