5.7 KiB
5.7 KiB
自动执行流程说明文档
本流程通过多个脚本与配置文件协作,自动生成海报的排版、文案、图像并输出 PSD 文件,最终通过 API 提供服务。
一、自动执行流程的步骤
步骤 1: 配置加载
目标:加载必要的配置信息(如 API 密钥、字体规则、Prompt 模板)。
涉及文件:
.env
:加载 DeepSeek API 密钥等环境变量。configs/fonts.yaml
:加载字体与配色规则。configs/prompts.json
:加载图像生成 Prompt 模板。
过程:
- 使用
dotenv
加载.env
中的DEEPSEEK_API_KEY
。 - 使用
yaml
或json
库加载fonts.yaml
和prompts.json
。
输出:配置对象(字典或类),供后续步骤使用。
步骤 2: 排版生成
目标:使用 LLM 生成海报的排版结构(Vue 组件)。
涉及文件:
scripts/generate_layout.py
:调用 DeepSeek API 生成 Vue 组件代码。
过程:
- 调用
generate_layout.py
中的generate_vue_code
函数。 - 传入从
prompts.json
动态读取的 Prompt,结合字体规则生成 Vue 代码。
输出:Vue 组件代码,保存为 outputs/generated_code.vue
。
步骤 3: 文案生成
目标:生成海报文案内容(标题、副标题、活动描述等)。
涉及文件:
scripts/generate_text.py
:调用 LLM 生成文案。
过程:
- 调用脚本生成端午节相关文案(如“端午安康”、“包粽子比赛”)。
- 文案可按
prompts.json
中模板动态调整。
输出:文案内容(字符串或字典),供后续步骤使用。
步骤 4: 图像生成
目标:使用 ComfyUI 生成海报图层。
涉及文件:
comfyui_flows/layer_generation.json
:定义图层生成流程。scripts/generate_images.py
:调用 ComfyUI API 生成图层。images/
:存储背景、前景、文字图层。
过程:
- 运行
generate_images.py
,加载layer_generation.json
。 - 根据排版与文案生成:
background.png
foreground.png
text_overlay.png
输出:图像文件保存到 images/
目录。
步骤 5: 合成海报
目标:将图层合成为最终海报。
涉及文件:
scripts/compose_poster.py
:合成图层脚本。outputs/final_poster.png
:合成结果。
过程:
- 读取
generated_code.vue
中的排版位置信息。 - 使用
image_utils.py
对图层进行合成。
输出:final_poster.png
步骤 6: 导出 PSD 文件
目标:导出 PSD 文件以便后期修改。
涉及文件:
scripts/export_psd.py
:PSD 导出脚本。outputs/final_poster.psd
:导出的 PSD 文件。
过程:
- 将
final_poster.png
转换为 PSD。 - 保留图层信息。
输出:final_poster.psd
步骤 7: 提供前端接口
目标:将结果通过 API 提供给前端调用。
涉及文件:
run_pipeline.py
:协调整体流程并定义 API 接口。
过程:
- 使用
FastAPI
或Flask
创建端点(如/generate_poster
)。 - 接收前端请求,依次调用上述所有步骤。
- 返回最终文件的 URL 或文件流。
输出:HTTP 响应,包含 final_poster.png
链接或文件流。
二、如何实现自动执行流程
环境准备
-
依赖安装:确保
requirements.txt
包含以下依赖:openai
python-dotenv
PyYAML
requests
(用于 ComfyUI API 调用)Pillow
(图像处理)psd-tools
(PSD 导出)
-
API 密钥配置:在
.env
文件中添加以下字段:DEEPSEEK_API_KEY=your_api_key COMFYUI_API_KEY=your_comfyui_key
import os
from dotenv import load_dotenv
from scripts.generate_layout import generate_vue_code
from scripts.generate_text import generate_text # 假设存在
from scripts.generate_images import generate_images # 假设存在
from scripts.compose_poster import compose_poster # 假设存在
from scripts.export_psd import export_psd # 假设存在
import yaml
import json
from fastapi import FastAPI, HTTPException
from fastapi.responses import FileResponse
# 加载环境变量和配置
load_dotenv()
app = FastAPI()
with open("configs/fonts.yaml", "r", encoding="utf-8") as f:
fonts_config = yaml.safe_load(f)
with open("configs/prompts.json", "r", encoding="utf-8") as f:
prompts_config = json.load(f)
# 一键执行流程
def run_pipeline():
try:
# 步骤 1: 排版生成
layout_code = generate_vue_code()
with open("../outputs/generated_code.vue", "w", encoding="utf-8") as f:
f.write(layout_code)
# 步骤 2: 文案生成
text_content = generate_text(prompts_config.get("text_prompt", ""))
# 步骤 3: 图像生成
generate_images(
workflow_path="comfyui_flows/layer_generation.json",
text_content=text_content,
output_dir="images/"
)
# 步骤 4: 合成海报
compose_poster(
layout_path="../outputs/generated_code.vue",
image_dir="images/",
output_path="../outputs/final_poster.png"
)
# 步骤 5: 导出 PSD
export_psd(
input_path="../outputs/final_poster.png",
output_path="../outputs/final_poster.psd"
)
return "../outputs/final_poster.png"
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# API 端点
@app.get("/generate_poster")
async def generate_poster():
output_path = run_pipeline()
return FileResponse(output_path, media_type="image/png")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)