{"id":45436991,"url":"https://github.com/ar90n/vanilla-roll","last_synced_at":"2026-02-22T03:16:01.244Z","repository":{"id":60964740,"uuid":"497307629","full_name":"ar90n/vanilla-roll","owner":"ar90n","description":"array-api based simple volume renderer","archived":false,"fork":false,"pushed_at":"2026-02-12T10:36:23.000Z","size":936,"stargazers_count":4,"open_issues_count":12,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-12T19:10:13.663Z","etag":null,"topics":["array-api","dicom","medical-images","medical-imaging","mha","my-projects","nifti","python","volume-rendering"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ar90n.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-05-28T12:11:27.000Z","updated_at":"2024-06-26T12:02:32.000Z","dependencies_parsed_at":"2024-01-19T20:32:46.607Z","dependency_job_id":"c8a6f401-c953-417d-8ab2-4516d3969f29","html_url":"https://github.com/ar90n/vanilla-roll","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/ar90n/vanilla-roll","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar90n%2Fvanilla-roll","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar90n%2Fvanilla-roll/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar90n%2Fvanilla-roll/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar90n%2Fvanilla-roll/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ar90n","download_url":"https://codeload.github.com/ar90n/vanilla-roll/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar90n%2Fvanilla-roll/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29704411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T23:35:04.139Z","status":"online","status_checked_at":"2026-02-22T02:00:08.193Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["array-api","dicom","medical-images","medical-imaging","mha","my-projects","nifti","python","volume-rendering"],"created_at":"2026-02-22T03:16:00.670Z","updated_at":"2026-02-22T03:16:01.238Z","avatar_url":"https://github.com/ar90n.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vanilla-roll\n[![Build][build-shiled]][build-url]\n[![Version][version-shield]][version-url]\n[![Downloads][download-shield]][download-url]\n[![Contributors][contributors-shield]][contributors-url]\n[![Issues][issues-shield]][issues-url]\n[![Codecov][codecov-shield]][codecov-url]\n[![Apache License 2.0 License][license-shield]][license-url]\n\nvanilla-roll is volume renderer using array-api as backend.\n\n## Why vanilla-roll ?\n[VTK](https://vtk.org/) is one of the most excellent volume renderers in the world.\nIt has good performance and many features.\nBut I think that the installation process is not easy.\nSo vanilla-roll is motivated to solve this problem.\n\n## Features\n- [ ] IO\n  - [x] MRA\n  - [x] NIFTI\n  - [x] DICOM\n  - [ ] NRRD\n- [ ] Rendering Algorithm\n  - [x] Sampling\n  - [x] Shear-Warp\n  - [ ] Raycast\n- [ ] Rendering Mode\n  - [x] MIP\n  - [x] MinP\n  - [x] Average\n  - [ ] VolumeRendering\n      - [x] Ambient\n      - [ ] Shading\n- [ ] Backend\n  - [x] numpy\n  - [x] pytorch\n  - [x] cupy\n  - [ ] jax\n  - [ ] numba\n\n\n## Installation\n```bash\n$ pip install vanilla-roll\n```\nvanilla-roll supports following extras\n\n* torch\n* dicom\n* mha\n* nifti\n\n\n## Example\nCode\n\n```python\nimport urllib.request\nfrom pathlib import Path\nfrom tempfile import TemporaryDirectory\n\nimport numpy as np\nimport skimage.io\n\nimport vanilla_roll as vr\n\n# from A high-resolution 7-Tesla fMRI dataset from complex natural stimulation with an audio movie\n# https://www.openfmri.org/dataset/ds000113/\nMRA_FILE_URL = \"https://s3.amazonaws.com/openneuro/ds000113/ds000113_unrevisioned/uncompressed/sub003/angio/angio001.nii.gz\"  # noqa: E501\n\n\ndef fetch_mra_volume() -\u003e vr.volume.Volume:\n    with TemporaryDirectory() as tmpdir:\n        mra_file = Path(tmpdir) / \"mra.nii.gz\"\n        urllib.request.urlretrieve(MRA_FILE_URL, mra_file)\n        return vr.io.read_nifti(mra_file)\n\n\ndef save_result(ret: vr.rendering.types.RenderingResult, path: str):\n    img_array = vr.rendering.convert_image_to_array(ret.image)\n    skimage.io.imsave(path, np.from_dlpack(img_array))  # type: ignore\n\n\ndef main():\n    volume = fetch_mra_volume()\n    ret = vr.render(volume, mode=vr.rendering.mode.MIP())\n    save_result(ret, f\"result.png\")\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\nOutput\n\n![output](https://raw.githubusercontent.com/ar90n/vanilla-roll/assets/images/simple.png)\n\nIf you need more exmplaes, please check the [examples](https://github.com/ar90n/vanilla-roll/tree/main/examples).\n\n## For development\n### Install Poery plugins\n```bash\n$ poetry self add 'poethepoet[poetry_plugin]'\n```\n\n### Install all extra packages\n```bash\n$ poetry poe install-all-extras\n```\n\n### Run tests\n```bash\n$ poetry poe test\n```\n\n### Run linter and formatter\n```bash\n$ poetry poe check\n```\n\n## See Also\n\n## License\n[Apache-2.0](https://github.com/ar90n/vanilla-roll/blob/main/LICENSE)\n\n[download-shield]: https://img.shields.io/pypi/dm/vanilla-roll?style=flat\n[download-url]: https://pypi.org/project/vanilla-roll/\n[version-shield]: https://img.shields.io/pypi/v/vanilla-roll?style=flat\n[version-url]: https://pypi.org/project/vanilla-roll/\n[build-shiled]: https://img.shields.io/github/actions/workflow/status/ar90n/vanilla-roll/ci-testing.yml\n[build-url]: https://github.com/ar90n/vanilla-roll/actions/workflows/ci-testing.yml\n[contributors-shield]: https://img.shields.io/github/contributors/ar90n/vanilla-roll.svg?style=flat\n[contributors-url]: https://github.com/ar90n/vanilla-roll/graphs/contributors\n[issues-shield]: https://img.shields.io/github/issues/ar90n/vanilla-roll.svg?style=flat\n[issues-url]: https://github.com/ar90n/vanilla-roll/issues\n[license-shield]: https://img.shields.io/github/license/ar90n/vanilla-roll.svg?style=flat\n[license-url]: https://github.com/ar90n/vanilla-roll/blob/main/LICENSE\n[codecov-shield]: https://codecov.io/gh/ar90n/vanilla-roll/branch/main/graph/badge.svg?token=8GKU96ODLY\n[codecov-url]: https://codecov.io/gh/ar90n/vanilla-roll\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far90n%2Fvanilla-roll","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Far90n%2Fvanilla-roll","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far90n%2Fvanilla-roll/lists"}