media-downloader 2.1.7__tar.gz → 2.1.9__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.

Potentially problematic release.


This version of media-downloader might be problematic. Click here for more details.

Files changed (22) hide show
  1. media_downloader-2.1.9/PKG-INFO +314 -0
  2. media_downloader-2.1.9/README.md +296 -0
  3. media_downloader-2.1.9/media_downloader/media_downloader_mcp.py +403 -0
  4. media_downloader-2.1.9/media_downloader.egg-info/PKG-INFO +314 -0
  5. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader.egg-info/requires.txt +1 -1
  6. {media_downloader-2.1.7 → media_downloader-2.1.9}/pyproject.toml +2 -2
  7. {media_downloader-2.1.7 → media_downloader-2.1.9}/requirements.txt +1 -1
  8. media_downloader-2.1.7/PKG-INFO +0 -211
  9. media_downloader-2.1.7/README.md +0 -193
  10. media_downloader-2.1.7/media_downloader/media_downloader_mcp.py +0 -192
  11. media_downloader-2.1.7/media_downloader.egg-info/PKG-INFO +0 -211
  12. {media_downloader-2.1.7 → media_downloader-2.1.9}/LICENSE +0 -0
  13. {media_downloader-2.1.7 → media_downloader-2.1.9}/MANIFEST.in +0 -0
  14. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader/__init__.py +0 -0
  15. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader/__main__.py +0 -0
  16. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader/media_downloader.py +0 -0
  17. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader.egg-info/SOURCES.txt +0 -0
  18. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader.egg-info/dependency_links.txt +0 -0
  19. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader.egg-info/entry_points.txt +0 -0
  20. {media_downloader-2.1.7 → media_downloader-2.1.9}/media_downloader.egg-info/top_level.txt +0 -0
  21. {media_downloader-2.1.7 → media_downloader-2.1.9}/setup.cfg +0 -0
  22. {media_downloader-2.1.7 → media_downloader-2.1.9}/tests/test_mcp.py +0 -0
