Claude commited on
Commit
986afdd
·
unverified ·
1 Parent(s): caba60f

feat: Add Docker support with hola-proxy for YouTube downloads

Browse files

- Create Dockerfile with hola-proxy for residential IP proxying
- Add PROXY_URL environment variable support to yt-dlp
- Update README to use Docker SDK

This enables YouTube downloads from HuggingFace Spaces by routing
traffic through Hola's residential proxy network.

Files changed (3) hide show
  1. Dockerfile +39 -0
  2. README.md +1 -3
  3. app.py +10 -0
Dockerfile ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ # Install system dependencies
4
+ RUN apt-get update && apt-get install -y \
5
+ ffmpeg \
6
+ wget \
7
+ && rm -rf /var/lib/apt/lists/*
8
+
9
+ # Install hola-proxy
10
+ RUN wget -O /usr/local/bin/hola-proxy \
11
+ https://github.com/Snawoot/hola-proxy/releases/download/v1.14.0/hola-proxy.linux-amd64 \
12
+ && chmod +x /usr/local/bin/hola-proxy
13
+
14
+ # Create app directory
15
+ WORKDIR /app
16
+
17
+ # Copy requirements first for caching
18
+ COPY requirements.txt .
19
+ RUN pip install --no-cache-dir -r requirements.txt
20
+
21
+ # Copy application code
22
+ COPY . .
23
+
24
+ # Create startup script
25
+ RUN echo '#!/bin/bash\n\
26
+ # Start hola-proxy in background with residential IPs\n\
27
+ hola-proxy -country us -proxy-type lum -bind-address 127.0.0.1:8080 &\n\
28
+ sleep 2\n\
29
+ # Start the Gradio app\n\
30
+ python app.py\n\
31
+ ' > /app/start.sh && chmod +x /app/start.sh
32
+
33
+ # Expose Gradio port
34
+ EXPOSE 7860
35
+
36
+ # Set environment variable for proxy
37
+ ENV PROXY_URL=http://127.0.0.1:8080
38
+
39
+ CMD ["/app/start.sh"]
README.md CHANGED
@@ -3,9 +3,7 @@ title: Video Analyzer
3
  emoji: "🎬"
4
  colorFrom: blue
5
  colorTo: purple
6
- sdk: gradio
7
- sdk_version: "5.9.0"
8
- python_version: "3.11"
9
  app_file: app.py
10
  pinned: false
11
  license: mit
 
3
  emoji: "🎬"
4
  colorFrom: blue
5
  colorTo: purple
6
+ sdk: docker
 
 
7
  app_file: app.py
8
  pinned: false
9
  license: mit
app.py CHANGED
@@ -114,6 +114,11 @@ CHAT_MODELS = [
114
  ]
115
 
116
 
 
 
 
 
 
117
  def download_video(url: str, output_dir: str) -> list[dict]:
118
  """Download video from YouTube URL (video or playlist)."""
119
  ydl_opts = {
@@ -125,6 +130,11 @@ def download_video(url: str, output_dir: str) -> list[dict]:
125
  "retries": 3,
126
  }
127
 
 
 
 
 
 
128
  downloaded = []
129
  try:
130
  with yt_dlp.YoutubeDL(ydl_opts) as ydl:
 
114
  ]
115
 
116
 
117
+ def get_proxy_url() -> str | None:
118
+ """Get proxy URL from environment for YouTube downloads."""
119
+ return os.environ.get("PROXY_URL")
120
+
121
+
122
  def download_video(url: str, output_dir: str) -> list[dict]:
123
  """Download video from YouTube URL (video or playlist)."""
124
  ydl_opts = {
 
130
  "retries": 3,
131
  }
132
 
133
+ # Add proxy if configured
134
+ proxy_url = get_proxy_url()
135
+ if proxy_url:
136
+ ydl_opts["proxy"] = proxy_url
137
+
138
  downloaded = []
139
  try:
140
  with yt_dlp.YoutubeDL(ydl_opts) as ydl: