spotify-mcp-web 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ # Spotify Developer API Credentials (PKCE Flow - No Secret Required!)
2
+ # Get your Client ID from https://developer.spotify.com/dashboard
3
+ SPOTIPY_CLIENT_ID=
4
+ SPOTIPY_REDIRECT_URI=http://127.0.0.1:8888/callback
5
+
6
+ # TMDB (The Movie Database) API Credentials
7
+ # Get from https://www.themoviedb.org/settings/api
8
+ # Provide ANY ONE (either TMDB_API_KEY or TMDB_READ_ACCESS_TOKEN):
9
+ TMDB_API_KEY=
10
+ TMDB_READ_ACCESS_TOKEN=
11
+ TMDB_BASE_URL=https://api.themoviedb.org/3
@@ -0,0 +1,61 @@
1
+ # Environment & Secrets
2
+ .env
3
+ .env.*
4
+ !.env.sample
5
+ **/.env
6
+ **/.env.*
7
+ !.env.sample
8
+ .spotipyoauthcache
9
+ **/.spotipyoauthcache
10
+ .cache
11
+ **/.cache
12
+ .cache-*
13
+ *.token
14
+
15
+ # Python bytecode & runtime
16
+ __pycache__/
17
+ **/__pycache__/
18
+ *.py[cod]
19
+ *$py.class
20
+ *.so
21
+ build/
22
+ dist/
23
+ *.egg-info/
24
+
25
+ # Virtual environments
26
+ .venv/
27
+ env/
28
+ venv/
29
+ ENV/
30
+
31
+ # Testing & Coverage
32
+ .pytest_cache/
33
+ **/.pytest_cache/
34
+ .coverage
35
+ htmlcov/
36
+
37
+ # Logs & temporary files
38
+ *.log
39
+ out.txt
40
+ *.tmp
41
+ *.bak
42
+
43
+ # OS & Editor files
44
+ .DS_Store
45
+ Thumbs.db
46
+ Desktop.ini
47
+ .vscode/
48
+ .idea/
49
+ .cursor/*
50
+ !.cursor/rules/
51
+ !.cursor/rules/**
52
+
53
+ # Cloud & Deployment Infrastructure
54
+ terraform/
55
+ scripts/
56
+ .gcloudignore
57
+ Procfile
58
+ .github/workflows/
59
+
60
+ #PYPI
61
+ Pypi/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Chiru144
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,150 @@
1
+ Metadata-Version: 2.5
2
+ Name: spotify-mcp-web
3
+ Version: 1.0.0
4
+ Summary: Soundtrack Curator & Staging Studio — a self-hosted FastAPI web app for Spotify playlist curation, TMDB filmography, and MCP tools management.
5
+ Project-URL: Homepage, https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server
6
+ Project-URL: Repository, https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server
7
+ Project-URL: Bug Tracker, https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server/issues
8
+ Author: Chiru144
9
+ License: MIT License
10
+
11
+ Copyright (c) 2024 Chiru144
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in all
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
30
+ License-File: LICENSE.md
31
+ Keywords: fastapi,mcp,playlist,soundtrack,spotify,studio,tmdb,web
32
+ Classifier: Development Status :: 5 - Production/Stable
33
+ Classifier: Intended Audience :: Developers
34
+ Classifier: Intended Audience :: End Users/Desktop
35
+ Classifier: License :: OSI Approved :: MIT License
36
+ Classifier: Programming Language :: Python :: 3
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
41
+ Classifier: Topic :: Multimedia :: Sound/Audio
42
+ Requires-Python: >=3.10
43
+ Requires-Dist: beautifulsoup4>=4.13.0
44
+ Requires-Dist: ddgs>=9.0.0
45
+ Requires-Dist: fastapi>=0.115.0
46
+ Requires-Dist: pydantic>=2.0.0
47
+ Requires-Dist: python-dotenv>=1.0.0
48
+ Requires-Dist: requests>=2.32.0
49
+ Requires-Dist: spotify-soundtrack-mcp>=1.0.0
50
+ Requires-Dist: spotipy>=2.26.0
51
+ Requires-Dist: uvicorn>=0.30.0
52
+ Description-Content-Type: text/markdown
53
+
54
+ # spotify-mcp-web
55
+
56
+ [![PyPI](https://img.shields.io/pypi/v/spotify-mcp-web)](https://pypi.org/project/spotify-mcp-web/)
57
+ [![Python](https://img.shields.io/pypi/pyversions/spotify-mcp-web)](https://pypi.org/project/spotify-mcp-web/)
58
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE.md)
59
+
60
+ > **Soundtrack Curator & Staging Studio** — a self-hosted FastAPI web application for Spotify playlist curation, TMDB filmography browsing, and MCP tools management. Pairs with [spotify-soundtrack-mcp](https://pypi.org/project/spotify-soundtrack-mcp/).
61
+
62
+ ---
63
+
64
+ ## Installation
65
+
66
+ ```bash
67
+ pip install spotify-mcp-web
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Quick Start
73
+
74
+ ### 1. Configure credentials
75
+
76
+ Create a `.env` file in your working directory:
77
+
78
+ ```env
79
+ # Spotify Developer App credentials (PKCE — no secret needed!)
80
+ SPOTIPY_CLIENT_ID=your_spotify_client_id_here
81
+ SPOTIPY_REDIRECT_URI=http://127.0.0.1:8888/callback
82
+
83
+ # TMDB (optional, enables cinema/filmography features)
84
+ TMDB_API_KEY=your_tmdb_api_key_here
85
+ ```
86
+
87
+ > **Important:** In your [Spotify Developer Dashboard](https://developer.spotify.com/dashboard), add `http://127.0.0.1:8888/callback` as a Redirect URI.
88
+
89
+ ### 2. Start the Studio
90
+
91
+ ```bash
92
+ soundtrack-studio
93
+ ```
94
+
95
+ This starts the web app at **http://127.0.0.1:8000** and opens it in your browser automatically.
96
+
97
+ ---
98
+
99
+ ## Features
100
+
101
+ - 🎬 **Cinema Filmography** — Search actors/movies via TMDB and build soundtracks automatically
102
+ - 🎵 **Playlist Curation** — Create, merge, deduplicate, sort, split, and export Spotify playlists
103
+ - 🎚️ **Playback Controls** — Control Spotify Connect devices, queue management, volume/shuffle/repeat
104
+ - 📊 **Taste Analytics** — Top tracks, artists, listening patterns, playlist comparisons
105
+ - 📚 **Library Management** — Saved tracks & albums, library browsing
106
+ - 🔍 **Catalog Browsing** — Artist, album, and track lookup
107
+
108
+ ---
109
+
110
+ ## Environment Variables
111
+
112
+ | Variable | Required | Description |
113
+ |---|---|---|
114
+ | `SPOTIPY_CLIENT_ID` | ✅ | Spotify app Client ID |
115
+ | `SPOTIPY_REDIRECT_URI` | ✅ | Must match Spotify dashboard (default: `http://127.0.0.1:8888/callback`) |
116
+ | `TMDB_API_KEY` | Optional | TMDB v3 API key |
117
+ | `TMDB_READ_ACCESS_TOKEN` | Optional | TMDB v4 Bearer token (alternative to API key) |
118
+ | `HOST` | Optional | Bind host (default `127.0.0.1`) |
119
+ | `PORT` | Optional | Bind port (default `8000`) |
120
+ | `OPEN_BROWSER` | Optional | Set to `false` to suppress auto-open |
121
+ | `SOUNDTRACK_TEMPLATES_DIR` | Optional | Custom path to HTML templates directory |
122
+
123
+ ---
124
+
125
+ ## Running as a Remote Server
126
+
127
+ ```bash
128
+ HOST=0.0.0.0 PORT=8080 OPEN_BROWSER=false soundtrack-studio
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Pairing with the MCP Agent
134
+
135
+ Install both packages to get the full experience:
136
+
137
+ ```bash
138
+ pip install spotify-soundtrack-mcp spotify-mcp-web
139
+ ```
140
+
141
+ - `spotify-mcp` — starts the agent (for Claude Desktop / Cursor)
142
+ - `soundtrack-studio` — starts the web UI
143
+
144
+ ---
145
+
146
+ ## Links
147
+
148
+ - [GitHub Repository](https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server)
149
+ - [MCP Agent Package (spotify-soundtrack-mcp)](https://pypi.org/project/spotify-soundtrack-mcp/)
150
+ - [Report Issues](https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server/issues)
@@ -0,0 +1,97 @@
1
+ # spotify-mcp-web
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/spotify-mcp-web)](https://pypi.org/project/spotify-mcp-web/)
4
+ [![Python](https://img.shields.io/pypi/pyversions/spotify-mcp-web)](https://pypi.org/project/spotify-mcp-web/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE.md)
6
+
7
+ > **Soundtrack Curator & Staging Studio** — a self-hosted FastAPI web application for Spotify playlist curation, TMDB filmography browsing, and MCP tools management. Pairs with [spotify-soundtrack-mcp](https://pypi.org/project/spotify-soundtrack-mcp/).
8
+
9
+ ---
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ pip install spotify-mcp-web
15
+ ```
16
+
17
+ ---
18
+
19
+ ## Quick Start
20
+
21
+ ### 1. Configure credentials
22
+
23
+ Create a `.env` file in your working directory:
24
+
25
+ ```env
26
+ # Spotify Developer App credentials (PKCE — no secret needed!)
27
+ SPOTIPY_CLIENT_ID=your_spotify_client_id_here
28
+ SPOTIPY_REDIRECT_URI=http://127.0.0.1:8888/callback
29
+
30
+ # TMDB (optional, enables cinema/filmography features)
31
+ TMDB_API_KEY=your_tmdb_api_key_here
32
+ ```
33
+
34
+ > **Important:** In your [Spotify Developer Dashboard](https://developer.spotify.com/dashboard), add `http://127.0.0.1:8888/callback` as a Redirect URI.
35
+
36
+ ### 2. Start the Studio
37
+
38
+ ```bash
39
+ soundtrack-studio
40
+ ```
41
+
42
+ This starts the web app at **http://127.0.0.1:8000** and opens it in your browser automatically.
43
+
44
+ ---
45
+
46
+ ## Features
47
+
48
+ - 🎬 **Cinema Filmography** — Search actors/movies via TMDB and build soundtracks automatically
49
+ - 🎵 **Playlist Curation** — Create, merge, deduplicate, sort, split, and export Spotify playlists
50
+ - 🎚️ **Playback Controls** — Control Spotify Connect devices, queue management, volume/shuffle/repeat
51
+ - 📊 **Taste Analytics** — Top tracks, artists, listening patterns, playlist comparisons
52
+ - 📚 **Library Management** — Saved tracks & albums, library browsing
53
+ - 🔍 **Catalog Browsing** — Artist, album, and track lookup
54
+
55
+ ---
56
+
57
+ ## Environment Variables
58
+
59
+ | Variable | Required | Description |
60
+ |---|---|---|
61
+ | `SPOTIPY_CLIENT_ID` | ✅ | Spotify app Client ID |
62
+ | `SPOTIPY_REDIRECT_URI` | ✅ | Must match Spotify dashboard (default: `http://127.0.0.1:8888/callback`) |
63
+ | `TMDB_API_KEY` | Optional | TMDB v3 API key |
64
+ | `TMDB_READ_ACCESS_TOKEN` | Optional | TMDB v4 Bearer token (alternative to API key) |
65
+ | `HOST` | Optional | Bind host (default `127.0.0.1`) |
66
+ | `PORT` | Optional | Bind port (default `8000`) |
67
+ | `OPEN_BROWSER` | Optional | Set to `false` to suppress auto-open |
68
+ | `SOUNDTRACK_TEMPLATES_DIR` | Optional | Custom path to HTML templates directory |
69
+
70
+ ---
71
+
72
+ ## Running as a Remote Server
73
+
74
+ ```bash
75
+ HOST=0.0.0.0 PORT=8080 OPEN_BROWSER=false soundtrack-studio
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Pairing with the MCP Agent
81
+
82
+ Install both packages to get the full experience:
83
+
84
+ ```bash
85
+ pip install spotify-soundtrack-mcp spotify-mcp-web
86
+ ```
87
+
88
+ - `spotify-mcp` — starts the agent (for Claude Desktop / Cursor)
89
+ - `soundtrack-studio` — starts the web UI
90
+
91
+ ---
92
+
93
+ ## Links
94
+
95
+ - [GitHub Repository](https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server)
96
+ - [MCP Agent Package (spotify-soundtrack-mcp)](https://pypi.org/project/spotify-soundtrack-mcp/)
97
+ - [Report Issues](https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server/issues)
@@ -0,0 +1,55 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "spotify-mcp-web"
7
+ version = "1.0.0"
8
+ description = "Soundtrack Curator & Staging Studio — a self-hosted FastAPI web app for Spotify playlist curation, TMDB filmography, and MCP tools management."
9
+ readme = "README.md"
10
+ license = { file = "LICENSE.md" }
11
+ requires-python = ">=3.10"
12
+ authors = [{ name = "Chiru144" }]
13
+ keywords = ["spotify", "fastapi", "soundtrack", "tmdb", "playlist", "web", "mcp", "studio"]
14
+ classifiers = [
15
+ "Development Status :: 5 - Production/Stable",
16
+ "Intended Audience :: Developers",
17
+ "Intended Audience :: End Users/Desktop",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.10",
21
+ "Programming Language :: Python :: 3.11",
22
+ "Programming Language :: Python :: 3.12",
23
+ "Topic :: Multimedia :: Sound/Audio",
24
+ "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
25
+ ]
26
+ dependencies = [
27
+ "fastapi>=0.115.0",
28
+ "uvicorn>=0.30.0",
29
+ "spotipy>=2.26.0",
30
+ "python-dotenv>=1.0.0",
31
+ "requests>=2.32.0",
32
+ "beautifulsoup4>=4.13.0",
33
+ "ddgs>=9.0.0",
34
+ "pydantic>=2.0.0",
35
+ "spotify-soundtrack-mcp>=1.0.0",
36
+ ]
37
+
38
+ [project.urls]
39
+ Homepage = "https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server"
40
+ Repository = "https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server"
41
+ "Bug Tracker" = "https://github.com/Chiru144/Spotify-MCP-Web-MCP-Server/issues"
42
+
43
+ [project.scripts]
44
+ soundtrack-studio = "spotify_mcp_web.cli:run"
45
+
46
+ [tool.hatch.build.targets.wheel]
47
+ packages = ["spotify_mcp_web"]
48
+
49
+ [tool.hatch.build.targets.sdist]
50
+ include = [
51
+ "spotify_mcp_web/",
52
+ "README.md",
53
+ "LICENSE.md",
54
+ ".env.sample",
55
+ ]
@@ -0,0 +1,20 @@
1
+ """
2
+ spotify-mcp-web
3
+ ===============
4
+ Soundtrack Curator & Staging Studio — self-hosted FastAPI web app.
5
+
6
+ Quick start::
7
+
8
+ pip install spotify-mcp-web
9
+ soundtrack-studio
10
+ # → Opens http://127.0.0.1:8000 in your browser
11
+ """
12
+
13
+ from importlib.metadata import version, PackageNotFoundError
14
+
15
+ try:
16
+ __version__ = version("spotify-mcp-web")
17
+ except PackageNotFoundError:
18
+ __version__ = "0.0.0"
19
+
20
+ __all__ = ["__version__"]
@@ -0,0 +1,56 @@
1
+ """
2
+ app.py — FastAPI application factory for the Soundtrack Studio.
3
+
4
+ This module wraps the existing mcp-soundtrack-app/server.py logic,
5
+ resolving template paths relative to the installed package rather than
6
+ the source tree.
7
+ """
8
+
9
+ import os
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ # ---------------------------------------------------------------------------
14
+ # Resolve template directory: prefer the package-bundled templates,
15
+ # then fall back to a user-provided path via env var.
16
+ # ---------------------------------------------------------------------------
17
+ _PKG_DIR = Path(__file__).parent
18
+ _TEMPLATES_DIR = _PKG_DIR / "templates"
19
+
20
+ if not _TEMPLATES_DIR.exists():
21
+ # Allow overriding with SOUNDTRACK_TEMPLATES_DIR env var
22
+ _env_dir = os.getenv("SOUNDTRACK_TEMPLATES_DIR")
23
+ if _env_dir:
24
+ _TEMPLATES_DIR = Path(_env_dir)
25
+ else:
26
+ raise RuntimeError(
27
+ f"[spotify-mcp-web] Templates directory not found at {_TEMPLATES_DIR}.\n"
28
+ "Reinstall the package or set SOUNDTRACK_TEMPLATES_DIR to your templates folder."
29
+ )
30
+
31
+ # Make the templates path available to the server module
32
+ os.environ.setdefault("SOUNDTRACK_TEMPLATES_DIR", str(_TEMPLATES_DIR))
33
+
34
+
35
+ def create_app():
36
+ """
37
+ Create and return the Soundtrack Curator & Staging Studio FastAPI application.
38
+
39
+ The app is loaded from the bundled server module. Template paths are
40
+ resolved relative to this installed package.
41
+ """
42
+ import importlib.util
43
+
44
+ server_path = _PKG_DIR / "server.py"
45
+ spec = importlib.util.spec_from_file_location("spotify_mcp_web_server", server_path)
46
+ if not spec or not spec.loader:
47
+ raise RuntimeError(f"[spotify-mcp-web] Could not load server module from {server_path}")
48
+
49
+ module = importlib.util.module_from_spec(spec)
50
+ spec.loader.exec_module(module)
51
+
52
+ app = getattr(module, "app", None)
53
+ if app is None:
54
+ raise RuntimeError("[spotify-mcp-web] 'app' not found in bundled server module.")
55
+
56
+ return app
@@ -0,0 +1,73 @@
1
+ """
2
+ cli.py — Entry point for the spotify-mcp-web package.
3
+
4
+ Console script: `soundtrack-studio`
5
+ Launches the Soundtrack Curator & Staging Studio FastAPI app with Uvicorn.
6
+ """
7
+
8
+ import os
9
+ import sys
10
+ import webbrowser
11
+ import threading
12
+ import time
13
+ from pathlib import Path
14
+
15
+
16
+ def _setup_env():
17
+ """Load .env from cwd or home config dir."""
18
+ from dotenv import load_dotenv
19
+
20
+ cwd_env = Path.cwd() / ".env"
21
+ home_env = Path.home() / ".spotify-mcp" / ".env"
22
+
23
+ if cwd_env.exists():
24
+ load_dotenv(dotenv_path=cwd_env)
25
+ elif home_env.exists():
26
+ load_dotenv(dotenv_path=home_env)
27
+ else:
28
+ load_dotenv()
29
+
30
+ client_id = os.getenv("SPOTIPY_CLIENT_ID") or os.getenv("SPOTIFY_CLIENT_ID")
31
+ if not client_id:
32
+ print(
33
+ "\n[soundtrack-studio] ⚠️ No SPOTIPY_CLIENT_ID found.\n"
34
+ "Create a .env file in your working directory:\n\n"
35
+ " SPOTIPY_CLIENT_ID=your_client_id_here\n"
36
+ " SPOTIPY_REDIRECT_URI=http://127.0.0.1:8888/callback\n\n"
37
+ "Get yours at https://developer.spotify.com/dashboard\n",
38
+ file=sys.stderr,
39
+ )
40
+
41
+
42
+ def run():
43
+ """
44
+ Console script: `soundtrack-studio`
45
+
46
+ Starts the Soundtrack Curator & Staging Studio web application on
47
+ http://127.0.0.1:8000 (or the port specified by the PORT env var)
48
+ and opens it in your default browser.
49
+ """
50
+ _setup_env()
51
+
52
+ import uvicorn
53
+ from spotify_mcp_web.app import create_app
54
+
55
+ host = os.getenv("HOST", "127.0.0.1")
56
+ port = int(os.getenv("PORT", "8000"))
57
+ open_browser = os.getenv("OPEN_BROWSER", "true").strip().lower() not in ("0", "false", "no")
58
+
59
+ app = create_app()
60
+
61
+ url = f"http://{host}:{port}"
62
+ print(f"\n[Soundtrack Studio] Starting at {url}\n", file=sys.stderr)
63
+
64
+ if open_browser:
65
+ def _open():
66
+ time.sleep(1.2)
67
+ try:
68
+ webbrowser.open(url)
69
+ except Exception:
70
+ pass
71
+ threading.Thread(target=_open, daemon=True).start()
72
+
73
+ uvicorn.run(app, host=host, port=port, log_level="warning", access_log=False)