diff --git a/modules_forge/forge_space.py b/modules_forge/forge_space.py
index af86f184..44e4973f 100644
--- a/modules_forge/forge_space.py
+++ b/modules_forge/forge_space.py
@@ -2,6 +2,7 @@ import os
import sys
import uuid
import time
+import socket
import gradio as gr
import importlib.util
import shutil
@@ -25,6 +26,24 @@ def build_html(title, installed=False, url=None):
return f'
{title}
Installed, Ready to Launch
'
+def find_free_port(server_name, start_port=None):
+ port = start_port
+
+ if port is None:
+ port = 7860
+
+ if server_name is None:
+ server_name = '127.0.0.1'
+
+ while True:
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
+ try:
+ s.bind((server_name, port))
+ return port
+ except OSError:
+ port += 1
+
+
class ForgeSpace:
def __init__(self, root_path, title, repo_id=None, repo_type='space', revision=None, **kwargs):
self.title = title
@@ -119,7 +138,18 @@ class ForgeSpace:
spec.loader.exec_module(module)
demo = getattr(module, 'demo')
- self.gradio_metas = demo.launch(inbrowser=True, prevent_thread_lock=True)
+ from modules import initialize_util
+ from modules.shared import cmd_opts
+
+ server_name = initialize_util.gradio_server_name()
+ port = find_free_port(server_name=server_name, start_port=cmd_opts.port)
+
+ self.gradio_metas = demo.launch(
+ inbrowser=True,
+ prevent_thread_lock=True,
+ server_name=server_name,
+ server_port=port
+ )
while self.is_running:
time.sleep(0.1)