|
| 1 | +--- |
| 2 | +title: Changelog |
| 3 | +toc: true |
| 4 | +--- |
| 5 | + |
| 6 | +## 0.8.0 (unreleased) |
| 7 | + |
| 8 | +Support for the new attribute types introduced in Blender 5.2, alongside a cleanup |
| 9 | +of the attribute typing system. Requires `bpy >= 5.2`. |
| 10 | + |
| 11 | +### Added |
| 12 | + |
| 13 | +- Support for the new Blender 5.2 attribute types: |
| 14 | + - `FLOAT4` — 4D float vectors ([`Float4Attribute`](https://docs.blender.org/api/current/bpy.types.Float4Attribute.html)) |
| 15 | + - `INT16_2D` — 2D 16-bit signed integer vectors ([`Short2Attribute`](https://docs.blender.org/api/current/bpy.types.Short2Attribute.html)) |
| 16 | + - `STRING` — text strings ([`StringAttribute`](https://docs.blender.org/api/current/bpy.types.StringAttribute.html)). |
| 17 | + String support is *experimental* and raises a warning when used: string |
| 18 | + attributes are accessible through the Python API but are not yet properly |
| 19 | + supported within Geometry Nodes. Values are read and written per-element |
| 20 | + (as unicode numpy arrays) since Blender's `foreach_get`/`foreach_set` do not |
| 21 | + support string properties. |
| 22 | + |
| 23 | +- `GeometrySet`, for accessing all components of an object's evaluated geometry — |
| 24 | + including multi-component Geometry Nodes outputs (mesh, point cloud, curves and |
| 25 | + instances) that a normally evaluated object doesn't expose. Provides |
| 26 | + `named_attribute()` / `list_attributes()` across components and an informative |
| 27 | + `repr()` suited to snapshot testing. |
| 28 | +- `Attribute.storage_type`, exposing Blender 5.2's new attribute storage types |
| 29 | + (`"ARRAY"` or `"SINGLE"`). `SINGLE`-storage attributes (produced by Geometry |
| 30 | + Nodes for constant values) read transparently as full arrays. |
| 31 | +- `named_attribute(evaluate=True)` and `evaluate_object()` now work for Curves and |
| 32 | + PointCloud objects, not just meshes. |
| 33 | +- `BlenderObject.store_named_attribute()` now returns the created or modified |
| 34 | + attribute (previously returned `None`). |
| 35 | + |
| 36 | +### Changed |
| 37 | + |
| 38 | +- Results of `AttributeArray` operations (e.g. `pos + 1`, comparisons) are now |
| 39 | + plain `numpy.ndarray`s, and copies (`pos.copy()`, boolean-mask indexing) are |
| 40 | + detached from Blender — neither syncs back on modification. True views |
| 41 | + (slices, column access) remain connected and continue to auto-sync. |
| 42 | +- Data is cast to the attribute's storage dtype before writing, letting Blender's |
| 43 | + `foreach_set` use its fast buffer path instead of per-element iteration |
| 44 | + (a significant speedup for the common case of passing float64 arrays). |
| 45 | +- **Breaking**: attribute type guessing for `(n, 4)` float arrays now maps to the |
| 46 | + generic `FLOAT4` type instead of `FLOAT_COLOR`. To store colors or quaternions, |
| 47 | + explicitly request them with e.g. `store_named_attribute(..., atype="FLOAT_COLOR")`. |
| 48 | + `(n, 4)` `uint8` arrays still map to `BYTE_COLOR`. |
| 49 | +- Attribute type guessing for `(n, 2)` `int16` / `uint16` arrays now maps to |
| 50 | + `INT16_2D` (other integer widths still map to `INT32_2D`), and string arrays |
| 51 | + map to `STRING`. |
| 52 | +- Requires `bpy >= 5.2` (previously `>= 5.1`). |
| 53 | +- Improved type hints throughout the attribute module: precise `Literal` types for |
| 54 | + attribute type and domain names, `tuple[int, ...]` shapes, and an immutable |
| 55 | + `AttributeType` dataclass. |
| 56 | + |
| 57 | +### Fixed |
| 58 | + |
| 59 | +- Setting an existing attribute with dictionary syntax (`bob["color"] = data`) no |
| 60 | + longer performs a second, redundant write with a re-guessed attribute type, |
| 61 | + which could raise a type mismatch error for color and quaternion attributes. |
| 62 | +- `Attribute.from_array()` now triggers the same object-data refresh workaround as |
| 63 | + `store_named_attribute()`, so writes through the low-level interface update |
| 64 | + reliably in the viewport. |
| 65 | +- `repr()` of an `AttributeArray` that has lost its attribute reference no longer |
| 66 | + raises an error. |
| 67 | + |
| 68 | +### Removed |
| 69 | + |
| 70 | +- **Breaking**: removed the unused legacy `AttributeTypeInfo` and `AttributeDomain` |
| 71 | + classes from the public API. Use the `AttributeTypes` and `AttributeDomains` |
| 72 | + enums instead. |
| 73 | + |
| 74 | +## 0.7.0 (2026-03-05) |
| 75 | + |
| 76 | +- Updated dependencies for Blender 5.1 ([#69](https://github.com/BradyAJohnston/databpy/pull/69)). |
| 77 | + |
| 78 | +## 0.6.2 (2026-03-05) |
| 79 | + |
| 80 | +- Improved typing for the attribute module ([#67](https://github.com/BradyAJohnston/databpy/pull/67)). |
| 81 | +- Added `move_to_collection()` for moving objects from one collection into another |
| 82 | + ([#62](https://github.com/BradyAJohnston/databpy/pull/62), thanks [\@kolibril13](https://github.com/kolibril13)). |
| 83 | + |
| 84 | +## 0.6.0 (2025-11-25) |
| 85 | + |
| 86 | +- Refactored object classes around a more minimal `BlenderObjectBase` |
| 87 | + ([#61](https://github.com/BradyAJohnston/databpy/pull/61), |
| 88 | + [#63](https://github.com/BradyAJohnston/databpy/pull/63)). |
| 89 | + |
| 90 | +## 0.5.1 (2025-11-06) |
| 91 | + |
| 92 | +- General cleanup ([#58](https://github.com/BradyAJohnston/databpy/pull/58)). |
| 93 | +- Improved deduplication method ([#60](https://github.com/BradyAJohnston/databpy/pull/60)). |
| 94 | + |
| 95 | +## 0.5.0 (2025-10-25) |
| 96 | + |
| 97 | +- Better point cloud and curves support ([#57](https://github.com/BradyAJohnston/databpy/pull/57)). |
| 98 | +- Requires Blender >= 4.5 for compatibility with point cloud support. |
| 99 | + |
| 100 | +## 0.4.2 (2025-10-24) |
| 101 | + |
| 102 | +- Internal improvements and cleanup ([#56](https://github.com/BradyAJohnston/databpy/pull/56)). |
| 103 | +- Deprecated `Attribute.n_values` in favor of `Attribute.size`. |
| 104 | + |
| 105 | +## 0.4.1 (2025-10-21) |
| 106 | + |
| 107 | +- Fixed `AttributeArray.__str__` ([#55](https://github.com/BradyAJohnston/databpy/pull/55)). |
| 108 | + |
| 109 | +## 0.4.0 (2025-10-21) |
| 110 | + |
| 111 | +- Fixed integer attribute returns to be `int32` ([#54](https://github.com/BradyAJohnston/databpy/pull/54)). |
| 112 | + |
| 113 | +--- |
| 114 | + |
| 115 | +For older releases, see the [GitHub releases page](https://github.com/BradyAJohnston/databpy/releases). |
0 commit comments