- Implemented a comprehensive test suite for the clipboard image module, covering various functionalities including operator registration, context handling, and image processing. - Created a new mesh plane asset with customizable parameters and integrated it into the geometry node system. - Developed a validation script to ensure the correct behavior of the mesh plane asset, including input handling and output verification.
4.6 KiB
程序设计、开发与许可证
程序设计
AnyImage 分为 Blender 交互层、BlendJob Runtime 和 Job Server 计算层。
flowchart LR
UI["菜单 / Panel"] --> Operator["Feature Operator"]
Operator --> Runtime["JobRuntime"]
Runtime --> Job["Server Job"]
Job --> Files["Job Directory"]
Files --> Response["Operator Response"]
Response --> Scene["Blender Scene"]
Blender 交互层管理 UI、RNA 状态、任务参数和结果导入。Runtime 管理 Environment、Server、队列、进度与取消。Server Job 组合媒体、模型、几何和输出模块。完整运行设计见 Job Server。
代码组织
| 位置 | 内容 |
|---|---|
__init__.py |
Blender 类型、菜单与 Runtime 注册 |
clipboard_image/ |
剪贴板读取、上下文粘贴与快捷键 |
menu.py、panel.py |
用户入口 |
preferences.py、properties.py |
扩展配置与 Scene 状态 |
runtime.py |
JobRuntime 配置 |
operators/ |
Blender 功能与结果导入 |
server/jobs/ |
Server 工作流 |
server/models/ |
ONNX 模型适配 |
server/geometry/ |
纯数据几何处理 |
server/outputs/ |
文件序列化 |
server/media/ |
媒体输入 |
assets/O_AnyImage.blend |
Geometry Nodes 与材质资产 |
Mesh Plane、Depth Plane、Surface、Background 和 Balloon 按功能组织。一个功能的入口、请求和 Blender 回写放在一起;跨功能的图片、材质和参数处理放在 operators/common.py、operators/image.py 与 operators/material.py。
Server 的模型模块返回 Prediction,几何模块处理数组与网格,输出模块写文件。Blender 数据只在 Operator Response 的主线程阶段创建。
Image Lasso 的基础像素裁切在 Blender 主线程完成;启用 Contour 时,Server Job 计算 BEN2 Alpha,并按最终非零 Alpha 范围与像素 Padding 输出图片,Operator Response 负责 Pack 新图、可选复制源 Empty 并更新结果对象的空间范围。
项目结构
.
├── README.md
├── docs/
├── pack.py
├── sync_models.py
├── src/anyimage/
│ ├── blender_manifest.toml
│ ├── runtime.py
│ ├── menu.py
│ ├── panel.py
│ ├── preferences.py
│ ├── properties.py
│ ├── clipboard_image/
│ ├── operators/
│ ├── server/
│ ├── assets/
│ └── wheels/
├── tests/
└── tools/
开发命令
在项目根目录使用 Git Bash:
uv sync
uv run pytest
uv run pytest tests/test_addon.py tests/test_manifest.py tests/test_pack.py -v
uv run python pack.py
pack.py 为 Windows x64、macOS Apple Silicon 与 Linux x64 构建扩展 ZIP 到 dist/。依赖、wheel 或 Manifest 改变后,应同步检查 pyproject.toml、uv.lock、blender_manifest.toml 与打包测试。
CI 分为三条流程:
test.yml:在 push、Pull Request 与手动触发时运行测试build.yml:响应v*tag,测试后构建并上传 Releasedocs.yml:文档变化后构建并部署站点
文档
本地预览和严格构建:
uv run --only-group docs mkdocs serve
uv run --only-group docs mkdocs build
版本化发布可使用 Mike:
uv run --only-group docs mike deploy <version> -p
uv run --only-group docs mike set-default <version> -p
自动部署将 MkDocs 站点发布到专用 Cloudflare Worker。仓库需要配置 CLOUDFLARE_ACCOUNT_ID、CLOUDFLARE_API_TOKEN 和 CLOUDFLARE_WORKER_NAME。Worker 路由对应 docs.omoolab.xyz/anyimage/*。
资产构建与验证
tools/ 中的资产脚本依赖 bpy,应由 Blender 执行:
BLENDER_BIN="/c/Program Files/Blender Foundation/Blender 4.5/blender.exe"
"$BLENDER_BIN" --background --python tools/build_geometry_nodes_asset.py
"$BLENDER_BIN" --background --python tools/validate_depth_plane_asset.py
"$BLENDER_BIN" --background --python tools/validate_mesh_plane_asset.py
"$BLENDER_BIN" --background --python tools/validate_geometry_nodes_asset.py
"$BLENDER_BIN" --background --python tools/validate_balloon_asset.py
"$BLENDER_BIN" --background --python tools/validate_moge_depth_plane.py
"$BLENDER_BIN" --background --python tools/validate_moge_surface.py
修改节点组、材质组或资产接口后,运行对应验证脚本和完整测试。Python、文档或打包逻辑变化无需重建 .blend 资产。
上游与许可证
- Depth Anything 3 代码采用 Apache 2.0
- BEN2 ONNX 模型采用其仓库声明的 Apache 2.0 License
- AnyImage Extension 代码采用 GPL-3.0-or-later
- 模型权重许可证由所选 Hugging Face 模型仓库决定