⚙️ 核心逻辑
🛑 集成 state.interrupt()
停止按钮现在在 XY 网格 和 批量网格 模式下均能可预测地中止生成。
增加了 if state.interrupted: 检查,并使用 safe_processed() 实现优雅的提前退出。
处理所有嵌套循环,防止 Forge 在中止时挂起。
🧩 网格布局日志
生成前添加控制台信息:
🧩 XY 网格布局 → 行=..., 列=..., 采样器=..., 调度器=..., 权重=...
有助于可视化网格设置及总迭代次数。
↕️ LoRA 权重方向修复
🎨 提示词 / LoRA 处理
🧠 重写 apply_params()
当 weight == 0.0 时,完全跳过 LoRA。
→ 不向提示词添加任何 LoRA 标签或触发词。
防止重复触发词或 <lora:...> 标签。
清理冗余的逗号和空格,保持提示词格式一致。
新的提示词组装顺序:
[主提示词], <lora:name:weight>, 触发词
元数据中不再包含多余的 “, , , , ,”。
🧩 XY 网格
✅ 改进的生成循环
🧾 增强的日志记录
每次迭代现在输出详细进度:
🔄[7/36] 采样器='Euler a', 调度器='自动', LoRA='Apone3d', 权重=0.50, 种子=...
XY 网格与批量网格采用统一的日志风格。
🧩 批量网格
⚙️ 优化控制流
🧩 网格验证与保存
改进 validate_cells_for_grid() 输出:
🚫 网格验证问题:❌ 单元格 [1,2] 为空 ...
防止保存空或无效网格。
保存的单元格文件名现在包含所有相关参数:
LoRA_W0.50_S-Euler_SchAutomatic_1_2.webp
💬 日志与用户体验
一致的emoji编码信息:
🏁 开始 • 🔄 进度 • 💾 保存 • 🛑 中断 • ✅ 完成 • ❌ 错误
所有 print() 调用均使用 flush=True → 实时终端输出。
网格创建后添加 gc.collect() 以优化内存清理。
🧰 内部优化
移除冗余的 build_grid_labels() 调用。
简化嵌套循环逻辑,统一命名(sampler_label, scheduler_label)。
标准化 get_cell_indices() 参数及 orientation 处理方式。
小幅重构,提升代码清晰度并符合 Forge UI 行为。
🧾 总结
🛑 停止处理:集成 state.interrupt() → 可预测中止
↕️ 垂直 LoRA:反转权重 → 底部=最小,顶部=最大
🧠 提示词逻辑:重写 apply_params() → 清晰、去重的提示词
🧩 XY 网格:新增布局日志 → 清晰的网格概览
🧱 批量网格:统一 LoRA 与触发词逻辑 → 输出一致
💬 日志:emoji + flush → 可读、实时反馈
🧹 内存:添加 gc.collect() → 无残留内存堆积