Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release-zips.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Build extension zips and attach them to a GitHub release when you publish one.
# How to use: Create a release (draft or direct publish) with a tag (e.g. v2.3.0). When the release
# How to use: Create a release (draft or direct publish) with a tag (e.g. v2.4.0). When the release
# is published, this workflow runs, builds Windows/Mac/Linux zips, and uploads them as release assets.

name: Release extension zips
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ PLAN.md
traitblender/site/

# =============================================================================
# RELEASE CHECKLIST — TraitBlender version (currently 2.3.0)
# Search/replace 2.3.0 → X.Y.Z and v2.3.0 → vX.Y.Z unless noted below.
# RELEASE CHECKLIST — TraitBlender version (currently 2.4.0)
# Search/replace 2.4.0 → X.Y.Z and v2.4.0 → vX.Y.Z unless noted below.
# =============================================================================

# --- Addon package (extension build version; keep both in sync) ---
Expand Down
4 changes: 2 additions & 2 deletions .zenodo.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
"computer vision"
],
"title": "TraitBlender",
"version": "2.3.0",
"version": "2.4.0",
"license": "MIT",
"publication_date": "2026-06-11",
"publication_date": "2026-07-29",
"grants": [
{
"id": "021nxhr62::2118240"
Expand Down
8 changes: 4 additions & 4 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ authors:
given-names: Josef
orcid: "https://orcid.org/0000-0003-4624-9680"
cff-version: 1.2.0
date-released: "2026-06-11"
date-released: "2026-07-29"
doi: 10.5281/zenodo.14804133
identifiers:
- type: url
description: "The GitHub release URL for version 2.3.0."
value: "https://github.com/Imageomics/TraitBlender/releases/tag/v2.3.0"
description: "The GitHub release URL for version 2.4.0."
value: "https://github.com/Imageomics/TraitBlender/releases/tag/v2.4.0"
keywords:
- Imageomics
- Blender
Expand All @@ -40,7 +40,7 @@ license: "MIT"
message: "If you find this software helpful in your research, please cite this software release."
repository-code: "https://github.com/Imageomics/TraitBlender"
title: "TraitBlender"
version: 2.3.0
version: 2.4.0
type: software
contact:
- family-names: Charpentier
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<img src="traitblender/docs/images/logo.svg" alt="TraitBlender logo" width="360"/>
</p>

TraitBlender is a Blender add-on for generating museum-style images and 3D meshes of specimens from theoretical morphospaces. **v2.3.0** targets **Blender 5.1+** (Python 3.13 wheels) on Windows, macOS, and Linux.
TraitBlender is a Blender add-on for generating museum-style images and 3D meshes of specimens from theoretical morphospaces. **v2.4.0** targets **Blender 5.1+** (Python 3.13 wheels) on Windows, macOS, and Linux.

## Features

Expand All @@ -18,7 +18,7 @@ TraitBlender is a Blender add-on for generating museum-style images and 3D meshe

**Dataset import, editing, and saving** — Specimen trait values are read from CSV, TSV, or Excel. The built-in dataset editor supports filtering, sorting, pagination, and saving changes back to file, so you can curate and tweak trait tables without leaving Blender.

**Built-in orientations** — Each morphospace defines named orientations (e.g. "Default", "Aperture view") that place specimens consistently on the table. The imaging pipeline can render multiple orientations per specimen so images are comparable across specimens and runs.
**Built-in and custom orientations** — Each morphospace defines named orientations (e.g. "Default", "Aperture view") that place specimens consistently on the table. You can also add **custom Euler orientations** (name + radians) that run Default, then rotate in the specimen’s local frame, for any morphospace. The imaging pipeline can render multiple orientations per specimen so images are comparable across specimens and runs.

**Stochastic transform pipeline** — Scene properties (e.g. camera location, focal length, lamp power) can be driven by configurable transforms with normal or other samplers. This adds controlled variation to images (e.g. small camera jitter) for robustness or data augmentation while keeping the setup reproducible via the same config and seed.

Expand All @@ -32,6 +32,6 @@ For installation, quick start, and full documentation, see the [docs](https://im

You can also install a release zip from the command line:

`blender --command extension install-file -r user_default --enable traitblender-v2.3.0-linux.zip`
`blender --command extension install-file -r user_default --enable traitblender-v2.4.0-linux.zip`

Use the zip that matches your OS (for example: `...-windows.zip`, `...-mac.zip`, or `...-linux.zip`, `...-linux-headless.zip`).
2 changes: 1 addition & 1 deletion build_zips/blender_manifest.template.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
schema_version = "1.0.0"

id = "traitblender"
version = "2.3.0"
version = "2.4.0"
name = "TraitBlender"
tagline = "Generate museum-style images for morphological datasets"
maintainer = "Caleb Charpentier <calebcharpentier00@gmail.com>"
Expand Down
2 changes: 1 addition & 1 deletion requirements-wheels-headless.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Same as requirements-wheels.txt but without dearpygui (headless / no GUI CSV editor).
# Regenerate: py -3.13 build_zips/download_wheels.py linux-headless
vtk==9.4.2
vtk==9.6.2
numpy==2.2.6
scipy==1.16.0
pandas==2.2.3
Expand Down
5 changes: 3 additions & 2 deletions requirements-wheels.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Pin versions with CPython 3.13 wheels (Blender 5.1+). Listed packages only (--no-deps):
# py -3.13 build_zips/download_wheels.py windows|mac|linux
# vtk 9.4+ has cp313 wheels (9.2.x does not).
vtk==9.4.2
# vtk 9.4+ has cp313 wheels (9.2.x does not). Prefer 9.6.2+ for Blender 5.1 ABI
# compatibility on Linux/headless (older wheels can segfault on import vtk).
vtk==9.6.2
numpy==2.2.6
scipy==1.16.0
pandas==2.2.3
Expand Down
15 changes: 12 additions & 3 deletions traitblender/assets/configs/default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,18 @@ mat:
roughness: 1.0
scale: [0.15, 0.15, 1.0]
render:
eevee_use_raytracing: false
# Eevee id is version-specific (BLENDER_EEVEE_NEXT vs BLENDER_EEVEE); normalized on load.
engine: BLENDER_EEVEE_NEXT
# Eevee id is version-specific (BLENDER_EEVEE_NEXT vs BLENDER_EEVEE); both accepted in YAML.
engine: BLENDER_EEVEE
eevee:
use_raytracing: false
taa_render_samples: 64
# When engine is CYCLES, export uses a cycles: block instead, e.g.:
# cycles:
# use_adaptive_sampling: true
# adaptive_threshold: 0.01
# samples: 4096
# adaptive_min_samples: 0
# time_limit: 0.0
output:
image_format: PNG
images_per_view: 1
Expand Down
6 changes: 3 additions & 3 deletions traitblender/blender_manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
schema_version = "1.0.0"

id = "traitblender"
version = "2.3.0"
version = "2.4.0"
name = "TraitBlender"
tagline = "Generate museum-style images for morphological datasets"
maintainer = "Caleb Charpentier <calebcharpentier00@gmail.com>"
Expand Down Expand Up @@ -31,7 +31,7 @@ wheels = [
"./wheels/scipy-1.16.0-cp313-cp313-win_amd64.whl",
"./wheels/six-1.17.0-py2.py3-none-any.whl",
"./wheels/tzdata-2026.1-py2.py3-none-any.whl",
"./wheels/vtk-9.4.2-cp313-cp313-win_amd64.whl",
"./wheels/vtk-9.6.2-cp313-cp313-win_amd64.whl",
]


Expand All @@ -48,7 +48,7 @@ pytz = "./wheels/pytz-2026.1.post1-py2.py3-none-any.whl"
scipy = "./wheels/scipy-1.16.0-cp313-cp313-win_amd64.whl"
six = "./wheels/six-1.17.0-py2.py3-none-any.whl"
tzdata = "./wheels/tzdata-2026.1-py2.py3-none-any.whl"
vtk = "./wheels/vtk-9.4.2-cp313-cp313-win_amd64.whl"
vtk = "./wheels/vtk-9.6.2-cp313-cp313-win_amd64.whl"


[permissions]
Expand Down
11 changes: 9 additions & 2 deletions traitblender/core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@
# Mesh exports
from .meshes import export_current_sample

# Config, morphospaces (placeholder for future development)
# from .morphospaces import *
# In-addon unit tests
from .unit_test import TESTS, list_tests, run_test, help_tests, test_config_matches_scene

__all__ = [
# Helper functions
Expand Down Expand Up @@ -77,4 +77,11 @@

# Meshes
"export_current_sample",

# Unit tests
"TESTS",
"list_tests",
"help_tests",
"run_test",
"test_config_matches_scene",
]
Loading
Loading