Skip to content

v2.4.0 - #28

Merged
calcharp merged 16 commits into
Imageomics:mainfrom
calcharp:main
Jul 29, 2026
Merged

v2.4.0#28
calcharp merged 16 commits into
Imageomics:mainfrom
calcharp:main

Conversation

@calcharp

Copy link
Copy Markdown
Member

Version 2.4.0 of TraitBlender. New, more flexible orienation framework for the ATLAS morphospace, some simple unit testing functionality to ensure the config gets imported properly, new VTK version that prevents TraitBlender from sometimes crashing on HPCs, and some bug fixes related to the config not being set correctly when imported.

The release is dated for tomorrow, 7/29/2026, in the docs.

calcharp and others added 10 commits July 27, 2026 16:22
Customs compose after Default in the specimen local frame, and the imaging pipeline applies and labels folders from the same orientation name.
Merge pull request Imageomics#27 from calcharp/main
Co-authored-by: Cursor <cursoragent@cursor.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR prepares TraitBlender v2.4.0, adding a more flexible orientation system (built-ins + config-defined custom Euler orientations), in-addon unit test support for validating config imports, render-engine configuration robustness across Blender versions, and accompanying documentation/version bumps.

Changes:

  • Add custom Euler orientations (UI + YAML) and apply orientations by name via a shared core helper.
  • Add in-addon unit tests (including config_matches_scene) plus a UI operator to run them.
  • Update render.engine / Cycles / Eevee config handling and documentation; bump release/version metadata and VTK wheel pins.

Reviewed changes

Copilot reviewed 45 out of 47 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
traitblender/ui/properties/orientation_properties.py Pass context through orientation lookup so dropdown includes custom orientations.
traitblender/ui/panels/main_panel.py Sync imaging orientation checkbox list; add engine-specific render UI.
traitblender/ui/operators/unit_test/run_unit_test_op.py Add operator to run core unit tests by name.
traitblender/ui/operators/unit_test/init.py Export unit test operator module symbols.
traitblender/ui/operators/imaging_pipeline_op.py Use a single source of truth for enabled orientations; apply by name.
traitblender/ui/operators/custom_orientation_ops.py Add/remove custom orientation entries from the UI config.
traitblender/ui/operators/config_ops.py Persist config path; apply render engine last; sync imaging orientations post-load.
traitblender/ui/operators/apply_orientation_op.py Apply orientation via shared core helper; allow explicit orientation override.
traitblender/ui/operators/init.py Register new operators (custom orientations, unit tests).
traitblender/mkdocs.yml Add Unit Tests page to docs nav.
traitblender/docs/morphospaces/shell.md Document orientations + custom Euler support for Shell.
traitblender/docs/morphospaces/overview.md Add orientations overview and custom Euler semantics.
traitblender/docs/morphospaces/circle-grid.md Document orientations + custom Euler support for Circle Grid.
traitblender/docs/morphospaces/atlas.md Document custom Euler orientations for ATLAS.
traitblender/docs/index.md Bump docs version references to v2.4.0.
traitblender/docs/getting-started/quick-start.md Update quick start for config import persistence, custom orientations, and unit tests.
traitblender/docs/getting-started/installation.md Bump installation examples/version to v2.4.0.
traitblender/docs/getting-started/blender-optimization.md Add anchor for Python tooltips cross-reference.
traitblender/docs/documentation.md Add links to configuration/unit test docs.
traitblender/docs/configuration/unit-tests.md New documentation for in-addon unit tests.
traitblender/docs/configuration/config-files.md Expand YAML schema docs for render blocks + custom orientations.
traitblender/docs/api/scene-assets.md Document new operators/properties (configure_scene behavior, unit tests, custom orientations).
traitblender/core/unit_test/test_config_matches_scene.py Implement config_matches_scene YAML-vs-live-scene comparison.
traitblender/core/unit_test/init.py Add core unit test registry and runner helpers.
traitblender/core/morphospaces/get_orientations.py Merge built-in morphospace orientations with custom Euler orientations from config.
traitblender/core/morphospaces/apply_orientation.py New shared helper to apply an orientation by name.
traitblender/core/morphospaces/init.py Export apply_orientation_by_name.
traitblender/core/helpers/render_engine_compat.py Improve engine normalization/enum handling for Blender 5.1+ behavior.
traitblender/core/helpers/orientation_helpers.py Add helper to build custom local-Euler orientation callables.
traitblender/core/helpers/init.py Export make_euler_orientation.
traitblender/core/config/traitblender_config.py Skip empty sections on YAML export; improve from_dict robustness/logging.
traitblender/core/config/templates/sample.py Ignore YAML input for UI-only sample section.
traitblender/core/config/templates/render.py Introduce engine-specific render blocks (cycles/eevee) and apply directly to scene RNA.
traitblender/core/config/templates/morphospace.py Suppress morphospace update popups during config load.
traitblender/core/config/templates/imaging.py Add custom orientations storage + orientation checkbox syncing.
traitblender/core/init.py Export unit test APIs from core.
traitblender/blender_manifest.toml Bump add-on version to 2.4.0; update VTK wheel path.
traitblender/assets/configs/default.yaml Update default YAML example for new render schema.
requirements-wheels.txt Bump VTK pin for CPython 3.13 wheels.
requirements-wheels-headless.txt Bump VTK pin for headless wheels.
README.md Bump version references and describe custom orientations.
CITATION.cff Update release metadata for v2.4.0.
build_zips/blender_manifest.template.toml Bump template manifest version to 2.4.0.
.zenodo.json Update Zenodo metadata for v2.4.0.
.gitignore Update embedded release checklist version references.
.github/workflows/release-zips.yml Update workflow comment example tag to v2.4.0.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread traitblender/ui/panels/main_panel.py
Comment thread traitblender/core/config/templates/imaging.py
Comment thread traitblender/core/morphospaces/apply_orientation.py
Comment thread traitblender/core/morphospaces/apply_orientation.py

