✨ feat(config): 更新模型配置与LLM提示词指南

- 将默认LLM模型从gemini-2.0-flash升级为gemini-3-flash-preview
- 将博主人设从"性感福利主播"更改为"二次元coser"
- 优化LLM生成SD提示词的指南,新增中国审美人物描述规则
- 为各SD模型添加颜值核心词、示范prompt和禁止使用的关键词
- 新增三维人物描述法(眼睛/肤色/气质)和专属光线词指导

📦 build(openspec): 归档旧规范并创建新规范

- 将improve-maintainability规范归档至2026-02-25目录
- 新增2026-02-26-improve-ui-layout规范,包含UI布局优化设计
- 新增2026-02-26-optimize-image-generation规范,包含图片生成优化设计
- 在根目录openspec/specs下新增图片质量、后处理、中国审美和LLM提示词规范

♻️ refactor(sd_service): 优化SD模型配置和图片后处理

- 为各SD模型添加中国审美特征词和欧美面孔排除词
- 新增高画质预设档,SDXL模型启用Hires Fix参数
- 将后处理拆分为beauty_enhance和anti_detect_postprocess两个独立函数
- 新增美化增强功能,支持通过enhance_level参数控制强度

♻️ refactor(services): 更新内容生成服务以支持美化增强

- 在generate_images函数中新增enhance_level参数
- 将美化强度参数传递至SDService.txt2img调用

♻️ refactor(ui): 优化UI布局和添加美化强度控件

