generate_seedream.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. """
  2. SeeDream 4.0 图片生成 - Python逻辑封装
  3. 支持标准 OpenAI Image API 格式的调用
  4. """
  5. import os
  6. import requests
  7. from dotenv import load_dotenv
  8. # 向上加载环境参数
  9. env_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))), ".env")
  10. if os.path.exists(env_path):
  11. load_dotenv(env_path)
  12. else:
  13. load_dotenv()
  14. APIYI_KEY = os.getenv("SEEDREAM_API_KEY") or os.getenv("APIYI_KEY")
  15. if APIYI_KEY and not APIYI_KEY.startswith("sk-"):
  16. APIYI_KEY = f"sk-{APIYI_KEY}"
  17. APIYI_BASE_URL = os.getenv("APIYI_BASE_URL", "https://api.apiyi.com/v1")
  18. if not APIYI_KEY:
  19. print("错误: 请在 .env 文件中设置 APIYI_KEY 或 SEEDREAM_API_KEY")
  20. exit(1)
  21. def generate_seedream_image(
  22. prompt: str,
  23. model: str = "seedream-4-5-251128",
  24. size: str = "2048x2048",
  25. quality: str = "hd",
  26. n: int = 1,
  27. response_format: str = "url",
  28. image_url: str = None
  29. ):
  30. """
  31. 生成图片核心函数
  32. Args:
  33. prompt: 图片描述提示词
  34. model: 模型选择 (seedream-4-5-251128)
  35. size: 分辨率/尺寸 (如 "1K", "2K", "4K", "2048x2048")
  36. quality: 图片质量 (standard, hd)
  37. n: 生成数量
  38. response_format: 响应格式 (url 推荐)
  39. image_url: 可选的参考图外链,用于图生图
  40. """
  41. url = f"{APIYI_BASE_URL}/images/generations"
  42. headers = {
  43. "Content-Type": "application/json",
  44. "Authorization": f"Bearer {APIYI_KEY}"
  45. }
  46. payload = {
  47. "model": model,
  48. "prompt": prompt,
  49. "size": size,
  50. "quality": quality,
  51. "n": n,
  52. "response_format": response_format
  53. }
  54. if image_url:
  55. payload["image"] = image_url
  56. print(f"📡 发送请求...")
  57. print(f" - API: {url}")
  58. print(f" - Prompt: {prompt}")
  59. try:
  60. response = requests.post(url, headers=headers, json=payload, timeout=120)
  61. if response.status_code != 200:
  62. error_msg = f"API请求失败,状态码: {response.status_code}"
  63. try:
  64. error_detail = response.json()
  65. error_msg += f", 错误详情: {error_detail}"
  66. except Exception:
  67. error_msg += f", 响应内容: {response.text[:500]}"
  68. print(f"❌ {error_msg}")
  69. return {"error": error_msg}
  70. print("✅ API请求成功")
  71. return response.json()
  72. except Exception as e:
  73. error_msg = f"发生异常: {str(e)}"
  74. print(f"❌ {error_msg}")
  75. return {"error": error_msg}
  76. if __name__ == "__main__":
  77. result = generate_seedream_image("A futuristic utopia, flying cars, beautiful 4K setup")
  78. if "data" in result:
  79. print(f"结果: {result['data'][0]['url']}")
  80. else:
  81. print(f"完整输出: {result}")