- Implement sync_models.py for preparing and uploading ONNX artifacts. - Create build_node.py for building and validating Blender scripts. - Add docs.py for building and previewing documentation with Mike or MkDocs. - Introduce model_exports.py for exporting PyTorch models to ONNX format. - Develop pack.py for packaging the project with dependencies for different platforms. - Add test_sync_models.py to validate sync_models functionality. - Add test_tool_commands.py to ensure repository tools have correct command scripts. - Initialize tools package with __init__.py.
4.7 KiB
4.7 KiB
AnyImage 项目规范
总则
不管是代码还是文档,遵循「少就是多」的原则,以好理解为首要要求
- 说明性内容以中文为主,专有名词和约定俗成的表达可使用英文
- 修改代码、依赖或执行方式后,
- 不保留旧路径、转发函数、兼容层或胶水代码
- 仅过测试,不改同步改文档,不构建文档、产物
- 优先选择依赖少、直接、易验证的实现
- 复用来自
common的函数,避免重复造轮子 - 确保文件名/文件夹名和内容边界一致
查询文档
下列是重要文档
- 总览:内部实现的总揽
- 程序架构:进程边界、职责与调用主链
- Operator 索引:Operator 实现功能和对应源码
- 节点资产:节点组的构建与验证(节点组不在运行时新建)
常见命令
# 安装或同步开发依赖
uv sync
# 本地 BlendJob wheel 内容变化后刷新锁文件
uv lock --refresh
# 运行全部测试
uv run pytest
# 构建 Windows、macOS、Linux 扩展包到 dist/
uv run pack
# 构建并验证 Blender 节点资产
uv run build_node
# 准备、校验并同步 ONNX 模型到 R2
uv run sync_models
命名规范
-
变量、函数、Docstring 必须使用英文;同一概念在代码和文档中使用统一表达
-
函数的动作前缀应表达产物边界:
generate_*表示 AI 生成。build_*表示代码层构建。create_*表示 Blender 内创建 -
名称应说明业务职责,并与用户概念、公开协议和界面术语保持一致;不要使用脱离上下文后无法判断用途的宽泛名称
-
文件和目录名应表达稳定的业务分类和模块职责,不直接沿用函数名,也不按临时执行步骤命名
-
集合层使用复数,单项分类使用单数
-
Operator Class 使用动宾结构,如
ConvertToDepthPlane、RemoveImageBackground -
Menu、Panel、AddonPreferences、PropertyGroup 分别使用实际类型后缀,如
AnyImageImageMenu、ServerPanel、AnyImagePreferences、AnyImageSettings -
bl_idname使用anyimage项目前缀:- Operator 如
anyimage.convert_to_depth_plane - Menu 如
ANYIMAGE_MT_image_context - Panel 如
ANYIMAGE_PT_server - 公共 Property 如
Scene.anyimage_settings
- Operator 如
-
Operator 自身 Property 不加项目前缀,使用业务名称,如
input_path、process_res、resolution_level -
扩展包名使用 Manifest 中的真实名称、版本和平台,例如
AnyImage.v0.11.2.windows-x64.zip;节点组名称沿用资产中的O DA3 Depth Plane、O MoGe2 Surface等既有名称
文档规范
README.md面向用户,不在其中堆叠内部细节。实现原理放入docs/internals对应主题- 文档只正面描述当前主题的职责与实现,不记录无关模块、未采用路径、历史差异、边界辩解、“不做什么”的排除性信息。
- 实现原理用流程图替代文字,Mermaid 默认使用从上到下
Blender 开发规范
- 扩展级设置及其读取入口统一放在
preferences.py;使用addon_preferences()读取 - Job 参数使用可序列化的普通字典;Blender 数据只能在主线程的 Operator 响应阶段读写
- 新增或修改 Blender 类型时同步检查
src/anyimage/__init__.py的注册与逆序注销,并补充对应测试 - 依赖版本、wheel 或 Manifest 改变时同步检查
pyproject.toml、uv.lock、blender_manifest.toml和打包测试 server/是 blendjob 后端代码,无法引用来自它上级文件夹的内容。共享函数需单独实现。
Blender 节点组规范
- 节点组统一存入
assets/O_AnyImage.blend,运行时按名称加载(load_node_group(group_name)) - 节点组通过节点资产说明构建,禁止运行时调用
bpy.data.node_groups.new()新建 - 节点组变更须同步构建脚本、验证、测试和节点资产文档
- 保留节点默认
name和标题,不用label覆盖 - 主链从左到右连续排列;辅助分支就近汇入,避免长线、交错、重叠和回折
- Group Input 可按区域重复放置,并隐藏未连接 sockets
- Frame 仅用于确有包裹语义的区域
- Repeat、Simulation、For Each Geometry Element 等成对节点,确保位置正确,没有遮挡其他节点
- 修改器 Geometry Nodes 的输入 socket 默认使用
SINGLE - socket
subtype按业务语义设置:长度用DISTANCE,0–1比例用FACTOR,0–100用PERCENTAGE;无对应范围语义时保留默认 - 接口或布局变更须验证 socket 顺序与结构、节点不重叠、未使用输出隐藏及几何求值