| import gradio as gr | |
| from pytube import Playlist, YouTube | |
| import os | |
| def download_audio(url): | |
| playlist = Playlist(url) | |
| audio_files = [] | |
| for video_url in playlist.video_urls: | |
| yt = YouTube(video_url) | |
| stream = yt.streams.filter(only_audio=True).first() | |
| audio_file = stream.download(output_path=".", filename=f"{yt.title}.mp3") | |
| audio_files.append(audio_file) | |
| return audio_files | |
| def create_player(url): | |
| audio_files = download_audio(url) | |
| return audio_files, audio_files[0] if audio_files else None | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| url_input = gr.Textbox(label="YouTube Playlist URL") | |
| submit_button = gr.Button("Load Playlist") | |
| with gr.Row(): | |
| track_dropdown = gr.Dropdown(label="Select a track") | |
| audio_player = gr.Audio() | |
| def update_player(url): | |
| audio_files, first_audio = create_player(url) | |
| track_dropdown.update(choices=audio_files) | |
| audio_player.update(value=first_audio) | |
| return audio_files, first_audio | |
| submit_button.click(update_player, inputs=url_input, outputs=[track_dropdown, audio_player]) | |
| demo.launch() | |