Spaces:
Sleeping
Sleeping
File size: 4,540 Bytes
147c80a 1c67333 0849a69 105e5dd 0849a69 105e5dd 0849a69 105e5dd 0849a69 105e5dd 0849a69 6542b78 0849a69 105e5dd 0849a69 105e5dd 0849a69 c846fe2 |
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 |
import gradio as gr
import subprocess
import os
import logging
import pyperclip
logging.basicConfig(level=logging.INFO)
DOWNLOAD_FOLDER = os.path.expanduser("./Downloads")
def create_readme():
"""Creates a readme.txt file with the specified text"""
readme_path = os.path.join(DOWNLOAD_FOLDER, 'readme.txt')
try:
with open(readme_path, 'w') as readme_file:
readme_file.write("Android copy the .mp3 to the ringtones folder and reboot device. iPhone drag and drop the .m4r file in iTunes and sync device.")
return f"readme.txt created at: {readme_path}"
except Exception as e:
return f"Failed to create readme.txt: {str(e)}"
def download_video(url):
try:
output_path = os.path.join(DOWNLOAD_FOLDER, '%(title)s.mp4')
command = ['yt-dlp', '-f', 'mp4', '-o', output_path, url]
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
if process.returncode == 0:
video_filename = get_video_filename(output_path)
if video_filename:
return f"Video downloaded: {video_filename}\n" + create_readme()
else:
return "Error: Video file not found."
else:
return f"Error downloading video: {stderr.decode()}"
except Exception as e:
return f"Failed to download video: {str(e)}"
def android_download():
try:
video_filename = get_video_filename(f'{DOWNLOAD_FOLDER}/%(title)s.mp4')
if video_filename:
command = ['ffmpeg', '-i', video_filename, '-t', '20', '-q:a', '0', '-map', 'a', f'{DOWNLOAD_FOLDER}/AndroidRingtone.mp3']
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
if process.returncode == 0:
return "Android ringtone created successfully"
else:
return f"Error creating Android ringtone: {stderr.decode()}"
else:
return "Error: Video file not found for Android ringtone."
except Exception as e:
return f"Failed to create Android ringtone: {str(e)}"
def iphone_download():
try:
command = ['ffmpeg', '-i', f'{DOWNLOAD_FOLDER}/AndroidRingtone.mp3', '-t', '20', '-acodec', 'aac', '-b:a', '128k', '-f', 'mp4', f'{DOWNLOAD_FOLDER}/iPhoneRingtone.m4r']
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
if process.returncode == 0:
return "iPhone ringtone created successfully"
else:
return f"Error creating iPhone ringtone: {stderr.decode()}"
except Exception as e:
return f"Failed to create iPhone ringtone: {str(e)}"
def get_video_filename(output_path):
"""Finds and returns the actual downloaded filename"""
title = os.path.basename(output_path).replace('%(title)s', '').strip()
video_filename = os.path.join(DOWNLOAD_FOLDER, f"{title}.mp4")
if os.path.exists(video_filename):
return video_filename
else:
for file in os.listdir(DOWNLOAD_FOLDER):
if file.endswith(".mp4"):
return os.path.join(DOWNLOAD_FOLDER, file)
return None
def paste_from_clipboard():
"""Get URL from clipboard"""
return pyperclip.paste()
def clear_input():
"""Clear the input and output"""
return "", ""
# Gradio interface functions
def download_video_ui(url):
return download_video(url)
def android_ringtone_ui():
return android_download()
def iphone_ringtone_ui():
return iphone_download()
# Build the Gradio interface
iface = gr.Interface(
fn=download_video_ui,
inputs=gr.Textbox(label="Enter YouTube URL", placeholder="Paste URL here"),
outputs=gr.Textbox(label="Status"),
live=True
)
# Add additional buttons for Android and iPhone ringtone creation
iface.add_component(gr.Button("Create Android Ringtone", variant="primary").click(android_ringtone_ui, outputs="status"))
iface.add_component(gr.Button("Create iPhone Ringtone", variant="primary").click(iphone_ringtone_ui, outputs="status"))
iface.add_component(gr.Button("Paste URL from Clipboard", variant="secondary").click(paste_from_clipboard, inputs="url", outputs="url"))
iface.add_component(gr.Button("Clear", variant="secondary").click(clear_input, outputs=["url", "status"]))
# Launch the Gradio interface on Hugging Face
iface.launch(share=True)
|