PGCRYPT/OpenBlender_Train huggingface dataset:
user: Provide the full official documentation entry for Legacy vs Extension Add-ons, preserving all code examples.

assistant: With the introduction of Extensions in Blender 4.2, the old way of creating add-ons is considered deprecated.
While the changes are rather small they impact existing add-ons.

In order to allow a smooth transition process, the so-called legacy add-ons will continue to be supported by Blender.
They can be installed via [Install legacy Add-on](../../editors/preferences/addons.html#prefs-extensions-install-legacy-addon) button in the User
Preferences.

All add-on maintainers are urged to convert the add-ons they want to share, so they are future proof and can support
features like updating from the extensions platform.

### Converting a Legacy Add-on into an Extension

1. Create a [manifest file](getting_started.html#extensions-getting-started).
2. Remove the `bl_info` information (this is now in the manifest).
3. Replace all references to the module name to `__package__`.
4. Make all module imports to use relative import.
5. Use [wheels](https://pythonwheels.com/) to pack your external Python dependencies.
6. Remember to test it thoroughly.

### Extensions and Namespace

The legacy add-ons would use their module name to access the preferences. This could lead to a name clash when
extensions with the same name (from different repositories) would be installed.
To prevent this conflict, the repository name is now part of the namespace.

For example, now instead of `kitsu` the module name would be `bl_ext.{repository_module_name}.kitsu` instead.

This has a few implications for preferences and module imports.

#### User Preferences and `__package__`

Add-ons can define their own preferences which use the package name as an identifier.
This can be accessed using `__package__`.

This was already supported in the legacy add-ons, but not reinforced.
As such this can break backward compatibility.

Before:

> ```
> class KitsuPreferences(bpy.types.AddonPreferences):
>     bl_idname = "kitsu"
>     # ... snip ...
>
> # Access with:
> addon_prefs = bpy.context.preferences.addons["kitsu"]
> ```

Now:

> ```
> class KitsuPreferences(bpy.types.AddonPreferences):
>     bl_idname = __package__
>     # ... snip ...
>
> # Access with:
> addon_prefs = bpy.context.preferences.addons[__package__]
> ```

Sub-packages
:   An add-on that defines sub-packages (sub-directories with their own `__init__.py` file)
    that needs to use this identifier will have to import the top-level package using a relative import.

    ```
    from .. import __package__ as base_package
    ```

    Then `base_package` can be used instead of `__package__`.
    The `..` imports relative to the packages parent, sub-sub-packages must use `...` and so on.

#### Relative Imports

> before:
> :   `from kitsu import utils`
>
> now:
> :   `from . import utils`

Importing packages within the add-on module need to use relative paths.
This is a standard Python feature and only applicable for add-ons that have multiple folders.

This was already supported in the legacy add-ons, but not reinforced. As such this can break backward compatibility.
user: Provide the full official documentation entry for Examples, preserving all code examples.

assistant: [image reference removed]

A chain created from a single link.
[Sample blend-file](https://archive.blender.org/wiki/2015/index.php/File:Dev-ArrayModifier-Chain01.blend).

[image reference removed]

A tentacle created with an Array Modifier followed by a Curve Modifier.

The segment in the foreground is the base mesh for the tentacle; the tentacle is capped by two
specially-modeled objects deformed by the same Curve object as the main part of the tentacle.
[Sample blend-file](https://archive.blender.org/wiki/2015/index.php/File:Manual-Modifier-Array-Tentacle01.blend).

### Fractal

|  |  |
| --- | --- |
| ../../../_images/modeling_modifiers_generate_array_example-fractal-1.jpg   Multi-level array animated with motion blur. | ../../../_images/modeling_modifiers_generate_array_example-fractal-2.png   Fractal created with multiple arrays. [Sample blend-file](https://archive.blender.org/wiki/2015/index.php/File:Dev-ArrayModifier-Fractal01.blend). |
user: Describe Speed Control Strip from the Blender manual or Python API, including usage steps and snippets.

assistant: # Speed Control Strip

Speed Control time-warps the strip, making it play faster or slower than it normally would.
Playing faster means that some frames are skipped,
and the strip will run out of frames before the end frame.
When the strip runs out of frames to display, it will just keep repeating
the last one action that will appear to be frozen. To avoid this,
position the next strip under the original at a point where you want the motion to continue.
user: Explain EnumProperty(Property) in complete detail according to the official Blender documentation.

assistant: # EnumProperty(Property)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`Property`](bpy.types.Property.html#bpy.types.Property "bpy.types.Property")

*class* bpy.types.EnumProperty(*Property*)
:   RNA enumeration property definition, to choose from a number of predefined options

    default
    :   Default value for this enum

        Type:
        :   enum in [`'DEFAULT'`], default `'DEFAULT'`, (readonly)

    default_flag
    :   Default value for this enum

        Type:
        :   enum set in {`'DEFAULT'`}, default set(), (readonly)

    enum_items
    :   Possible values for the property

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`EnumPropertyItem`](bpy.types.EnumPropertyItem.html#bpy.types.EnumPropertyItem "bpy.types.EnumPropertyItem"), (readonly)

    enum_items_static
    :   Possible values for the property (never calls optional dynamic generation of those)

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`EnumPropertyItem`](bpy.types.EnumPropertyItem.html#bpy.types.EnumPropertyItem "bpy.types.EnumPropertyItem"), (readonly)

    enum_items_static_ui
    :   Possible values for the property (never calls optional dynamic generation of those). Includes UI elements (separators and section headings).

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`EnumPropertyItem`](bpy.types.EnumPropertyItem.html#bpy.types.EnumPropertyItem "bpy.types.EnumPropertyItem"), (readonly)

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type
user: What is Subdivide and Smooth and how is it used in Blender Python scripting?

assistant: Subdivides and smooths the strokes by inserting points between the selected points.

Number of Cuts
:   The number of subdivisions to perform.

Selected Points
:   When enabled, limits the effect to only the selected points within the stroke.

Iterations
:   Number of times to repeat the procedure.

Factor
:   The amount of the smoothness on subdivided points.

Smooth Endpoints
:   Smooths the stroke’s endpoints.

Keep Shape
:   Preserves the strokes shape.

Position
:   When enabled, the operator affect the points location.

Radius
:   When enabled, the operator affect the points thickness.

Opacity
:   When enabled, the operator affect the points strength (alpha).
user: Describe R from the Blender manual or Python API, including usage steps and snippets.

assistant: |  |  |
| --- | --- |
| - [**Radiosity**](glossary/index.xhtml#term-Radiosity) - [**Random Seed**](glossary/index.xhtml#term-Random-Seed) - [**Ray Tracing**](glossary/index.xhtml#term-Ray-Tracing) - [**Real User**](glossary/index.xhtml#term-Real-User) - [**Refraction**](glossary/index.xhtml#term-Refraction) - [**Render**](glossary/index.xhtml#term-Render) - [**Resource**](glossary/index.xhtml#term-Resource) - [**Rest Pose**](glossary/index.xhtml#term-Rest-Pose) - [**RGB**](glossary/index.xhtml#term-RGB) - [**Rig**](glossary/index.xhtml#term-Rig) - [Rigid Body Constraints](physics/rigid_body/constraints/introduction.xhtml#index-1)   - [Fixed Constraint](physics/rigid_body/constraints/types/fixed.xhtml#index-0)   - [Generic Constraint](physics/rigid_body/constraints/types/generic.xhtml#index-0)   - [Generic Spring Constraint](physics/rigid_body/constraints/types/generic_spring.xhtml#index-0)   - [Hinge Constraint](physics/rigid_body/constraints/types/hinge.xhtml#index-0)   - [Motor Constraint](physics/rigid_body/constraints/types/motor.xhtml#index-0)   - [Piston Constraint](physics/rigid_body/constraints/types/piston.xhtml#index-0)   - [Point Constraint](physics/rigid_body/constraints/types/point.xhtml#index-0)   - [Slider Constraint](physics/rigid_body/constraints/types/slider.xhtml#index-0) | - [**Roll**](glossary/index.xhtml#term-Roll) - [**Roll Angle**](glossary/index.xhtml#term-Roll-Angle) - [**Rolling Shutter**](glossary/index.xhtml#term-Rolling-Shutter) - [**Roughness Map**](glossary/index.xhtml#term-Roughness-Map) |
user: Explain Outputs in complete detail according to the official Blender documentation.

assistant: Curve Index
:   The index of each curve within the geometry component.
    This can be used for deterministic indexing or pattern generation.

Curve ID
:   A stable unique ID for each curve.
    Unlike *Curve Index*, this value remains consistent even if curves are added or removed.

Length
:   The total length of each curve, measured along its evaluated spline.
    Useful for scaling effects or adjusting deformation strength based on hair length.

Direction
:   A normalized vector pointing from the root toward the tip of each curve.
    This represents the overall direction of the curve and can be used for
    orienting instances or driving direction-dependent effects.

Random
:   A random vector assigned per curve, based on the *Curve ID*.
    It provides consistent randomization between evaluations, allowing for
    reproducible but varied results across curves.

Surface UV
:   The UV coordinates on the surface mesh where each curve is attached.
    This is typically used for sampling textures, transferring color data,
    or controlling procedural effects based on surface location.
user: What is FunctionNodeMatchString(FunctionNode) and how is it used in Blender Python scripting?

assistant: # FunctionNodeMatchString(FunctionNode)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`Node`](bpy.types.Node.html#bpy.types.Node "bpy.types.Node"), [`NodeInternal`](bpy.types.NodeInternal.html#bpy.types.NodeInternal "bpy.types.NodeInternal"), [`FunctionNode`](bpy.types.FunctionNode.html#bpy.types.FunctionNode "bpy.types.FunctionNode")

*class* bpy.types.FunctionNodeMatchString(*FunctionNode*)
:   Check if a given string exists within another string

    *classmethod* is_registered_node_type()
    :   True if a registered node type

        Returns:
        :   Result

        Return type:
        :   boolean

    *classmethod* input_template(*index*)
    :   Input socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* output_template(*index*)
    :   Output socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type
user: How do I use Inputs in Blender? Include parameters, examples, warnings and best practices.

assistant: Image
:   Standard color input image.

Factor
:   Controls the overall strength of the vignette effect.
    A value of 0 disables the effect, while higher values increase the darkness or intensity of the vignette.

Feather
:   Determines the softness of the vignette transition from the center to the edges.
    Higher values result in a smoother, more gradual fade.

### Transform

Corner Roundness
:   Adjusts the shape of the vignette corners.
    A value of 0 produces square corners, while 1 makes the vignette fully circular.

Scale
:   Controls the size of the vignette area.
    Smaller values make the vignette tighter and more focused near the center.

Offset
:   Shifts the vignette center position along the X and Y axes.
    Useful for emphasizing a specific area of the image instead of the center.

Angle
:   Rotates the vignette mask around the image center.
user: Show practical ways to work with Start & End Mapping in a Blender add-on or script – include code.

assistant: Factor Start, End
:   The percentages along the length of the curve where the geometry should start
    and end. By default, these are set to 0 and 1, making the geometry cover the full length;
    but if you change them to 0.5 and 0.75, the geometry will only cover the third quarter
    of the curve.

    |  |  |
    | --- | --- |
    | <../../../_images/modeling_curves_properties_geometry_bevel.png>   A curve with Factor Start set to 0 and End to 1. | <../../../_images/modeling_curves_properties_geometry_bevel-start-end-factor.png>   Factor End changed to 0.6. |

Mapping Start, End
:   How to map the *Factor Start, End* percentages to positions on the curve.

    Resolution:
    :   Only count control points, disregarding the lengths of the spline segments (pieces of
        spline between two control points). If a spline has three control points and *Factor Start*
        is set to 0.5, the geometry will always start at the second control point,
        even if its distances to the first and third control points are completely different.

    Segments:
    :   Calculate an approximate percentage along the length of the spline by assuming that
        all the subdivisions within each segment are evenly distributed.

    Spline:
    :   Calculate an accurate percentage along the length of the spline.
user: How do I use NodeSocketIntPercentage(NodeSocketStandard) in Blender? Include parameters, examples, warnings and best practices.

assistant: # NodeSocketIntPercentage(NodeSocketStandard)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`NodeSocket`](bpy.types.NodeSocket.html#bpy.types.NodeSocket "bpy.types.NodeSocket"), [`NodeSocketStandard`](bpy.types.NodeSocketStandard.html#bpy.types.NodeSocketStandard "bpy.types.NodeSocketStandard")

*class* bpy.types.NodeSocketIntPercentage(*NodeSocketStandard*)
:   Integer number socket of a node

    default_value
    :   Input value used for unconnected socket

        Type:
        :   int in [0, inf], default 100

    links
    :   List of node links from or to this socket.

        Type:
        :   [`NodeLinks`](bpy.types.NodeLinks.html#bpy.types.NodeLinks "bpy.types.NodeLinks")

        (readonly)

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type
user: Give a detailed overview of GeometryNodeInputMeshEdgeAngle(GeometryNode): syntax, arguments, return values, common patterns.

assistant: # GeometryNodeInputMeshEdgeAngle(GeometryNode)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`Node`](bpy.types.Node.html#bpy.types.Node "bpy.types.Node"), [`NodeInternal`](bpy.types.NodeInternal.html#bpy.types.NodeInternal "bpy.types.NodeInternal"), [`GeometryNode`](bpy.types.GeometryNode.html#bpy.types.GeometryNode "bpy.types.GeometryNode")

*class* bpy.types.GeometryNodeInputMeshEdgeAngle(*GeometryNode*)
:   The angle between the normals of connected manifold faces

    *classmethod* is_registered_node_type()
    :   True if a registered node type

        Returns:
        :   Result

        Return type:
        :   boolean

    *classmethod* input_template(*index*)
    :   Input socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* output_template(*index*)
    :   Output socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type
user: Give a detailed overview of Rendering: syntax, arguments, return values, common patterns.

assistant: With Cycles you can render hair with specialized hair BSDFs
[Hair BSDF](../../../render/shader_nodes/shader/hair.xhtml) or
[Principled Hair BSDF](../../../render/shader_nodes/shader/hair_principled.xhtml).

Hair can also be used as a basis for
the [Particle Instance Modifier](../../../modeling/modifiers/physics/particle_instance.xhtml),
which allows you to have a mesh be deformed along the curves,
which is useful for thicker strands, or things like grass, or feathers, which may have a more specific look.
user: Show practical ways to work with Poor Performance in a Blender add-on or script – include code.

assistant: - Update your graphics drivers (see above).
- On laptops, make sure you are using a dedicated GPU (see above).
- Try lowering quality settings in Preferences ‣ System ‣ Memory & Limits.
- Try undoing settings in your graphics drivers, if you made any changes there.
user: Provide the full official documentation entry for Arguments, preserving all code examples.

assistant: - [Render Options](arguments.xhtml#command-line-args-render-options)
- [Cycles Render Options](arguments.xhtml#command-line-args-cycles-render-options)
- [Format Options](arguments.xhtml#command-line-args-format-options)
- [Animation Playback Options](arguments.xhtml#command-line-args-animation-playback-options)
- [Window Options](arguments.xhtml#command-line-args-window-options)
- [Python Options](arguments.xhtml#command-line-args-python-options)
- [Network Options](arguments.xhtml#command-line-args-network-options)
- [Logging Options](arguments.xhtml#command-line-args-logging-options)
- [Debug Options](arguments.xhtml#command-line-args-debug-options)
- [GPU Options](arguments.xhtml#command-line-args-gpu-options)
- [Misc Options](arguments.xhtml#command-line-args-misc-options)
user: What is Volume and how is it used in Blender Python scripting?

assistant: Some phenomena of real-world hair can be simulated more efficiently using a volumetric model instead
of the basic geometric strand model. This means constructing a regular grid such as those used in
fluid simulations and interpolating hair properties between the grid cells.

Air Drag
:   Controls how thick the air is around the hair causing the hair to flow slower.

Internal Friction
:   Amount of friction between individual hairs.

Voxel Grid Cell Size
:   Size of the voxel grid cells for interaction effects.

Density Target
:   Maximum density of the hair.

Density Strength
:   The influence that the *Density Target* has on the simulation.
user: Give a detailed overview of Operator Type Flag Items: syntax, arguments, return values, common patterns.

assistant: # Operator Type Flag Items

REGISTER:
:   Register.

    Display in the info window and support the redo toolbar panel.

UNDO:
:   Undo.

    Push an undo event when the operator returns `FINISHED` (needed for operator redo, mandatory if the operator modifies Blender data).

UNDO_GROUPED:
:   Grouped Undo.

    Push a single undo event for repeated instances of this operator.

BLOCKING:
:   Blocking.

    Block anything else from using the cursor.

MACRO:
:   Macro.

    Use to check if an operator is a macro.

GRAB_CURSOR:
:   Grab Pointer.

    Use so the operator grabs the mouse focus, enables wrapping when continuous grab is enabled.

GRAB_CURSOR_X:
:   Grab Pointer X.

    Grab, only warping the X axis.

GRAB_CURSOR_Y:
:   Grab Pointer Y.

    Grab, only warping the Y axis.

DEPENDS_ON_CURSOR:
:   Depends on Cursor.

    The initial cursor location is used, when running from a menus or buttons the user is prompted to place the cursor before beginning the operation.

PRESET:
:   Preset.

    Display a preset button with the operators settings.

INTERNAL:
:   Internal.

    Removes the operator from search results.

MODAL_PRIORITY:
:   Modal Priority.

    Handle events before other modal operators without this option. Use with caution, do not modify data that other modal operators assume is unchanged during their operation..
user: Show practical ways to work with Inputs in a Blender add-on or script – include code.

assistant: Color
:   Volume scattering color.

Color Attribute
:   Volume grid for coloring the volume. Use “color” for smoke simulations.

Density
:   Density of the volume.

Density Attribute
:   Volume grid to define the density, typically “density”.

Anisotropy
:   Backward or forward scattering direction.

Absorption Color
:   Volume shadow color tint.

Emission Strength
:   Amount of light to emit.

Emission Color
:   Emission color tint.

Blackbody Intensity
:   Blackbody emission for fire. Set to 1 for physically accurate intensity.

Blackbody Tint
:   Color tint for blackbody emission.

Temperature
:   Temperature in kelvin for blackbody emission, higher values emit more.

Temperature Attribute
:   Volume grid to define the temperature, typically “temperature”.
user: What is Navigating and how is it used in Blender Python scripting?

assistant: Navigating the node editors is done with the use of both mouse movement and keyboard shortcuts.

Pan `MMB`
:   Move the view up, down, left and right.

Zoom `Ctrl`-`MMB`, `Wheel`
:   Move the camera forwards and backwards.

Frame Selected `NumpadPeriod`
:   Adjusts the zooms to fit only the selected nodes in the view.

Frame All `Home`
:   Adjusts the zoom to fit all nodes in the view.
user: Describe GeometryNodeList(GeometryNode) from the Blender manual or Python API, including usage steps and snippets.

assistant: # GeometryNodeList(GeometryNode)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`Node`](bpy.types.Node.html#bpy.types.Node "bpy.types.Node"), [`NodeInternal`](bpy.types.NodeInternal.html#bpy.types.NodeInternal "bpy.types.NodeInternal"), [`GeometryNode`](bpy.types.GeometryNode.html#bpy.types.GeometryNode "bpy.types.GeometryNode")

*class* bpy.types.GeometryNodeList(*GeometryNode*)
:   Create a list of values

    data_type
    :   Type:
        :   enum in [Node Socket Data Type Items](bpy_types_enum_items/node_socket_data_type_items.html#rna-enum-node-socket-data-type-items), default `'GEOMETRY'`

    *classmethod* is_registered_node_type()
    :   True if a registered node type

        Returns:
        :   Result

        Return type:
        :   boolean

    *classmethod* input_template(*index*)
    :   Input socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* output_template(*index*)
    :   Output socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type
user: How do I use Examples in Blender? Include parameters, examples, warnings and best practices.

assistant: [image reference removed]

Noise Texture with high detail.

Different Noise types with the same parameters.

|  |  |
| --- | --- |
| <../../../_images/render_shader-nodes_textures_musgrave_example-type-fbm.jpg>   fBM (fractal Brownian Motion). | <../../../_images/render_shader-nodes_textures_musgrave_example-type-multifractal.jpg>   Multifractal. |
| <../../../_images/render_shader-nodes_textures_musgrave_example-type-hybrid.jpg>   Hybrid Multifractal. | <../../../_images/render_shader-nodes_textures_musgrave_example-type-terrain.jpg>   Heterogeneous Terrain. |
| <../../../_images/render_shader-nodes_textures_musgrave_example-type-ridged.jpg>   Ridged Multifractal. |  |
user: Explain Depth of Field in complete detail according to the official Blender documentation.

assistant: - Blended materials cannot be correctly handled by the post-processing blur,
  but will be correctly handled by the sample-based method. For this, you need to
  disable the post-process depth of field by setting the *Max Size* to 0.
user: Describe Texture Slots from the Blender manual or Python API, including usage steps and snippets.

assistant: # Texture Slots

[image reference removed]

Texture Slots settings.

The combination of images associated with UV maps is called “slots”.

Selecting a *Paint Slots* or *Canvas Image*
will also display the corresponding image in the Image Editor.

Mode
:   The slot system includes two painting modes:

    Material
    :   This mode tries to detect the slots from the materials of the mesh.

        For the Cycles renderer, all textures (*Image Texture* node) in the material’s node tree
        are added in the slots tab.

        Active Paint Texture Index
        :   A [List view](../../../interface/controls/templates/list_view.xhtml#ui-list-view) of slots.
            Activate a certain slot to use it for painting by `LMB` click on it.

    Single Image
    :   You can just select an existing image and painting will use the active UV layer for painting.

        Image
        :   Allows you to select the image used as a canvas.

            New
            :   Create a new image.

        UV Map
        :   Allows you to select the UV layer for painting.
            (Same as the currently active UV map in the mesh’s *UV Maps* panel.)

        Texture Filter Type
        :   Set the interpolation mode of the texture. This can be Linear or Closest.

Save All Images
:   Repack (or save if external file) all edited images.
    Same as in the [Image Editor](../../../editors/image/introduction.xhtml).

Add Simple UVs
:   The *Add Simple UVs* does a simple cube unwrap followed by a pack operation.
    It’s still recommended to make a custom unwrap.

    This operator is available when the object does not already have a UV Map.
user: Show practical ways to work with Separate Transform Node in a Blender add-on or script – include code.

assistant: # Separate Transform Node

[image reference removed]

The *Separate Transform* node separates a [Transformation Matrix](../../../../glossary/index.xhtml#term-Transformation-Matrix)
into a translation vector, a rotation vector, and a scale vector.
user: Explain Append in complete detail according to the official Blender documentation.

assistant: *Append* copies data-blocks into your blend-file without keeping any reference to the original ones.
You can make further edits to your local copy of the data,
but changes in the external source file will not be reflected in the current one.

In the [File Browser](../../editors/file_browser.xhtml),
navigate to the external source blend-file and select the data-blocks you want to reuse.

### Options

These options are available in the right-hand panel of the File Browser.

Select
:   Select the newly added objects.

Active Collection
:   When enabled, objects and collections will be added to the active collection of the active
    [view layer](../../render/layers/introduction.xhtml).
    Otherwise, they will be added to a new “Appended Data” collection in the active view layer.

Instance Collections
:   When enabled, each appended collection will be added to the scene as an
    [instance collection](../../scene_layout/object/properties/instancing/collection.xhtml)
    (that is, a single object that represents the entire collection).
    You can add more such instances using Add ‣ Collection Instance,
    or replace an instance by the collection contents using [Make Instances Real](../../scene_layout/object/editing/apply.xhtml#bpy-ops-object-duplicates-make-real).

    When disabled, the collections will be added as-is so you can see their content in the
    Outliner.

Instance Object Data
:   When enabled, an object will be created for each directly appended object data.
    Otherwise, no object will be created and the object data will not be visible in
    the scene until you create one yourself (e.g. by dragging the object data from the
    Outliner into the 3D Viewport).

Fake User
:   Marks the appended data-blocks as [Protected](../data_blocks.xhtml#data-system-datablock-fake-user).

Localize All
:   Also copy all indirectly linked data, instead of maintaining the links.
user: How do I use Introduction in Blender? Include parameters, examples, warnings and best practices.

assistant: # Introduction

Freestyle is an edge/line-based non-photorealistic (NPR) rendering engine.
It relies on mesh data and Z-depth information to draw lines on selected edge types.
Various line styles can be added to produce artistic (“hand drawn”, “painted”, etc.)
or technical (hard line) looks.

Freestyle can generate a powerful diversity of line styles and results.
There are currently, two ways to define the way lines look;
the first uses a series of parameter to create a [Line Style](view_layer/line_style/index.html).
This mode allows intuitive editing of features such as dotted lines
and easy setup of multiple line types and edge definitions.
On top of all of that, with line style modifiers, the sky is the limit!

The second method of generating lines is by using [Python Scripting](python.html).
This method is much more advanced but Blender includes many pre-scripted styles
such as Japanese big brush, cartoon, blueprint, and thickness-with-depth.

|  |  |
| --- | --- |
| ../../_images/render_freestyle_introduction_example-1.png   ATV buggy by Rylan Wright (RONIN). CC BY. ([File:AtvBuggy.zip](https://archive.blender.org/wiki/2015/index.php/File:AtvBuggy.zip)) | ../../_images/render_freestyle_introduction_example-2.png   By mato.sus304. CC BY-SA. ([File:Mato_sus304_cut02.zip](https://archive.blender.org/wiki/2015/index.php/File:Mato_sus304_cut02.zip)) |
| ../../_images/render_freestyle_introduction_example-3.png   A cartoon scene from [OHA Studio](https://oha-studios.com/) © Mechanimotion Entertainment. ([blend-file](https://download.blender.org/demo/test/freestyle_demo_file.blend.zip)) | ../../_images/render_freestyle_introduction_example-4.png   Blueprint render of Martin M-130 from 1935 by LightBWK. CC0. Warning: heavy file! designed for stress test Blender to the limits and may crash Blender. ([File:M-130Blueprint.zip](https://archive.blender.org/wiki/2015/index.php/File:M-130Blueprint.zip)) |
user: What is Brush Settings and how is it used in Blender Python scripting?

assistant: ### General

### Unique

Deformation
:   Drag:
    :   Smear colors along the direction of the stroke.

    Pinch:
    :   Smear colors inwards towards your brush center.

    Expand:
    :   Smear colors outwards away from your brush center.
user: Provide the full official documentation entry for Node Optimizations, preserving all code examples.

assistant: As the first step in preparing a node shader for execution,
Cycles expands all node groups, as if using the Ungroup tool,
and discards UI only features like frames and reroute nodes.

After that, it applies some obvious transformations,
for example, it can (the list is not exhaustive):

- Replace the following nodes with the constant result of their evaluation,
  if all their inputs are determined to be constant:

  RGB, Value, Mix RGB, Math, Vector Math, RGB to BW, Gamma, Bright Contrast,
  Invert, Separate/Combine RGB/XYZ/HSV, Blackbody, RGB Curves, Vector Curves, Color Ramps.
- Detect Mix RGB, Math and Vector Math nodes that become no-op (without Clamp)
  or evaluate to 0 as a result of addition, subtraction, multiplication,
  division or dot/cross product with a known constant 0 or 1 input,
  and replace with the appropriate input link or constant result.
- Eliminate Mix RGB Mix (without Clamp) and Mix Shader nodes when
  Factor is known to be 0 or 1 by replacing with the appropriate input value or link.
- Eliminate no-op Mix RGB (except Color Burn, Color Dodge, Lighten, or enabled Clamp),
  Invert, RGB Curves and Vector Curves nodes with known zero Factor.
- Eliminate Emission and Background shader nodes that do not emit any light,
  and Add Shader nodes with one or both input arguments missing.
- Eliminate [Bump](../../shader_nodes/displacement/bump.html) with constant Height input, using its Normal input or
  Geometry Normal instead. This is useful for implementing node group inputs that default to normal via routing
  through a no-op Bump before doing math.
- Replace [Attribute](../../shader_nodes/input/attribute.html) nodes of the View Layer type with the
  evaluated attribute value (it is constant within the whole Render Layer).
- Combine multiple copies of the same node with the same inputs into only one instance.

Finally, any nodes that end up not connected either directly or indirectly to the Output node are removed.
user: Provide the full official documentation entry for GeometryNodeMeshFaceSetBoundaries(GeometryNode), preserving all code examples.

assistant: # GeometryNodeMeshFaceSetBoundaries(GeometryNode)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`Node`](bpy.types.Node.html#bpy.types.Node "bpy.types.Node"), [`NodeInternal`](bpy.types.NodeInternal.html#bpy.types.NodeInternal "bpy.types.NodeInternal"), [`GeometryNode`](bpy.types.GeometryNode.html#bpy.types.GeometryNode "bpy.types.GeometryNode")

*class* bpy.types.GeometryNodeMeshFaceSetBoundaries(*GeometryNode*)
:   Find edges on the boundaries between groups of faces with the same ID value

    *classmethod* is_registered_node_type()
    :   True if a registered node type

        Returns:
        :   Result

        Return type:
        :   boolean

    *classmethod* input_template(*index*)
    :   Input socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* output_template(*index*)
    :   Output socket template

        Parameters:
        :   **index** (*int in* *[**0**,* *inf**]*) – Index

        Returns:
        :   result

        Return type:
        :   [`NodeInternalSocketTemplate`](bpy.types.NodeInternalSocketTemplate.html#bpy.types.NodeInternalSocketTemplate "bpy.types.NodeInternalSocketTemplate")

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type
user: How do I use Gesture Tools in Blender? Include parameters, examples, warnings and best practices.

assistant: [image reference removed]

General gesture tools to apply an operation via box, lasso, line and polyline shapes.
See [Gesture Tools](introduction/gesture_tools.html) for more information.

[Mask Gesture Tools](tools/mask_tools.html)
:   Create a mask via a gesture.

[Hide Gesture Tools](tools/hide_tools.html)
:   Hides/Shows geometry via a gesture.

[Face Set Gesture Tools](tools/face_set_tools.html)
:   Create a face set via a gesture.

[Trim Gesture Tools](tools/trim_tools.html)
:   Perform a Boolean operation via a gesture.

[Line Project](tools/line_project.html)
:   Flatten the geometry towards a drawn line.
user: Describe BlendDataLineStyles(bpy_struct) from the Blender manual or Python API, including usage steps and snippets.

assistant: # BlendDataLineStyles(bpy_struct)

base class — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct")

*class* bpy.types.BlendDataLineStyles(*bpy_struct*)
:   Collection of line styles

    tag(*value*)
    :   tag

        Parameters:
        :   **value** (*boolean*) – Value

    new(*name*)
    :   Add a new line style instance to the main database

        Parameters:
        :   **name** (*string**,* *(**never None**)*) – New name for the data-block

        Returns:
        :   New line style data-block

        Return type:
        :   [`FreestyleLineStyle`](bpy.types.FreestyleLineStyle.html#bpy.types.FreestyleLineStyle "bpy.types.FreestyleLineStyle")

    remove(*linestyle*, *\**, *do_unlink=True*, *do_id_user=True*, *do_ui_user=True*)
    :   Remove a line style instance from the current blendfile

        Parameters:
        :   - **linestyle** ([`FreestyleLineStyle`](bpy.types.FreestyleLineStyle.html#bpy.types.FreestyleLineStyle "bpy.types.FreestyleLineStyle"), (never None)) – Line style to remove
            - **do_unlink** (*boolean**,* *(**optional**)*) – Unlink all usages of this line style before deleting it
            - **do_id_user** (*boolean**,* *(**optional**)*) – Decrement user counter of all data-blocks used by this line style
            - **do_ui_user** (*boolean**,* *(**optional**)*) – Make sure interface does not reference this line style

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type
user: Show practical ways to work with Editing in a Blender add-on or script – include code.

assistant: The following operations are available in the file list’s context menu.

External
:   Use the operating system to perform an action on the file or directory.
    The options listed below might not be available on all operating systems.

    Open:
    :   Open the file.

    Open Folder:
    :   Open the folder.

    Edit:
    :   Edit the file.

    New:
    :   Create a new file of this type.

    Find File:
    :   Search for files of this type.

    Show:
    :   Show this file.

    Play:
    :   Play this file.

    Browse:
    :   Browse this file.

    Preview:
    :   Preview this file.

    Print:
    :   Print this file.

    Install:
    :   Install this file.

    Run As User:
    :   Run as specific user.

    Properties:
    :   Show OS Properties for this item.

    Find in Folder:
    :   Search for items in this folder.

    Command Prompt Here:
    :   Open a command prompt here.

Delete `Delete`, `X`
:   Delete the currently selected files or directories by moving them to the operating system’s “trash”.

    Note, on Linux deleting directories requires KDE or GNOME.

Rename `F2`
:   Change the name of the currently selected file or directory.
user: Explain Socket Syncing in complete detail according to the official Blender documentation.

assistant: Closures rely on matching socket names to connect inputs and outputs correctly.
If the connected *Closure Zone* and *Evaluate Closure* nodes have mismatched signatures, Blender can synchronize them
automatically.

- A sync icon appears when the socket layout differs.
- Clicking the icon updates sockets to match the connected closure.
- Automatic syncing occurs the first time a closure is connected.
- Existing sockets are never modified automatically afterward to prevent data loss.
user: Describe Properties from the Blender manual or Python API, including usage steps and snippets.

assistant: # Properties

Most bones’ properties (except the transform ones) are regrouped in each bone’s panels,
in the *Bones* tab in *Edit Mode*. Let us detail them.

Note that some of them are also available in the 3D Viewport,
through the three pop-up menus within the same entry:

- *Toggle Setting*: `Shift`-`W` or Armature ‣ Bone Settings ‣ Toggle a Setting
- *Enable Setting*: `Shift`-`Ctrl`-`W` or Armature ‣ Bone Settings ‣ Enable a Setting
- *Disable Setting*: `Alt`-`W` or Armature ‣ Bone Settings ‣ Disable a Setting

Display Wire
:   Always display the bone as wireframe.

Deform
:   (also `Shift`-`W` ‣ (Deform, …)).

Multiply Vertex Group by Envelope
:   (also `Shift`-`W` ‣ (Multiply Vertex Group by Envelope, …)).

    These settings control how the bone influences its geometry, along with the bones’ joints radius.
    This will be detailed in the [skinning part](../../skinning/index.xhtml).

Inherit Rotation
:   The bone automatically rotates together with its parent in *Pose Mode*. For more details,
    see the [relations page](../properties/relations.xhtml#bpy-types-editbone-parent).

Lock
:   (also `Shift`-`W` ‣ (Locked, …))
    This will prevent all editing of the bone in *Edit Mode*;
    see [bone locking](introduction.xhtml#animation-armatures-bones-locking).
user: Provide the full official documentation entry for Edit an Override, preserving all code examples.

assistant: Essentially, an override is edited the same way as a regular local data-block.
You can use operators on them, edit their properties from various editors, etc.
There are some limitations however, most notably Edit Mode is not allowed for overrides.
In most cases, as soon as you edit a property, you can see that it’s overridden by its teal blue
outline/background.

You can also animate overrides, animated properties just replace/supersede overrides then.
Note that you cannot override/edit an existing animation, you’ll have to create a new action.
You can manually define or remove an override from the context menu of the relevant property.
If an override is not editable, you have to make it editable first.

### Add Overrides

Mark a property to be overridden in the local blend file. For array properties
all elements will be overridden.

### Add Single Override

Mark a property to be overridden in the local blend file. For array properties only
the selected element will be overridden.

### Remove Overrides

Remove the property from the overrides. The value of the linked in data-block will be used.
For array properties all elements will be removed from the override.

### Remove Single Override

Remove the property from the overrides. The value of the linked in data-block will be used.
For array properties only the selected elements will be removed from the override.
user: How do I use Frame Cache in Blender? Include parameters, examples, warnings and best practices.

assistant: Image files are cached during playback for faster access.

While loading images is rarely a bottleneck,
there are situations where high resolution images may slow down playback causing frame skipping.
user: How do I use Refraction BSDF in Blender? Include parameters, examples, warnings and best practices.

assistant: # Refraction BSDF

[image reference removed]

The *Refraction* BSDF
is used to add glossy refraction with sharp or microfacet distribution,
used for materials that transmit light. For best results this node should be considered as
a building block and not be used on its own,
but rather mixed with a glossy node using a Fresnel factor.
Otherwise it will give quite dark results at the edges for glossy refraction.
user: What is Gesture Tools and how is it used in Blender Python scripting?

assistant: [image reference removed]

General gesture tools to apply an operation via box, lasso, line and polyline shapes.
See [Gesture Tools](introduction/gesture_tools.xhtml) for more information.

[Mask Gesture Tools](tools/mask_tools.xhtml)
:   Create a mask via a gesture.

[Hide Gesture Tools](tools/hide_tools.xhtml)
:   Hides/Shows geometry via a gesture.

[Face Set Gesture Tools](tools/face_set_tools.xhtml)
:   Create a face set via a gesture.

[Trim Gesture Tools](tools/trim_tools.xhtml)
:   Perform a Boolean operation via a gesture.

[Line Project](tools/line_project.xhtml)
:   Flatten the geometry towards a drawn line.