""" Face Mask Blur - Blender 5.0 Extension Detect faces and apply blur in VSE for privacy protection. """ bl_info = { "name": "Face Mask Blur", "blender": (5, 0, 0), "category": "Sequencer", "version": (0, 2, 0), "author": "Hare", "description": "Detect faces and apply blur in VSE for privacy protection", } def register(): """Register all extension components.""" import bpy from bpy.props import FloatProperty, IntProperty, EnumProperty, StringProperty from . import operators from . import panels # Register scene properties for face detection parameters bpy.types.Scene.facemask_conf_threshold = FloatProperty( name="Confidence", description="YOLO confidence threshold (higher = fewer false positives)", default=0.5, min=0.1, max=1.0, step=0.01, ) bpy.types.Scene.facemask_iou_threshold = FloatProperty( name="IOU Threshold", description="Non-maximum suppression IOU threshold", default=0.45, min=0.1, max=1.0, step=0.01, ) bpy.types.Scene.facemask_mask_scale = FloatProperty( name="Mask Scale", description="Scale factor for mask region (1.0 = exact face size)", default=1.5, min=1.0, max=3.0, step=0.1, ) bpy.types.Scene.facemask_cache_dir = StringProperty( name="Cache Directory", description="Optional cache root directory (empty = default .mask_cache)", default="", subtype='DIR_PATH', ) bpy.types.Scene.facemask_bake_blur_size = IntProperty( name="Bake Blur Size", description="Gaussian blur size (pixels) used for bake", default=50, min=1, max=501, ) bpy.types.Scene.facemask_bake_format = EnumProperty( name="Bake Format", description="Output format for baked blur video", items=[ ("MP4", "MP4", "Export as .mp4"), ("AVI", "AVI", "Export as .avi"), ("MOV", "MOV", "Export as .mov"), ], default="MP4", ) operators.register() panels.register() def unregister(): """Unregister all extension components.""" import bpy from . import operators from . import panels panels.unregister() operators.unregister() # Unregister scene properties del bpy.types.Scene.facemask_conf_threshold del bpy.types.Scene.facemask_iou_threshold del bpy.types.Scene.facemask_mask_scale del bpy.types.Scene.facemask_cache_dir del bpy.types.Scene.facemask_bake_blur_size del bpy.types.Scene.facemask_bake_format if __name__ == "__main__": register()