File size: 10,090 Bytes
9a5da81
fadefaf
ea4a110
 
fadefaf
6f71a51
fadefaf
 
ea4a110
fadefaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea4a110
fadefaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f71a51
fadefaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
import gradio as gr
import yt_dlp
import os

def run_yt_dlp_command(command):
    try:
        yt_dlp.main(command.split())
        return "Download completed successfully!"
    except Exception as e:
        return f"An error occurred: {str(e)}"

def list_formats(url):
    return run_yt_dlp_command(f"yt-dlp -F {url}")

def download_mp3_max_quality(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --postprocessor-args \"-b:a 320k\" -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def basic_high_quality_mp3(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def download_custom_bitrate(url, bitrate):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --postprocessor-args \"-b:a {bitrate}k\" -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def download_with_metadata(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --embed-metadata -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def download_playlist(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(playlist_title)s/%(title)s.%(ext)s\" {url}")

def download_playlist_range(url, range):
    return run_yt_dlp_command(f"yt-dlp --playlist-items {range} -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(playlist_title)s/%(title)s.%(ext)s\" {url}")

def download_hq_soundcloud(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/SoundCloud/%(uploader)s - %(title)s.%(ext)s\" {url}")

def embed_album_art(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --embed-thumbnail --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def download_opus(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format opus -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def skip_downloaded_files(url):
    return run_yt_dlp_command(f"yt-dlp --download-archive \"P:/Local Music/downloaded.txt\" -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def download_multiple_files(urls):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --add-metadata --embed-thumbnail --write-description --postprocessor-args \"-b:a 320k\" -o \"P:/Local Music/%(title)s.%(ext)s\" {' '.join(urls.split(','))}")

def download_with_chapters(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --split-chapters -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def extract_portion(url, start, end):
    return run_yt_dlp_command(f"yt-dlp -f bestvideo+bestaudio --external-downloader ffmpeg --external-downloader-args \"ffmpeg_i:-ss {start} -to {end}\" -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def update_metadata(url):
    return run_yt_dlp_command(f"yt-dlp --download-archive \"P:/Local Music/downloaded.txt\" --skip-download --embed-metadata --embed-thumbnail --write-description {url}")

def auto_rename_duplicates(url):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --force-overwrites -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def download_from_url_list(file_path):
    return run_yt_dlp_command(f"yt-dlp -a \"{file_path}\" -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 -o \"P:/Local Music/%(title)s.%(ext)s\"")

def limit_download_speed(url, speed):
    return run_yt_dlp_command(f"yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --rate-limit {speed} -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

def download_youtube_transcript(url, format):
    if format == "text":
        return run_yt_dlp_command(f"yt-dlp --write-auto-subs --sub-lang en --skip-download -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")
    elif format == "markdown":
        return run_yt_dlp_command(f"yt-dlp --write-auto-subs --sub-lang en --skip-download --convert-subs srt -o \"P:/Local Music/%(title)s.md\" {url}")

def download_video_info(url):
    return run_yt_dlp_command(f"yt-dlp --write-info-json --skip-download -o \"P:/Local Music/%(title)s.json\" {url}")

def download_age_restricted_content(url, username, password):
    return run_yt_dlp_command(f"yt-dlp --username \"{username}\" --password \"{password}\" -f bestvideo+bestaudio -o \"P:/Local Music/%(title)s.%(ext)s\" {url}")

# Define the Gradio interface
with gr.Blocks() as demo:
    gr.Markdown("# YT-DLP Download Interface")
    
    with gr.Tab("General Commands"):
        with gr.Row():
            url_general = gr.Textbox(label="Video URL")
            btn_list_formats = gr.Button("List Formats")
            btn_list_formats.click(list_formats, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            btn_mp3_max_quality = gr.Button("Download MP3 Max Quality")
            btn_mp3_max_quality.click(download_mp3_max_quality, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            btn_basic_mp3 = gr.Button("Basic High-Quality MP3")
            btn_basic_mp3.click(basic_high_quality_mp3, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            bitrate = gr.Textbox(label="Custom Bitrate (e.g., 192)")
            btn_custom_bitrate = gr.Button("Download Custom Bitrate")
            btn_custom_bitrate.click(download_custom_bitrate, inputs=[url_general, bitrate], outputs="text_box_output")
        
        with gr.Row():
            btn_metadata = gr.Button("Download with Metadata")
            btn_metadata.click(download_with_metadata, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            btn_playlist = gr.Button("Download Playlist")
            btn_playlist.click(download_playlist, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            playlist_range = gr.Textbox(label="Playlist Range (e.g., 1-5)")
            btn_playlist_range = gr.Button("Download Playlist Range")
            btn_playlist_range.click(download_playlist_range, inputs=[url_general, playlist_range], outputs="text_box_output")
        
        with gr.Row():
            btn_hq_soundcloud = gr.Button("Download HQ from SoundCloud")
            btn_hq_soundcloud.click(download_hq_soundcloud, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            btn_album_art = gr.Button("Embed Album Art")
            btn_album_art.click(embed_album_art, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            btn_opus = gr.Button("Download Opus")
            btn_opus.click(download_opus, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            btn_skip_downloaded = gr.Button("Skip Downloaded Files")
            btn_skip_downloaded.click(skip_downloaded_files, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            urls = gr.Textbox(label="Multiple URLs (comma-separated)")
            btn_multiple_files = gr.Button("Download Multiple Files")
            btn_multiple_files.click(download_multiple_files, inputs=urls, outputs="text_box_output")
        
        with gr.Row():
            btn_chapters = gr.Button("Download with Chapters")
            btn_chapters.click(download_with_chapters, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            start_time = gr.Textbox(label="Start Time (e.g., 00:01:00)")
            end_time = gr.Textbox(label="End Time (e.g., 00:05:00)")
            btn_extract_portion = gr.Button("Extract Portion")
            btn_extract_portion.click(extract_portion, inputs=[url_general, start_time, end_time], outputs="text_box_output")
        
        with gr.Row():
            btn_update_metadata = gr.Button("Update Metadata")
            btn_update_metadata.click(update_metadata, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            btn_auto_rename = gr.Button("Auto-Rename Duplicates")
            btn_auto_rename.click(auto_rename_duplicates, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            url_list = gr.Textbox(label="URL List File Path")
            btn_url_list = gr.Button("Download from URL List")
            btn_url_list.click(download_from_url_list, inputs=url_list, outputs="text_box_output")
        
        with gr.Row():
            speed_limit = gr.Textbox(label="Download Speed (e.g., 1M)")
            btn_limit_speed = gr.Button("Limit Download Speed")
            btn_limit_speed.click(limit_download_speed, inputs=[url_general, speed_limit], outputs="text_box_output")
        
        with gr.Row():
            transcript_format = gr.Dropdown(["text", "markdown"], label="Transcript Format")
            btn_transcript = gr.Button("Download Transcript")
            btn_transcript.click(download_youtube_transcript, inputs=[url_general, transcript_format], outputs="text_box_output")
        
        with gr.Row():
            btn_video_info = gr.Button("Download Video Info")
            btn_video_info.click(download_video_info, inputs=url_general, outputs="text_box_output")
        
        with gr.Row():
            youtube_username = gr.Textbox(label="YouTube Username")
            youtube_password = gr.Textbox(label="YouTube Password", type="password")
            btn_age_restricted = gr.Button("Download Age-Restricted Content")
            btn_age_restricted.click(download_age_restricted_content, inputs=[url_general, youtube_username, youtube_password], outputs="text_box_output")
    
    text_box_output = gr.Textbox(label="Output")

# Launch the Gradio app
demo.launch()