comfy_launcher.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import os
  2. import time
  3. import requests
  4. def launch_comfy_server(version_id: str, server_type: str, duration: int, timeout: int = 300):
  5. """Launch RunComfy server and wait until ready"""
  6. user_id = os.getenv("RUNCOMFY_USER_ID")
  7. api_token = os.getenv("API_TOKEN")
  8. if not user_id or not api_token:
  9. raise ValueError("RUNCOMFY_USER_ID and API_TOKEN must be set")
  10. # Create server
  11. url = f"https://beta-api.runcomfy.net/prod/api/users/{user_id}/servers"
  12. headers = {"Authorization": f"Bearer {api_token}"}
  13. payload = {
  14. "workflow_version_id": version_id,
  15. "server_type": server_type,
  16. "estimated_duration": duration
  17. }
  18. resp = requests.post(url, json=payload, headers=headers)
  19. resp.raise_for_status()
  20. data = resp.json()
  21. server_id = data["server_id"]
  22. # Poll until ready
  23. check_url = f"{url}/{server_id}"
  24. start_time = time.time()
  25. while time.time() - start_time < timeout:
  26. resp = requests.get(check_url, headers=headers)
  27. resp.raise_for_status()
  28. server_data = resp.json()
  29. if server_data["current_status"] == "Ready":
  30. return {
  31. "server_id": server_id,
  32. "comfy_url": server_data["main_service_url"],
  33. "status": "Ready",
  34. "usage_instruction": (
  35. f"请使用 run_comfy_workflow 工具,并传入此 server_id ({server_id}) "
  36. "以及你的 workflow_api.json 来生成图片。"
  37. "用完后请务必调用 stop_comfy_env 工具关闭机器。"
  38. )
  39. }
  40. time.sleep(5)
  41. raise TimeoutError(f"Server {server_id} not ready within {timeout}s")