Spaces:
Running
on
Zero
Running
on
Zero
import os | |
import threading | |
import urllib.request | |
import time | |
import sys | |
import random | |
import argparse | |
import librosa | |
from tqdm.auto import tqdm | |
import torch | |
import soundfile as sf | |
import torch.nn as nn | |
from datetime import datetime | |
import numpy as np | |
import shutil | |
from gui import create_interface | |
from pyngrok import ngrok | |
from assets.i18n.i18n import I18nAuto # I18nAuto'yu içe aktar | |
import warnings | |
warnings.filterwarnings("ignore") | |
def generate_random_port(): | |
"""Generates a random port between 1000 and 9000.""" | |
return random.randint(1000, 9000) | |
def start_gradio(port, share=False): | |
"""Starts the Gradio interface with optional sharing.""" | |
demo = create_interface() | |
demo.launch( | |
server_port=port, | |
server_name='0.0.0.0', | |
share=share, | |
allowed_paths=[os.path.join(os.path.expanduser("~"), "Music-Source-Separation", "input"), "/tmp", "/content"], | |
inline=False | |
) | |
def start_localtunnel(port, i18n): | |
"""Starts the Gradio interface with localtunnel sharing.""" | |
print(i18n("starting_localtunnel").format(port=port)) | |
os.system('npm install -g localtunnel &>/dev/null') | |
with open('url.txt', 'w') as file: | |
file.write('') | |
os.system(f'lt --port {port} >> url.txt 2>&1 &') | |
time.sleep(2) | |
endpoint_ip = urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip("\n") | |
with open('url.txt', 'r') as file: | |
tunnel_url = file.read().replace("your url is: ", "").strip() | |
print(i18n("share_link").format(url=tunnel_url)) | |
print(i18n("password_ip").format(ip=endpoint_ip)) | |
start_gradio(port, share=False) | |
def start_ngrok(port, ngrok_token, i18n): | |
"""Starts the Gradio interface with ngrok sharing.""" | |
print(i18n("starting_ngrok").format(port=port)) | |
try: | |
ngrok.set_auth_token(ngrok_token) | |
ngrok.kill() | |
tunnel = ngrok.connect(port) | |
print(i18n("ngrok_url").format(url=tunnel.public_url)) | |
start_gradio(port, share=False) | |
except Exception as e: | |
print(i18n("ngrok_error").format(error=str(e))) | |
sys.exit(1) | |
def main(method="gradio", port=None, ngrok_token=""): | |
"""Main entry point for the application.""" | |
# I18nAuto'yu başlat | |
i18n = I18nAuto() | |
# Portu otomatik belirle veya kullanıcıdan geleni kullan | |
port = port or generate_random_port() | |
print(i18n("selected_port").format(port=port)) | |
# Paylaşım yöntemine göre işlem yap | |
if method == "gradio": | |
print(i18n("starting_gradio_with_sharing")) | |
start_gradio(port, share=True) | |
elif method == "localtunnel": | |
start_localtunnel(port, i18n) | |
elif method == "ngrok": | |
if not ngrok_token: | |
print(i18n("ngrok_token_required")) | |
sys.exit(1) | |
start_ngrok(port, ngrok_token, i18n) | |
else: | |
print(i18n("invalid_method")) | |
sys.exit(1) | |
# Sürekli çalışır durumda tut (gerekirse) | |
try: | |
while True: | |
time.sleep(5) | |
except KeyboardInterrupt: | |
print(i18n("process_stopped")) | |
sys.exit(0) | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser(description="Music Source Separation Web UI") | |
parser.add_argument("--method", type=str, default="gradio", choices=["gradio", "localtunnel", "ngrok"], help="Sharing method (default: gradio)") | |
parser.add_argument("--port", type=int, default=None, help="Server port (default: random between 1000-9000)") | |
parser.add_argument("--ngrok-token", type=str, default="", help="Ngrok authentication token (required for ngrok)") | |
args = parser.parse_args() | |
main(method=args.method, port=args.port, ngrok_token=args.ngrok_token) | |