Add ndi.lightsheet: napariViewLightsheet console script + PyramidReader (scaffold) - #13
Closed
stevevanhooser wants to merge 1 commit into
Closed
stevevanhooser wants to merge 1 commit into
stevevanhooser wants to merge 1 commit into
Conversation
…er (scaffold) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N67xH9BejMzZp4GNAq8m7w
Contributor
Author
|
Closing — wrong repo. The active NDI-python is Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Python-side companion to the lightsheet OME-Zarr ingest landing on
VH-Lab/NDI-matlab#<link>on the same branch name.Adds:
src/ndi/lightsheet/napari_view.py— the console script the MATLABLightsheetZarrManagershells out to (via/usr/local/bin/napariViewLightsheet). Argument set matchesndi.fun.doc.lightsheet.viewCommandin NDI-matlab exactly.src/ndi/lightsheet/pyramid_reader.py— the reader that will open the NDI session, resolve the parentlightsheetZarrPyramiddocument, walk itslightsheetZarrLevelchildren viadepends_on, and hand napari a list of lazy dask multiscale arrays that fetchchunk.bin_#files through the NDI cloud API. Every hook is present; each next-step body raisesNotImplementedErrorwith a pointer at the design README.scripts/napariViewLightsheet— bash wrapper that scrubsLD_LIBRARY_PATH/DYLD_*/DYLD_FALLBACK_LIBRARY_PATH(MATLAB pollutes them) before exec'ing the console script. Same pattern the GEF viewer expects.Scope note
Scaffold — every user-facing piece is wired but the chunk fetcher, session-open,
depends_onquery, and magicgui controls areNotImplementedErrors with pointers at the package README's "what still needs building" section. The console script parses the full argument set and reports the missing piece cleanly to stderr today, so the MATLAB GUI's View button already produces a legible error rather than hanging.Also NOT yet edited:
pyproject.toml. The README lists the additions to make ([project.optional-dependencies].viewerwith napari/magicgui/qtpy/dask/zarr/numcodecs and[project.scripts] napariViewLightsheet = "ndi.lightsheet.napari_view:main"). Held out of this PR so the base install stays lean until napari is actually needed.Test plan
python -m ndi.lightsheet.napari_view --helpprints the argument set matching the MATLABviewCommandflags.napariViewLightsheet foo --pyramid abc(without the pyproject edit) prints a clean stderr and exits non-zero.napariViewLightsheetis onPATHafterpip install -e .[viewer].PyramidReader.openis implemented, end-to-endnapariViewLightsheet <session> --pyramid <id>opens napari with a multiscale layer.Follow-ups
PyramidReader.open/list_levels/multiscale/sibling/attach_controls— seesrc/ndi/lightsheet/README-lightsheet-zarr.md.pyproject.toml[project.optional-dependencies].viewerand[project.scripts]entry.scripts/napariViewLightsheetat/usr/local/bin/napariViewLightsheetin the environment setup docs (mirrors what GEF'snapariViewGEFwill need).🤖 Generated with Claude Code
https://claude.ai/code/session_01N67xH9BejMzZp4GNAq8m7w
Generated by Claude Code