File size: 4,625 Bytes
147c80a
1c67333
0849a69
 
 
105e5dd
0849a69
105e5dd
fe3623b
f5d080d
 
fe3623b
f5d080d
 
105e5dd
0849a69
 
 
 
105e5dd
0849a69
 
 
 
 
 
fe3623b
0849a69
 
 
fe3623b
 
 
 
 
0849a69
 
 
 
 
 
 
 
 
6542b78
0849a69
 
 
105e5dd
0849a69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f5d080d
0849a69
 
 
 
 
 
 
105e5dd
0849a69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fe3623b
c3db4af
fe3623b
c3db4af
fe3623b
 
 
c3db4af
fe3623b
c3db4af
 
fe3623b
c3db4af
 
 
 
 
 
fe3623b
 
c3db4af
 
 
 
 
fe3623b
0849a69
 
c846fe2
 
 
f5d080d
 
 
 
 
 
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
import gradio as gr
import subprocess
import os
import logging
import pyperclip

logging.basicConfig(level=logging.INFO)


DOWNLOAD_FOLDER = './output'


if not os.path.exists(DOWNLOAD_FOLDER):
    os.makedirs(DOWNLOAD_FOLDER)

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, cookies_path=None):
    try:
        output_path = os.path.join(DOWNLOAD_FOLDER, '%(title)s.mp4')
        command = ['yt-dlp', '-f', 'mp4', '-o', output_path, url]

    
        if cookies_path:
            command.extend(['--cookies', cookies_path])

        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 "", ""


with gr.Blocks() as iface:

    url_input = gr.Textbox(label="Enter YouTube URL", placeholder="Paste URL here")
    
  
    cookies_input = gr.Textbox(label="Cookies File Path", placeholder="Enter path to cookies.txt (optional)")

  
    status_output = gr.Textbox(label="Status", interactive=False)

 
    download_button = gr.Button("Download Video")
    android_button = gr.Button("Create Android Ringtone")
    iphone_button = gr.Button("Create iPhone Ringtone")
    paste_button = gr.Button("Paste URL from Clipboard")
    clear_button = gr.Button("Clear")

  
    download_button.click(download_video, inputs=[url_input, cookies_input], outputs=status_output)
    android_button.click(android_download, outputs=status_output)
    iphone_button.click(iphone_download, outputs=status_output)
    paste_button.click(paste_from_clipboard, outputs=url_input)
    clear_button.click(clear_input, outputs=[url_input, status_output])


iface.launch(share=True)