@@ -0,0 +1,314 @@
1
+ Metadata-Version: 2.4
2
+ Name: media-downloader
3
+ Version: 2.1.9
4
+ Summary: Download audio/videos from the internet!
5
+ Author-email: Audel Rouhi <knucklessg1@gmail.com>
6
+ License: MIT
7
+ Classifier: Development Status :: 5 - Production/Stable
8
+ Classifier: License :: Public Domain
9
+ Classifier: Environment :: Console
10
+ Classifier: Operating System :: POSIX :: Linux
11
+ Classifier: Programming Language :: Python :: 3
12
+ Requires-Python: >=3.8
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: yt-dlp>=2025.9.26
16
+ Requires-Dist: fastmcp>=2.12.4
17
+ Dynamic: license-file
18
+
19
+ # Media Downloader
20
+
21
+ ![PyPI - Version](https://img.shields.io/pypi/v/media-downloader)
22
+ ![PyPI - Downloads](https://img.shields.io/pypi/dd/media-downloader)
23
+ ![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/media-downloader)
24
+ ![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/media-downloader)
25
+ ![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/media-downloader)
26
+ ![PyPI - License](https://img.shields.io/pypi/l/media-downloader)
27
+ ![GitHub](https://img.shields.io/github/license/Knuckles-Team/media-downloader)
28
+
29
+ ![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/media-downloader)
30
+ ![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/media-downloader)
31
+ ![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/media-downloader)
32
+ ![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/media-downloader)
33
+
34
+ ![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/media-downloader)
35
+ ![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/media-downloader)
36
+ ![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/media-downloader)
37
+ ![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/media-downloader)
38
+ ![PyPI - Wheel](https://img.shields.io/pypi/wheel/media-downloader)
39
+ ![PyPI - Implementation](https://img.shields.io/pypi/implementation/media-downloader)
40
+
41
+ *Version: 2.1.9*
42
+
43
+ Download videos and audio from the internet!
44
+
45
+ MCP Server Support!
46
+
47
+ This repository is actively maintained - Contributions are welcome!
48
+
49
+ ### Supports:
50
+ - YouTube
51
+ - Twitter
52
+ - Rumble
53
+ - BitChute
54
+ - Vimeo
55
+ - And More!
56
+
57
+ <details>
58
+ <summary><b>Usage:</b></summary>
59
+
60
+ ### CLI
61
+ | Short Flag | Long Flag | Description |
62
+ |------------|-------------|---------------------------------------------|
63
+ | -h | --help | See usage |
64
+ | -a | --audio | Download audio only |
65
+ | -c | --channel | YouTube Channel/User - Downloads all videos |
66
+ | -f | --file | File with video links |
67
+ | -l | --links | Comma separated links |
68
+ | -d | --directory | Location to save videos |
69
+
70
+ ```bash
71
+ media-downloader --file "C:\Users\videos.txt" --directory "C:\Users\Downloads" --channel "WhiteHouse" --links "URL1,URL2,URL3"
72
+ ```
73
+
74
+ ### MCP CLI
75
+
76
+ | Short Flag | Long Flag | Description |
77
+ |------------|------------------------------------|-----------------------------------------------------------------------------|
78
+ | -h | --help | Display help information |
79
+ | -t | --transport | Transport method: 'stdio', 'http', or 'sse' [legacy] (default: stdio) |
80
+ | -s | --host | Host address for HTTP transport (default: 0.0.0.0) |
81
+ | -p | --port | Port number for HTTP transport (default: 8000) |
82
+ | | --auth-type | Authentication type: 'none', 'static', 'jwt', 'oauth-proxy', 'oidc-proxy', 'remote-oauth' (default: none) |
83
+ | | --token-jwks-uri | JWKS URI for JWT verification |
84
+ | | --token-issuer | Issuer for JWT verification |
85
+ | | --token-audience | Audience for JWT verification |
86
+ | | --oauth-upstream-auth-endpoint | Upstream authorization endpoint for OAuth Proxy |
87
+ | | --oauth-upstream-token-endpoint | Upstream token endpoint for OAuth Proxy |
88
+ | | --oauth-upstream-client-id | Upstream client ID for OAuth Proxy |
89
+ | | --oauth-upstream-client-secret | Upstream client secret for OAuth Proxy |
90
+ | | --oauth-base-url | Base URL for OAuth Proxy |
91
+ | | --oidc-config-url | OIDC configuration URL |
92
+ | | --oidc-client-id | OIDC client ID |
93
+ | | --oidc-client-secret | OIDC client secret |
94
+ | | --oidc-base-url | Base URL for OIDC Proxy |
95
+ | | --remote-auth-servers | Comma-separated list of authorization servers for Remote OAuth |
96
+ | | --remote-base-url | Base URL for Remote OAuth |
97
+ | | --allowed-client-redirect-uris | Comma-separated list of allowed client redirect URIs |
98
+ | | --eunomia-type | Eunomia authorization type: 'none', 'embedded', 'remote' (default: none) |
99
+ | | --eunomia-policy-file | Policy file for embedded Eunomia (default: mcp_policies.json) |
100
+ | | --eunomia-remote-url | URL for remote Eunomia server |
101
+
102
+ ### Using as an MCP Server
103
+
104
+ The MCP Server can be run in two modes: `stdio` (for local testing) or `http` (for networked access). To start the server, use the following commands:
105
+
106
+ #### Run in stdio mode (default):
107
+ ```bash
108
+ media-downloader-mcp
109
+ ```
110
+
111
+ #### Run in HTTP mode:
112
+ ```bash
113
+ media-downloader-mcp --transport http --host 0.0.0.0 --port 8012
114
+ ```
115
+
116
+
117
+ AI Prompt:
118
+ ```text
119
+ Download me this video: https://youtube.com/watch?askdjfa
120
+ ```
121
+
122
+ AI Response:
123
+ ```text
124
+ Sure thing, the video has been downloaded to:
125
+
126
+ "C:\Users\User\Downloads\YouTube Video - Episode 1.mp4"
127
+ ```
128
+
129
+ ### Use in Python
130
+
131
+ ```python
132
+ # Import library
133
+ from media_downloader import MediaDownloader
134
+
135
+ # Set URL of video/audio here
136
+ url = "https://YootToob.com/video"
137
+
138
+ # Instantiate vide_downloader_instance
139
+ video_downloader_instance = MediaDownloader()
140
+
141
+ # Set the location to save the video
142
+ video_downloader_instance.set_save_path("C:/Users/you/Downloads")
143
+
144
+ # Add URL to download
145
+ video_downloader_instance.append_link(url)
146
+
147
+ # Download all videos appended
148
+ video_downloader_instance.download_all()
149
+ ```
150
+
151
+ ```python
152
+ # Optional - Set Audio to True, Default is False if unspecified.
153
+ video_downloader_instance.set_audio(audio=True)
154
+
155
+ # Optional - Open a file of video/audio URL(s)
156
+ video_downloader_instance.open_file("FILE")
157
+
158
+ # Optional - Enter a YouTube channel name and download their latest videos
159
+ video_downloader_instance.get_channel_videos("YT-Channel Name")
160
+ ```
161
+
162
+ ### Deploy MCP Server as a Service
163
+
164
+ The MCP server can be deployed using Docker, with configurable authentication, middleware, and Eunomia authorization.
165
+
166
+ #### Using Docker Run
167
+
168
+ ```bash
169
+ docker pull knucklessg1/media-downloader:latest
170
+
171
+ docker run -d \
172
+ --name media-downloader-mcp \
173
+ -p 8004:8004 \
174
+ -e HOST=0.0.0.0 \
175
+ -e PORT=8004 \
176
+ -e TRANSPORT=http \
177
+ -e AUTH_TYPE=none \
178
+ -e EUNOMIA_TYPE=none \
179
+ -e DOWNLOAD_DIRECTORY=/downloads \
180
+ -e AUDIO_ONLY=false \
181
+ -v "/home/genius/Downloads:/downloads" \
182
+ knucklessg1/media-downloader:latest
183
+ ```
184
+
185
+ For advanced authentication (e.g., JWT, OAuth Proxy, OIDC Proxy, Remote OAuth) or Eunomia, add the relevant environment variables:
186
+
187
+ ```bash
188
+ docker run -d \
189
+ --name media-downloader-mcp \
190
+ -p 8004:8004 \
191
+ -e HOST=0.0.0.0 \
192
+ -e PORT=8004 \
193
+ -e TRANSPORT=http \
194
+ -e AUTH_TYPE=oidc-proxy \
195
+ -e OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration \
196
+ -e OIDC_CLIENT_ID=your-client-id \
197
+ -e OIDC_CLIENT_SECRET=your-client-secret \
198
+ -e OIDC_BASE_URL=https://your-server.com \
199
+ -e ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/* \
200
+ -e EUNOMIA_TYPE=embedded \
201
+ -e EUNOMIA_POLICY_FILE=/app/mcp_policies.json \
202
+ -e DOWNLOAD_DIRECTORY=/downloads \
203
+ -e AUDIO_ONLY=false \
204
+ -v "/home/genius/Downloads:/downloads" \
205
+ knucklessg1/media-downloader:latest
206
+ ```
207
+
208
+ #### Using Docker Compose
209
+
210
+ Create a `docker-compose.yml` file:
211
+
212
+ ```yaml
213
+ services:
214
+ media-downloader-mcp:
215
+ image: knucklessg1/media-downloader:latest
216
+ environment:
217
+ - HOST=0.0.0.0
218
+ - PORT=8004
219
+ - TRANSPORT=http
220
+ - AUTH_TYPE=none
221
+ - EUNOMIA_TYPE=none
222
+ - DOWNLOAD_DIRECTORY=/downloads
223
+ - AUDIO_ONLY=false
224
+ volumes:
225
+ - "/home/genius/Downloads:/downloads"
226
+ ports:
227
+ - 8004:8004
228
+ ```
229
+
230
+ For advanced setups with authentication and Eunomia:
231
+
232
+ ```yaml
233
+ services:
234
+ media-downloader-mcp:
235
+ image: knucklessg1/media-downloader:latest
236
+ environment:
237
+ - HOST=0.0.0.0
238
+ - PORT=8004
239
+ - TRANSPORT=http
240
+ - AUTH_TYPE=oidc-proxy
241
+ - OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration
242
+ - OIDC_CLIENT_ID=your-client-id
243
+ - OIDC_CLIENT_SECRET=your-client-secret
244
+ - OIDC_BASE_URL=https://your-server.com
245
+ - ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/*
246
+ - EUNOMIA_TYPE=embedded
247
+ - EUNOMIA_POLICY_FILE=/app/mcp_policies.json
248
+ - DOWNLOAD_DIRECTORY=/downloads
249
+ - AUDIO_ONLY=false
250
+ ports:
251
+ - 8004:8004
252
+ volumes:
253
+ - ./mcp_policies.json:/app/mcp_policies.json
254
+ - "/home/genius/Downloads:/downloads"
255
+ ```
256
+
257
+ Run the service:
258
+
259
+ ```bash
260
+ docker-compose up -d
261
+ ```
262
+
263
+ #### Configure `mcp.json` for AI Integration
264
+
265
+
266
+ ```json
267
+ {
268
+ "mcpServers": {
269
+ "media_downloader": {
270
+ "command": "uv",
271
+ "args": [
272
+ "run",
273
+ "--with",
274
+ "media-downloader",
275
+ "media-downloader-mcp"
276
+ ],
277
+ "env": {
278
+ "DOWNLOAD_DIRECTORY": "~/Downloads", // Optional - Can be specified at prompt
279
+ "AUDIO_ONLY": false // Optional - Can be specified at prompt
280
+ },
281
+ "timeout": 300000
282
+ }
283
+ }
284
+ }
285
+
286
+ ```
287
+ </details>
288
+
289
+ <details>
290
+ <summary><b>Installation Instructions:</b></summary>
291
+
292
+ Install Python Package
293
+
294
+ ```bash
295
+ python -m pip install --upgrade media-downloader
296
+ ```
297
+
298
+ or
299
+
300
+ ```bash
301
+ uv pip install --upgrade media-downloader
302
+ ```
303
+
304
+ </details>
305
+
306
+ <details>
307
+ <summary><b>Repository Owners:</b></summary>
308
+
309
+
310
+ <img width="100%" height="180em" src="https://github-readme-stats.vercel.app/api?username=Knucklessg1&show_icons=true&hide_border=true&&count_private=true&include_all_commits=true" />
311
+
312
+ ![GitHub followers](https://img.shields.io/github/followers/Knucklessg1)
313
+ ![GitHub User's stars](https://img.shields.io/github/stars/Knucklessg1)
314
+ </details>
@@ -0,0 +1,296 @@
1
+ # Media Downloader
2
+
3
+ ![PyPI - Version](https://img.shields.io/pypi/v/media-downloader)
4
+ ![PyPI - Downloads](https://img.shields.io/pypi/dd/media-downloader)
5
+ ![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/media-downloader)
6
+ ![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/media-downloader)
7
+ ![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/media-downloader)
8
+ ![PyPI - License](https://img.shields.io/pypi/l/media-downloader)
9
+ ![GitHub](https://img.shields.io/github/license/Knuckles-Team/media-downloader)
10
+
11
+ ![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/media-downloader)
12
+ ![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/media-downloader)
13
+ ![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/media-downloader)
14
+ ![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/media-downloader)
15
+
16
+ ![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/media-downloader)
17
+ ![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/media-downloader)
18
+ ![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/media-downloader)
19
+ ![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/media-downloader)
20
+ ![PyPI - Wheel](https://img.shields.io/pypi/wheel/media-downloader)
21
+ ![PyPI - Implementation](https://img.shields.io/pypi/implementation/media-downloader)
22
+
23
+ *Version: 2.1.9*
24
+
25
+ Download videos and audio from the internet!
26
+
27
+ MCP Server Support!
28
+
29
+ This repository is actively maintained - Contributions are welcome!
30
+
31
+ ### Supports:
32
+ - YouTube
33
+ - Twitter
34
+ - Rumble
35
+ - BitChute
36
+ - Vimeo
37
+ - And More!
38
+
39
+ <details>
40
+ <summary><b>Usage:</b></summary>
41
+
42
+ ### CLI
43
+ | Short Flag | Long Flag | Description |
44
+ |------------|-------------|---------------------------------------------|
45
+ | -h | --help | See usage |
46
+ | -a | --audio | Download audio only |
47
+ | -c | --channel | YouTube Channel/User - Downloads all videos |
48
+ | -f | --file | File with video links |
49
+ | -l | --links | Comma separated links |
50
+ | -d | --directory | Location to save videos |
51
+
52
+ ```bash
53
+ media-downloader --file "C:\Users\videos.txt" --directory "C:\Users\Downloads" --channel "WhiteHouse" --links "URL1,URL2,URL3"
54
+ ```
55
+
56
+ ### MCP CLI
57
+
58
+ | Short Flag | Long Flag | Description |
59
+ |------------|------------------------------------|-----------------------------------------------------------------------------|
60
+ | -h | --help | Display help information |
61
+ | -t | --transport | Transport method: 'stdio', 'http', or 'sse' [legacy] (default: stdio) |
62
+ | -s | --host | Host address for HTTP transport (default: 0.0.0.0) |
63
+ | -p | --port | Port number for HTTP transport (default: 8000) |
64
+ | | --auth-type | Authentication type: 'none', 'static', 'jwt', 'oauth-proxy', 'oidc-proxy', 'remote-oauth' (default: none) |
65
+ | | --token-jwks-uri | JWKS URI for JWT verification |
66
+ | | --token-issuer | Issuer for JWT verification |
67
+ | | --token-audience | Audience for JWT verification |
68
+ | | --oauth-upstream-auth-endpoint | Upstream authorization endpoint for OAuth Proxy |
69
+ | | --oauth-upstream-token-endpoint | Upstream token endpoint for OAuth Proxy |
70
+ | | --oauth-upstream-client-id | Upstream client ID for OAuth Proxy |
71
+ | | --oauth-upstream-client-secret | Upstream client secret for OAuth Proxy |
72
+ | | --oauth-base-url | Base URL for OAuth Proxy |
73
+ | | --oidc-config-url | OIDC configuration URL |
74
+ | | --oidc-client-id | OIDC client ID |
75
+ | | --oidc-client-secret | OIDC client secret |
76
+ | | --oidc-base-url | Base URL for OIDC Proxy |
77
+ | | --remote-auth-servers | Comma-separated list of authorization servers for Remote OAuth |
78
+ | | --remote-base-url | Base URL for Remote OAuth |
79
+ | | --allowed-client-redirect-uris | Comma-separated list of allowed client redirect URIs |
80
+ | | --eunomia-type | Eunomia authorization type: 'none', 'embedded', 'remote' (default: none) |
81
+ | | --eunomia-policy-file | Policy file for embedded Eunomia (default: mcp_policies.json) |
82
+ | | --eunomia-remote-url | URL for remote Eunomia server |
83
+
84
+ ### Using as an MCP Server
85
+
86
+ The MCP Server can be run in two modes: `stdio` (for local testing) or `http` (for networked access). To start the server, use the following commands:
87
+
88
+ #### Run in stdio mode (default):
89
+ ```bash
90
+ media-downloader-mcp
91
+ ```
92
+
93
+ #### Run in HTTP mode:
94
+ ```bash
95
+ media-downloader-mcp --transport http --host 0.0.0.0 --port 8012
96
+ ```
97
+
98
+
99
+ AI Prompt:
100
+ ```text
101
+ Download me this video: https://youtube.com/watch?askdjfa
102
+ ```
103
+
104
+ AI Response:
105
+ ```text
106
+ Sure thing, the video has been downloaded to:
107
+
108
+ "C:\Users\User\Downloads\YouTube Video - Episode 1.mp4"
109
+ ```
110
+
111
+ ### Use in Python
112
+
113
+ ```python
114
+ # Import library
115
+ from media_downloader import MediaDownloader
116
+
117
+ # Set URL of video/audio here
118
+ url = "https://YootToob.com/video"
119
+
120
+ # Instantiate vide_downloader_instance
121
+ video_downloader_instance = MediaDownloader()
122
+
123
+ # Set the location to save the video
124
+ video_downloader_instance.set_save_path("C:/Users/you/Downloads")
125
+
126
+ # Add URL to download
127
+ video_downloader_instance.append_link(url)
128
+
129
+ # Download all videos appended
130
+ video_downloader_instance.download_all()
131
+ ```
132
+
133
+ ```python
134
+ # Optional - Set Audio to True, Default is False if unspecified.
135
+ video_downloader_instance.set_audio(audio=True)
136
+
137
+ # Optional - Open a file of video/audio URL(s)
138
+ video_downloader_instance.open_file("FILE")
139
+
140
+ # Optional - Enter a YouTube channel name and download their latest videos
141
+ video_downloader_instance.get_channel_videos("YT-Channel Name")
142
+ ```
143
+
144
+ ### Deploy MCP Server as a Service
145
+
146
+ The MCP server can be deployed using Docker, with configurable authentication, middleware, and Eunomia authorization.
147
+
148
+ #### Using Docker Run
149
+
150
+ ```bash
151
+ docker pull knucklessg1/media-downloader:latest
152
+
153
+ docker run -d \
154
+ --name media-downloader-mcp \
155
+ -p 8004:8004 \
156
+ -e HOST=0.0.0.0 \
157
+ -e PORT=8004 \
158
+ -e TRANSPORT=http \
159
+ -e AUTH_TYPE=none \
160
+ -e EUNOMIA_TYPE=none \
161
+ -e DOWNLOAD_DIRECTORY=/downloads \
162
+ -e AUDIO_ONLY=false \
163
+ -v "/home/genius/Downloads:/downloads" \
164
+ knucklessg1/media-downloader:latest
165
+ ```
166
+
167
+ For advanced authentication (e.g., JWT, OAuth Proxy, OIDC Proxy, Remote OAuth) or Eunomia, add the relevant environment variables:
168
+
169
+ ```bash
170
+ docker run -d \
171
+ --name media-downloader-mcp \
172
+ -p 8004:8004 \
173
+ -e HOST=0.0.0.0 \
174
+ -e PORT=8004 \
175
+ -e TRANSPORT=http \
176
+ -e AUTH_TYPE=oidc-proxy \
177
+ -e OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration \
178
+ -e OIDC_CLIENT_ID=your-client-id \
179
+ -e OIDC_CLIENT_SECRET=your-client-secret \
180
+ -e OIDC_BASE_URL=https://your-server.com \
181
+ -e ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/* \
182
+ -e EUNOMIA_TYPE=embedded \
183
+ -e EUNOMIA_POLICY_FILE=/app/mcp_policies.json \
184
+ -e DOWNLOAD_DIRECTORY=/downloads \
185
+ -e AUDIO_ONLY=false \
186
+ -v "/home/genius/Downloads:/downloads" \
187
+ knucklessg1/media-downloader:latest
188
+ ```
189
+
190
+ #### Using Docker Compose
191
+
192
+ Create a `docker-compose.yml` file:
193
+
194
+ ```yaml
195
+ services:
196
+ media-downloader-mcp:
197
+ image: knucklessg1/media-downloader:latest
198
+ environment:
199
+ - HOST=0.0.0.0
200
+ - PORT=8004
201
+ - TRANSPORT=http
202
+ - AUTH_TYPE=none
203
+ - EUNOMIA_TYPE=none
204
+ - DOWNLOAD_DIRECTORY=/downloads
205
+ - AUDIO_ONLY=false
206
+ volumes:
207
+ - "/home/genius/Downloads:/downloads"
208
+ ports:
209
+ - 8004:8004
210
+ ```
211
+
212
+ For advanced setups with authentication and Eunomia:
213
+
214
+ ```yaml
215
+ services:
216
+ media-downloader-mcp:
217
+ image: knucklessg1/media-downloader:latest
218
+ environment:
219
+ - HOST=0.0.0.0
220
+ - PORT=8004
221
+ - TRANSPORT=http
222
+ - AUTH_TYPE=oidc-proxy
223
+ - OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration
224
+ - OIDC_CLIENT_ID=your-client-id
225
+ - OIDC_CLIENT_SECRET=your-client-secret
226
+ - OIDC_BASE_URL=https://your-server.com
227
+ - ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/*
228
+ - EUNOMIA_TYPE=embedded
229
+ - EUNOMIA_POLICY_FILE=/app/mcp_policies.json
230
+ - DOWNLOAD_DIRECTORY=/downloads
231
+ - AUDIO_ONLY=false
232
+ ports:
233
+ - 8004:8004
234
+ volumes:
235
+ - ./mcp_policies.json:/app/mcp_policies.json
236
+ - "/home/genius/Downloads:/downloads"
237
+ ```
238
+
239
+ Run the service:
240
+
241
+ ```bash
242
+ docker-compose up -d
243
+ ```
244
+
245
+ #### Configure `mcp.json` for AI Integration
246
+
247
+
248
+ ```json
249
+ {
250
+ "mcpServers": {
251
+ "media_downloader": {
252
+ "command": "uv",
253
+ "args": [
254
+ "run",
255
+ "--with",
256
+ "media-downloader",
257
+ "media-downloader-mcp"
258
+ ],
259
+ "env": {
260
+ "DOWNLOAD_DIRECTORY": "~/Downloads", // Optional - Can be specified at prompt
261
+ "AUDIO_ONLY": false // Optional - Can be specified at prompt
262
+ },
263
+ "timeout": 300000
264
+ }
265
+ }
266
+ }
267
+
268
+ ```
269
+ </details>
270
+
271
+ <details>
272
+ <summary><b>Installation Instructions:</b></summary>
273
+
274
+ Install Python Package
275
+
276
+ ```bash
277
+ python -m pip install --upgrade media-downloader
278
+ ```
279
+
280
+ or
281
+
282
+ ```bash
283
+ uv pip install --upgrade media-downloader
284
+ ```
285
+
286
+ </details>
287
+
288
+ <details>
289
+ <summary><b>Repository Owners:</b></summary>
290
+
291
+
292
+ <img width="100%" height="180em" src="https://github-readme-stats.vercel.app/api?username=Knucklessg1&show_icons=true&hide_border=true&&count_private=true&include_all_commits=true" />
293
+
294
+ ![GitHub followers](https://img.shields.io/github/followers/Knucklessg1)
295
+ ![GitHub User's stars](https://img.shields.io/github/stars/Knucklessg1)
296
+ </details>