握带节点搅拌机集成
Blender与Griptape工作流集成的相机捕获节点。
概述
此包提供Griptape节点,用于从Blender场景中捕获相机视图。该集成通过Blender内部运行的简单套接字服务器工作,提供可靠高效的通信渠道。
建筑
┌─────────────────┐ Socket/TCP ┌──────────────────┐ bpy Python API ┌─────────┐
│ Griptape Nodes │ ←─────────────────→ │ Socket Server │ ←───────────────→ │ Blender │
│ (Clients) │ JSON/8765 │ (Inside Blender) │ │ (3D App) │
└─────────────────┘ └──────────────────┘ └─────────┘特性
- ✅ 简单的套接字通信 -没有复杂的异步上下文问题
- ✅ 在Blender中运行 -直接访问bpy API和场景数据
- ✅ 实时摄像头捕捉 -渲染场景中任何摄影机的图像
- ✅ 全面的相机元数据 -焦距、传感器信息、DOF、变换
- ✅ 动态UI更新 -相机下拉菜单和元数据标签会自动更新
- ✅ 流量控制支持 -两个节点都无缝集成到控制工作流中
- ✅ 始终保持最新数据 -相机列表节点在每次工作流运行时都会重新评估
- ✅ 发动机自动操纵 -自动修复Eevee Next和GPU问题
- ✅ 无外部依赖关系 -只是Python标准库
- ✅ 易于设置 -将脚本复制/粘贴到Blender中
文件
blender/blender_socket_server.py-Blender内部运行的套接字服务器blender/socket_client.py-Griptape节点的套接字客户端实用程序blender/camera_capture.py-Griptape工作流的相机捕获节点blender/camera_list.py-列出Blender场景中可用相机的节点
快速设置
1.启动Blender套接字服务器
- 打开搅拌机
- 转到脚本工作区 (顶部标签)
- 创建新文本文件 (点击“新建”)
- 复制全部内容 属于的
blender/blender_socket_server.py - 粘贴到Blender的文本编辑器中
- 点击“运行脚本” 按钮
服务器将自动启动并显示:
✓ Blender Socket Server started on localhost:8765
Ready to receive commands from Griptape nodes2.使用握带节点
相机捕获和相机列表节点将自动连接到Blender中运行的套接字服务器。
服务器控件
在Blender控制台中:
start_server() # Start the socket server
stop_server() # Stop the socket server
server_status() # Check if running在Blender用户界面中:
- 三维视口 → Press
N→ 握带标签 - 启动/停止按钮 带状态指示器
- 端口信息 显示
将您的库添加到已安装的引擎中!
如果您尚未安装握带节点引擎,请按照安装步骤进行操作 这里. 完成这些操作并启动发动机后:
- 将路径复制到您的
griptape_nodes_library.json此文件中的文件blender目录。右键单击文件,然后Copy Path(不是Copy Relative Path).
- 启动发动机!
- 导航到设置。
- 打开设置并转到应用程序事件选项卡。在中添加项目 要注册的图书馆.
- 粘贴您复制的
griptape_nodes_library.json从早期到新项目的路径。
- 退出设置。它将自动保存!
- 打开 图书馆 左侧边栏的下拉菜单。
- 您新注册的图书馆应该会出现!拖放节点以使用它们!
可用节点
相机捕获节点
从Blender相机捕获单帧,并显示详细的相机元数据。
流量控制:
exec_in-控制顺序的流量输入exec_out-控制顺序的流量输出
参数:
cameras_input-连接到相机列表节点以获取动态相机数据(可选)camera_name-Blender场景中的相机名称(下拉列表会自动更新)resolution_x-图像宽度(像素)(64-4096,默认值:1920)resolution_y-图像高度(像素)(64-4096,默认值:1080)output_format-PNG或JPEG(默认值:PNG)quality-JPEG质量1-100(默认值:90)
摄影机元数据标签(显示在摄影机下拉列表下):
Status-显示摄影机是否为活动场景摄影机Focal Length-镜头焦距(mm)Sensor-传感器尺寸、安装模式和摄像头类型Depth of Field-DOF设置,包括焦距和光圈Transform-相机位置和旋转坐标
输出:
image_output-捕获的图像为ImageUrlArtifactstatus_output-渲染信息和时间
特征:
- ✅ 动态摄像头下拉菜单 -连接到相机列表节点时自动更新
- ✅ 丰富的元数据显示 -实时显示详细的相机属性
- ✅ 增强的摄像头数据 -访问Blender相机的全面属性
- ✅ 自动摄像头验证 -如果选择无效,则切换到可用摄像头
相机列表节点
列出当前Blender场景中具有全面元数据的所有摄影机。
流量控制:
exec_in-控制顺序的流量输入exec_out-控制顺序的流量输出
特征:
- ✅ 始终重新评估 -在每次工作流程运行时获取新的相机数据
- ✅ 全面的摄像头数据 -通过Blender API收集详细的相机属性
- ✅ 自动回退 -如果增强收集失败,则返回基本数据
输出:
cameras_output-详细的相机信息,包括元数据(ListArtifact)camera_count-找到的摄像机总数status_output-操作状态和连接信息
收集的增强型相机数据:
- 基本转换: 位置、旋转、比例、活动状态
- 镜头特性: 焦距、传感器尺寸、传感器安装模式
- 摄像头类型: 透视、正交、全景
- 视野: 用于框架计算的角度测量
- 剪切距离: 近和远渲染边界
- 景深: 焦距、光圈f值设置
- 组成: 用于透视校正的相机移位
- 矩阵数据: 全4x4变换矩阵,用于精确定位
工作流集成
互联工作流(推荐)
为了获得最佳体验,请连接相机列表节点→ 相机捕获节点:
┌─────────────────┐ cameras_output ┌──────────────────────┐
│ Camera List │────────────────→│ Camera Capture │
│ │ │ │
│ • Always fresh │ │ • Dynamic dropdown │
│ • Detailed data │ │ • Metadata labels │
│ • Flow control │ │ • Auto validation │
└─────────────────┘ └──────────────────────┘优点:
- ✅ 相机下拉列表会自动更新 当场景发生变化时
- ✅ 丰富的元数据显示 在相机选择下
- ✅ 始终为最新数据 -相机列表始终会重新评估
- ✅ 无缝流量控制 -两个节点都支持exec输入/输出
独立使用
相机捕获节点独立工作,但功能有限:
- 静态相机下拉列表(在节点创建时填充)
- 基本状态消息,而不是详细的元数据
- 场景更改需要手动刷新
套接字服务器命令
服务器在端口8765上响应这些JSON命令:
健康检查
{"command": "health_check"}场景信息
{"command": "get_scene_info"}列出摄像机
{"command": "list_cameras"}渲染摄影机
{
"command": "render_camera",
"params": {
"camera_name": "Camera",
"width": 1920,
"height": 1080,
"format_type": "PNG",
"quality": 90
}
}执行代码(增强型摄像头数据)
{
"command": "execute_code",
"params": {
"code": "import bpy; cameras = [{'name': obj.name, 'focal_length': obj.data.lens} for obj in bpy.data.objects if obj.type == 'CAMERA']"
}
}发动机操纵
服务器自动处理渲染引擎问题:
- Eevee下一篇 → 切换到Cycles CPU(无头稳定性)
- 循环 → 强制CPU渲染(避免GPU上下文问题)
- 其他发动机 → CPU仅用于最大程度的稳定性
优势与MCP方法
- ✅ 无异步上下文问题 -简单的插座连接
- ✅ 持久服务器 -在Blender内运行,保持灵敏
- ✅ 易于调试 -清晰的JSON通信
- ✅ 没有复杂的依赖关系 -只有Python套接字
- ✅ 更好的性能 -直接bpy访问,无进程生成
故障排除
“无法连接到本地主机:8765的Blender服务器”
- 确保Blender正在运行 使用套接字服务器脚本
- 检查服务器状态 在Blender控制台中:
server_status() - 重新启动服务器 如果需要:
stop_server()然后start_server() - 检查端口可用性 -确保没有其他东西在使用端口8765
“PIL不适用于PNG编码”
服务器需要PIL进行图像编码。在Blender的Python中安装:
/Applications/Blender.app/Contents/Resources/4.4/python/bin/python3.11 -m pip install Pillow套接字服务器未启动
- 检查搅拌机控制台 用于错误消息
- 验证脚本是否在Blender中运行 (非外部Python)
- 尝试其他端口 通过编辑脚本:
BlenderSocketServer(port=8766)
渲染问题
- 服务器强制CPU渲染以确保稳定性
- 自动切换有问题的引擎(Eevee Next)
- 检查Blender控制台是否有渲染错误消息
需求
- 搅拌机3.0+ (用4.4.3测试)
- Python 3.8+ (包含在Blender中)
- 枕头 (对于图像编码,请安装在Blender的Python中)
无外部依赖关系
与之前的MCP方法不同,这种基于套接字的解决方案在Griptape环境中不需要外部Python包。所有通信都是通过标准Python套接字进行的。
