zhoujie b5deafa2cc 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列卡片网格展示
2026-02-26 22:58:05 +08:00

98 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Context
当前 `ui/app.py`1369 行)在 `gr.Blocks` 顶部放了一个巨型 `gr.Accordion("⚙️ 全局设置")`,包含 LLM / SD / 换脸 / 系统设置约 100+ 行组件声明。`gr.Tabs()` 紧随其后,首 Tab 实际是「内容创作」(`build_tab` 返回组件字典),后续依次是热点探测、评论管家、账号登录、数据看板、智能学习、自动运营、内容排期。
核心约束:
1. `build_tab()``ui/tab_create.py` 中定义,返回一个组件字典(`res_title`, `res_content`, `res_prompt`, `res_tags`, `quality_mode`, `steps`, `cfg_scale`, `neg_prompt` 等)。字典 **key 不得变更**,否则 `app.py` 中所有 click 绑定会断开。
2. Gradio 组件对象一旦被创建,其引用必须在 `gr.Blocks` 上下文内,不能跨上下文移动。因此「全局组件」(`llm_model`, `sd_model`, `persona`, `status_bar`, `face_swap_toggle`, `face_image_preview`, `sd_url`, `mcp_url`)如需迁移到单独的配置 Tab需在配置 Tab 内创建,然后作为参数传递给 `build_tab()` ——现有接口已这样设计,无需修改函数签名。
3. 自定义 CSS 需注入到 `gr.Blocks(css=...)` 参数Gradio 4.x 支持 `elem_id` / `elem_classes` 定位。
## Goals / Non-Goals
**Goals:**
- 移除顶部全局折叠块,将 LLM / SD / 账号 / 系统设置组件迁移进一个新的「⚙️ 配置」Tab
- Tab 顺序调整为:✍️ 内容创作 → 📅 内容排期 → 🔥 热点探测 → 💬 评论管家 → 📊 数据看板 → 🧠 智能学习 → 🤖 自动运营 → 🔐 账号登录 → ⚙️ 配置
- 内容创作 Tab 内部重构为三栏布局(已在 `tab_create.py` 中实现,补充对齐)
- 自动运营 Tab 改为 2 列卡片式网格
- 注入自定义 CSS字体层级、按钮圆角、卡片阴影、Section 标题线
- 按钮 `variant` 分级统一
**Non-Goals:**
- 不修改任何业务逻辑、事件处理函数或 `services/` 层代码
- 不修改 `build_tab()` 返回的字典 key
- 不引入新的 Python 依赖
- 不重构内容创作 Tab 的内部逻辑(仅布局调整)
## Decisions
### D1全局组件保留在 Blocks 顶层,配置 Tab 仅做视觉容器
**决策**:在 `gr.Tabs()` 内新建「⚙️ 配置」Tab将原折叠块内的所有组件声明 **整体移动** 进该 Tab保持变量名不变
**原因**Gradio 组件必须在声明处确定其 `Block` 归属,无法在声明后再"移动"到别的上下文。将声明移进 Tab 与移进 Accordion 在 Python 语义上等价,所有后续 `.change()` / `.click()` 绑定仍可访问同名变量。
**备选方案**:保留折叠块但折叠状态改为始终折叠(`open=False`)——被否,未从根本上减少首屏干扰。
### D2Tab 顺序重排策略
**决策**:按"使用频率"重排,高频在前:
```
0 ✍️ 内容创作 (主工作流起点)
1 📅 内容排期 (发布管理)
2 🔥 热点探测 (灵感来源)
3 💬 评论管家 (互动运营)
4 📊 数据看板 (查看结果)
5 🧠 智能学习 (后台任务)
6 🤖 自动运营 (定时任务)
7 🔐 账号登录 (一次性操作)
8 ⚙️ 配置 (初始化/低频)
```
**原因**:账号登录和配置均属初始设置,完成后几乎不再访问,放末尾减少对核心工作流的干扰。
### D3自动运营 Tab — 2 列 Group 卡片而非 CSS Grid
**决策**:用 `gr.Row()` + `with gr.Column(scale=1)` 实现等宽两列,每个任务块用 `gr.Group()` 包裹Gradio 原生组合组件,有边框/背景色),而非依赖纯 CSS grid。
**原因**Gradio 4.x 的 `gr.Group` 提供开箱即用的视觉分组,无需 `elem_id` + CSS 精确定位可靠性更高。CSS 仅用于微调阴影/圆角,不承担主布局责任。
**备选方案**:全用 CSS grid + `elem_classes` ——被否Gradio 的 CSS 隔离机制容易与内部 shadow DOM 冲突,维护成本高。
### D4CSS 注入范围——最小化
**决策**CSS 只覆盖:
1. `body` 字体 (Inter / 系统字体栈)
2. `.btn-primary` 圆角和阴影
3. `.gr-group` 卡片阴影
4. Section 分隔标题(`hr` + `.section-title` class
不覆盖 Gradio 内部组件(如 `textarea`, `input`),避免版本升级破坏样式。
### D5内容创作 Tab 三栏布局 — 在 tab_create.py 中调整
**决策**:在 `build_tab()` 内部,将现有的垂直堆叠改为 `gr.Row()` 包裹三个 `gr.Column(scale=3/4/3)`
- 左栏:人设选择、话题/风格、生成参数
- 中栏文案输出title/content/tags+ 文案操作按钮
- 右栏:图片预览 gallery + 图片操作按钮(含美化强度滑块)
**原因**`build_tab()` 自包含,且组件字典 key 不变,`app.py` 侧零改动。
## Risks / Trade-offs
| 风险 | 缓解措施 |
|------|----------|
| 全局组件迁入 Tab 后,首次切换到配置 Tab 时才初始化Gradio lazy render | Gradio 4.x 默认会在页面加载时渲染所有 Tab非 lazy风险低 |
| CSS 注入与 Gradio 主题冲突 | 仅用 `:root` 变量覆盖和有命名空间的选择器,避免直接覆盖 Gradio 内部类 |
| `build_tab()` 三栏改造后在窄屏(<1200px下挤压 | Row 内设置 `wrap=True`Gradio 支持或通过 CSS media query 处理 |
| 自动运营 Tab 两列卡片在小屏幕下折叠 | 同上添加 `@media` 断点 CSS |
## Migration Plan
1. **不需要数据迁移**—— UI 代码变更
2. **部署步骤**替换 `ui/app.py` `ui/tab_create.py` 后重启应用即生效
3. **回滚**git revert 即可无状态变更
## Open Questions
- ****——所有技术决策已确定可直接进入任务拆解