{"name":"napari-timestamper","display_name":"Timestamper","visibility":"public","icon":null,"categories":[],"schema_version":"0.3.0","on_activate":null,"on_deactivate":null,"contributions":{"commands":[{"id":"napari-timestamper.timestamper","title":"Open timestamp widget","python_name":"napari_timestamper._widget:TimestampWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-timestamper.layer_annotations","title":"Open layer names widget","python_name":"napari_timestamper._widget:LayerAnnotationsWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-timestamper.renderer","title":"Open export widget","python_name":"napari_timestamper._widget:RenderRGBWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-timestamper.render_to_layer","title":"Open convert to RGB layer widget","python_name":"napari_timestamper._widget:LayertoRGBWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-timestamper.split_stack","title":"Open split stack widget","python_name":"napari_timestamper._widget:SplitStackWidget","short_title":null,"category":null,"icon":null,"enablement":null}],"readers":null,"writers":null,"widgets":[{"command":"napari-timestamper.timestamper","display_name":"Timestamp","autogenerate":false,"default_dock_area":"right","tabify":false},{"command":"napari-timestamper.layer_annotations","display_name":"Layer names","autogenerate":false,"default_dock_area":"right","tabify":false},{"command":"napari-timestamper.renderer","display_name":"Export (image / movie)","autogenerate":false,"default_dock_area":"right","tabify":false},{"command":"napari-timestamper.render_to_layer","display_name":"Convert to RGB layer","autogenerate":false,"default_dock_area":"right","tabify":false},{"command":"napari-timestamper.split_stack","display_name":"Split stack","autogenerate":false,"default_dock_area":"right","tabify":false}],"sample_data":null,"themes":null,"menus":{},"submenus":null,"keybindings":null,"configurations":{}},"package_metadata":{"metadata_version":"2.4","name":"napari-timestamper","version":"0.7.0","dynamic":["license-file"],"platform":null,"supported_platform":null,"summary":"Timestamps, Fiji-style time bars and layer-name labels for napari, with image and movie export","description":"# napari-timestamper\n\n[![License BSD-3](https://img.shields.io/pypi/l/napari-timestamper.svg?color=green)](https://github.com/bgraedel/napari-timestamper/raw/main/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/napari-timestamper.svg?color=green)](https://pypi.org/project/napari-timestamper)\n[![Python Version](https://img.shields.io/pypi/pyversions/napari-timestamper.svg?color=green)](https://python.org)\n[![tests](https://github.com/bgraedel/napari-timestamper/workflows/tests/badge.svg)](https://github.com/bgraedel/napari-timestamper/actions)\n[![codecov](https://codecov.io/gh/bgraedel/napari-timestamper/branch/main/graph/badge.svg)](https://codecov.io/gh/bgraedel/napari-timestamper)\n<!-- [![napari hub](https://img.shields.io/endpoint?url=https://api.napari-hub.org/shields/napari-timestamper)](https://napari-hub.org/plugins/napari-timestamper) -->\n\nLabel [napari] views with timestamps and layer names, and export them as\nimages or movies.\n\n![Timelapse exported with napari-timestamper: layer names, timestamp and time bar](https://raw.githubusercontent.com/bgraedel/napari-timestamper/main/docs/images/timestamp_layer_names.gif)\n\n## Features\n\nAll widgets are under **Plugins › Timestamper**.\n\n| Widget | What it does |\n|---|---|\n| **Timestamp** | Time label in formats such as `HH:MM:SS` or `MM:SS.ss`, with a start offset (negative times allowed), prefix/suffix and live preview. **From data** reads the frame interval from the layers' time scale and units, e.g. `scale=(0.5, 1, 1), units=(\"min\", \"um\", \"um\")` gives 30 s. **Show on** picks the layers it is drawn on. Optional **time bar**, like Fiji's *Time Bar*: a progress bar as wide as the time, directly under it. |\n| **Layer names** | Labels each layer with its name, in the layer's colormap color (the same rule napari uses) or a fixed color. Choose which layers get a label. |\n| **Export (image / movie)** | Renders the view, including all labels, along a slider axis to mp4 (H.264), gif, tif or a png/jpeg series. Frame range, frame rate, upscaling and a cancellable progress dialog. |\n| **Convert to RGB layer** | Renders selected layers into a new RGB layer. |\n| **Split stack** | Splits a layer along an axis into separate layers. |\n\n![napari with the Layer names widget](https://raw.githubusercontent.com/bgraedel/napari-timestamper/main/docs/images/window.png)\n\n### Display modes\n\nTimestamps and layer names have two modes:\n\n- **Attached to image (for export)**: drawn inside the layer and scaled with\n  it, so an export looks the same regardless of zoom, export size or screen.\n  Supports bold/italic, outlines and offsets.\n- **Fixed on screen**: napari's own text overlays, at a constant screen size\n  and tiled with the scale bar and other canvas overlays.\n\nBoth modes support backgrounds and the time bar.\n\n### Grid mode\n\nIn grid mode every layer gets its own label, and the timestamp is drawn on\nevery checked layer. Without grid mode it is drawn once, on the topmost\nchecked layer.\n\n![Grid mode: one label and timestamp per layer](https://raw.githubusercontent.com/bgraedel/napari-timestamper/main/docs/images/grid.png)\n\n### Scripting\n\n```python\nfrom napari_timestamper import TimestampManager, render_as_rgb, save_image_stack\n\nts = TimestampManager(viewer, step_size=30, time_format=\"MM:SS\", suffix=\"min\",\n                      show_bar=True)\nts.visible = True\nframes = render_as_rgb(viewer, axis=0)\nsave_image_stack(frames, \"exports\", \"movie\", \"mp4\", fps=10)\n```\n\n`LayerAnnotatorManager` works the same way for layer names.\n\n## Installation\n\nInstall from napari's plugin manager (**Plugins › Install/Uninstall Plugins**),\nor with [pip]:\n\n    pip install napari-timestamper\n\nLatest development version:\n\n    pip install git+https://github.com/bgraedel/napari-timestamper.git\n\nRequires napari ≥ 0.10 and Python ≥ 3.11. For older napari versions use\n`napari-timestamper<0.7`.\n\nThe labels build on napari's private vispy overlay API, so new napari\nreleases may need a plugin update.\n\n## What's new in 0.7\n\n- Support for napari 0.10 (the Timestamp widget broke with napari 0.9) and\n  Python 3.11-3.14.\n- New **fixed on screen** mode using napari's native overlays.\n- Fiji-style time bar.\n- The timestamp can be placed on chosen layers.\n- **From data**: frame interval read from the layer scale and units.\n- Export with frame range, cancel button and mp4 out of the box.\n- Label sizes no longer depend on the screen's DPI.\n\n## Contributing\n\nContributions are very welcome. Tests can be run with [tox]; please make\nsure the 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, \"napari-timestamper\" is\nfree and open source software.\n\n## Issues\n\nIf you encounter any problems, please [file an issue] along with a detailed\ndescription.\n\n[napari]: https://github.com/napari/napari\n[BSD-3]: http://opensource.org/licenses/BSD-3-Clause\n[file an issue]: https://github.com/bgraedel/napari-timestamper/issues\n[tox]: https://tox.readthedocs.io/en/latest/\n[pip]: https://pypi.org/project/pip/\n","description_content_type":"text/markdown","keywords":"napari,timestamp,time bar,timelapse,annotation,movie export,overlay","home_page":"https://github.com/bgraedel/napari-timestamper","download_url":null,"author":"Benjamin Grädel","author_email":"benjamin.graedel@unibe.ch","maintainer":null,"maintainer_email":null,"license":"BSD-3-Clause","classifier":["Development Status :: 4 - Beta","Framework :: napari","Intended Audience :: Science/Research","License :: OSI Approved :: BSD License","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","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","Topic :: Scientific/Engineering :: Visualization"],"requires_dist":["av","imageio","numpy","pint","qtpy","superqt","vispy","napari[all]>=0.10; extra == \"all\"","tox; extra == \"testing\"","pytest; extra == \"testing\"","pytest-cov; extra == \"testing\"","pytest-qt; extra == \"testing\"","napari[pyqt6]>=0.10; extra == \"testing\""],"requires_python":">=3.11","requires_external":null,"project_url":["Bug Tracker, https://github.com/bgraedel/napari-timestamper/issues","Documentation, https://github.com/bgraedel/napari-timestamper#README.md","Source Code, https://github.com/bgraedel/napari-timestamper","User Support, https://github.com/bgraedel/napari-timestamper/issues"],"provides_extra":["all","testing"],"provides_dist":null,"obsoletes_dist":null},"npe1_shim":false}