SwapFace2Pon / start-ngrok.py
victorisgeek's picture
Upload 2 files
a52ca62 verified
raw
history blame
3.55 kB
import argparse
import json
from pyngrok import ngrok, conf
import os
import psutil
import signal
import socket
import sys
import subprocess
def get_saved_data():
try:
with open('data.json', 'r') as file:
data = json.load(file)
return data
except (FileNotFoundError, json.JSONDecodeError):
return None
def save_data(data):
with open('data.json', 'w') as file:
json.dump(data, file)
def signal_handler(sig, frame):
print('You pressed Ctrl+C!')
sys.exit(0)
def is_port_in_use(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('127.0.0.1', port)) == 0
def find_and_terminate_process(port):
for process in psutil.process_iter(['pid', 'name', 'connections']):
for conn in process.info.get('connections', []):
if conn.laddr.port == port:
print(f"Port {port} is in use by process {process.info['name']} (PID {process.info['pid']})")
try:
process.terminate()
print(f"Terminated process with PID {process.info['pid']}")
except psutil.NoSuchProcess:
print(f"Process with PID {process.info['pid']} not found")
def main():
target_port = 7860
if is_port_in_use(target_port):
find_and_terminate_process(target_port)
else:
print(f"Port {target_port} is free.")
parser = argparse.ArgumentParser(description='Console app with token and domain arguments')
parser.add_argument('--token', help='Specify the token')
parser.add_argument('--domain', help='Specify the domain')
parser.add_argument('--reset', action='store_true', help='Reset saved data')
args = parser.parse_args()
saved_data = get_saved_data()
if args.reset:
if saved_data is not None:
saved_data = { 'token': '', 'domain': ''}
else:
if saved_data is not None:
if args.token:
saved_data['token'] = args.token
if args.domain:
saved_data['domain'] = args.domain
else:
saved_data = { 'token': '', 'domain': ''}
if args.token is None:
if saved_data and saved_data['token']:
args.token = saved_data['token']
else:
args.token = input('Enter the token: ')
if args.token == '':
args.token = input('Enter the token: ')
saved_data['token'] = args.token
if args.domain is None:
args.domain = ''
if saved_data and saved_data['domain']:
args.domain = saved_data['domain']
else:
args.domain = input('Enter the domain: ')
saved_data['domain'] = args.domain
save_data(saved_data)
print(f'Token: {args.token}')
print(f'Domain: {args.domain}')
if args.token != '':
ngrok.kill()
srv = ngrok.connect(target_port, pyngrok_config=conf.PyngrokConfig(auth_token=args.token),
bind_tls=True, domain=args.domain).public_url
print(srv)
signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C to exit')
cmd = 'cd facefusion; python run.py --execution-providers cuda'
env = os.environ.copy()
subprocess.run(cmd, shell=True, env=env)
signal.pause()
else:
print('An ngrok token is required. You can get one on https://ngrok.com')
if __name__ == '__main__':
main()