mirror of
https://github.com/storytold/storyteller-ml.git
synced 2026-10-22 08:16:08 +00:00
comfy: interrupt server and launch comfy from sidecar
This commit is contained in:
@@ -8,8 +8,13 @@ from jsonpath_ng import jsonpath, parse
|
|||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from enum import IntEnum, auto
|
from enum import IntEnum, auto
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import signal
|
||||||
|
|
||||||
SERVER_IP = os.environ.get("SERVER_IP", "127.0.0.1:8188")
|
SERVER_IP = os.environ.get("SERVER_IP", "127.0.0.1:8188")
|
||||||
|
SERVER_START_TIMEOUT = int(os.environ.get("SERVER_START_TIMEOUT", 60))
|
||||||
|
|
||||||
TIMEOUT_SECONDS = int(os.environ.get("TIMEOUT_SECONDS", 1000))
|
TIMEOUT_SECONDS = int(os.environ.get("TIMEOUT_SECONDS", 1000))
|
||||||
PROMPT_ENDPOINT = f"http://{SERVER_IP}/prompt"
|
PROMPT_ENDPOINT = f"http://{SERVER_IP}/prompt"
|
||||||
V2V_WORKFLOWS_DIRECTORY = os.environ.get("V2V_WORKFLOWS_DIRECTORY",
|
V2V_WORKFLOWS_DIRECTORY = os.environ.get("V2V_WORKFLOWS_DIRECTORY",
|
||||||
@@ -25,7 +30,6 @@ MAIN_IPA_WORKFLOW = os.environ.get("MAIN_IPA_WORKFLOW", "ipa_API_27-05-2024/yae_
|
|||||||
FACE_DETAILER_WORKFLOW = os.environ.get("FACE_DETAILER_WORKFLOW", "ipa_API_27-05-2024/yae_vid2vid_FaceDetailerlipsCN_22-05_API.json")
|
FACE_DETAILER_WORKFLOW = os.environ.get("FACE_DETAILER_WORKFLOW", "ipa_API_27-05-2024/yae_vid2vid_FaceDetailerlipsCN_22-05_API.json")
|
||||||
UPSCALER_WORKFLOW = os.environ.get("UPSCALER_WORKFLOW", "ipa_API_27-05-2024/yae_vid2vid_UpscaleAYS_27-05_API.json")
|
UPSCALER_WORKFLOW = os.environ.get("UPSCALER_WORKFLOW", "ipa_API_27-05-2024/yae_vid2vid_UpscaleAYS_27-05_API.json")
|
||||||
CINEMATIC_WORKFLOW = os.environ.get("CINEMATIC_WORKFLOW", "ipa_API_27-05-2024/yae_vid2vid_better_mainupscaler_29-05_API.json")
|
CINEMATIC_WORKFLOW = os.environ.get("CINEMATIC_WORKFLOW", "ipa_API_27-05-2024/yae_vid2vid_better_mainupscaler_29-05_API.json")
|
||||||
|
|
||||||
class PipelineType(IntEnum):
|
class PipelineType(IntEnum):
|
||||||
BASE = auto()
|
BASE = auto()
|
||||||
IPA = auto()
|
IPA = auto()
|
||||||
@@ -104,9 +108,9 @@ def parse_args():
|
|||||||
|
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
|
|
||||||
def ensure_server_is_healthy():
|
def ensure_server_is_healthy(server_address):
|
||||||
# check the health of the server (5 second timeout)
|
# check the health of the server (5 second timeout)
|
||||||
response = requests.get(PROMPT_ENDPOINT, timeout=5)
|
response = requests.get(f"http://{server_address}/queue", timeout=5)
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
print("Server is healthy")
|
print("Server is healthy")
|
||||||
else:
|
else:
|
||||||
@@ -116,14 +120,19 @@ def ensure_server_is_healthy():
|
|||||||
|
|
||||||
# make sure there are no jobs already
|
# make sure there are no jobs already
|
||||||
queue_json = response.json()
|
queue_json = response.json()
|
||||||
if queue_json["exec_info"]["queue_remaining"]:
|
if len(queue_json.get("queue_pending", [])) > 0:
|
||||||
print("There are jobs in the queue already. Exiting...")
|
print("There are jobs in the queue already. Exiting...")
|
||||||
exit(1)
|
exit(1)
|
||||||
else:
|
else:
|
||||||
print("Queue is empty")
|
print("Queue is empty")
|
||||||
|
|
||||||
|
def interrupt_comfy_queue(server_address):
|
||||||
|
requests.post(f"http://{server_address}/interrupt")
|
||||||
|
print("Queue interrupted successfully.")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
ensure_server_is_healthy()
|
# interrupt_comfy_queue(SERVER_IP)
|
||||||
|
ensure_server_is_healthy(SERVER_IP)
|
||||||
|
|
||||||
pipeline_type = PipelineType.IPA
|
pipeline_type = PipelineType.IPA
|
||||||
|
|
||||||
@@ -354,4 +363,24 @@ def validate_style_name(style):
|
|||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
os.setpgrp()
|
||||||
|
try:
|
||||||
|
comfyui_process = subprocess.Popen(["venv/bin/python", "main.py", "--highvram", "--disable-metadata"], cwd=COMFY_ROOT_DIRECTORY)
|
||||||
|
start_time = time.time()
|
||||||
|
started = False
|
||||||
|
while time.time() - start_time < SERVER_START_TIMEOUT:
|
||||||
|
try:
|
||||||
|
response = requests.get(PROMPT_ENDPOINT, timeout=5)
|
||||||
|
if response.status_code == 200:
|
||||||
|
print("Server is healthy")
|
||||||
|
started = True
|
||||||
|
break
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
|
print(f"Server is not up yet. Time elapsed: {time.time() - start_time:.2f}")
|
||||||
|
time.sleep(1)
|
||||||
|
if not started:
|
||||||
|
print(f"Server failed to start in {SERVER_START_TIMEOUT} seconds")
|
||||||
|
exit(1)
|
||||||
|
main()
|
||||||
|
finally:
|
||||||
|
os.killpg(0, signal.SIGKILL) # kill all processes in my group
|
||||||
Reference in New Issue
Block a user