SwapFace2Pon / start-ngrok.py
victorisgeek's picture
Upload 2 files
a52ca62 verified
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()