blender-python-scripting について
アドオンや自動処理、シーンツールを開発する人向けの Blender 5.x Python スクリプティングスキルです。API テンプレートとデータモデル資料に加え、MCP を優先して実行中の Blender を調べ、変更する手順を示します。
主な機能
- 01オペレーター、パネル、アドオンのパターン
- 02プロパティ、ハンドラー、タイマーのガイド
- 03コンテキスト管理とデバッグ
- 04一括処理の例
- 05Blender データモデルのリファレンス
活用シーン
- 01カスタム Blender オペレーターやパネルの作成
- 02Blender 5.x アドオンの開発
- 03ファイルやレンダーの一括処理
- 04オペレーターのコンテキストエラーの調査
MCP 対応
公式 Blender MCP サーバーに接続している場合、実行中の Blender セッションでシーンの確認、スクリプト実行、画面による検証を行う手順を示します。未接続の場合は Python スクリプトの生成に切り替えます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ra100/ blender-claude-plugin --skill blender-python-scriptingインストール後、Claude Code で/blender-python-scriptingを入力して読み込まれたか確認します。
同梱ファイルreferences/data_model_reference.mdreferences/python_api.md
詳細
Blender Python スクリプティングのエキスパート
概要
このスキルでは、Blender 5.x の Python スクリプティングに関する専門的なガイダンスを提供します。カスタムオペレーターの作成、UI パネルの構築、アドオンの開発、コンテキストの管理、ハンドラーやタイマーの使用、プロパティシステムの操作、バッチ処理、Blender のデータモデルへのアクセスを扱います。リファレンスファイルには、完全なテンプレートとデータモデルの階層が記載されています。
MCP 優先のアプローチ
実行中の Blender セッションでスクリプトを実行し、データブロックを調査し、シーンの状態を直接変更するには、公式 Blender MCP Server(Blender Lab、Blender 5.1 以降)を優先してください。MCP サーバーに接続されていない場合に限り、Python スクリプトを出力してください。
検出: セッション開始時に、execute_blender_code、get_objects_summary、search_api_docs に一致する名前のツールを探してください。これらは公式の blender-mcp サーバーに属しています。いずれかが存在すれば、MCP を利用できます。
このスキルで使用するツール:
execute_blender_code— ライブセッションでbpyPython を実行します(主なアクション)get_objects_summary、get_object_detail_summary— 変更前にシーンの状態を調査しますget_blendfile_summary_datablocks/_missing_files/_of_linked_libraries/_path_info/_usage_guess— ファイルの内容を一覧表示しますsearch_api_docs、get_python_api_docs、search_manual_docs— API/オペレーター名が正しいことを確認してから呼び出しますget_screenshot_of_window_as_image/_as_json、get_screenshot_of_area_as_image— 視覚的な結果を確認しますjump_to_tab_by_name、jump_to_tab_by_space_type、jump_to_view3d_object_by_name、jump_to_view3d_object_data_by_name— 変更が見えるように UI を操作しますrender_thumbnail_to_path、render_viewport_to_path— 手早く視覚的なフィードバックを取得します
ワークフロー: get_* / search_* ツールで調査 → execute_blender_code で変更 → スクリーンショットまたは概要ツールで確認。失敗箇所を特定しやすいよう、コードブロックは小さく、冪等性を保ってください。
セットアップについては、docs/blender-mcp-setup.md を参照してください。
タスクの判断ツリー
- 「カスタムオペレーターを作成する」 →
references/python_api.mdのオペレーターテンプレートを参照してください - 「UI パネルを構築する」 →
references/python_api.mdのパネルテンプレートを参照してください - 「Blender アドオンを開発する」 → 以下の「アドオンの構成」に従ってください
- 「ファイル/レンダーをバッチ処理する」 → バッチ処理のパターンを参照してください
- 「シーン/オブジェクトのデータにアクセスする」 →
references/data_model_reference.mdを参照してください - 「プロパティを登録する」 →
references/python_api.mdのプロパティシステムを参照してください - 「フレーム変更時/ファイル読み込み時にコードを実行する」 →
references/python_api.mdのハンドラーパターンを参照してください - 「コンテキストエラー/poll の失敗」 → 以下の「コンテキスト管理」を参照してください
Blender 5.1 の Python に関する変更
Python 3.13 へのアップグレード
- Blender 5.1 には Python 3.13 がバンドルされています(5.0 の 3.12 から更新)
- アドオンのバージョン判定には
bl_info["blender"]を(5, 1, 0)に更新してください - 型ヒントの構文(
Optional[int]ではなくint | None)を使用してください。完全にサポートされるようになりました - CPython 3.13 ではパフォーマンスが向上しています。関数呼び出しの高速化と GC の改善が含まれます
削除されたオペレーター
bpy.ops.anim.convert_legacy_action— 削除されました。レイヤー化アクションが自動的に処理します
API の追加
bpy.ops.pose.apply_to_basis()— 現在のポーズをレストポーズとしてベイクします- ノードソケット型:フォントデータ用の
NodeSocketFont - ジオメトリノード用のボリュームグリッドノード型(blender-geometry-nodes スキルを参照)
アドオンの構成
適切な Blender アドオンは、次の構成に従います。
my_addon/
├── __init__.py # bl_info, register(), unregister()
├── operators.py # Custom operators
├── panels.py # UI panels
├── properties.py # PropertyGroups
├── preferences.py # AddonPreferences (optional)
└── utils.py # Shared utilities
最小限の単一ファイルアドオン
bl_info = {
"name": "My Add-on",
"author": "Author",
"version": (1, 0, 0),
"blender": (5, 0, 0),
"location": "View3D > Sidebar > My Tab",
"description": "Short description",
"category": "Object",
}
import bpy
class MY_OT_my_operator(bpy.types.Operator):
bl_idname = "my.my_operator"
bl_label = "My Operator"
bl_options = {'REGISTER', 'UNDO'}
@classmethod
def poll(cls, context):
return context.active_object is not None
def execute(self, context):
# ... do work ...
return {'FINISHED'}
class MY_PT_my_panel(bpy.types.Panel):
bl_label = "My Panel"
bl_idname = "MY_PT_my_panel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "My Tab"
def draw(self, context):
layout = self.layout
layout.operator("my.my_operator")
classes = (MY_OT_my_operator, MY_PT_my_panel)
def register():
for cls in classes:
bpy.utils.register_class(cls)
def unregister():
for cls in classes:
bpy.utils.unregister_class(cls)
if __name__ == "__main__":
register()
命名規則
- オペレーター:
ADDON_OT_name→bl_idname = "addon.name" - パネル:
ADDON_PT_name - メニュー:
ADDON_MT_name - UILists:
ADDON_UL_name - PropertyGroups:
ADDON_PG_name(慣例であり、強制ではありません) - ヘッダー:
ADDON_HT_name
コンテキスト管理
一般的なコンテキストの問題
Blender の操作は、現在のコンテキスト(アクティブオブジェクト、モード、エリアタイプ)に依存します。多くの bpy.ops.* 呼び出しは、コンテキストが正しくないと失敗します。
ルール:オペレーターを呼び出す前に、必ずコンテキストを確認してください。poll() メソッドを使ってオペレーターをガードしてください。
コンテキストのオーバーライド(Blender 4.x+ / 5.x)
# Modern context override using temp_override (4.0+)
with bpy.context.temp_override(active_object=obj, selected_objects=[obj]):
bpy.ops.object.delete()
# Override with area/region for UI-dependent ops
area = next(a for a in bpy.context.screen.areas if a.type == 'VIEW_3D')
region = next(r for r in area.regions if r.type == 'WINDOW')
with bpy.context.temp_override(area=area, region=region):
bpy.ops.view3d.camera_to_view()
モードの切り替え
# Safe mode switch
if bpy.context.object and bpy.context.object.mode != 'EDIT':
bpy.ops.object.mode_set(mode='EDIT')
# Always return to object mode when done
bpy.ops.object.mode_set(mode='OBJECT')
よくあるコンテキストの注意点
- バックグラウンドモードでの
bpy.ops:多くのビューポートオペレーターは--backgroundモードでは失敗します。代わりに直接データ API(bpy.data.*)を使ってください。 - ハンドラー内のオペレーターコンテキスト:ハンドラーは通常のコンテキスト外で実行されます。
bpy.context.temp_override()を使うか、ハンドラー内でのbpy.opsの使用を避けてください。 - アクティブオブジェクトが None:操作の前に、必ず
context.active_object is not Noneを確認してください。 - モードの不一致:オブジェクトモードのオペレーターは編集モードで失敗し、その逆も同様です。
context.object.modeを確認してください。 - Depsgraph が更新されていない:データを変更した後、必要に応じて
bpy.context.view_layer.update()またはdepsgraph.update()を呼び出してください。 display_typeの値はオブジェクトタイプによって異なります:'PLAIN_AXES'は Empty でのみ有効です。メッシュオブジェクトでは'BOUNDS'、'WIRE'、'SOLID'、または'TEXTURED'を使います。
バッチ処理
バッチレンダリング
import bpy, os
scenes_dir = "/path/to/blend/files"
output_dir = "/path/to/output"
for filename in os.listdir(scenes_dir):
if filename.endswith(".blend"):
filepath = os.path.join(scenes_dir, filename)
bpy.ops.wm.open_mainfile(filepath=filepath)
bpy.context.scene.render.filepath = os.path.join(
output_dir, filename.replace(".blend", ".png")
)
bpy.ops.render.render(write_still=True)
オブジェクトのバッチ処理
import bpy
for obj in bpy.data.objects:
if obj.type == 'MESH':
# Select only this object
bpy.ops.object.select_all(action='DESELECT')
obj.select_set(True)
bpy.context.view_layer.objects.active = obj
# Apply all modifiers
for mod in obj.modifiers:
bpy.ops.object.modifier_apply(modifier=mod.name)
コマンドラインでのバッチ処理
blender --background scene.blend --python my_script.py
blender --background --python batch_render.py -- --input /files --output /renders
-- の後にカスタム引数へアクセスします:
import sys
argv = sys.argv[sys.argv.index("--") + 1:]
デバッグのヒント
- システムコンソール:ウィンドウ > システムコンソールを切り替え(Windows)、またはターミナルから Blender を実行します
- Python コンソール:Python コンソールのエディターエリアを開き、対話形式でテストします
- 情報エディター:GUI 操作に対応する Python コードを表示します。API 呼び出しの調査に便利です
dir()とhelp():Python コンソールで使い、API オブジェクトを調べますbpy.context.copy():現在のコンテキストを辞書として返し、内容を確認できます- モーダルオペレーターのエラー:
print()文を追加するか、例外ハンドラー内でtraceback.print_exc()を使います
プロパティシステムのクイックリファレンス
| 種類 | 登録 | 値 |
|---|---|---|
BoolProperty | bpy.props.BoolProperty() | True/False |
IntProperty | bpy.props.IntProperty() | min、max、default、step |
FloatProperty | bpy.props.FloatProperty() | min、max、default、precision |
StringProperty | bpy.props.StringProperty() | default、maxlen、subtype |
EnumProperty | bpy.props.EnumProperty() | items=[(id, name, desc)] |
FloatVectorProperty | bpy.props.FloatVectorProperty() | size、default、subtype |
IntVectorProperty | bpy.props.IntVectorProperty() | size、default |
BoolVectorProperty | bpy.props.BoolVectorProperty() | size、default |
PointerProperty | bpy.props.PointerProperty() | type=PropertyGroup |
CollectionProperty | bpy.props.CollectionProperty() | type=PropertyGroup |
プロパティのサブタイプ
- Float/Int:
'PIXEL'、'PERCENTAGE'、'FACTOR'、'ANGLE'、'TIME'、'DISTANCE' - FloatVector:
'COLOR'、'TRANSLATION'、'DIRECTION'、'VELOCITY'、'ACCELERATION'、'EULER'、'QUATERNION'、'XYZ' - String:
'FILE_PATH'、'DIR_PATH'、'FILE_NAME'、'BYTE_STRING'、'PASSWORD'
Python API リファレンス
オペレーター(基本、モーダル、ファイルダイアログ、プロパティ付きの呼び出し)、パネル(条件付き、サブパネル、折りたたみ可能)、PropertyGroup、ハンドラー、タイマー、キーマップ、コンテキストのオーバーライドを含む完全なテンプレートについては、references/python_api.md を参照してください。
データモデルのリファレンス
Blender の完全なデータ階層(bpy.data.*)、ID タイプ、オブジェクトタイプ、メッシュ/カーブ/アーマチュアのデータアクセスパターン、depsgraph の使用方法については、references/data_model_reference.md を参照してください。