a HOLE new GREASE PENCIL! — Blender Today LIVE #274
Announcements
- Projects to Look Forward to in 2026
- Netflix Animation Studio , Dell , and Arrowhead join the Dev Fund
Changelog
Changelog between January 20, 2026 - February 03, 2026 at 12h
522 commits in total, of which 92 are fixes, 39 refactors, and 58 cleanup.
Anim
- 🔸 Anim: f-curve smoothing modifier - Ethan Porcaro
- 🔸 Anim: Add operator to swap action on multiple datablocks - Christoph Lendenfeld
- Anim: add foreach_editable_fcurve_in_action_slot - Christoph Lendenfeld
Assets
- 🔸 Assets: Option to disable asset libraries in the Preferences - Julian Eisel
Attributes
- Attributes: Optimize lookup in some cases - Hans Goudey
- Attributes: add iterator to AttributeStorage - Jacques Lucke
- Attributes: Allow storing data as single values - Hans Goudey
- Attributes: Support single values in propagation utilities - Hans Goudey
- Attributes: Support single value storage in various operations - Hans Goudey
- Attributes: Store single value in "Set Attribute" operators - Hans Goudey
- Attributes: Support single values in common attribute propagation utility - Hans Goudey
Audio
- Audio: rewrite Audaspace integration to use C++ APIs - Aras Pranckevicius
BKE
- BKE: Add small utility API for non-owning icon buffers - Julian Eisel
BLI
- BLI: Use bit_cast for hashing floats - Guillermo Venegas
- BLI: support creating GVArray from function - Jacques Lucke
- BLI: allow constexpr hashing of values - Guillermo Venegas
- BLI_delaunay_2d: support non-zero winding filling rule - Campbell Barton
- BLI_delaunay_2d: refactor detect_holes functions - Campbell Barton
- BLI_delaunay_2d: use BFS propagation for non-zero filling hole detection - Campbell Barton
- BLI_delaunay_2d: reserve a minimum size for region_pair_winding - Campbell Barton
BMesh
Build
- Build: support building WITH_GMP=ON & WITH_MANIFOLD=OFF - Campbell Barton
- Build: Fix missing entries and inconsistency in blender_full/release.cmake - Brecht Van Lommel
- Build: Library changes for Blender 5.1 - Thomas Dinges
- Build: Fix make update not returning error when library update fails - Brecht Van Lommel
- Build: Bump the minimum GCC/Clang version - Sebastian Parborg
- Build: Fix Clang compiler version check logic - Sebastian Parborg
- Build: Fix typo when defining SSE3 support for Windows - Sebastian Parborg
- Build: Fix issues with Linux arm64 libraries for Blender 5.1 - Brecht Van Lommel
- Build: only check for min clang version when not on Mac - Aras Pranckevicius
- Build: macOS: Bump minimum Xcode version to 16.0 - Jonas Holzman
- Build: switch from C++17 to C++20 - Jacques Lucke
- Build: macOS: Fix comma expression subscript warning after C++20 standard upgrade - Jonas Holzman
- Build: GHOST: Prevent unused variable warnings in TrackpadWin32 - Jonas Holzman
CMake
- CMake: correct add_node_discovery function - Campbell Barton
- CMake: fix ODIN -> OIDN variable naming typo - Campbell Barton
- CMake: remove debug messages - Campbell Barton
- CMake: remove duplicated PRIVATE keywords - Campbell Barton
- CMake: correct duplicated variable prefix in Find modules - Campbell Barton
- CMake: remove duplicate shader file in gpu tests - Campbell Barton
- CMake: update variable "unset", some stale, some missing - Campbell Barton
- CMake: revert change from bde38c826edec6f63c06808e889f6a67334c4d8b - Campbell Barton
- CMake: correct invalid message() arguments - Campbell Barton
- CMake: correct duplicate prefix in FindLogC4Plus.cmake - Campbell Barton
- CMake: remove duplicate & contradictory defines - Campbell Barton
- CMake: fix remove_strict_cxx_flags_file ARGV typo - Campbell Barton
- CMake: resolve uninitialized variable use, correct typo - Campbell Barton
- CMake: remove duplicate opensubdiv define - Campbell Barton
- CMake: remove WITH_GHOST_X11 define from windowmanager source - Campbell Barton
- CMake: use C++ when checking GCC version in check_compilers.cmake - Campbell Barton
- CMake: correct typos and cleanup in build configuration files - Campbell Barton
- CMake: add missing path separators in openvdb.cmake - Campbell Barton
- CMake: correct "FOUND" variable in FindWebP.cmake - Campbell Barton
- CMake: correct "FOUND" variable in FindWebP.cmake (take 2) - Campbell Barton
- CMake: correct typos, compiler checks and message type - Campbell Barton
- CMake: correct reference to BLENDER_PLATFORM_ARM - Campbell Barton
- CMake: use TEST_LIB for source/blender/nodes/ tests - Campbell Barton
- CMake: correct CLANG debug for WIN32/Clang, RelWithDebInfo defaults - Campbell Barton
- CMake: initialize OPENVDB_DEFINITIONS on Linux/macOS - Campbell Barton
- CMake: remove unused PLATFORM_CXX_FLAGS - Campbell Barton
- CMake: remove unused BOOST_INCLUDE_DIR from USD target - Campbell Barton
- CMake: fix wrong target name in grease_pencil add_dependencies - Campbell Barton
- CMake: fix version regex in FindGMP.cmake - Campbell Barton
- CMake: clarify intentionally empty PATCH_COMMAND in gmp.cmake - Campbell Barton
- CMake: fix spurious semicolon in rpath command - Campbell Barton
- CMake: move guarded_allocator.cpp from headers to sources - Campbell Barton
- CMake: add missing TEST_LIB to depsgraph test suite - Campbell Barton
- CMake: fix wrong compiler warning flag in GPU and compositor - Campbell Barton
- CMake: fix Embree CXX debug flags using wrong source variable - Campbell Barton
- CMake: remove duplicate external_igc_vcintrinsics dependency - Campbell Barton
- CMake: fix gflags/glog typo in FindGlog library path - Campbell Barton
- CMake: remove unused no-op code - Campbell Barton
- CMake: use set(VAR "") for empty initialization, unset() for cleanup - Campbell Barton
- CMake: fix PYTHON_ROOT_DIR being ignored when using precompiled libraries - Campbell Barton
- CMake: resolve uninitialized variable warnings - Campbell Barton
- CMake/Ninja: Add and use per-file job pool assignment. - Bastien Montagne
- Cmake: Do not use the depricated CMAKE_COMPILER_IS_GNUCC variable - Sebastian Parborg
CODEOWNERS
-
CODEOWNERS: Fix typo in
python/genericcapture - Bastien Montagne - CODEOWNERS: Add DevOps & CI/CD section - Bart van der Braak
- Codeowners: Add weizhen to Cycles owner - Weizhen Huang
Cleanup
- Cleanup: USD: Separate main header file into finer grained pieces - Jesse Yurkovich
- Cleanup: Compositor: Cleanup node code - Omar Emara
- Cleanup: GHOST: Remove redundant virtual qualifier in Window decoration style API - Jonas Holzman
- Cleanup: GHOST: Remove deprecated/unused includes in Cocoa backend - Jonas Holzman
- Cleanup: VSE: Tidy RCS select box tool keymap - John Kiril Swenson
- Cleanup: Correct function comment in asset system - Julian Eisel
- Cleanup: Assign explicit values to attribute enums - Hans Goudey
- Cleanup: Replace "foreach" lambdas with attribute storage iterator - Hans Goudey
- Cleanup: Reorganize sculpt operator tests - Sean Kim
- Cleanup: NanoVDB deprecation warning after 5.1 lib upgrade - Brecht Van Lommel
- Cleanup: remove Python version 2 checks - Campbell Barton
- Cleanup: Remove redundant cast of object data to ID * - Hans Goudey
- Cleanup: GPU: Update comments inside tokenizer code - Clément Foucault
- Cleanup: UI: Set explicit default values for ui::Block members - Guillermo Venegas
- Cleanup: Attributes: Simplify ArrayData creation - Hans Goudey
- Cleanup: USD: Use C++ Matrix types - Jesse Yurkovich
- Cleanup: de-duplicate keymap definitions using inline loops. - Campbell Barton
- Cleanup: keymap consistency, various minor changes - Campbell Barton
- Cleanup: use valid default to quiet bpy.rna warnings - Campbell Barton
- Cleanup: correct typo in BLI_resource_strings.h filename - Campbell Barton
- Cleanup: spelling/wording in CMake - Campbell Barton
- Cleanup: clear trailing space in CMake files - Campbell Barton
- Cleanup: use "stack" style access in BLI_delaunay_2d non-zero filling - Campbell Barton
- Cleanup: Unify HW-RT defines in Cycles - Sergey Sharybin
- Cleanup: Attributes: Simplify creating attributes with single value - Hans Goudey
-
Cleanup: Remove unnecessary
blender::namespace prefix from BPY - Sybren A. Stüvel - Cleanup: Remove outdated guardedalloc guide - Brecht Van Lommel
- Cleanup: UI: Remove unnecessary enum keyword in interface_handlers.cc - Guillermo Venegas
- Cleanup: USD: Use strongly typed enums - Jesse Yurkovich
- Cleanup: use accumulate_counts_to_offsets in BLI_delaunay_2d - Campbell Barton
- Cleanup: CMake: Remove last mentions of boost - Jesse Yurkovich
- Cleanup: various spelling corrections in comments & strings - Campbell Barton
- Cleanup: Geometry Nodes: add List::copy method - Jacques Lucke
-
Cleanup: Reorganize
sculpt_paintfiles - Sean Kim - Cleanup: Geometry Nodes: make list data pointers const - Jacques Lucke
- Cleanup: move functions out of header - Jacques Lucke
- Cleanup: Geometry Nodes: simplify constructing lists from containers - Jacques Lucke
- Cleanup: Make texture paint inversion check more readable - Sean Kim
- Cleanup: move Windows.h and intrin.h includes out of blender namespace - Jacques Lucke
- Cleanup: Geometry Nodes: add utility methods for bundles - Jacques Lucke
- Cleanup: replace TypeTag with lambda template argument - Jacques Lucke
- Cleanup: simplify converting attribute cpp type to static type - Jacques Lucke
- Cleanup: deduplicate conversion of grid type to static type - Jacques Lucke
- Cleanup: DRW: Assertion for VBO request validation - Iliya Katushenock
- Cleanup: Cycles: Tag volume update from integrator - Weizhen Huang
- Cleanup: Outliner: Make context const - Julian Eisel
- Cleanup: Remove Grease Pencil brush presets field & enum - Sean Kim
- Cleanup: glTF: rename mesh to blender data - Julien Duroure
- Cleanup: correct typos and improve comments in extensions - Campbell Barton
- Cleanup: correct typos in identifiers, doc-strings, and messages - Campbell Barton
- Cleanup: Cycles: Remove redundant get_aov_offset call - Hai
-
Cleanup: XR: Use
xr_prefix for XR specific View3D vignette member - Jonas Holzman - Cleanup: Rename RNA pointer property "type" field - Hans Goudey
- Cleanup: UI: Remove unnecessary button_retval_set usages - Guillermo Venegas
-
Cleanup: XR: Rename XrRuntime
contexttoghost_context- Jonas Holzman -
Cleanup: Rename
arARegion variable toregionin view3d_draw - Jonas Holzman - Cleanup: Use VArray::get_if_single to avoid function call - Hans Goudey
-
Cleanup: Additional
artoregionARegion variable rename - Jonas Holzman
Compositor
- 🔸 Compositor: Support single value only types in pixel operations - Omar Emara
- 🔸 Compositor: Add Boolean, Integer, and Vector input nodes - Omar Emara
- Compositor: Only notify about compositor result when completed - Omar Emara
- 🔸 Compositor: Remove 'Viewer Region' toggle (UI only) - Habib Gahbiche
Core
- Core: Cleanup: Use same handling for all IDTypeInfo creation. - Bastien Montagne
- Core: Function to get ID code from name with case insensitive matching - Julian Eisel
- Core: add 'timer step' callback to WindowManager jobs - Julian Eisel
Curves
- 🔸 Curves: support lasso, box, and circle selection in curves sculpt - Nazir
- 🔸 Curves: support CDT-based fill with separate solver and rule settings - Campbell Barton
- Curves: Store curve type as single value attribute - Hans Goudey
Cycles
- 🔸 Cycles: Perform direct light shader eval in own kernel - Brecht Van Lommel
- Cycles: oneAPI: Use copy engine - Xavier Hallade
- 🔸 Cycles: Swap order of Denoise Albedo and Denoise Normal passes - Habib Gahbiche
- Cycles: Do not install DPC++ debug libraries for Release builds - Nikita Sirgienko
- Cycles: oneAPI: Generate ARL-H AoT binaries and mark it as optimized - Nikita Sirgienko
- Cycles: Removed OneAPI host device support - Stefan Werner
- Cycles: Do not tag all sockets for modified when only shadow catcher needs recalc - Weizhen Huang
- Cycles: HIP-RT, copy missing kernel files to the binary folder - Sahar A. Kashi
Deps
- Deps: Win64 fix AOM library - Ray Molenkamp
- Deps: Windows ARM64: Fix AOM - Anthony Roberts
- Deps: macOS arm64: GMP dependency rebuild - Jonas Holzman
- Deps: Windows ARM64: Fix AOM (again) - Anthony Roberts
Doc
- Doc: add Python API example for KeyMaps add-on registration - Campbell Barton
- Docs: add notes on intentionally excluded Python op-codes for drivers - Campbell Barton
EEVEE
- EEVEE: Document false positive validation warning - Jeroen Bakker
- EEVEE: Disable volume_instance.blend test on Intel Windows OpenGL - Miguel Pozo
Extend node group tests to cover change of subtype and dimensions
Extensions
- 🔸 Extensions: always limit the tags to visible repositories in the popover - Nick Alberelli
- Extensions: silently skip unknown extension types in repository JSON - Campbell Barton
Fix
- Fix: Crash rendering with some types of particle instancing - Brecht Van Lommel
- Fix: correct logical error accumulating DispList flags - Campbell Barton
- Fix: Python API docs broken links for classes in submodules - Campbell Barton
- Fix: Paint vertex loop selection not working with RMB select - Philipp Oeser
- Fix: Compositor: Crop Gizmo integer precision loss during move - W_Cloud
- Fix: GPU: Shader Tool: Crash caused by invalild string view size - Clément Foucault
- Fix: GPU: Shader Tool: Mem leak detected by ASAN - Clément Foucault
- Fix: assert when pasting from an incompatible clipboard - Habib Gahbiche
- Fix: Spreadsheet: missing lists in spreadsheet - Jacques Lucke
- Fix: GPU: Broken Shader compilation on Vulkan + Mac - Clément Foucault
- Fix: Use after free on reading EXR in compositor - Omar Emara
- Fix: Assert in Render Layers node for invalid passes - Omar Emara
- Fix: Attributes: Use proper default for single value storage - Hans Goudey
- Fix: Build error on Linux arm64 with shader tool SIMD - Brecht Van Lommel
- Fix: missing "repeat": True for Shift+Up Arrow in file browser - Campbell Barton
- Fix: Build error - Pratik Borhade
- Fix: Incorrect RNA struct type for Field to List node items - Brecht Van Lommel
- Fix: Mesh validation bugs from AttributeStorage switch - Brecht Van Lommel
- Fix: Attribute type for edge select attribute - Hans Goudey
- Fix: Mask To SDF nearest pixel wrong with single-value input - Brecht Van Lommel
- Fix: Wrong relative shape key evaluation after warning fix - Brecht Van Lommel
- Fix: PNG image does not read 16 bit flag correctly - Brecht Van Lommel
- Fix: Wrong result in Movie Distortion node - Omar Emara
- Fix: Disk File Hash Service C++ wrapper missing error checks - Sybren A. Stüvel
- Fix: XR: Ensure correct Python XR modal operator is called on XR action - Jonas Holzman
- Fix: Extensions download metadata load error on Windows - Sybren A. Stüvel
- Fix: OpenEXR HTJ2K missing name in the user interface - Brecht Van Lommel
- Fix: Nodes: Cannot navigate to root tree in Sequencer Compositor - W_Cloud
- Fix: Compositor: Mask Gizmo incorrect position offset when adjusting - W_Cloud
- Fix: Build error in lite build after recent commit - Hans Goudey
- Fix: Link error in lite build after recent commit - Hans Goudey
- Fix: Build error on Windows MSVC after MEM_dupalloc changes - Brecht Van Lommel
- Fix: Cycles calls oidnSetFilterProgressMonitorFunction with null pointer - Brecht Van Lommel
- Fix: Render test filter error with patterns containing 2 dashes - Brecht Van Lommel
- Fix: mask gizmo origins using wrong reference point - MarcHamamji
- Fix: CPP shader compile error in Mask To SDF node - Omar Emara
- Fix: Nodes: Missing search entry Texture Coordinate > Generated - quackarooni
- Fix: Avoid Free After Use When Joining Non-aligned Screen Areas - Harley Acheson
- Fix: Viewport compositor passes are empty - Omar Emara
- Fix: cmake_qtcreator_project.py error missing "sys" import - Philipp Oeser
- Fix: Render Layers says Grease Pencil pass is unsupported - Omar Emara
- Fix: macOS: Vsync override flag not affecting window drawing context - Jonas Holzman
- Fix: Missing reference in NodeAndSocket constructor, causing copy-by-value - Lukas Tönne
- Fix: Cube Topology node link search crashes - Lukas Tönne
- Fix: UI: Color circle overflowing popup menu - Guillermo Venegas
- Fix: Potential crash with certain pose brush settings - Sean Kim
- Fix: UIList crash when changing active index with arrows - Pratik Borhade
- Fix: libraries.write(path_remap='RELATIVE_ALL') not remapping all paths - Philipp Oeser
- Fix: Crash / UB when using texture brush in vertex paint - Sean Kim
- Fix: extensions repositories with local paths with Python 3.14 - Campbell Barton
- Fix: Incorrect ordering when dragging multiple shape keys - W_Cloud
- Fix: grid corruption artifacts caused by #148733 - Mark van de Ruit
- Fix: Principled Hair BSDF link-drag search result broken - Lukas Tönne
- Fix: Spreadsheet: missing grid information when grid is used with viewer node - Jacques Lucke
- Fix: UI: Undefined behavior on drag name query - Julian Eisel
- Fix: Cycles: Update volume meshes when rendering algorithm changes - Weizhen Huang
- Fix: Cycles: Support expressions when printing floats with Metal - Weizhen Huang
- Fix: Curves: Assert in pen tool - Falk David
- Fix: extensions using wrong error for variable for wheel ABI parsing - Campbell Barton
- Fix: return correct extensions handling of renamed theme XML files - Campbell Barton
- Fix: print pkg_id instead of empty addon_module_name in error message - Campbell Barton
- Fix: EXTENSIONS_OT_repo_refresh_all report errors as warnings - Campbell Barton
- Fix: invalid report_fn call in extensions directory validation - Campbell Barton
- Fix: UI: Prevent panel width jiggling when resizing - Guillermo Venegas
- Fix: VSE: Re-add trailing dots to menu entries that open file browser - John Kiril Swenson
- Fix: macOS: Add audio-input entitlement for microphone access - Pock
- Fix: macOS: Add missing camera security entitlement - Jonas Holzman
- Fix: "Insert into Group" crashes when group already has sockets - Lukas Tönne
- Fix: Group Input node shifts image in camera view - Omar Emara
- Fix: Node socket value copy can dereference type nullptr - Lukas Tönne
- Fix: Assert fails when ungrouping multiple node groups - Lukas Tönne
- Fix: Failing render tests on Intel/Windows/OpenGL - Jeroen Bakker
- Fix: Nodes: Inconsistent labels for UV Map and Color Attribute nodes - quackarooni
- Fix: Use after free reading single value attribute data - Hans Goudey
- Fix: Make F-Curve modifier label consistent with operator - Christoph Lendenfeld
- Fix: Assets: possible use-after-free with asset catalog trees - Julian Eisel
- Fix: Wrong view coordinates used for file/asset browser message drawing - Julian Eisel
- Fix #117570: Memory leak with operator tooltips in search menu - Guillermo Venegas
- Fix #140085: Different tooltips for Clean Keyframes/Channels operators - Criss-Ivana
- Fix #140809: Defocus node ignores camera markers - Omar Emara
- Fix #143117: Duplicated object remembers slot name from source object - Sybren A. Stüvel
- Fix #143799: Python: Raise ValueError when accessing outside framebuffer - Jeroen Bakker
- Fix #145204: VSE: Image thumbnails appear washed out when sequencer scene differs from active scene - RedMser
- Fix #145443: Close "Quick Favorites" menu after selecting a tool using an accelerator key - penta
- Fix #147117: Do Not Show Move Mouse Cursor at the border under Top Bar - Nazir
- Fix #147173: Vulkan: Skip barriers for new resources - Urumbekov Aryslan
- Fix #148865: Tests: Add Vulkan backend tests for Storm and UI - Christoph Neuhauser
- Fix #148971: Clamp Negative Values in EEVEE Color and Combined Passes - Tenkai Raiko
- Fix #150719: Disable persistent base options when Dyntopo is enabled - Avotosui
- Fix #150823: Don't scroll when active is in view - Pratik Borhade
- Fix #151531: Copying node tree interface items between interfaces - Natalie Cuthbert
- Fix #151621: Avoid overlap of volume objects with shared geometry - Weizhen Huang
- Fix #151639: VSE memory leak when sound strips have Preserve Pitch on and there are animations - Aras Pranckevicius
- Fix #151649: Vulkan: Workaround WoA driver crash - Jeroen Bakker
- Fix #151840: Cycles OSL trace() not returning attributes from other surface - Brecht Van Lommel
- Fix #151859: clearing render border from the image editor doesn't update - IREXTIA
- Fix #151976: "Instances on Elements" improperly changes/resets transforms - Simon Thommes
- Fix #151997: Dopesheet Shape Key Editor not properly updating geometry - Philipp Oeser
- Fix #152153: XR modal operators wrongly re-executing when multiple actions are executed at once - Jonas Holzman
- Fix #152200: Selection Fails For Loose Vertices With SubD Cage and GPU Subdivision - Tariq-Sulley
- Fix #152449: Assert in node tools poll in operator search - Hans Goudey
- Fix #152451: Curve normals and tangents are not orthogonal after resampling - Lukas Tönne
- Fix #152451: Avoid division by zero in BLI math functions - Lukas Tönne
- Fix #152585: macOS: Nonfunctional --no-native-pixels flag - Jonas Holzman
- Fix #152607: Python API docs missing idprop module page - Campbell Barton
- Fix #152619: Crash when loading corrupt exr file - Jesse Yurkovich
- Fix #152672: Cycles repeated render crash due to Windows handle leak - Brecht Van Lommel
- Fix #152777: Grease Pencil: Cancelling the transform creates keyframe in edit mode - Pratik Borhade
- Fix #152793: Repeat last rotation using snap base is backwards - Tariq-Sulley
- Fix #152809: bpy_extras.io_utils.orientation_helper fails on Python 3.14 - Campbell Barton
- Fix #152914: Vulkan: Aliased memory invalid access - Jeroen Bakker
- Fix #152931: VKTexturePool on AMD uses incorrect memory alignment - Mark van de Ruit
- Fix #152992: Torus added in edit mode does not reuse existing materials on objects - Tariq-Sulley
- Fix #153002: Crash opening file with mirror object set - Christoph Lendenfeld
- Fix #153008: Shapekey search and delete deletes shapekeys that are filtered out - Pratik Borhade
- Fix #153022: Changing Texture Paint slot not updating properly - Philipp Oeser
- Fix #153028: incorrect selection state after undo in node tree interface - W_Cloud
- Fix #153029: Render result clear on canceling compositor - Omar Emara
- Fix #153049: Sculpt: Moving after rotating applies offset - Sean Kim
- Fix #153093: Cycles: Adaptive subdivision ignores viewport display option - Hans Goudey
- Fix #153120: VSE: Retiming set segment speed would not resize strip - John Kiril Swenson
- Fix #153156: Sculpt Undo test failure/crash - Hans Goudey
- Fix #153157: Laplacian Deform modifier crash - Tariq-Sulley
- Fix #153162: asset thumbnails lost on save - Jacques Lucke
- Fix #153167: Prevent popup to keep previous size when redrawing parent region - Guillermo Venegas
- Fix #153173: Crash on assert in Mirror modifier when applied to mesh without faces - Tariq-Sulley
- Fix #153175: mesh.edges.add() creates attribute of type FLOAT_VECTOR - Philipp Oeser
- Fix #153186: Node wrangler alpha over node mix connects to wrong sockets - Alaska
- Fix #153199: Crash when link-dragging to Bit Math node - shokuyansh
- Fix #153202: Incorrect behavior of Mask modifier Smooth threshold - Tariq-Sulley
- Fix #153209: use count_bits_i instead of __builtin_popcount - unerr
- Fix #153226: Sculpt undo doesn't work with shapekey solo - Sean Kim
- Fix #153227: Separate By Selection issue when custom normals are used - Philipp Oeser
- Fix #153276: Mesh Deform modifier crashes with blank mesh - Tariq-Sulley
- Fix #153280: UV Sculpt Brush visual vs effective size discrepancy - Philipp Oeser
- Fix #153286: Koro benchmark scene fails with particle color from emitter - Brecht Van Lommel
- Fix #153288: When joining armatures, skip renames on non-affecting actions - Nathan Vegdahl
- Fix #153291: 2D paint without an active object misses cursor overlays - Philipp Oeser
- Fix #153293: Worlds added when previewing materials - Habib Gahbiche
- Fix #153318: Cycles deadlock with image metadata loading - Brecht Van Lommel
- Fix #153319: Allow Movement Before Resetting ToolTip Timer - Harley Acheson
- Fix #153347: Voxel Remesh can crash after creating empty mesh - Sean Kim
- Fix #153395: UI: Join Area cause crash - Pratik Borhade
- Fix #153401: Node sockets get replaced and invalidated by adding link - Lukas Tönne
- Fix #153402: Crash with empty image editor - Omar Emara
- Fix #153414: Vulkan: Fix shadow issue on Qualcomm - Jeroen Bakker
- Fix #153426: UV Editor image panels not refreshing when image changes - Philipp Oeser
- Fix #153444: UV island deselect fails for box/lasso/circle in face mode - Campbell Barton
- Fix #153447: Remap channels in action constraints when joining armatures - Nathan Vegdahl
- Fix #153454: Use old placement logic for group input/output - Lukas Tönne
- Fix #153458: Image node has no output by default - Omar Emara
- Fix #153461: EEVEE render region wrong if entire camera is selected - Philipp Oeser
- Fix #153465: IDProp: Raise error when type doesn't match in update_from() - Pratik Borhade
- Fix #153473: edge loop selection not cycling to boundary - Campbell Barton
- Fix #153485: Memory leak in compositing nodes - Omar Emara
- Fix #153513: Cycles not detecting when scene linear color space changes - Brecht Van Lommel
- Fix #153517: Paint/Sculpt crashes with Stroke Method "Curve" - Philipp Oeser
- Fix #153548: Multires .btx filepath reported as missing after repacking - Philipp Oeser
- Fix #153553: Image Editor pivot pie menu errors in Paint mode - rohit-b-v
- Fix #153563: VSE: Duplicating scene strips does not reassign camera - John Kiril Swenson
- Fix #153564: VSE: Scene does not sync when changing scene strip camera - John Kiril Swenson
- Fix #153569: Restore When Reusing Minimized Temp Windows - Harley Acheson
- Fix #153624: Mask 'erase' keybind does not work with grab brushes - Sean Kim
-
Fix #153671: incorrect memory compatibility check in
VKTexturePool- Mark van de Ruit - Fix #153705: Crash in edit mode undo - Tariq-Sulley
- Fix #153729: Space key does not work in footer region of some editors - Pratik Borhade
- Fix #93814: Multiple popups spawned when running "Remap Users" - Christoph Lendenfeld
- Fix (unreported) further issues from Pcked data in liboverride resync code. - Bastien Montagne
- Fix GPU: Shader Tool: SSE code not checking for the correct SSE version - Clément Foucault
- Fix node link-drag search options using unavailable sockets - Lukas Tönne
GHOST
- GHOST: Remove C API and opaque types, modernize to C++ - Jonas Holzman
GNUmakefile
- GNUmakefile: use $(filter) instead of $(findstring) for goal detection - Campbell Barton
- GNUmakefile: fix clean target failing when build directory doesn't exist - Campbell Barton
GPU
- GPU: Shader Tool: Split Tokenizer code to its own subfolder - Clément Foucault
- GPU: Shader Tool: Add assertion about string length inside iterator - Clément Foucault
- GPU: Lexit: Add some comments - Clément Foucault
- GPU: TextureFromPool passes debug name to Texture - Mark van de Ruit
- GPU: Allow empty write attachments in transitions - Miguel Pozo
- GPU: Block test_math_lib on Linux Nvidia - Miguel Pozo
- GPU: Port library tests to compute shader - Clément Foucault
- GPU: VKTexturePool naive size aliasing - Mark van de Ruit
- GPU: GLTexturePool with format aliasing - Mark van de Ruit
Geometry Nodes
- 🔸 Geometry Nodes: New 'Cube Grid Topology' node - Brady Johnston
- 🔸 Geometry Nodes: Grid Dilate & Erode - Brady Johnston
- 🔸 Geometry Nodes: Grid Mean & Median nodes - Brady Johnston
- 🔸 Singular value decomposition (SVD) node for matrices - Lukas Tönne
- 🔸 Geometry Nodes: experimental support for bundles in geometries - Jacques Lucke
- 🔸 Geometry Nodes: Remove list type restriction - Hans Goudey
- 🔸 Geometry Nodes: Change "List" to "Field to List" - Hans Goudey
- Geometry Nodes: initial support for counting memory usage of socket value variant - Jacques Lucke
- Geometry Nodes: support updating inactive values in Set Grid Background node - Jacques Lucke
- Geometry Nodes: Various fixes for "Get List Item" node - Hans Goudey
- 🔸 Geometry Nodes: expose a grid's Min Voxel coordinates in spreadsheet - Brady Johnston
- Geometry Nodes: use single structure type for combine/separate bundle nodes - Jacques Lucke
- 🔸 Geometry Nodes: Limit search to transform sockets for Bone Info node - Brady Johnston
- 🔸 Geometry Nodes: Lower Mix Color search priority - Jan-Hendrik Müller
- Geometry Nodes: Support single value radius in Points node - Hans Goudey
- Geometry Nodes: Single value attributes in mesh / points conversion - Hans Goudey
- Geometry Nodes: Skip single value attributes in Sort Elements node - Hans Goudey
- Geometry Nodes: Support single value attributes in Curve to Mesh node - Hans Goudey
GitHub
- GitHub: Replace workflow with reusable workflow from org - Bart van der Braak
Gitea
- Gitea: Add XR and macOS Maintenance sections to CODEOWNERS - Jonas Holzman
- Gitea: Correct regex in CODEOWNERS - Jonas Holzman
- Gitea: Correct opensubdiv paths in CODEOWNERS - Jonas Holzman
Grease Pencil
- 🔸 Grease Pencil: New Fill Workflow - Falk David
- 🔸 Grease Pencil: Render to viewport compositor combined pass - Omar Emara
-
🔸
Grease Pencil: Python: Add
LayerGroup.childrenandroot_nodesAPI - EvanLuo42 - 🔸 Grease Pencil: Add Grease Pencil attributes to the Curve Panel - Casey Bianco-Davis
I18N
- I18N: Updated UI translations from git/weblate repository (f19b18e1b76f86). - Bastien Montagne
- I18N: Updated UI translations from git/weblate repository (b633e48dea5842). - Bastien Montagne
- I18n: Translate error message for datablock asset operations - Damien Picard
- I18n: Translate missing poll messages - Damien Picard
- I18n: Make single tooltip translatable in brush stroke method - Damien Picard
- I18n: Extract menu items from node assets - Damien Picard
- I18n: Translate messages in tooltips using tooltip_text_field_add - Damien Picard
ImBuf
- ImBuf: Allow getting thumbnail from image path directly - Julian Eisel
Image
- 🔸 Image: Draw images with display offset - Omar Emara
- 🔸 Image: Use OIIO for loading/saving WEBP format - Jesse Yurkovich
- 🔸 Images: Add multithreading to speed up JPEG 2000 saving - Carlo Andreacchio
Lexit
- Lexit: Change License to MIT - Clément Foucault
Linux
- Linux: Drop support for the now deprecated gold linker - Sebastian Parborg
Logging
- Logging: suppress color management warnings for fallback config - Campbell Barton
MSVC
- MSVC: Various flag fixes for the new libs - Ray Molenkamp
Mesh
- Mesh: Switch from CustomData to AttributeStorage - Hans Goudey
- Mesh: Propagate single value status when joining meshes - Hans Goudey
- Mesh: Support single value attributes directly in draw extraction - Hans Goudey
Modeling
- 🔸 BMesh: support delimiters for boundary loop selection - jlampel
- 🔸 BMesh: support "Redo" for edge loop/ring selection - Campbell Barton
- 🔸 BMesh: support delimiters for edge-ring and face-loop selection - Campbell Barton
NDOF
- NDOF: support SPNAV_SOCKET env var for custom socket path on Unix - Neale Swinnerton
Node
- 🔸 Nodes: Support Cut+Paste - Habib Gahbiche
- Node: NodeSwapOperator | Check for library in the poll function - IREXTIA
- 🔸 Nodes: snap nodes when copy-pasting them - Jacques Lucke
- 🔸 Nodes: Report number of nodes copied to clipboard - Habib Gahbiche
- 🔸 Nodes: Node Wrangler: Only count enabled sockets when initiating lazy connect with menu - IREXTIA
- 🔸 Nodes: add Vector Math round mode - Ashley Ruglys
- 🔸 Nodes: Preserve bundle sockets when using Swap Node operator - quackarooni
- Nodes: Tests for the socket link search feature - Lukas Tönne
- 🔸 Nodes: Preserve data-blocks when swapping nodes - quackarooni
OpenEXR
- 🔸 OpenEXR: Add support for HTJ2K encoding - Brecht Van Lommel
OpenXR
- OpenXR: Try to reuse Blender Vulkan Instance - Jeroen Bakker
Outliner
- 🔸 Outliner: Draw hierarchy lines for bones tree - IREXTIA
Overlay
PyAPI
- PyAPI: resolve incorrect resource usage with PyModule_GetNameObject - Campbell Barton
PyDoc
-
PyDoc: add doc-string for
register_classes_factoryclasses argument - Colin Basnett - PyDoc: clarify threading example regarding Blender API usage - Campbell Barton
- PyDoc: add a Python API documentation contribution guide - Nick Alberelli
Python
- Python: use PySequence_Fast for array access in bpy_rna_array.cc - Campbell Barton
- Python: Remove support for Python versions before 3.13 - Campbell Barton
- Python: upgrade OpenAPI datamodel-code-generator to 0.53.0 - Sybren A. Stüvel
- Python: add opcodes for boolean/None expressions in secure driver eval - Campbell Barton
- Python: add 'is absolute' check to disk file hash service storage path - Sybren A. Stüvel
- Python: add Blender-specific user agent header to background downloader - Sybren A. Stüvel
- 🔸 Python: Add functions to find the playing window and scene - Falk David
Reapply "GPU
- Reapply "GPU: Port library tests to compute shader" - Miguel Pozo
Refactor
- Refactor: Compositor: Move viewer realization to context - Omar Emara
- Refactor: Core: continue using C++ API for blend-file writing - Jacques Lucke
- Refactor: Cycles: Use function overloading for integrator state - Brecht Van Lommel
- Refactor: Cycles: Support alloc of integrator state when a feature is off - Brecht Van Lommel
- Refactor: split edge loop multi select into two operators - Campbell Barton
-
Refactor: Change FCurve kernel functions to take a
FCurve &- Christoph Lendenfeld - Refactor: Remove unused Action Group functions - Christoph Lendenfeld
- Refactor: Replace FCurvePathCache with Map - Christoph Lendenfeld
- Refactor: Paint: Split stroke brush toggles from inversion - Sean Kim
- Refactor: Simplify preferences editor runtime handling - Hans Goudey
- Refactor: extract pack functions for Image, Sound, and VFont - Campbell Barton
- Refactor: Tests: Move utilities to common module - Brecht Van Lommel
- Refactor: Compositor: Remove strict assert - Omar Emara
- Refactor: Remove primitive_type from HIP-RT payload - Sergey Sharybin
- Refactor: Remove KernelGlobals from HIP-RT payload - Sergey Sharybin
- Refactor: Simplify transparent shadow API in Cycles - Sergey Sharybin
- Refactor: Remove duplicate function in Cycles HIP-RT - Sergey Sharybin
- Refactor: Cycles HIP-RT file structure - Sergey Sharybin
- Refactor: Cycles, minimize sign conversions in Cycles - Sergey Sharybin
- Refactor: De-duplicate Cycles shadow_all HW-RT function - Sergey Sharybin
- Refactor: De-duplicate volume intersection filtering in Cycles - Sergey Sharybin
- Refactor: De-duplicate local intersection hit index calculation - Sergey Sharybin
- Refactor: Move softbody copy into softbody.cc - Brecht Van Lommel
- Refactor: Unify memory API to MEM_new and MEM_delete variations - Brecht Van Lommel
- Refactor: Use typed MEM smart pointer deleter - Brecht Van Lommel
- Refactor: Compositor: Cleanup parallel reduction shader - Omar Emara
- Refactor: Simplify RNA code-gen to improve compile times - Hans Goudey
- Refactor: BLI: Return char* from BLI_file_read_text to simplify code - Brecht Van Lommel
- Refactor: Sequencer: Avoid void pointer freeing in effects - Brecht Van Lommel
- Refactor: Nodes: Eliminate some usage of MEM_delete_void - Brecht Van Lommel
- Refactor: Draw: Eliminate various casting and MEM_delete_void - Brecht Van Lommel
- Refactor: Eliminate various unnecessary MEM_delete_void - Brecht Van Lommel
- Refactor: Geometry Nodes: use data block instead of modifier at root of compute context - Jacques Lucke
- Refactor: Geometry Nodes: add convenience value accessors for lists - Jacques Lucke
- Refactor: BKE: Make URL utilities less specific to extensions - Julian Eisel
- Refactor: public functions for view2d time drawing - Christoph Lendenfeld
- Refactor: Geometry Nodes: extract grid index sampling utility - Jacques Lucke
- Refactor: view2d drawing - remove ParallelLinesSet struct - Christoph Lendenfeld
-
Refactor: Tests: Extract
cursor_motion_datamethods to helper module - Sean Kim
Release
- Release: Update license.md after library update - Thomas Dinges
- Release note tools: Factor out gathering and printing of release notes information - Alaska
Revert "GPU
- Revert "GPU: Port library tests to compute shader" - Miguel Pozo
Sculpt
- 🔸 Sculpt: Add keybind for quick mask erase toggle - Sean Kim
-
Sculpt: Allow passing in
active_face_settoface_set_change_visibility- Sean Kim -
Sculpt: Extract stroke type enums from generic
Brush.flagfield - Sean Kim
Shape Keys
- Shape Keys: Py API function to get selected keyblocks - Pratik Borhade
Spreadsheet
- Spreadsheet: support showing SocketValueVariant - Jacques Lucke
Subdiv
- Subdiv: Skip interpolation for single value attributes - Hans Goudey
Tests
- Tests: Extract Multires modifier tests into separate file - Sean Kim
- Tests: Add Simple & Linear subdivision tests for multires modifier - Sean Kim
- Tests: Split out armature modifier tests - Sean Kim
- Tests: Compress 'partially_masked_sphere.blend' - Sean Kim
- Tests: Use bpy.ops.wm.quit_blender() for UI tests - Brecht Van Lommel
- Tests: Add viewport and animation rendering UI tests - Brecht Van Lommel
- Tests: Cycles: Denoise passes with compositor Denoise node - Habib Gahbiche
- Tests: Image: Enable previously excluded webp variations - Jesse Yurkovich
- Tests: Add more sculpt brush tests - Sean Kim
- Tests: Add sculpt mesh filter tests - Sean Kim
- Tests: Add Sculpt Face Set Expand UI test - Sean Kim
- Tests: Temporarily disable OpenEXR HTJ2K saving tests - Brecht Van Lommel
- Tests: Add basic Multires and Dyntopo BVH construction unit test - Sean Kim
- Tests: Make UI tests support loading blend files - Brecht Van Lommel
- Tests: Add environment variable BLENDER_TEST_IGNORE_VENDOR_BLOCKLIST - Christoph Neuhauser
- Tests: glTF: Add new test for attribtes / vertex color - Julien Duroure
- Tests: Add unit tests for brushes with multires active - Sean Kim
- Tests: Add UI tests for "gesture tools" in Sculpt Mode - Sean Kim
UI
- 🔸 UI: Do Not Reset Tooltips While Any Are Shown - Harley Acheson
- 🔸 UI: allow extensions repo filter to be changed even when disabled - Nick Alberelli
- 🔸 UI: Nodes: Remove background brightening in groups - Hans Goudey
- 🔸 UI: Improve Curve statistics - Pratik Borhade
- 🔸 UI: clarify Render Result and Viewer Nodes cannot be packed - Philipp Oeser
- UI: Fix Gizmo Bounding Box Calculation - Harley Acheson
- 🔸 UI: Simplified Quad View with Simple Axes - Harley Acheson
- 🔸 UI: Use template ID search menu for Remap Users - Guillermo Venegas
- UI: Incorrect Icon Used in Append/Link Filter - Harley Acheson
- 🔸 UI: Add confirmation dialog for 'Revert to Saved Preferences' - 1P2D
- 🔸 UI: Remove header status text jumps for commonly used operations - Jonas Holzman
- 🔸 UI: Icon for Cloud Storage Drive on Windows Platform - Harley Acheson
- UI: Rebuild Only Outliner When Area Joining - Harley Acheson
- 🔸 UI: Armature Bones can now sort alphabetically in Outliner - Philipp Oeser
- UI: Do not allow "Render Result" or "Viewer Node" images in most cases - Philipp Oeser
- UI: Add missing redraw when changing active panel category - Guillermo Venegas
- 🔸 UI: Display ID counts when dragging multiple objects - Pratik Borhade
- 🔸 UI: Nodes: Adjust Propagation label and tooltips - Pablo Vazquez
- UI: Icons: Add missing viewBox to icons SVG - Pablo Vazquez
- UI: Correct Versioning for Preferences Search - Harley Acheson
- UI: Fix spacing for generic UI list operators - Damien Picard
VSE
- 🔸 VSE: Allow negative multiply values for speed control strip - John Kiril Swenson
- 🔸 VSE: Preview rotation and scaling snap to increment - John Kiril Swenson
- 🔸 VSE: Solo strip preview only with shift+leftclick in RCS mode - John Kiril Swenson
- VSE: Python API: Simplify and standardize time properties, deprecate old - John Kiril Swenson
Vulkan
- Vulkan: Log on number of nodes sent to GPU - Jeroen Bakker
- Vulkan: Remove large shader compilation workaround - Jeroen Bakker
- 🔸 Vulkan: Remove OpenXR limitation text in preferences - Jeroen Bakker
- Vulkan: Sync Features with latest KosmicKrisp - Jeroen Bakker
- Vulkan: OCIO Display shader compilation error - Jeroen Bakker
XR
- 🔸 XR: Support Local Floor Reference Space - Jonas Holzman
- 🔸 XR: Movement Vignette logic refactor and improvements - Jonas Holzman
deps
- deps: fix debug aom library on windows - Ray Molenkamp
make format
- make format - Julien Duroure
8 Comments
Hola, Pablo!
Do you think there is any hope for further development of the "Auto IK" Option in Blender? It is an exceptional feature, but it remains a bit underdevoped and broken to this day.
Maybe also some further developments to "Ephemeral Rigging" aspect on Pose Mode; of course, all those relate to Rigging & Animation subject. I've heard Sybren and his Rigging staff were interested in Unreal Engine's "Control Rig" system, and which kind of features it might offer to Blender if developed in that direction.
For anyone wondering, "Ephemeral Rigging" is like, the animator being able to change the behavior of Bones of a Control Rig, without that actually implying Keyframing anything (Blender has several features corresponding to Ephemeral Rigging, I believe, such as the Transform Pivot Point Option, and even Auto IK Option [that's why it is located btw in the Pose Options Panel < Tool Tab < Sidebar Region < 3D Viewport Editor, on Pose Mode by the way!
hi pablo, when are they going to continue working on npr? BYe 🥶❄️
Hello Pablo, I hope this message finds you well :D. jk
Right now if we duplicate a collection that has objects hidden in viewport (the eye icon), those objects become visible again in the new duplicated collection.
Do you know where I could ask if this is a bug or something else?
Hola Pablo! The new Arrowhead sponsor brings this question to my mind:
Blender has many features targeted at specific industries. Are there specific features that might be developed that are made with Game Developers in mind? For example, a game-orieted (batch) exporter
Gracias Pablo! Love from Breda <3
Hello pablo. Do You think that it would possible to have release builds with experimental new features enabled? Now i can either download regular release version/LTS without experimentals, or daily (or PR branches) with experimentals.
For those who want to play with fire on projects, but eg. slightly less crashes than daily builds.
I'm aware that it could lead to unwanted bug reports for not finished features, so those releases could be only on builder site for more technical/involved users just as daily builds are.
I know i could build my own release build with experimentals, but i'm too lazy for that 😉.
Hello Pablo,
Would it be possible to add an Asset Shelf for Geometry Nodes and Shader Nodes, similar to the Compositor? It has proven very useful there, and I believe the same approach would benefit node workflows.
I’ve shared a pull request for this earlier ( blender.community/c/rightclickselect/wZkg/ ). Thanks for taking a look.
Hi Pablo, it's been a while. I have no question but a suggestion: Blender should have even higher tiers for donations from the biggest companies. The biggest tier currently is corporate patron, which is 240k euro per annum. I think there should be two more tiers, one for 500k and another for 1 million. There are a lot of companies that make that kind of money in under an hour; they can donate it as a tax write-off.
thanks nubnubbud ! :)