import json import logging import os from typing import Optional, List from fastapi import APIRouter, HTTPException from pydantic import BaseModel from Liblib.Kit.LibLibGenerator import LibLibGenerator # 创建路由路由器 router = APIRouter(prefix="/api/wenShengTu", tags=["文生图"]) # 配置日志 logger = logging.getLogger(__name__) class TextToImageRequest(BaseModel): prompt: str negative_prompt: Optional[str] = "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2)," steps: Optional[int] = 20 width: Optional[int] = 768 height: Optional[int] = 1024 img_count: Optional[int] = 1 seed: Optional[int] = -1 restore_faces: Optional[int] = 0 sampler: Optional[int] = 15 cfg_scale: Optional[float] = 7 checkpoint_id: Optional[str] = "0ea388c7eb854be3ba3c6f65aac6bfd3" # Dream Tech XL | 筑梦工业XL v6.0 - 寄语星河 template_uuid: Optional[str] = "e10adc3949ba59abbe56e057f20f883e" # 1.5和XL文生图 - 自定义完整参数 hi_res_fix: Optional[bool] = False hires_steps: Optional[int] = 20 hires_denoising_strength: Optional[float] = 0.75 upscaler: Optional[int] = 10 resized_width: Optional[int] = 1024 resized_height: Optional[int] = 1536 @router.post("/generate", response_model=dict) async def generate_text_to_image(request: TextToImageRequest): """ 根据提供的文本提示词生成图片 Args: request: 包含生成参数的请求体 Returns: 包含生成图片OBS地址的字典 """ try: # 创建生成器实例 generator = LibLibGenerator() # 设置高分辨率修复参数(如果启用) hi_res_fix_info = None if request.hi_res_fix: hi_res_fix_info = { "hiresSteps": request.hires_steps, "hiresDenoisingStrength": request.hires_denoising_strength, "upscaler": request.upscaler, "resizedWidth": request.resized_width, "resizedHeight": request.resized_height } # 调用自定义Checkpoint方法进行文生图 result = generator.generate_custom_checkpoint_text_to_image( template_uuid=request.template_uuid, checkpoint_id=request.checkpoint_id, prompt=request.prompt, negative_prompt=request.negative_prompt, sampler=request.sampler, steps=request.steps, cfg_scale=request.cfg_scale, width=request.width, height=request.height, img_count=request.img_count, randn_source=0, seed=request.seed, restore_faces=request.restore_faces, hi_res_fix_info=hi_res_fix_info ) if result: logger.info(f"文生图成功,OBS地址: {result}") return { "status": "success", "obs_url": result, "message": "文生图生成成功" } else: logger.error("文生图生成失败") raise HTTPException(status_code=500, detail="文生图生成失败") except HTTPException: raise except Exception as e: logger.error(f"文生图请求处理失败: {str(e)}") raise HTTPException(status_code=500, detail=f"文生图请求处理失败: {str(e)}") @router.post("/generate/default", response_model=dict) async def generate_text_to_image_default(request: TextToImageRequest): """ 使用默认官方模型进行文生图 Args: request: 包含生成参数的请求体 Returns: 包含生成图片OBS地址的字典 """ try: # 创建生成器实例 generator = LibLibGenerator() # 调用默认模型方法进行文生图 result = generator.generate_default_text_to_image( prompt=request.prompt, steps=request.steps, width=request.width, height=request.height, img_count=request.img_count, seed=request.seed, restore_faces=request.restore_faces ) if result: logger.info(f"默认模型文生图成功,OBS地址: {result}") return { "status": "success", "obs_url": result, "message": "默认模型文生图生成成功" } else: logger.error("默认模型文生图生成失败") raise HTTPException(status_code=500, detail="默认模型文生图生成失败") except HTTPException: raise except Exception as e: logger.error(f"默认模型文生图请求处理失败: {str(e)}") raise HTTPException(status_code=500, detail=f"默认模型文生图请求处理失败: {str(e)}")