arrayview 0.21.0__tar.gz → 0.22.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/project-state.md +5 -1
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T18-46-49-737Z.yml +30 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T18-48-21-979Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T18-51-35-665Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-07-01-393Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-14-37-969Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-21-30-940Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-23-08-126Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-29-33-155Z.yml +41 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-31-25-336Z.yml +41 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-31-53-789Z.yml +30 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-39-12-257Z.yml +31 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T19-39-16-449Z.yml +31 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T20-15-25-513Z.yml +31 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T20-25-13-179Z.yml +41 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T20-39-01-435Z.yml +41 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-01-27-659Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-01-41-283Z.yml +40 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-03-00-625Z.yml +40 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-04-12-887Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-33-39-044Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-38-01-530Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-45-20-383Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-55-11-545Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-56-03-307Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-56-35-733Z.yml +40 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-57-12-181Z.yml +40 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-57-37-748Z.yml +40 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T21-58-13-679Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-06T22-37-23-895Z.yml +39 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T00-39-18-637Z.yml +32 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T01-41-46-243Z.yml +32 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T04-31-48-472Z.yml +30 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-14-15-632Z.yml +29 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-14-47-582Z.yml +109 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-16-23-471Z.yml +29 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-17-10-247Z.yml +109 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-18-24-707Z.yml +43 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-20-06-164Z.yml +109 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-20-28-342Z.yml +29 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-21-54-962Z.yml +29 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-22-34-666Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-23-11-336Z.yml +109 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-23-36-260Z.yml +29 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-24-09-267Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-24-35-434Z.yml +109 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-25-57-010Z.yml +29 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-34-48-823Z.yml +36 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-46-46-468Z.yml +41 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-48-17-930Z.yml +41 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-49-26-400Z.yml +33 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-50-31-563Z.yml +33 -0
- arrayview-0.22.0/.playwright-cli/page-2026-05-07T12-56-45-568Z.yml +41 -0
- arrayview-0.22.0/.playwright-cli/theme-dark.yml +30 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/AGENTS.md +14 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/PKG-INFO +1 -1
- arrayview-0.22.0/plans/2026-05-07-unified-colormap-picker.md +48 -0
- arrayview-0.22.0/plans/arrayview_tool_menu_fix_prompt.md +361 -0
- arrayview-0.22.0/plans/arrayview_tool_menu_implementation_plan.md +548 -0
- arrayview-0.22.0/plans/egg-placement-mockup.html +680 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/pyproject.toml +2 -1
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_analysis.py +29 -4
- arrayview-0.22.0/src/arrayview/_codex_open.py +122 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_io.py +28 -85
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_launcher.py +15 -4
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_analysis.py +8 -2
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_loading.py +46 -3
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_rendering.py +146 -51
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_websocket.py +117 -35
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_stdio_server.py +112 -23
- arrayview-0.22.0/src/arrayview/_synthetic_mri.py +190 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_viewer.html +1922 -906
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_api.py +87 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_browser.py +175 -14
- arrayview-0.22.0/tests/test_colorbar_hover_highlight.py +125 -0
- arrayview-0.22.0/tests/test_stdio_server.py +13 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_view_component_integration.py +29 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/ui_audit.py +2 -2
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/visual_smoke.py +12 -1
- {arrayview-0.21.0 → arrayview-0.22.0}/uv.lock +1 -1
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/frontend-designer/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/invocation-consistency/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/modes-consistency/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/element-attributes.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/playwright-tests.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/request-mocking.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/running-code.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/session-management.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/storage-state.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/test-generation.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/tracing.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/playwright-cli/references/video-recording.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/todo-workflow/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/ui-consistency-audit/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/viewer-ui-checklist/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.agents/skills/visual-bug-fixing/SKILL.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.github/copilot-instructions.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.github/workflows/docs.yml +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.github/workflows/python-publish.yml +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.gitignore +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.ignore +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/AGENTS.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/ROUTER.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/SETUP.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/SYNC.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/architecture.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/conventions.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/decisions.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/frontend.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/render-pipeline.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/setup.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/context/stack.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/INDEX.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/README.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/add-file-format.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/add-server-endpoint.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/animation-verify.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/debug-render.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/debug-vscode-extension-python.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/extract-server-route-module.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/patterns/frontend-change.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/setup.sh +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.mex/sync.sh +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.opencode/opencode.json +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.python-version +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/.vscode/settings.json +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/CONTRIBUTING.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/DESIGN.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/LICENSE +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/README.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/comparing.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/configuration.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/display.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/index.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/loading.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/logo.png +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/measurement.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/remote.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/stylesheets/extra.css +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/docs/viewing.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/matlab/arrayview.m +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/mkdocs.yml +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/plans/2026-04-14-immersive-animation.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/plans/refactoring_plan.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/plans/webview/LOG.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/scripts/demo.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/scripts/release.sh +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/ARCHITECTURE.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/__init__.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/__main__.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_app.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_config.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_diff.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_icon.png +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_imaging.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_overlays.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_platform.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_render.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_export.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_persistence.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_preload.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_query.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_segmentation.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_state.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_routes_vectorfield.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_segmentation.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_server.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_session.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_shell.html +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_torch.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_vectorfield.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_vscode.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_vscode_browser.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_vscode_extension.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_vscode_shm.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/_vscode_signal.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/arrayview-opener.vsix +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/src/arrayview/gsap.min.js +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/capture_v_animation.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/conftest.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/make_vectorfield_test_arrays.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_backend_shared.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_cli.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_command_reachability.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_config.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_cross_mode_parametrized.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_interactions.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_large_arrays.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_loading_server.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_mode_consistency.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_mode_entry_batching.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_mode_matrix.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_mode_roundtrip.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_nifti_meta.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_rgb_pixel_art.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_torch.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/test_view_component_unit.py +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/tests/v_anim_frames/.gitkeep +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/vscode-extension/AGENTS.md +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/vscode-extension/LICENSE +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/vscode-extension/extension.js +0 -0
- {arrayview-0.21.0 → arrayview-0.22.0}/vscode-extension/package.json +0 -0
|
@@ -7,7 +7,7 @@ triggers:
|
|
|
7
7
|
- "recent work"
|
|
8
8
|
- "active feature"
|
|
9
9
|
- "shipped recently"
|
|
10
|
-
last_updated: 2026-05-
|
|
10
|
+
last_updated: 2026-05-11
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Project State
|
|
@@ -39,6 +39,10 @@ last_updated: 2026-05-05
|
|
|
39
39
|
|
|
40
40
|
## Recently Completed
|
|
41
41
|
|
|
42
|
+
- V-mode ortho layout cycling is now a two-state toggle: `g` only switches between `horizontal` and `big-left`. The old `vertical` and `big-top` multiview presets have been removed from the shared ortho preset table, the hold-`g` picker/help text, and the remaining big-pane promotion branches, and the shared multiview colorbar width now stays fixed when `g` toggles between the two surviving layouts.
|
|
43
|
+
- The old snapshot gallery sidecar has been removed from the viewer. Saving a screenshot still downloads the PNG, but `Shift+G` no longer toggles any screenshot/gallery UI outside compare mode; `G` is now compare-layout cycling only.
|
|
44
|
+
- Loupe activation no longer arms on a plain left-button hold. Normal view and multiview panes now use `Ctrl` hover with no mouse button, so plain drag stays available for pane navigation and other mode-specific gestures. While `Ctrl` is held, wheel input keeps its normal slice-scroll behavior instead of being swallowed or repurposed for zoom, and the loupe now redraws when those wheel-driven slice changes land. Focused browser coverage now checks both the normal-view and multiview `Ctrl` hover paths plus `Ctrl`-wheel scrolling and loupe-refresh behavior. qMRI loupe wiring was updated to match, but direct qMRI browser validation is currently blocked by an existing `q`-mode entry failure in `tests/test_browser.py::TestKeyboard::test_reusable_url_restores_qmri_mode`.
|
|
45
|
+
- Jupyter inline notebooks now default to `height=600`, start in normal mode instead of auto-immersive, and top-align the viewer cluster instead of vertically centering it inside the output cell. This removes the wasted band above the dimbar / below the colorbar while preserving manual `Shift+F` immersive entry. Browser coverage now checks the non-immersive inline start state and low wrapper top padding.
|
|
42
46
|
- Architecture followthrough: `_server.py` route extraction is complete. Feature domains now live in `_routes_analysis.py`, `_routes_loading.py`, `_routes_persistence.py`, `_routes_segmentation.py`, `_routes_state.py`, `_routes_query.py`, `_routes_export.py`, `_routes_preload.py`, `_routes_vectorfield.py`, `_routes_rendering.py`, and `_routes_websocket.py`. `_server.py` is now the intended assembly surface: FastAPI app setup, shared dependency injection, HTML/template helpers, and the small infrastructure routes for health/UI/assets/colormap metadata.
|
|
43
47
|
- Focused API coverage now directly guards segmentation activate/scribble/click-accept/export paths, export/preload/vectorfield routes, slice/projection/diff/grid/gif rendering, large-array grid/gif guardrails, and websocket metadata plus shell-close cleanup.
|
|
44
48
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic:
|
|
4
|
+
- img
|
|
5
|
+
- generic [ref=e3]: Connecting...
|
|
6
|
+
- generic:
|
|
7
|
+
- generic:
|
|
8
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
9
|
+
- generic:
|
|
10
|
+
- generic: IN SCOPE
|
|
11
|
+
- generic:
|
|
12
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
13
|
+
- generic:
|
|
14
|
+
- generic: RECOMPUTE
|
|
15
|
+
- generic:
|
|
16
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
17
|
+
- generic:
|
|
18
|
+
- generic: FROZEN
|
|
19
|
+
- generic:
|
|
20
|
+
- strong: Current position only. Limits stay fixed.
|
|
21
|
+
- generic:
|
|
22
|
+
- img
|
|
23
|
+
- textbox [active] [ref=e4]
|
|
24
|
+
- generic [ref=e5] [cursor=pointer]: "?"
|
|
25
|
+
- generic "Open tools (/)" [ref=e6] [cursor=pointer]: /
|
|
26
|
+
- generic [ref=e8]:
|
|
27
|
+
- generic [ref=e9]: Snapshots
|
|
28
|
+
- generic [ref=e10]: "0"
|
|
29
|
+
- button "⤓" [ref=e11] [cursor=pointer]
|
|
30
|
+
- button "×" [ref=e12] [cursor=pointer]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/224
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/240
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 103/204
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e7] [cursor=pointer]: 1/6
|
|
11
|
+
- generic:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic:
|
|
27
|
+
- img
|
|
28
|
+
- generic: parameter_maps.nii
|
|
29
|
+
- textbox [active] [ref=e14]
|
|
30
|
+
- generic [ref=e15] [cursor=pointer]: "?"
|
|
31
|
+
- generic "Open tools (/)" [ref=e16] [cursor=pointer]: /
|
|
32
|
+
- generic [ref=e18]:
|
|
33
|
+
- generic [ref=e19]: Snapshots
|
|
34
|
+
- generic [ref=e20]: "0"
|
|
35
|
+
- button "⤓" [ref=e21] [cursor=pointer]
|
|
36
|
+
- button "×" [ref=e22] [cursor=pointer]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/224
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/240
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 103/204
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e7] [cursor=pointer]: 1/6
|
|
11
|
+
- generic:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic:
|
|
27
|
+
- img
|
|
28
|
+
- generic: parameter_maps.nii
|
|
29
|
+
- textbox [active] [ref=e14]
|
|
30
|
+
- generic [ref=e15] [cursor=pointer]: "?"
|
|
31
|
+
- generic "Open tools (/)" [ref=e16] [cursor=pointer]: /
|
|
32
|
+
- generic [ref=e18]:
|
|
33
|
+
- generic [ref=e19]: Snapshots
|
|
34
|
+
- generic [ref=e20]: "0"
|
|
35
|
+
- button "⤓" [ref=e21] [cursor=pointer]
|
|
36
|
+
- button "×" [ref=e22] [cursor=pointer]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/224
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/240
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 103/204
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e7] [cursor=pointer]: 1/6
|
|
11
|
+
- generic:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic:
|
|
27
|
+
- img
|
|
28
|
+
- generic: parameter_maps.nii
|
|
29
|
+
- textbox [active] [ref=e14]
|
|
30
|
+
- generic [ref=e15] [cursor=pointer]: "?"
|
|
31
|
+
- generic "Open tools (/)" [ref=e16] [cursor=pointer]: /
|
|
32
|
+
- generic [ref=e18]:
|
|
33
|
+
- generic [ref=e19]: Snapshots
|
|
34
|
+
- generic [ref=e20]: "0"
|
|
35
|
+
- button "⤓" [ref=e21] [cursor=pointer]
|
|
36
|
+
- button "×" [ref=e22] [cursor=pointer]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/224
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/240
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 103/204
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e7] [cursor=pointer]: 1/6
|
|
11
|
+
- generic:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic:
|
|
27
|
+
- img
|
|
28
|
+
- generic: parameter_maps.nii
|
|
29
|
+
- textbox [active] [ref=e14]
|
|
30
|
+
- generic [ref=e15] [cursor=pointer]: "?"
|
|
31
|
+
- generic "Open tools (/)" [ref=e16] [cursor=pointer]: /
|
|
32
|
+
- generic [ref=e18]:
|
|
33
|
+
- generic [ref=e19]: Snapshots
|
|
34
|
+
- generic [ref=e20]: "0"
|
|
35
|
+
- button "⤓" [ref=e21] [cursor=pointer]
|
|
36
|
+
- button "×" [ref=e22] [cursor=pointer]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/224
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/240
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 103/204
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e7] [cursor=pointer]: 1/6
|
|
11
|
+
- generic:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic:
|
|
27
|
+
- img
|
|
28
|
+
- generic: parameter_maps.nii
|
|
29
|
+
- textbox [active] [ref=e14]
|
|
30
|
+
- generic [ref=e15] [cursor=pointer]: "?"
|
|
31
|
+
- generic "Open tools (/)" [ref=e16] [cursor=pointer]: /
|
|
32
|
+
- generic [ref=e18]:
|
|
33
|
+
- generic [ref=e19]: Snapshots
|
|
34
|
+
- generic [ref=e20]: "0"
|
|
35
|
+
- button "⤓" [ref=e21] [cursor=pointer]
|
|
36
|
+
- button "×" [ref=e22] [cursor=pointer]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/224
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/240
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 103/204
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e7] [cursor=pointer]: 1/6
|
|
11
|
+
- generic:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic:
|
|
27
|
+
- img
|
|
28
|
+
- generic: parameter_maps.nii
|
|
29
|
+
- textbox [active] [ref=e14]
|
|
30
|
+
- generic [ref=e15] [cursor=pointer]: "?"
|
|
31
|
+
- generic "Open tools (/)" [ref=e16] [cursor=pointer]: /
|
|
32
|
+
- generic [ref=e18]:
|
|
33
|
+
- generic [ref=e19]: Snapshots
|
|
34
|
+
- generic [ref=e20]: "0"
|
|
35
|
+
- button "⤓" [ref=e21] [cursor=pointer]
|
|
36
|
+
- button "×" [ref=e22] [cursor=pointer]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/64
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/64
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 1/8
|
|
9
|
+
- generic [ref=e7]:
|
|
10
|
+
- generic:
|
|
11
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: IN SCOPE
|
|
14
|
+
- generic:
|
|
15
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
16
|
+
- generic:
|
|
17
|
+
- generic: RECOMPUTE
|
|
18
|
+
- generic:
|
|
19
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
20
|
+
- generic:
|
|
21
|
+
- generic: FROZEN
|
|
22
|
+
- generic:
|
|
23
|
+
- strong: Current position only. Limits stay fixed.
|
|
24
|
+
- generic [ref=e9]:
|
|
25
|
+
- img:
|
|
26
|
+
- generic: x
|
|
27
|
+
- generic: "y"
|
|
28
|
+
- generic [ref=e14]:
|
|
29
|
+
- generic [ref=e15]: "328"
|
|
30
|
+
- generic [ref=e18]: "3.2e4"
|
|
31
|
+
- generic:
|
|
32
|
+
- img
|
|
33
|
+
- generic: arrayview_theme_check.npy
|
|
34
|
+
- textbox [active] [ref=e20]
|
|
35
|
+
- generic [ref=e21] [cursor=pointer]: "?"
|
|
36
|
+
- generic "Open tools (/)" [ref=e22] [cursor=pointer]: /
|
|
37
|
+
- generic [ref=e24]:
|
|
38
|
+
- generic [ref=e25]: Snapshots
|
|
39
|
+
- generic [ref=e26]: "0"
|
|
40
|
+
- button "⤓" [ref=e27] [cursor=pointer]
|
|
41
|
+
- button "×" [ref=e28] [cursor=pointer]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/64
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/64
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 1/8
|
|
9
|
+
- generic [ref=e7]:
|
|
10
|
+
- generic:
|
|
11
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: IN SCOPE
|
|
14
|
+
- generic:
|
|
15
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
16
|
+
- generic:
|
|
17
|
+
- generic: RECOMPUTE
|
|
18
|
+
- generic:
|
|
19
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
20
|
+
- generic:
|
|
21
|
+
- generic: FROZEN
|
|
22
|
+
- generic:
|
|
23
|
+
- strong: Current position only. Limits stay fixed.
|
|
24
|
+
- generic [ref=e9]:
|
|
25
|
+
- img:
|
|
26
|
+
- generic: x
|
|
27
|
+
- generic: "y"
|
|
28
|
+
- generic [ref=e14]:
|
|
29
|
+
- generic [ref=e15]: "328"
|
|
30
|
+
- generic [ref=e18]: "3.2e4"
|
|
31
|
+
- generic:
|
|
32
|
+
- img
|
|
33
|
+
- generic: arrayview_theme_check.npy
|
|
34
|
+
- textbox [active] [ref=e20]
|
|
35
|
+
- generic [ref=e21] [cursor=pointer]: "?"
|
|
36
|
+
- generic "Open tools (/)" [ref=e22] [cursor=pointer]: /
|
|
37
|
+
- generic [ref=e24]:
|
|
38
|
+
- generic [ref=e25]: Snapshots
|
|
39
|
+
- generic [ref=e26]: "0"
|
|
40
|
+
- button "⤓" [ref=e27] [cursor=pointer]
|
|
41
|
+
- button "×" [ref=e28] [cursor=pointer]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic:
|
|
4
|
+
- img
|
|
5
|
+
- generic [ref=e3]: Connecting...
|
|
6
|
+
- generic:
|
|
7
|
+
- generic:
|
|
8
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
9
|
+
- generic:
|
|
10
|
+
- generic: IN SCOPE
|
|
11
|
+
- generic:
|
|
12
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
13
|
+
- generic:
|
|
14
|
+
- generic: RECOMPUTE
|
|
15
|
+
- generic:
|
|
16
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
17
|
+
- generic:
|
|
18
|
+
- generic: FROZEN
|
|
19
|
+
- generic:
|
|
20
|
+
- strong: Current position only. Limits stay fixed.
|
|
21
|
+
- generic:
|
|
22
|
+
- img
|
|
23
|
+
- textbox [active] [ref=e4]
|
|
24
|
+
- generic [ref=e5] [cursor=pointer]: "?"
|
|
25
|
+
- generic "Open tools (/)" [ref=e6] [cursor=pointer]: /
|
|
26
|
+
- generic [ref=e8]:
|
|
27
|
+
- generic [ref=e9]: Snapshots
|
|
28
|
+
- generic [ref=e10]: "0"
|
|
29
|
+
- button "⤓" [ref=e11] [cursor=pointer]
|
|
30
|
+
- button "×" [ref=e12] [cursor=pointer]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic:
|
|
5
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
6
|
+
- generic:
|
|
7
|
+
- generic: IN SCOPE
|
|
8
|
+
- generic:
|
|
9
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
10
|
+
- generic:
|
|
11
|
+
- generic: RECOMPUTE
|
|
12
|
+
- generic:
|
|
13
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: FROZEN
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Current position only. Limits stay fixed.
|
|
18
|
+
- generic [ref=e4]:
|
|
19
|
+
- generic [ref=e5]:
|
|
20
|
+
- img:
|
|
21
|
+
- generic: x
|
|
22
|
+
- generic: "y"
|
|
23
|
+
- generic: "{cmd,ctrl,shift}+o · drop to open array"
|
|
24
|
+
- textbox [active] [ref=e8]
|
|
25
|
+
- generic [ref=e9] [cursor=pointer]: "?"
|
|
26
|
+
- generic "Open tools (/)" [ref=e10] [cursor=pointer]: /
|
|
27
|
+
- generic [ref=e12]:
|
|
28
|
+
- generic [ref=e13]: Snapshots
|
|
29
|
+
- generic [ref=e14]: "0"
|
|
30
|
+
- button "⤓" [ref=e15] [cursor=pointer]
|
|
31
|
+
- button "×" [ref=e16] [cursor=pointer]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic:
|
|
5
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
6
|
+
- generic:
|
|
7
|
+
- generic: IN SCOPE
|
|
8
|
+
- generic:
|
|
9
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
10
|
+
- generic:
|
|
11
|
+
- generic: RECOMPUTE
|
|
12
|
+
- generic:
|
|
13
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: FROZEN
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Current position only. Limits stay fixed.
|
|
18
|
+
- generic [ref=e4]:
|
|
19
|
+
- generic [ref=e5]:
|
|
20
|
+
- img:
|
|
21
|
+
- generic: x
|
|
22
|
+
- generic: "y"
|
|
23
|
+
- generic: "{cmd,ctrl,shift}+o · drop to open array"
|
|
24
|
+
- textbox [active] [ref=e8]
|
|
25
|
+
- generic [ref=e9] [cursor=pointer]: "?"
|
|
26
|
+
- generic "Open tools (/)" [ref=e10] [cursor=pointer]: /
|
|
27
|
+
- generic [ref=e12]:
|
|
28
|
+
- generic [ref=e13]: Snapshots
|
|
29
|
+
- generic [ref=e14]: "0"
|
|
30
|
+
- button "⤓" [ref=e15] [cursor=pointer]
|
|
31
|
+
- button "×" [ref=e16] [cursor=pointer]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic:
|
|
5
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
6
|
+
- generic:
|
|
7
|
+
- generic: IN SCOPE
|
|
8
|
+
- generic:
|
|
9
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
10
|
+
- generic:
|
|
11
|
+
- generic: RECOMPUTE
|
|
12
|
+
- generic:
|
|
13
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: FROZEN
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Current position only. Limits stay fixed.
|
|
18
|
+
- generic [ref=e4]:
|
|
19
|
+
- generic [ref=e5]:
|
|
20
|
+
- img:
|
|
21
|
+
- generic: x
|
|
22
|
+
- generic: "y"
|
|
23
|
+
- generic: "{cmd,ctrl,shift}+o · drop to open array"
|
|
24
|
+
- textbox [active] [ref=e8]
|
|
25
|
+
- generic [ref=e9] [cursor=pointer]: "?"
|
|
26
|
+
- generic "Open tools (/)" [ref=e10] [cursor=pointer]: /
|
|
27
|
+
- generic [ref=e12]:
|
|
28
|
+
- generic [ref=e13]: Snapshots
|
|
29
|
+
- generic [ref=e14]: "0"
|
|
30
|
+
- button "⤓" [ref=e15] [cursor=pointer]
|
|
31
|
+
- button "×" [ref=e16] [cursor=pointer]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/64
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/64
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 1/8
|
|
9
|
+
- generic [ref=e7]:
|
|
10
|
+
- generic:
|
|
11
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: IN SCOPE
|
|
14
|
+
- generic:
|
|
15
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
16
|
+
- generic:
|
|
17
|
+
- generic: RECOMPUTE
|
|
18
|
+
- generic:
|
|
19
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
20
|
+
- generic:
|
|
21
|
+
- generic: FROZEN
|
|
22
|
+
- generic:
|
|
23
|
+
- strong: Current position only. Limits stay fixed.
|
|
24
|
+
- generic [ref=e9]:
|
|
25
|
+
- img:
|
|
26
|
+
- generic: x
|
|
27
|
+
- generic: "y"
|
|
28
|
+
- generic [ref=e14]:
|
|
29
|
+
- generic [ref=e15]: "328"
|
|
30
|
+
- generic [ref=e18]: "3.2e4"
|
|
31
|
+
- generic:
|
|
32
|
+
- img
|
|
33
|
+
- generic: arrayview_theme_check.npy
|
|
34
|
+
- textbox [active] [ref=e20]
|
|
35
|
+
- generic [ref=e21] [cursor=pointer]: "?"
|
|
36
|
+
- generic "Open tools (/)" [ref=e22] [cursor=pointer]: /
|
|
37
|
+
- generic [ref=e24]:
|
|
38
|
+
- generic [ref=e25]: Snapshots
|
|
39
|
+
- generic [ref=e26]: "0"
|
|
40
|
+
- button "⤓" [ref=e27] [cursor=pointer]
|
|
41
|
+
- button "×" [ref=e28] [cursor=pointer]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/64
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/64
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 1/8
|
|
9
|
+
- generic [ref=e7]:
|
|
10
|
+
- generic:
|
|
11
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: IN SCOPE
|
|
14
|
+
- generic:
|
|
15
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
16
|
+
- generic:
|
|
17
|
+
- generic: RECOMPUTE
|
|
18
|
+
- generic:
|
|
19
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
20
|
+
- generic:
|
|
21
|
+
- generic: FROZEN
|
|
22
|
+
- generic:
|
|
23
|
+
- strong: Current position only. Limits stay fixed.
|
|
24
|
+
- generic [ref=e9]:
|
|
25
|
+
- img:
|
|
26
|
+
- generic: x
|
|
27
|
+
- generic: "y"
|
|
28
|
+
- generic [ref=e14]:
|
|
29
|
+
- generic [ref=e15]: "328"
|
|
30
|
+
- generic [ref=e18]: "3.2e4"
|
|
31
|
+
- generic:
|
|
32
|
+
- img
|
|
33
|
+
- generic: arrayview_theme_check.npy
|
|
34
|
+
- textbox [active] [ref=e20]
|
|
35
|
+
- generic [ref=e21] [cursor=pointer]: "?"
|
|
36
|
+
- generic "Open tools (/)" [ref=e22] [cursor=pointer]: /
|
|
37
|
+
- generic [ref=e24]:
|
|
38
|
+
- generic [ref=e25]: Snapshots
|
|
39
|
+
- generic [ref=e26]: "0"
|
|
40
|
+
- button "⤓" [ref=e27] [cursor=pointer]
|
|
41
|
+
- button "×" [ref=e28] [cursor=pointer]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e4] [cursor=pointer]: x/96
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e5] [cursor=pointer]: y/96
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e6] [cursor=pointer]: 1/1
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e7] [cursor=pointer]: 1/3
|
|
11
|
+
- generic [ref=e8]:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic [ref=e10]:
|
|
27
|
+
- img:
|
|
28
|
+
- generic: x
|
|
29
|
+
- generic: "y"
|
|
30
|
+
- generic [ref=e15]:
|
|
31
|
+
- generic [ref=e16]: "2.8e-2"
|
|
32
|
+
- generic [ref=e19]: "2.97"
|
|
33
|
+
- generic:
|
|
34
|
+
- img
|
|
35
|
+
- generic: arrayview_qmri_fix.npy
|
|
36
|
+
- textbox [active] [ref=e21]
|
|
37
|
+
- generic [ref=e22] [cursor=pointer]: "?"
|
|
38
|
+
- generic "Open tools (/)" [ref=e23] [cursor=pointer]: /
|
|
39
|
+
- generic [ref=e25]:
|
|
40
|
+
- generic [ref=e26]: Snapshots
|
|
41
|
+
- generic [ref=e27]: "0"
|
|
42
|
+
- button "⤓" [ref=e28] [cursor=pointer]
|
|
43
|
+
- button "×" [ref=e29] [cursor=pointer]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
- generic [ref=e1]:
|
|
2
|
+
- generic [ref=e2]:
|
|
3
|
+
- generic [ref=e3]:
|
|
4
|
+
- generic [ref=e30] [cursor=pointer]: x/96
|
|
5
|
+
- text: ·
|
|
6
|
+
- generic [ref=e31] [cursor=pointer]: y/96
|
|
7
|
+
- text: ·
|
|
8
|
+
- generic [ref=e32] [cursor=pointer]: 1/1
|
|
9
|
+
- text: ·
|
|
10
|
+
- generic [ref=e33] [cursor=pointer]: 1/3
|
|
11
|
+
- generic [ref=e8]:
|
|
12
|
+
- generic:
|
|
13
|
+
- generic: "The histogram and percentile limits are computed over a volume, not just the current 2D slice. A dim can be fully included in that volume (scoped), or only its current position counts. Dims that aren't fully included can either recompute limits when scrolled, or stay frozen. Click a dim to cycle: scoped → recompute → frozen."
|
|
14
|
+
- generic:
|
|
15
|
+
- generic: IN SCOPE
|
|
16
|
+
- generic:
|
|
17
|
+
- strong: Full range in volume. Scrolling doesn't change limits.
|
|
18
|
+
- generic:
|
|
19
|
+
- generic: RECOMPUTE
|
|
20
|
+
- generic:
|
|
21
|
+
- strong: Current position only. Scrolling recalculates limits.
|
|
22
|
+
- generic:
|
|
23
|
+
- generic: FROZEN
|
|
24
|
+
- generic:
|
|
25
|
+
- strong: Current position only. Limits stay fixed.
|
|
26
|
+
- generic [ref=e10]:
|
|
27
|
+
- img:
|
|
28
|
+
- generic: x
|
|
29
|
+
- generic: "y"
|
|
30
|
+
- generic [ref=e15]:
|
|
31
|
+
- generic [ref=e16]: "2.8e-2"
|
|
32
|
+
- generic [ref=e19]: "2.97"
|
|
33
|
+
- textbox [active] [ref=e21]
|
|
34
|
+
- generic [ref=e22] [cursor=pointer]: "?"
|
|
35
|
+
- generic "Open tools (/)" [ref=e23] [cursor=pointer]: /
|
|
36
|
+
- generic [ref=e25]:
|
|
37
|
+
- generic [ref=e26]: Snapshots
|
|
38
|
+
- generic [ref=e27]: "0"
|
|
39
|
+
- button "⤓" [ref=e28] [cursor=pointer]
|
|
40
|
+
- button "×" [ref=e29] [cursor=pointer]
|