| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import os
- import time
- import requests
- def launch_comfy_server(version_id: str, server_type: str, duration: int, timeout: int = 300):
- """Launch RunComfy server and wait until ready"""
- user_id = os.getenv("RUNCOMFY_USER_ID")
- api_token = os.getenv("API_TOKEN")
-
- if not user_id or not api_token:
- raise ValueError("RUNCOMFY_USER_ID and API_TOKEN must be set")
-
- # Create server
- url = f"https://beta-api.runcomfy.net/prod/api/users/{user_id}/servers"
- headers = {"Authorization": f"Bearer {api_token}"}
- payload = {
- "workflow_version_id": version_id,
- "server_type": server_type,
- "estimated_duration": duration
- }
-
- resp = requests.post(url, json=payload, headers=headers)
- resp.raise_for_status()
- data = resp.json()
- server_id = data["server_id"]
-
- # Poll until ready
- check_url = f"{url}/{server_id}"
- start_time = time.time()
-
- while time.time() - start_time < timeout:
- resp = requests.get(check_url, headers=headers)
- resp.raise_for_status()
- server_data = resp.json()
-
- if server_data["current_status"] == "Ready":
- return {
- "server_id": server_id,
- "comfy_url": server_data["main_service_url"],
- "status": "Ready",
- "usage_instruction": (
- f"请使用 run_comfy_workflow 工具,并传入此 server_id ({server_id}) "
- "以及你的 workflow_api.json 来生成图片。"
- "用完后请务必调用 stop_comfy_env 工具关闭机器。"
- )
- }
-
- time.sleep(5)
-
- raise TimeoutError(f"Server {server_id} not ready within {timeout}s")
|