import bpy import os from bpy.types import PropertyGroup from bpy.props import StringProperty class RT_PG_render_toolbox_props(PropertyGroup): default_base_path : StringProperty( name="Base Path Template", description="Template for file output base path\ \nFolder containing subsequent filepath", default="//render/{node_label}/", # options={'SKIP_SAVE'} ) ## Multilayer base path : output on file instead of folder default_multilayer_base_path : StringProperty( name="Base Path Template", description="Template for multilayer file output base paths\ \nOutput of the file sequence", default="//render/{node_label}/{node_label}_", # options={'SKIP_SAVE'} ) ### file slots (not used currently) default_file_slot : StringProperty( name="File Slot Template", description="Template for file output file slots\ \nSubpath added to base path for file sequence", default="{socket_name}/{socket_name}_", # options={'SKIP_SAVE'} ) ## Multilayer's layer: layer name in EXR instead of subpath to file default_multilayer_name : StringProperty( name="Layer Name Template", description="Template for multilayer file output layer names\ \nLayer name in EXR multilayer file", default="{socket_name}", # options={'SKIP_SAVE'} ) # default_tech_pass_name : StringProperty( # name="Tech Pass Name Template", # description="Template for tech pass file output layer names\ # \nLayer name in EXR multilayer file", # default="tech", # # options={'SKIP_SAVE'} # ) # default_crypto_name : StringProperty( # name="Crypto Pass Name Template", # description="Template for crypto pass file output layer names\ # \nLayer name in EXR multilayer file", # default="crypto", # # options={'SKIP_SAVE'} # ) def reset_scene_path_templates(): ## set default template from environment variable if available, or fallback to preferences defaults prefs = bpy.context.preferences.addons[__package__].preferences if not prefs.use_env_base_path_templates: # set from preferences bpy.context.scene.render_toolbox.default_base_path = prefs.base_path_template bpy.context.scene.render_toolbox.default_multilayer_base_path = prefs.base_path_multilayer_template return # set from environment variables (fallback to preferences if not set) exr_base_path_template = os.getenv('RENDERTOOLBOX_EXR_PATH_TEMPLATE') if exr_base_path_template: bpy.context.scene.render_toolbox.default_base_path = exr_base_path_template else: bpy.context.scene.render_toolbox.default_base_path = prefs.base_path_template multilayer_base_path_template = os.getenv('RENDERTOOLBOX_MULTILAYER_PATH_TEMPLATE') if multilayer_base_path_template: bpy.context.scene.render_toolbox.default_multilayer_base_path = multilayer_base_path_template else: bpy.context.scene.render_toolbox.default_multilayer_base_path = prefs.base_path_multilayer_template classes = ( RT_PG_render_toolbox_props, ) def register(): for cls in classes: bpy.utils.register_class(cls) bpy.types.Scene.render_toolbox = bpy.props.PointerProperty(type=RT_PG_render_toolbox_props) # reset_scene_path_templates() # restricted context error when trying assignation here (probably need handler) def unregister(): del bpy.types.Scene.render_toolbox for cls in reversed(classes): bpy.utils.unregister_class(cls)