Blender Mcp
Управление Blender напрямую из VibeOS через сокетное подключение к аддону blender-mcp. Создание 3D-объектов, материалов, анимаций и выполнение произвольного Python-кода Blender (bpy). Используется, когда пользователь хочет создать или изменить что-либо в Blender.
Метаданные навыка
| Источник | Опционально — установка через vibeos skills install official/creative/blender-mcp |
| Путь | optional-skills/creative/blender-mcp |
| Версия | 1.0.0 |
| Автор | alireza78a |
| Платформы | linux, macos, windows |
Справочник: полный SKILL.md
Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Это те инструкции, которые видит агент, когда навык активен.
Blender MCP
Управление запущенным экземпляром Blender из VibeOS через сокет на TCP-порту 9876.
Настройка (однократно)
1. Установка аддона Blender
curl -sL https://raw.githubusercontent.com/ahujasid/blender-mcp/main/addon.py -o ~/Desktop/blender_mcp_addon.py
В Blender: Edit > Preferences > Add-ons > Install > выберите blender_mcp_addon.py Включите «Interface: Blender MCP»
2. Запуск сокет-сервера в Blender
Нажмите N в окне просмотра Blender, чтобы открыть боковую панель. Найдите вкладку «BlenderMCP» и нажмите «Start Server».
3. Проверка подключения
nc -z -w2 localhost 9876 && echo "OPEN" || echo "CLOSED"
Протокол
Обычный UTF-8 JSON через TCP — без префикса длины.
Отправка: {"type": "<команда>", "params": {<kwargs>}} Получение: {"status": "success", "result": <значение>} {"status": "error", "message": "<причина>"}
Доступные команды
| type | params | описание |
|---|---|---|
| execute_code | code (str) | Выполнить произвольный bpy-код |
| get_scene_info | (нет) | Список всех объектов в сцене |
| get_object_info | object_name (str) | Детали конкретного объекта |
| get_viewport_screenshot | (нет) | Скриншот текущего окна просмотра |
Вспомогательная функция Python
Используйте это внутри вызовов инструмента execute_code:
import socket, json
def blender_exec(code: str, host="localhost", port=9876, timeout=15): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) s.settimeout(timeout) payload = json.dumps({"type": "execute_code", "params": {"code": code}}) s.sendall(payload.encode("utf-8")) buf = b"" while True: try: chunk = s.recv(4096) if not chunk: break buf += chunk try: json.loads(buf.decode("utf-8")) break except json.JSONDecodeError: continue except socket.timeout: break s.close() return json.loads(buf.decode("utf-8"))
Часто используемые шаблоны bpy
Очистка сцены
bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete()
Добавление mesh-объектов
bpy.ops.mesh.primitive_uv_sphere_add(radius=1, location=(0, 0, 0)) bpy.ops.mesh.primitive_cube_add(size=2, location=(3, 0, 0)) bpy.ops.mesh.primitive_cylinder_add(radius=0.5, depth=2, location=(-3, 0, 0))
Создание и назначение материала
mat = bpy.data.materials.new(name="MyMat") mat.use_nodes = True bsdf = mat.node_tree.nodes.get("Principled BSDF") bsdf.inputs["Base Color"].default_value = (R, G, B, 1.0) bsdf.inputs["Roughness"].default_value = 0.3 bsdf.inputs["Metallic"].default_value = 0.0 obj.data.materials.append(mat)
Анимация по ключевым кадрам
obj.location = (0, 0, 0) obj.keyframe_insert(data_path="location", frame=1) obj.location = (0, 0, 3) obj.keyframe_insert(data_path="location", frame=60)
Рендер в файл
bpy.context.scene.render.filepath = "/tmp/render.png" bpy.context.scene.render.engine = 'CYCLES' bpy.ops.render.render(write_still=True)
Подводные камни
- Перед выполнением необходимо проверить, открыт ли сокет (nc -z localhost 9876)
- Сервер аддона нужно запускать внутри Blender в каждой сессии (N-панель > BlenderMCP > Connect)
- Разбивайте сложные сцены на несколько небольших вызовов execute_code, чтобы избежать тайм-аутов
- Путь для вывода рендера должен быть абсолютным (/tmp/...), а не относительным
- shade_smooth() требует, чтобы объект был выбран и находился в режиме объекта