Files
AnyImage/docs/internals/operators/upscale.md
nan 87d7721128 feat(cutout_tool): Implement cutout region to shape functionality
- Added interaction helpers for cutout region validation and shape menu interaction.
- Created main operator for converting image regions into cutout shapes, including AI artifact generation.
- Introduced object creation logic for cutout shapes, handling depth and normal textures.
- Defined cutout shape identifiers and node groups for various shape types.
- Implemented depth texture writing and prediction artifact generation for MoGe-2.
- Developed server jobs for generating cutout artifacts, depth planes, and refining image regions.
- Added region refinement logic to enhance gesture masks using BEN2.
2026-08-31 11:36:27 +08:00

2.5 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 冻结当前模型和输入上限,并通过 operators/common/image_data.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 统一解释输入长边上限。正式 Upscale 在 Blender 侧直接禁用超限图片,因此不会进入预缩放路径,输出长边小于上限的四倍;模型层仍保留同一限制作为任务边界。

合并 Alpha

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

导入并替换结果

响应阶段回到 operators/upscale.py,通过 operators/common/image_data.py 读取 upscale.* 结果序列并替换当前 Empty。源 Image 没有其他用户且未启用 Fake User 时会被清理并由结果继承名称;存在其他用户时只替换当前 Empty 的引用。

结果不添加 Upscale 专属数据块后缀,也不保留来源引用。后续再次 Upscale 或转换 Depth Plane 时,读取的都是当前结果 Image。