@egrace479 egrace479 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missed the month change here.

Comment thread traitblender/docs/index.md Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

Blender operator error reports in generate_morphospace_sample_op.py use {'Error'} instead of the expected {'ERROR'}, which may prevent failures from surfacing correctly to users.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Comments suppressed due to low confidence (2)

traitblender/ui/operators/generate_morphospace_sample_op.py:138

  • Blender operator report levels are expected to be uppercase (e.g., {'ERROR'}). Using {'Error'} may be ignored or miscategorized by Blender, so failures here might not surface to the user.
    traitblender/ui/operators/generate_morphospace_sample_op.py:130
  • Blender operator report levels are expected to be uppercase (e.g., {'ERROR'}). Using {'Error'} may be ignored or miscategorized by Blender, so failures here might not surface to the user.

This issue also appears on line 138 of the same file.

  • Files reviewed: 47/49 changed files
  • Comments generated: 0 new
  • Review effort level: Low

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Co-authored-by: Cursor <cursoragent@cursor.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

There are a couple of concrete behavioral bugs in the new orientation UI/operators (silent success on invalid explicit orientation names; and incorrect checkbox removal when custom names collide with built-ins).

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Comments suppressed due to low confidence (2)

traitblender/ui/operators/apply_orientation_op.py:42

  • The operator currently swallows "orientation not found" errors and returns FINISHED even when an explicit orientation argument was provided. That makes scripts/pipelines silently succeed with a typo and can lead to mismatched folder/log names vs the actual pose (or no pose applied). Only treat missing/unknown orientation as a quiet no-op when the operator is relying on the UI enum (i.e., no explicit argument was passed).
    traitblender/ui/operators/custom_orientation_ops.py:58
  • Removing a custom orientation currently removes the first matching entry from imaging.orientation_options by name. If a user renames a custom orientation to collide with a built-in name (e.g. "Default"), this will temporarily remove the built-in checkbox entry until the next sync, and can also desync enabled flags. Prefer rebuilding orientation_options from the single source of truth via sync_orientation_options(...) after removal.
  • Files reviewed: 47/49 changed files
  • Comments generated: 0 new
  • Review effort level: Low

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Co-authored-by: Cursor <cursoragent@cursor.com>
@calcharp
calcharp merged commit 80a873c into Imageomics:main Jul 29, 2026
4 checks passed
calcharp added a commit to calcharp/TraitBlender that referenced this pull request Jul 29, 2026
Merge pull request Imageomics#28 from calcharp/main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants