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