# 自动执行流程说明文档 本流程通过多个脚本与配置文件协作,自动生成海报的排版、文案、图像并输出 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` 文件中添加以下字段: ```env DEEPSEEK_API_KEY=your_api_key COMFYUI_API_KEY=your_comfyui_key ```python 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) ```