{"name":"napari-volume-spin","display_name":"Volume Spin","visibility":"public","icon":null,"categories":["Visualization"],"schema_version":"0.3.0","on_activate":null,"on_deactivate":null,"contributions":{"commands":[{"id":"napari-volume-spin.make_volume_spin_widget","title":"Make Volume Spin widget","python_name":"napari_volume_spin._widget:VolumeSpinWidget","short_title":null,"category":null,"icon":null,"enablement":null}],"readers":null,"writers":null,"widgets":[{"command":"napari-volume-spin.make_volume_spin_widget","display_name":"Volume Spin Controls","autogenerate":false}],"sample_data":null,"themes":null,"menus":{},"submenus":null,"keybindings":null,"configurations":{}},"package_metadata":{"metadata_version":"2.4","name":"napari-volume-spin","version":"0.1.1","dynamic":["license-file"],"platform":null,"supported_platform":null,"summary":"Imaris-style continuous 3D spin animation controls for napari, with looping GIF/MP4 export","description":"# napari-volume-spin\n\n[![License BSD-3](https://img.shields.io/pypi/l/napari-volume-spin.svg?color=green)](https://github.com/Macl-I/napari-volume-spin/raw/main/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/napari-volume-spin.svg?color=green)](https://pypi.org/project/napari-volume-spin)\n[![Python Version](https://img.shields.io/pypi/pyversions/napari-volume-spin.svg?color=green)](https://python.org)\n[![tests](https://github.com/Macl-I/napari-volume-spin/workflows/tests/badge.svg)](https://github.com/Macl-I/napari-volume-spin/actions)\n[![codecov](https://codecov.io/gh/Macl-I/napari-volume-spin/branch/main/graph/badge.svg)](https://codecov.io/gh/Macl-I/napari-volume-spin)\n[![napari hub](https://img.shields.io/endpoint?url=https://api.napari-hub.org/shields/napari-volume-spin)](https://napari-hub.org/plugins/napari-volume-spin)\n[![npe2](https://img.shields.io/badge/plugin-npe2-blue?link=https://napari.org/stable/plugins/index.html)](https://napari.org/stable/plugins/index.html)\n[![Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-grayscale-inverted-border-purple.json)](https://github.com/copier-org/copier)\n\nImaris-style continuous 3D spin animation controls for napari, with looping GIF/MP4 export\n\n----------------------------------\n\nThis [napari] plugin was generated with [copier] using the [napari-plugin-template].\n\n## Demo\n\n<!-- Record a short screen capture of the plugin in action (Spin Controls -> Export -> Compress)\n     and save it as docs/demo.gif (or docs/demo.mp4), then this will render on GitHub/PyPI/napari hub. -->\n![napari-volume-spin demo](docs/demo.gif)\n\n## Features\n\n`napari-volume-spin` adds a **Volume Spin Controls** dock widget with three\ntabs that mimics Imaris's continuous 3D rotation animation:\n\n**Spin Controls tab**\n\n- **Play / Pause** a continuous spin of the 3D camera around the currently\n  viewed volume.\n- Choose the screen-relative rotation **axis**: X (pitch), Y (roll), or Z (yaw).\n- Adjust **spin speed** (0.05–5.0 degrees/frame) via a linked slider and spin box.\n\n**Export tab**\n\n- **Export a looping GIF or MP4** of the current axis/speed settings: a full\n  360° rotation is captured automatically so the animation loops seamlessly,\n  and you are always prompted for the save location.\n- **Loop Axis**: for multi-dimensional images (e.g. a time series), pick an\n  extra (non-displayed) axis to page through frame-by-frame while the camera\n  keeps spinning — the number of captured frames then matches that axis's\n  length instead of a fixed 360° rotation, and the FPS field controls\n  playback speed of the resulting file.\n- A **progress bar** and **Cancel** button are shown while frames are captured;\n  the (often slower) file encoding step runs in a background thread so napari\n  stays fully interactive.\n\n**Compress tab**\n\n- **Compress Animation...** shrinks an existing GIF/MP4/WebP/MOV/AVI file.\n  Choose a compression **scheme** — WebP or MP4 use lossy, per-frame\n  (JPEG-like) image compression instead of GIF's 256-color palette, which\n  avoids the choppy banding/dithering artifacts a plain palette-based GIF\n  produces. Compression automatically tries progressively lower\n  scale/quality tiers until the output is under 25 MB (handy for e-mail\n  attachments), while never dropping below 24 fps.\n\n## Usage\n\n1. Open napari with a 3D (or higher-dimensional) volume layer and switch to\n   3D display (`ndisplay=3`).\n2. Open `Plugins > napari-volume-spin: Volume Spin Controls`.\n3. On the **Spin Controls** tab, pick a rotation axis and speed, then click\n   **Play Spin** to start the continuous animation.\n4. Switch to the **Export** tab, choose **GIF** or **MP4**, an FPS, and\n   optionally a **Loop Axis** (for multi-dimensional images), then click\n   **Export Looping Animation...**. Use **Cancel** to abort mid-capture.\n5. If the resulting file is too large (e.g. for e-mail), switch to the\n   **Compress** tab, pick a compression scheme, and click **Compress\n   Animation...** to save a smaller copy.\n\n## Installation\n\nYou can install `napari-volume-spin` via [pip]:\n\n```bash\npip install napari-volume-spin\n```\n\nIf napari is not already installed, you can install `napari-volume-spin` with napari and Qt via:\n\n```bash\npip install \"napari-volume-spin[all]\"\n```\n\n\nTo install latest development version:\n\n```bash\npip install git+https://github.com/Macl-I/napari-volume-spin.git\n```\n\n\n\n## Contributing\n\nContributions are very welcome. Tests can be run with [tox], please ensure\nthe coverage at least stays the same before you submit a pull request.\n\n## License\n\nDistributed under the terms of the [BSD-3] license,\n\"napari-volume-spin\" is free and open source software\n\n## Issues\n\nIf you encounter any problems, please [file an issue] along with a detailed description.\n\n[napari]: https://github.com/napari/napari\n[copier]: https://copier.readthedocs.io/en/stable/\n[MIT]: http://opensource.org/licenses/MIT\n[BSD-3]: http://opensource.org/licenses/BSD-3-Clause\n[GNU GPL v3.0]: http://www.gnu.org/licenses/gpl-3.0.txt\n[GNU LGPL v3.0]: http://www.gnu.org/licenses/lgpl-3.0.txt\n[Apache Software License 2.0]: http://www.apache.org/licenses/LICENSE-2.0\n[Mozilla Public License 2.0]: https://www.mozilla.org/media/MPL/2.0/index.txt\n[napari-plugin-template]: https://github.com/napari/napari-plugin-template\n\n[file an issue]: https://github.com/Macl-I/napari-volume-spin/issues\n\n[tox]: https://tox.readthedocs.io/en/latest/\n[pip]: https://pypi.org/project/pip/\n[PyPI]: https://pypi.org/\n","description_content_type":"text/markdown","keywords":null,"home_page":null,"download_url":null,"author":"Marcel Issler","author_email":"marcel.issler@kuleuven.be","maintainer":null,"maintainer_email":null,"license":null,"classifier":["Development Status :: 2 - Pre-Alpha","Framework :: napari","Intended Audience :: Developers","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.9","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Topic :: Scientific/Engineering :: Image Processing"],"requires_dist":["napari","qtpy","vispy","imageio[ffmpeg]","pillow","numpy","napari[all]; extra == \"all\""],"requires_python":">=3.9","requires_external":null,"project_url":["Bug Tracker, https://github.com/Macl-I/napari-volume-spin/issues","Documentation, https://github.com/Macl-I/napari-volume-spin#README.md","Source Code, https://github.com/Macl-I/napari-volume-spin","User Support, https://github.com/Macl-I/napari-volume-spin/issues"],"provides_extra":["all"],"provides_dist":null,"obsoletes_dist":null},"npe1_shim":false}