- 注入自定义CSS主题层,优化字体、按钮和卡片样式
- 将全局设置迁移至独立的"⚙️ 配置"Tab,优化Tab顺序
- 在内容创作Tab的高级设置中添加美化强度滑块控件
- 优化自动运营Tab布局,改为2列卡片网格展示
This commit is contained in:
2026-02-26 22:58:05 +08:00
parent b635108b89
commit b5deafa2cc
53 changed files with 1578 additions and 387 deletions
@@ -0,0 +1,35 @@
## ADDED Requirements
### Requirement: 各 SD 模型 prompt_prefix 包含中国审美面孔特征词
系统 SHALL 在 `SD_MODEL_PROFILES` 每个模型的 `prompt_prefix` 中包含以下中国审美特征词(具体权重值由各模型风格微调,但不得省略):
- 眼型:`(almond eyes:1.2)` 或 `(delicate almond-shaped eyes:1.2)`
- 肤色:`(porcelain skin:1.2)` 或 `(fair porcelain skin:1.2)` 或 `(luminous fair skin:1.2)`
- 五官精致感:`(delicate facial features:1.2)` 或 `(refined features:1.2)`
- 气质:`(youthful appearance:1.1)` 或 `(elegant temperament:1.1)`
#### Scenario: 生成的人物图像呈现中国大众偏好的精致感
- **WHEN** 使用任意 SD 模型生成含人物的图片
- **THEN** `prompt_prefix` 中包含杏眼、白皙肤色、精致五官三类词汇中各至少一个
### Requirement: 各 SD 模型 negative_prompt 补充欧美面孔排除词
系统 SHALL 在 `SD_MODEL_PROFILES` 每个模型的 `negative_prompt` 中包含以下欧美面孔特征排除词(在现有基础上补充):
- `strong jawline`、`prominent brow ridge`、`deep-set eyes`(如已存在则保留权重)
- `angular facial structure`、`square jaw`、`heavy brow`
#### Scenario: negative_prompt 明确排除欧美面孔结构特征
- **WHEN** 任意模型进行人物图片生成
- **THEN** negative_prompt 中包含 `strong jawline`、`prominent brow ridge`、`deep-set eyes` 至少两个排除词
### Requirement: PERSONA_SD_PROFILES 各人设包含中式气质差异化增强词
系统 SHALL 在 `PERSONA_SD_PROFILES` 中,每个人设的 `prompt_boost` 包含至少 1 个与中国审美相关的气质词,且各人设之间的气质词须有差异化区分(如:甜妹-减龄感、知性-优雅气质、赛博博主-精致感 + 未来感)。
#### Scenario: 不同人设生成的人物具有可感知的气质差异
- **WHEN** 分别以"甜妹"和"知性"人设各生成一批图片
- **THEN** 两批图片中 `prompt_boost` 的核心气质词不重复,体现差异化风格
### Requirement: 美化增强对肤色偏向做修正
`beauty_enhance()` 函数 SHALL 在饱和度提升时对色调偏暖方向微调(暖白/自然肤色),避免饱和度提升导致肤色偏黄或偏红。具体实现通过调整 PIL 色调(Hue)向暖白方向 ±5° 以内微调。
#### Scenario: 美化后肤色不发黄不发红
- **WHEN** 调用 `beauty_enhance(img, level=1.0)` 对含人物的图片处理
- **THEN** 输出图片肤色区域饱和度提升的同时,色调保持在自然暖白范围内(目视无偏黄/偏红现象)
@@ -0,0 +1,38 @@
## ADDED Requirements
### Requirement: beauty_enhance 作为独立美化增强函数
系统 SHALL 在 `sd_service.py` 中提供 `beauty_enhance(img: Image.Image, level: float = 1.0) -> Image.Image` 函数,支持以下增强操作(所有操作的强度随 `level` 线性缩放):
- 智能锐化(基于 `ImageFilter.UnsharpMask`,强调五官轮廓与发丝细节)
- 亮度与对比度微增(`level=1.0` 时各 +2-3%,`level=2.0` 时各 +4-6%)
- 饱和度提升(`level=1.0` 时 +5%,`level=2.0` 时 +10%,令肤色更均匀饱满)
- `level=0` 时 SHALL 直接返回原图,跳过所有处理
#### Scenario: 正常调用增强管线
- **WHEN** 调用 `beauty_enhance(img, level=1.0)`
- **THEN** 返回经过锐化、亮度微调、饱和度提升处理的 PIL Image,图片尺寸不变
#### Scenario: level=0 时跳过处理
- **WHEN** 调用 `beauty_enhance(img, level=0)`
- **THEN** 直接返回原始 img 对象,不执行任何增强操作
#### Scenario: level=2 时增强效果加倍
- **WHEN** 调用 `beauty_enhance(img, level=2.0)`
- **THEN** 锐化、亮度、饱和度的调整幅度均为 level=1.0 时的 2 倍
### Requirement: 后处理管线顺序为美化先于反 AI 扰动
系统 SHALL 在 `txt2img` 和 `img2img` 生成流程中,对每张输出图片依次执行:`beauty_enhance(img, level) → anti_detect_postprocess(img)`,确保美化增强在扰动引入之前完成。
#### Scenario: 生成图片经过完整两阶段后处理
- **WHEN** `txt2img` 成功生成图片
- **THEN** 每张图片先经过 `beauty_enhance`,再经过 `anti_detect_postprocess`,最终返回给调用方
### Requirement: enhance_level 参数从 UI 传递至后处理管线
系统 SHALL 支持 `enhance_level: float` 参数从 Gradio UI 经 `services/content.py` 的 `generate_images()` 函数传递至 `SDService.txt2img()`,最终传入 `beauty_enhance()`。新参数默认值为 `1.0`,向后兼容。
#### Scenario: UI 美化强度滑块值传递到生成结果
- **WHEN** 用户在"高级设置"中将美化强度滑块调整为 2.0 并点击生成
- **THEN** 生成图片经过 `beauty_enhance(img, level=2.0)` 处理
#### Scenario: 旧调用方不传 enhance_level 时行为不变
- **WHEN** `generate_images()` 未传入 `enhance_level` 参数
- **THEN** 默认使用 `level=1.0`,行为与优化前相同
@@ -0,0 +1,23 @@
## ADDED Requirements
### Requirement: 各 SD 模型新增高画质预设档
系统 SHALL 在 `SD_MODEL_PROFILES` 的每个模型 `presets` 字典中新增 `"高画质 (约5分钟)"` 档位,参数须满足:SD 1.5 模型步数 ≥ 50、CFG 6.5-7.5、采样器为 `DPM++ SDE`;SDXL 模型步数 ≥ 40、CFG 5.5-6.5、采样器为 `DPM++ 2M SDE`,并启用 Hires Fix 参数(`enable_hr: true`)。
#### Scenario: 用户选择高画质档后生成请求包含 Hires Fix
- **WHEN** 用户将质量模式切换为"高画质 (约5分钟)"且当前模型为 SDXL 架构
- **THEN** `txt2img` API 请求 payload 中包含 `enable_hr: true`、`hr_scale: 1.5`、`hr_upscaler` 字段
#### Scenario: SD 1.5 模型高画质档不启用 Hires Fix
- **WHEN** 用户将质量模式切换为"高画质 (约5分钟)"且当前模型 `arch == "sd15"`
- **THEN** payload 中不含 `enable_hr` 字段,以避免 OOM
#### Scenario: Hires Fix upscaler 不存在时降级
- **WHEN** `hr_upscaler` 指定的放大器模型(如 "4x-UltraSharp")在 SD WebUI 中不可用
- **THEN** 系统 SHALL 自动降级为 `"Latent"` 作为 fallback,并通过日志记录警告
### Requirement: 预设名称在 UI 中按模型动态更新
系统 SHALL 在用户切换 SD 模型后,更新 UI 质量模式单选按钮的选项列表,使其始终反映当前模型的可用预设档名称。
#### Scenario: 切换模型后预设列表刷新
- **WHEN** 用户在连接设置中切换 SD 模型
- **THEN** 创作页"生成模式"单选按钮的选项 SHALL 更新为该模型 `presets` 中的键名列表
@@ -0,0 +1,29 @@
## ADDED Requirements
### Requirement: LLM Prompt 指南包含人物真实感描述规则
`get_sd_prompt_guide()` 返回的指南 SHALL 包含"人物描述规则"段落,内容要求:
- 明确禁止使用 `beautiful girl`、`pretty woman`、`good looking` 等无导向泛化词
- 要求从五官(眼型、鼻型、唇型)、肤色(白皙、透亮、均匀)、气质(减龄、温柔、知性)三个维度分别提供具体描述词
- 对于有人物的 Prompt,要求至少包含 2 个五官/肤色词和 1 个气质词
#### Scenario: LLM 生成含人物的 Prompt 时使用规范词汇
- **WHEN** LLM 根据指南生成包含人物描述的 SD Prompt
- **THEN** Prompt 中不含 `beautiful`、`pretty`、`good looking` 等泛化词,而是包含如 `almond eyes`、`porcelain skin`、`youthful appearance` 等具体描述词
### Requirement: LLM Prompt 指南区分人物图与纯场景图的写作策略
`get_sd_prompt_guide()` 返回的指南 SHALL 明确区分两种写作模式:人物主体图(需详细描述人物特征)和纯场景/物品图(无需人物词,优先描述氛围、色彩、光线)。
#### Scenario: 生成场景图 Prompt 时不误加人物词
- **WHEN** 文案主题为室内布置或产品展示(无人物)
- **THEN** LLM 生成的 Prompt 中不包含人物特征描述词
#### Scenario: 生成人物图 Prompt 时包含完整人物描述
- **WHEN** 文案主题为穿搭、美妆或生活场景(含人物)
- **THEN** LLM 生成的 Prompt 中包含五官、肤色、气质三个维度的描述词各至少 1 个
### Requirement: LLM Prompt 指南包含光影与摄影感描述规范
`get_sd_prompt_guide()` 返回的指南 SHALL 包含光影描述规则,要求生成 Prompt 时指定具体光源类型(如 `soft window light`、`golden hour`、`studio lighting`)而非泛化词(如 `good lighting`)。
#### Scenario: Prompt 中包含具体光影词而非泛化词
- **WHEN** LLM 根据指南生成 SD Prompt
- **THEN** Prompt 中包含 `soft window light`、`golden hour`、`studio lighting`、`diffused natural light` 等具体光影词之一