https://github.com/ar90n/vanilla-roll
array-api based simple volume renderer
https://github.com/ar90n/vanilla-roll
array-api dicom medical-images medical-imaging mha my-projects nifti python volume-rendering
Last synced: 18 days ago
JSON representation
array-api based simple volume renderer
- Host: GitHub
- URL: https://github.com/ar90n/vanilla-roll
- Owner: ar90n
- License: apache-2.0
- Created: 2022-05-28T12:11:27.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2026-02-12T10:36:23.000Z (28 days ago)
- Last Synced: 2026-02-12T19:10:13.663Z (27 days ago)
- Topics: array-api, dicom, medical-images, medical-imaging, mha, my-projects, nifti, python, volume-rendering
- Language: Python
- Homepage:
- Size: 914 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# vanilla-roll
[![Build][build-shiled]][build-url]
[![Version][version-shield]][version-url]
[![Downloads][download-shield]][download-url]
[![Contributors][contributors-shield]][contributors-url]
[![Issues][issues-shield]][issues-url]
[![Codecov][codecov-shield]][codecov-url]
[![Apache License 2.0 License][license-shield]][license-url]
vanilla-roll is volume renderer using array-api as backend.
## Why vanilla-roll ?
[VTK](https://vtk.org/) is one of the most excellent volume renderers in the world.
It has good performance and many features.
But I think that the installation process is not easy.
So vanilla-roll is motivated to solve this problem.
## Features
- [ ] IO
- [x] MRA
- [x] NIFTI
- [x] DICOM
- [ ] NRRD
- [ ] Rendering Algorithm
- [x] Sampling
- [x] Shear-Warp
- [ ] Raycast
- [ ] Rendering Mode
- [x] MIP
- [x] MinP
- [x] Average
- [ ] VolumeRendering
- [x] Ambient
- [ ] Shading
- [ ] Backend
- [x] numpy
- [x] pytorch
- [x] cupy
- [ ] jax
- [ ] numba
## Installation
```bash
$ pip install vanilla-roll
```
vanilla-roll supports following extras
* torch
* dicom
* mha
* nifti
## Example
Code
```python
import urllib.request
from pathlib import Path
from tempfile import TemporaryDirectory
import numpy as np
import skimage.io
import vanilla_roll as vr
# from A high-resolution 7-Tesla fMRI dataset from complex natural stimulation with an audio movie
# https://www.openfmri.org/dataset/ds000113/
MRA_FILE_URL = "https://s3.amazonaws.com/openneuro/ds000113/ds000113_unrevisioned/uncompressed/sub003/angio/angio001.nii.gz" # noqa: E501
def fetch_mra_volume() -> vr.volume.Volume:
with TemporaryDirectory() as tmpdir:
mra_file = Path(tmpdir) / "mra.nii.gz"
urllib.request.urlretrieve(MRA_FILE_URL, mra_file)
return vr.io.read_nifti(mra_file)
def save_result(ret: vr.rendering.types.RenderingResult, path: str):
img_array = vr.rendering.convert_image_to_array(ret.image)
skimage.io.imsave(path, np.from_dlpack(img_array)) # type: ignore
def main():
volume = fetch_mra_volume()
ret = vr.render(volume, mode=vr.rendering.mode.MIP())
save_result(ret, f"result.png")
if __name__ == "__main__":
main()
```
Output

If you need more exmplaes, please check the [examples](https://github.com/ar90n/vanilla-roll/tree/main/examples).
## For development
### Install Poery plugins
```bash
$ poetry self add 'poethepoet[poetry_plugin]'
```
### Install all extra packages
```bash
$ poetry poe install-all-extras
```
### Run tests
```bash
$ poetry poe test
```
### Run linter and formatter
```bash
$ poetry poe check
```
## See Also
## License
[Apache-2.0](https://github.com/ar90n/vanilla-roll/blob/main/LICENSE)
[download-shield]: https://img.shields.io/pypi/dm/vanilla-roll?style=flat
[download-url]: https://pypi.org/project/vanilla-roll/
[version-shield]: https://img.shields.io/pypi/v/vanilla-roll?style=flat
[version-url]: https://pypi.org/project/vanilla-roll/
[build-shiled]: https://img.shields.io/github/actions/workflow/status/ar90n/vanilla-roll/ci-testing.yml
[build-url]: https://github.com/ar90n/vanilla-roll/actions/workflows/ci-testing.yml
[contributors-shield]: https://img.shields.io/github/contributors/ar90n/vanilla-roll.svg?style=flat
[contributors-url]: https://github.com/ar90n/vanilla-roll/graphs/contributors
[issues-shield]: https://img.shields.io/github/issues/ar90n/vanilla-roll.svg?style=flat
[issues-url]: https://github.com/ar90n/vanilla-roll/issues
[license-shield]: https://img.shields.io/github/license/ar90n/vanilla-roll.svg?style=flat
[license-url]: https://github.com/ar90n/vanilla-roll/blob/main/LICENSE
[codecov-shield]: https://codecov.io/gh/ar90n/vanilla-roll/branch/main/graph/badge.svg?token=8GKU96ODLY
[codecov-url]: https://codecov.io/gh/ar90n/vanilla-roll