This commit is contained in:
2025-09-04 13:36:00 +08:00
parent 6b8acda14a
commit 041815b2fa
5 changed files with 766 additions and 5 deletions

View File

@@ -0,0 +1,141 @@
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)}")