Reference/Release Notes/3.5/Python API

= Python API & Text Editor =

Integration

 * The users site-packages are now available by default without having to use `--python-use-system-env`

General

 * The active catalog of Asset Browsers can be changed via `bpy.types.FileAssetSelectParams.catalog_id`, it's no longer read-only.
 * Custom node tree now have a default name set to `NodeTree.bl_label`.
 * New `object.modifiers.move` method for reordering modifiers without using operators.

Mesh

 * The active and default (for render) color attributes are now stored as strings, making it easier to change them and access the correct attributes.

Modifiers

 * There is a new `ModifierData.execution_time` property that can be used for profiling and optimization. It's not exposed in the UI yet.

Internal Mesh Format
The mesh data structure refactoring from earlier releases has continued in 3.5.
 * Mesh vertex positions are now accessible via the builtin `position` attribute.
 * UV layers are now stored as generic attributes
 * The sharp edge property is now stored as a generic attribute.
 * TODO: Expand on naming, performance tradeoffs, 4.0 deprecation, etc.

Loose edge status is stored differently internally now.
 * The `MeshEdge.is_loose` property is no longer editable.
 * Loose edge status can be recalculated with `Mesh.update(calc_edges_loose=True)`

Grease Pencil Auto-masking moved to Global setting.


Props Removed:

`brush.gpencil_settings.use_automasking_strokes, brush.gpencil_settings.use_automasking_layer, brush.gpencil_settings.use_automasking_material`

Replaced by:

`tool_settings.gpencil_sculpt.use_automasking_stroke, tool_settings.gpencil_sculpt.use_automasking_layer_stroke, tool_settings.gpencil_sculpt.use_automasking_material_stroke, tool_settings.gpencil_sculpt.use_automasking_layer_active, tool_settings.gpencil_sculpt.use_automasking_material_active`

Motion tracking optical center
The internal storage of the optical center (principal point) has been changed in to a normalized space.

The normalized space refers to coordinate `(0, 0)` corresponding to the frame center, `(-1, -1)` the left bottom frame corner, `(1, 1)` is the top right frame corner. This notation is available via `clip.tracking.camera.principal_point` property.

For some algorithms it is convenient to operate in the pixel space. For those usecases the new `clip.tracking.camera.principal_point_pixels` property has been added.

The old `clip.tracking.camera.principal` has been removed to avoid ambiguous naming in the API.

Inverted the meaning of the armature modifier vertex group in some cases
Fixed an old bug where the effect of the Invert Vertex Group toggle of the Armature modifier was inverted when Multi-Modifier was active. 

Scripts creating complex armature modifier setups need updating to check the exact blender version:

bpy.ops.object.datalayout_transfer operator
Since we now feature two domains since, the single "VCOL" in the enum has been split into "COLOR_VERTEX" and "COLOR_CORNER".

Bundled Libraries
Python bindings for the following libraries are now bundled with Blender, and available to use by add-ons.
 * USD
 * OpenVDB
 * OpenImageIO
 * OpenColorIO
 * MaterialX