diff --git a/.claude/skills/openspec-apply-change/SKILL.md b/.agents/skills/openspec-apply-change/SKILL.md similarity index 100% rename from .claude/skills/openspec-apply-change/SKILL.md rename to .agents/skills/openspec-apply-change/SKILL.md diff --git a/.claude/skills/openspec-archive-change/SKILL.md b/.agents/skills/openspec-archive-change/SKILL.md similarity index 100% rename from .claude/skills/openspec-archive-change/SKILL.md rename to .agents/skills/openspec-archive-change/SKILL.md diff --git a/.claude/skills/openspec-explore/SKILL.md b/.agents/skills/openspec-explore/SKILL.md similarity index 100% rename from .claude/skills/openspec-explore/SKILL.md rename to .agents/skills/openspec-explore/SKILL.md diff --git a/.claude/skills/openspec-propose/SKILL.md b/.agents/skills/openspec-propose/SKILL.md similarity index 100% rename from .claude/skills/openspec-propose/SKILL.md rename to .agents/skills/openspec-propose/SKILL.md diff --git a/.claude/commands/opsx/apply.md b/.agents/skills/source-command-opsx-apply/SKILL.md similarity index 94% rename from .claude/commands/opsx/apply.md rename to .agents/skills/source-command-opsx-apply/SKILL.md index ae14f0f..1cb9c4b 100644 --- a/.claude/commands/opsx/apply.md +++ b/.agents/skills/source-command-opsx-apply/SKILL.md @@ -1,10 +1,14 @@ --- -name: "OPSX: Apply" -description: Implement tasks from an OpenSpec change (Experimental) -category: Workflow -tags: [workflow, artifacts, experimental] +name: "source-command-opsx-apply" +description: "Implement tasks from an OpenSpec change (Experimental)" --- +# source-command-opsx-apply + +Use this skill when the user asks to run the migrated source command `opsx-apply`. + +## Command Template + Implement tasks from an OpenSpec change. **Input**: Optionally specify a change name (e.g., `/opsx:apply add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes. diff --git a/.claude/commands/opsx/archive.md b/.agents/skills/source-command-opsx-archive/SKILL.md similarity index 95% rename from .claude/commands/opsx/archive.md rename to .agents/skills/source-command-opsx-archive/SKILL.md index 5e91608..47b6b07 100644 --- a/.claude/commands/opsx/archive.md +++ b/.agents/skills/source-command-opsx-archive/SKILL.md @@ -1,10 +1,14 @@ --- -name: "OPSX: Archive" -description: Archive a completed change in the experimental workflow -category: Workflow -tags: [workflow, archive, experimental] +name: "source-command-opsx-archive" +description: "Archive a completed change in the experimental workflow" --- +# source-command-opsx-archive + +Use this skill when the user asks to run the migrated source command `opsx-archive`. + +## Command Template + Archive a completed change in the experimental workflow. **Input**: Optionally specify a change name after `/opsx:archive` (e.g., `/opsx:archive add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes. diff --git a/.claude/commands/opsx/explore.md b/.agents/skills/source-command-opsx-explore/SKILL.md similarity index 97% rename from .claude/commands/opsx/explore.md rename to .agents/skills/source-command-opsx-explore/SKILL.md index 1757907..8b5c091 100644 --- a/.claude/commands/opsx/explore.md +++ b/.agents/skills/source-command-opsx-explore/SKILL.md @@ -1,10 +1,14 @@ --- -name: "OPSX: Explore" +name: "source-command-opsx-explore" description: "Enter explore mode - think through ideas, investigate problems, clarify requirements" -category: Workflow -tags: [workflow, explore, experimental, thinking] --- +# source-command-opsx-explore + +Use this skill when the user asks to run the migrated source command `opsx-explore`. + +## Command Template + Enter explore mode. Think deeply. Visualize freely. Follow the conversation wherever it goes. **IMPORTANT: Explore mode is for thinking, not implementing.** You may read files, search code, and investigate the codebase, but you must NEVER write code or implement features. If the user asks you to implement something, remind them to exit explore mode first and create a change proposal. You MAY create OpenSpec artifacts (proposals, designs, specs) if the user asks—that's capturing thinking, not implementing. diff --git a/.claude/commands/opsx/propose.md b/.agents/skills/source-command-opsx-propose/SKILL.md similarity index 94% rename from .claude/commands/opsx/propose.md rename to .agents/skills/source-command-opsx-propose/SKILL.md index 05276f4..c488f25 100644 --- a/.claude/commands/opsx/propose.md +++ b/.agents/skills/source-command-opsx-propose/SKILL.md @@ -1,10 +1,14 @@ --- -name: "OPSX: Propose" -description: Propose a new change - create it and generate all artifacts in one step -category: Workflow -tags: [workflow, artifacts, experimental] +name: "source-command-opsx-propose" +description: "Propose a new change - create it and generate all artifacts in one step" --- +# source-command-opsx-propose + +Use this skill when the user asks to run the migrated source command `opsx-propose`. + +## Command Template + Propose a new change - create the change and generate all artifacts in one step. I'll create a change with artifacts: diff --git a/.gitignore b/.gitignore index 4075260..1539f22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # Tempary files temp sandbox.* -notes/ +/notes/ # Environments .env @@ -22,11 +22,11 @@ secrets/ SECRETS/ secrets.bak/ -# Claude +# Claude Code +.claude/settings.local.json .claudian # Obsidian - .obsidian/* !.obsidian/snippets !.obsidian/app.json @@ -389,8 +389,4 @@ dist # Vite files vite.config.js.timestamp-* vite.config.ts.timestamp-* -.vite/ - - -# Scipy -!scipy_ndimage/*/** \ No newline at end of file +.vite/ \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index eef4bd2..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -@AGENTS.md \ No newline at end of file diff --git a/build.py b/build.py index bb61153..c74a1e9 100644 --- a/build.py +++ b/build.py @@ -19,7 +19,8 @@ required_packages = ["SimpleITK==2.5.5", "transforms3d==0.4.2", "tifffile==2024.7.24", "matplotlib==3.10.7", - "pillow==11.2.1"] + "pillow==11.2.1", + "scipy==1.17.1"] platforms = {"windows-x64": Platform(pypi_suffix="win_amd64", @@ -33,7 +34,8 @@ platforms = {"windows-x64": Platform(pypi_suffix="win_amd64", packages_to_remove = { "imagecodecs", - "numpy" + "numpy", + "packaging" } @@ -45,7 +47,6 @@ def run_python(args: str): def build_extension(platform: Platform, python_version: str) -> None: wheel_dirpath = Path("./src/bioxelnodes/wheels") toml_filepath = Path("./src/bioxelnodes/blender_manifest.toml") - scipy_ndimage_dirpath = Path("./scipy_ndimage", platform.blender_tag) # download required_packages run_python( @@ -62,10 +63,6 @@ def build_extension(platform: Platform, python_version: str) -> None: and "universal2" in f.name ): f.rename(Path(f.parent, f.name.replace("universal2", "arm64"))) - - for ndimage_filepath in scipy_ndimage_dirpath.iterdir(): - to_filepath = Path("./src/bioxelnodes/bioxel/scipy", ndimage_filepath.name) - shutil.copy(ndimage_filepath, to_filepath) # Load the TOML file with toml_filepath.open("r") as file: diff --git a/pyproject.toml b/pyproject.toml index 76a5938..20d2e38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,8 +1,8 @@ [project] name = "bioxelnodes" -version = "1.0.9" +version = "2.0.0" description = "" -authors = [{ name = "Ma Nan", email = "icrdr2010@outlook.com" }] +authors = [{ name = "MaNan", email = "icrdr2010@outlook.com" }] requires-python = ">=3.11.0,<3.12.dev0" readme = "README.md" license = "MIT" @@ -13,6 +13,7 @@ dependencies = [ "h5py==3.11.0", "transforms3d==0.4.2", "matplotlib==3.10.7", + "scipy==1.17.1", ] [dependency-groups] diff --git a/scipy_ndimage/linux-x64/_nd_image.cpython-311-x86_64-linux-gnu.so b/scipy_ndimage/linux-x64/_nd_image.cpython-311-x86_64-linux-gnu.so deleted file mode 100644 index 60edc5b..0000000 Binary files a/scipy_ndimage/linux-x64/_nd_image.cpython-311-x86_64-linux-gnu.so and /dev/null differ diff --git a/scipy_ndimage/linux-x64/_nd_image.cpython-313-x86_64-linux-gnu.so b/scipy_ndimage/linux-x64/_nd_image.cpython-313-x86_64-linux-gnu.so deleted file mode 100644 index e510baa..0000000 --- a/scipy_ndimage/linux-x64/_nd_image.cpython-313-x86_64-linux-gnu.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:132fd2fbc28d98b7f21e33e75516def2d8ea86d2ad2547cfe25ea419e33098ea -size 175504 diff --git a/scipy_ndimage/macos-arm64/_nd_image.cpython-311-darwin.so b/scipy_ndimage/macos-arm64/_nd_image.cpython-311-darwin.so deleted file mode 100644 index 15ffc08..0000000 Binary files a/scipy_ndimage/macos-arm64/_nd_image.cpython-311-darwin.so and /dev/null differ diff --git a/scipy_ndimage/macos-arm64/_nd_image.cpython-313-darwin.so b/scipy_ndimage/macos-arm64/_nd_image.cpython-313-darwin.so deleted file mode 100644 index ac493f0..0000000 --- a/scipy_ndimage/macos-arm64/_nd_image.cpython-313-darwin.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd95c5ce36744532629f59bd8610ae67631b3f37916d71d0e3f869c0ab54bd7e -size 156160 diff --git a/scipy_ndimage/macos-x64/_nd_image.cpython-311-darwin.so b/scipy_ndimage/macos-x64/_nd_image.cpython-311-darwin.so deleted file mode 100644 index 3a51057..0000000 Binary files a/scipy_ndimage/macos-x64/_nd_image.cpython-311-darwin.so and /dev/null differ diff --git a/scipy_ndimage/macos-x64/_nd_image.cpython-313-darwin.so b/scipy_ndimage/macos-x64/_nd_image.cpython-313-darwin.so deleted file mode 100644 index 1d303e5..0000000 --- a/scipy_ndimage/macos-x64/_nd_image.cpython-313-darwin.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03487f506992a87f62e707cc18565bffa66baf6d01a36106b5bd1bc4ea26b431 -size 154824 diff --git a/scipy_ndimage/windows-x64/_nd_image.cp311-win_amd64.pyd b/scipy_ndimage/windows-x64/_nd_image.cp311-win_amd64.pyd deleted file mode 100644 index b233674..0000000 Binary files a/scipy_ndimage/windows-x64/_nd_image.cp311-win_amd64.pyd and /dev/null differ diff --git a/scipy_ndimage/windows-x64/_nd_image.cp313-win_amd64.pyd b/scipy_ndimage/windows-x64/_nd_image.cp313-win_amd64.pyd deleted file mode 100644 index 6d433a1..0000000 Binary files a/scipy_ndimage/windows-x64/_nd_image.cp313-win_amd64.pyd and /dev/null differ diff --git a/src/bioxelnodes/assets/O_Bioxel/O_Bioxel_Nodes.blend b/src/bioxelnodes/assets/O_Bioxel/O_Bioxel_Nodes.blend index 3d8f98a..d8933e7 100644 --- a/src/bioxelnodes/assets/O_Bioxel/O_Bioxel_Nodes.blend +++ b/src/bioxelnodes/assets/O_Bioxel/O_Bioxel_Nodes.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1699f2d06cdb25a935abc97e7f4e2c72164f8fb741e655a32b451c67b2e61672 -size 13787325 +oid sha256:7768cf857939494c527f223267d08c7ad2da8933188899dadca9949630fd3f87 +size 13869095 diff --git a/src/bioxelnodes/blender_manifest.toml b/src/bioxelnodes/blender_manifest.toml index f74dc58..c51b76a 100644 --- a/src/bioxelnodes/blender_manifest.toml +++ b/src/bioxelnodes/blender_manifest.toml @@ -6,7 +6,7 @@ name = "Bioxel Nodes" tagline = "For scientific volumetric data visualization in Blender" maintainer = "Nan " type = "add-on" -website = "https://omoolab.github.io/BioxelNodes/latest" +website = "https://docs.omoolab.xyz/bioxelnodes/" tags = ["Geometry Nodes", "Render", "Import-Export"] blender_version_min = "5.0.0" @@ -29,12 +29,13 @@ wheels = [ "./wheels/matplotlib-3.10.7-cp311-cp311-win_amd64.whl", "./wheels/matplotlib-3.10.7-cp313-cp313-win_amd64.whl", "./wheels/mrcfile-1.5.1-py2.py3-none-any.whl", - "./wheels/packaging-26.2-py3-none-any.whl", "./wheels/pillow-11.2.1-cp311-cp311-win_amd64.whl", "./wheels/pillow-11.2.1-cp313-cp313-win_amd64.whl", "./wheels/pyometiff-1.0.0-py3-none-any.whl", "./wheels/pyparsing-3.3.2-py3-none-any.whl", "./wheels/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", + "./wheels/scipy-1.17.1-cp311-cp311-win_amd64.whl", + "./wheels/scipy-1.17.1-cp313-cp313-win_amd64.whl", "./wheels/simpleitk-2.5.5-cp311-abi3-win_amd64.whl", "./wheels/six-1.17.0-py2.py3-none-any.whl", "./wheels/tifffile-2024.7.24-py3-none-any.whl", diff --git a/uv.lock b/uv.lock index 6bfea67..b70be8f 100644 --- a/uv.lock +++ b/uv.lock @@ -25,13 +25,14 @@ wheels = [ [[package]] name = "bioxelnodes" -version = "1.0.9" +version = "2.0.0" source = { editable = "." } dependencies = [ { name = "h5py" }, { name = "matplotlib" }, { name = "mrcfile" }, { name = "pyometiff" }, + { name = "scipy" }, { name = "simpleitk" }, { name = "transforms3d" }, ] @@ -59,6 +60,7 @@ requires-dist = [ { name = "matplotlib", specifier = "==3.10.7" }, { name = "mrcfile", specifier = "==1.5.1" }, { name = "pyometiff", specifier = "==1.0.0" }, + { name = "scipy", specifier = "==1.17.1" }, { name = "simpleitk", specifier = "==2.3.1" }, { name = "transforms3d", specifier = "==0.4.2" }, ] @@ -945,6 +947,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928, upload-time = "2024-05-29T15:37:47.027Z" }, ] +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, +] + [[package]] name = "setuptools" version = "72.1.0"