Blender Addon Naming Rules
GOAL
Today’s goal is to list naming rules and conventions of Blender addon.
Reference:
AddonPreferences(bpy_struct) from Blender 2.93.2 Release Candidate Python API documentation
Script Meta Info from wiki.blender.org
Environment
Blender 2.83 (Python 3.7.4)
Windows10
directory_name and file_name.py
Addon directory and files are snake_case with only lower cases. See examples in your addon directory, C:/Program Files/Blender Foundation/Blender 2.83/2.83/scripts/addons.
Addon Name
Addon name defined in bl_info is defined with the first letter of each word capitalized.
Class Name
2.8x enforces naming conventions for class name. Refer to “Class Registration” > “Naming” in “Blender 2.80: Addon API” reference for details.
The naming convention is UPPER_CASE_{SEPARATOR}_mixed_case. And {SEPARATOR} is defined according to the type of class as below.
- Header -> _HT_
- Menu -> _MT_
- Operator -> _OT_
- Panel -> _PT_
- UIList -> _UL_
The followings are examples of panel class name.
# Header # from "oscurart_tools" addon class OSSELECTION_HT_OscSelection(bpy.types.Header): bl_label = "Selection Osc" bl_space_type = "VIEW_3D" # Menu # from "space_view3d_spacebar_menu" addon class VIEW3D_MT_Space_Dynamic_Menu(Menu): bl_label = "Dynamic Context Menu" class VIEW3D_MT_View_Menu(Menu): bl_label = "View" # Operator # from "add_camera_rigs" addon class ADD_CAMERA_RIGS_OT_set_scene_camera(Operator): bl_idname = "add_camera_rigs.set_scene_camera" bl_label = "Make Camera Active" bl_description = "Makes the camera parented to this rig the active scene camera" # Panels # from "add_camera_rigs" addon class ADD_CAMERA_RIGS_PT_camera_rig_ui(Panel, CameraRigMixin) bl_label = "Camera Rig" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'Item' # UIList # from "cycles" addon class CYCLES_RENDER_UL_aov(bpy.types.UIList): def draw_item(self, ...
bl_idname
bl_idname is specified to access the operator from python script in Blender. The bl_idname consists of snake_case words connected with dots.
# bl_idname in cycle/operators.py in cycle addon class CYCLES_OT_use_shading_nodes(Operator): bl_idname = "cycles.use_shading_nodes" class CYCLES_OT_add_aov(bpy.types.Operator): bl_idname="cycles.add_aov" class CYCLES_OT_remove_aov(bpy.types.Operator): bl_idname="cycles.remove_aov" class CYCLES_OT_denoise_animation(Operator): bl_idname = "cycles.denoise_animation" class CYCLES_OT_merge_images(Operator): bl_idname = "cycles.merge_images"
For headers, menus and panels, the bl_idname is expected to match the class name (automatic if none is specified). Refer to “Class Registration” > “Naming” in “Blender 2.80: Addon API” reference.
Other – PEP 8
Basically the naming rules of module, variable and so on is compliant with PEP 8.
variable = "hello" variable_two = 2 def function_name(arg_name): pass class ClassName(): def __init__(self, arg_name): self.variable = 1 def method_name(self): pass