Reference

File Paths

These are the locations where presets are stored.

Factory Preset

C:\Users\<your_name>\AppData\Roaming\Blender Foundation\Blender\<Version>\scripts\addons\structured_renamer\resources\presets\patterns.json

User Preset

C:\Users\<your_name>\AppData\Roaming\Blender Foundation\Blender\<Version>\config\addons\structured_renamer\presets\patterns.json

Backup

C:\Users\<your_name>\AppData\Roaming\Blender Foundation\Blender\<Version>\config\addons\structured_renamer\backups\stdr_backup_<datetime>.json

Factory Preset

/Users/<your_name>/Library/Application Support/Blender/<Version>/scripts/addons/structured_renamer/resources/presets/patterns.json

User Preset

/Users/<your_name>/Library/Application Support/Blender/<Version>/config/addons/structured_renamer/presets/patterns.json

Backup

/Users/<your_name>/Library/Application Support/Blender/<Version>/config/addons/structured_renamer/backups/stdr_backup_<datetime>.json

Factory Preset

$HOME/.config/blender/<Version>/scripts/addons/structured_renamer/resources/presets/patterns.json

User Preset

$HOME/.config/blender/<Version>/config/addons/structured_renamer/presets/patterns.json

Backup

$HOME/.config/blender/<Version>/config/addons/structured_renamer/backups/stdr_backup_<datetime>.json

Note

When the addon file is updated, the preset file inside the addon file will be overwritten. Therefore, it is necessary to save the user preset and backup in a different directory from the addon file.

Json Schema

A JSON schema that defines the structure of the naming pattern. If you want to edit the JSON file in an external editor, please refer to this JSON Schema.

Added in version 0.8.0.

{
    "type": "object",
    "properties": {
        // Specify the current version 1.0.0.
        "version": {
            "type": "array",
            "description": "Addon version when the file was exported.",
            "minItems": 3,
            "maxItems": 3,
            "items": {"type": "integer", "minimum": 0},
        },
        "patterns": {
            "type": "array",
            "description": "List of naming patterns.",
            "items": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "Unique identifier for the pattern.",
                        "pattern": "^[a-zA-Z0-9_]+$",
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the pattern.",
                        "minLength": 1,
                    },
                    "elements": {
                        "type": "array",
                        "description": "List of elements within the pattern.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "string",
                                    "description": "Unique identifier for the element.",
                                    "pattern": "^[a-zA-Z0-9_]+$",
                                },
                                "display_name": {
                                    "type": "string",
                                    "description": "Display name of the element.",
                                    "minLength": 1,
                                },
                                "type": {
                                    "type": "string",
                                    "description": "Type of the element.",
                                    "enum": ["text", "position", "numeric_counter"],
                                },
                                "enabled": {
                                    "type": "boolean",
                                    "description": "Whether the element is enabled.",
                                },
                                "order": {
                                    "type": "integer",
                                    "description": "Display order of the element.",
                                    "minimum": 0,
                                },
                                "separator": {
                                    "type": "string",
                                    "description": "Separator character used after this element.",
                                    "enum": ["UNDERSCORE", "DOT", "DASH", "SPACE", "NONE"],
                                },
                                // Type-specific properties
                                "items": {
                                    "type": "array",
                                    "items": {"type": "string"},
                                    "description": "List of text items (for 'text' type).",
                                },
                                "padding": {
                                    "type": "integer",
                                    "description": "Padding for the counter (for 'numeric_counter' type).",
                                    "minimum": 0,
                                },
                                "count_up": {
                                    "type": "boolean",
                                    "description": "Whether the counter counts up (for 'numeric_counter' type).",
                                },
                                "xaxis_type": {
                                    "type": "string",
                                    "description": "Representation for X-axis (for 'position' type).",
                                    "enum": [
                                        "L|R",
                                        "l|r",
                                        "LEFT|RIGHT",
                                        "Left|Right",
                                        "left|right"
                                    ]
                                },
                                "xaxis_enabled": {
                                    "type": "boolean",
                                    "description": "Whether X-axis is enabled (for 'position' type).",
                                },
                                "yaxis_enabled": {
                                    "type": "boolean",
                                    "description": "Whether Y-axis is enabled (for 'position' type).",
                                },
                                "zaxis_enabled": {
                                    "type": "boolean",
                                    "description": "Whether Z-axis is enabled (for 'position' type).",
                                },
                            },
                            "required": [
                                "id",
                                "display_name",
                                "type",
                                "enabled",
                                "order",
                                "separator",
                            ],
                            "allOf": [
                                {
                                    "if": {"properties": {"type": {"const": "text"}}},
                                    "then": {"required": ["items"]},
                                },
                                {
                                    "if": {
                                        "properties": {
                                            "type": {"const": "numeric_counter"}
                                        }
                                    },
                                    "then": {"required": ["padding", "count_up"]},
                                },
                                {
                                    "if": {
                                        "properties": {"type": {"const": "position"}}
                                    },
                                    "then": {
                                        "required": [
                                            "xaxis_type",
                                            "xaxis_enabled",
                                            "yaxis_enabled",
                                            "zaxis_enabled",
                                        ]
                                    },
                                },
                            ],
                        },
                    },
                },
                "required": ["id", "name", "elements"],
            },
        },
    },
    "required": ["version", "patterns"],
}

Concepts

Pattern & Element

Core class structure for managing naming elements and patterns.

        classDiagram
   direction LR
   class NamingPattern {
      +elements: List[INameElement]
      +parse_name(name: str)
      +update_elements(updates: Dict)
      +render_name() str
   }
   class NameElement {
      +id: str
      +order: int
      +enabled: bool
      +separator: str
      +value: str
      # _pattern: regex.Pattern
      +parse(name: str) bool
      +set_value(value: Any)
      +render() tuple[sep: str, value: str]
      }
   class CounterElement{
      +padding: int
      +increment()
      #_build_pattern() str
   }
   class PositionElement{
      +position_values: List[str]
      #_build_pattern() str
   }
   class TextElement{
      +items: List[str]
      #_build_pattern() str
   }

   NamingPattern "1" -- "n" NameElement
   NameElement <|.. TextElement
   NameElement <|.. PositionElement
   NameElement <|.. CounterElement

    

Decomposition & Reconstruction

Basic flow of name decomposition, update, and reconstruction.

        graph LR
    A[DEF-Arm-01.L] --> B{parse_name}
    B --> |Prefix| C[DEF] 
    B --> |Middle| D[Arm] 
    B --> |Counter| E[01] 
    B --> |Position| F[L]
    G["{'Prefix': 'CTRL', 'Middle': 'Spine'}"] --> |User Input| H{update_elements}
    C & D --> H
    H --> I[CTRL] & J[Spine]
    I & J & E & F --> K{render_name}
    K --> L[CTRL-Spine-01.L]