Files
AnyImage/docs/internals/operators/upscale.md
nan c97b4a3e41 Add image selection refinement functionality with BEN2 integration
- Implemented viewport.py for handling 3D view projections, gestures, and overlay drawing.
- Created refine_image_selection.py to manage the refinement of gesture masks and output image bounds.
- Added selection module with refine_selection.py to process and crop images based on alpha channel visibility.
- Introduced __init__.py for selection module to expose refine_selection function.
2026-08-31 22:10:05 +08:00

2.2 KiB
Raw Blame History

Upscale

Upscale 从当前 Image Empty 读取单图或多帧媒体,在输入长边允许时生成 4× RGBA 结果并替换原图。

执行过程

flowchart TD
    Empty["Image Empty"] --> Gate{"长边小于输入上限?"}
    Gate -- "否" --> Disabled["禁用或报告错误"]
    Gate -- "是" --> Prepare["准备媒体输入"]
    Prepare --> Job["upscale-image Job"]
    Job --> RGB["分块执行 4× RGB 推理"]
    Job --> Alpha["独立缩放 Alpha"]
    RGB --> Merge["合并 RGBA"]
    Alpha --> Merge
    Merge --> Replace["导入并替换当前 Image"]

模型只处理 RGB,Alpha 单独放大后再合并。Blender 侧在提交前检查 Maximum AI Input Size,Server 模型层也应用同一个输入上限。

节点说明

检查尺寸并准备输入

入口位于 operators/upscale.py。UpscaleImage.poll() 读取 preferences.py 中的 Maximum AI Input Size;当前 Image 长边必须严格小于该值。菜单显示的预计尺寸来自同一文件的 upscale_output_size()。

执行时,upscale.py 冻结当前模型和输入上限,并通过 common/image.py 准备单图、视频或序列输入。Packed Image 与内存修改结果会导出临时文件,多帧输入保留帧起点和抽帧设置。

分块放大 RGB

UpscaleImage 提交 upscale-image Job。server/jobs/upscale.py 展开媒体帧并逐帧调用模型;server/models/upscale.py 负责输入约束、RGB/Alpha 分离和结果合并,server/models/onnx_upscale.py 以 256 × 256 分块执行 4× ONNX 推理并带入相邻上下文。

server/media/resolution.py 统一解释输入长边上限。Blender 侧要求源图长边小于该值,结果长边小于该值的四倍。

合并 Alpha

server/models/upscale.py 使用 Lanczos 将 Alpha 放大到目标尺寸,再与 4× RGB 合并为 RGBA。Provider 资源不足时,Server 释放当前 Upscale Session,并返回降低输入上限或改用 CPU 的提示。

导入并替换结果

响应阶段回到 operators/upscale.py,通过 common/image.py 读取 upscale.* 结果序列并替换当前 Empty。

后续 Upscale 和 Depth Plane 都以当前结果 Image 为输入。