-
Notifications
You must be signed in to change notification settings - Fork 378
Feature/voxel annotation #858
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
briossant
wants to merge
252
commits into
google:master
Choose a base branch
from
briossant:feature/voxel-annotation
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 209 commits
Commits
Show all changes
252 commits
Select commit
Hold shift + click to select a range
69b1e22
feat: retreive mouse position and current LOD scale
briossant 488c184
feat: add support for voxel annotation rendering and specification
briossant fa6ecd5
feat: introduce VoxDummyChunkSource for procedural voxel annotation demo
briossant a52bad1
feat: no errors but no checkboard tho
briossant dcf7e12
feat: finaly the checkboard is showing, but it is a bit bugged out, i…
briossant 935509b
doc: rework voxel annotation specs
briossant d0ce4ca
feat: working on the pixel tool, there are interaction but a bug seem…
briossant 767006c
feat: pixel tool is now working as intended
briossant d94ee5a
feat: fix pixel tool not working when the scale is not equal to the g…
briossant b81186c
refactor: rename DummyMultiscaleVolumeChunkSource to VoxMultiscaleVol…
briossant a121d4b
feat: brush size, eraser mode and little trivial optimization
briossant cbff7a4
feat: continuous drawing and shape selection for the brush
briossant bbe859f
doc: add TODO list
briossant 7eba8ec
feat: small improvement on the drawing render delay
briossant 119450f
feat: persist voxel edits to backend and improve drawing responsiveness
briossant 76975cf
feat: redesign toolbox with structured layout, tool selection, and ex…
briossant 514ecd8
feat: implement new local voxel storage with IndexedDB, map initializ…
briossant 85f6d69
doc: brainstorming LOD
briossant 451c69b
feat: support region-based voxel initialization with corners, update …
briossant a8f9454
feat: expand TODOs with plans for segmentation compression, multi-use…
briossant f6e3547
feat: implement voxel label creation, persistence via IndexedDB, and …
briossant 8ec4e90
feat: implement RPC-based voxel label persistence
briossant 732132e
refactor: ran 'npm run format:fix'
briossant 2c50dcb
feat: add support for remote voxel sources via HTTP(S) - (note: the l…
briossant 32d7b72
feat: replace `setLabelIds` with `addLabel` for label management
briossant 904591e
doc: add guidelines for junie and write project overview file
briossant eb4c0e3
feat: map creation and selection, the min scale is currently not save…
briossant 8cfd644
feat: cleanup map init/selection implementation, the remote still nee…
briossant 792c8fa
refactor: remove `VoxelPixelLegacyTool`, update references, and enabl…
briossant a718320
feat: add LOD locking for voxel rendering and extend brush size range
briossant 3bab282
feat: move local and remote VoxSource to separate files, updated the …
briossant 5e88dcf
feat: move local and remote VoxSource to separate files, updated the …
briossant 5796116
feat: introduce chunk reload and downsample propagation APIs
briossant 33d051a
feat: chunk reloading from the backend -> currently do not work due t…
briossant cad4a80
feat: add Zarr export functionality and dirty-tree upscaling (not wor…
briossant 8cc92dc
feat: dirty tree upscaling is kinda working, at least enough to concl…
briossant ba6ae20
feat: restrict brush size and disable dirty tree upscaling
briossant a01be95
feat: introduce VoxelEditController for centralized edit handling and…
briossant 944998a
refactor: improve chunk invalidation and reload workflows
briossant 769f6ca
feat: add flood fill tool and export UI improvements
briossant 1de7c59
feat: implement downscale job queue and improve chunk reload handling
briossant a030b50
feat: enhance flood fill stability and optimize Zarr export
briossant f47b41b
feat: rework map settings UI and add import/export improvements
briossant ea0832b
doc: update TODOs
briossant 6c8ac37
feat: add Zarr import support and integrate remote chunk fallback
briossant 9c2cfed
feat: add error handling for flood fill and display draw error messages
briossant f980626
Add `weekly-progress.md` to document the voxel annotation project's p…
briossant 3810f61
feat: introduce `LabelsManager` for label management and cleanup `Vox…
briossant d16fb23
refactor: remove `RemoteVoxSource` and refactor related components fo…
briossant 3dd2e99
feat: add Stateless S3 Authenticator (SSA) integration with KVStore
briossant 1838e52
feat: upgrade SSA flow to OIDC-based authentication with PKCE support
briossant 6890dbe
feat: enhance SSA KVStore integration and improve authentication logic
briossant e749b7a
feat: add backend integration for SSA KVStore
briossant f100dfa
refactor: consolidate SSA URL utilities and improve PKCE verifier gen…
briossant cbeb5ca
feat: add IndexedDB-backed KVStore implementation
briossant b51bf6b
feat: move the downscaling queue to the EditController backend and re…
briossant 5c66105
feat: replace IndexedDB implementation with OPFS-backed KVStore
briossant 5c35cdd
feat: add OPFS-backed KVStore module registration
briossant 78056f7
chore: remove unused voxel annotation modules and associated logic
briossant d838eec
feat: enhance VoxUserLayer with configurable multiscale source option…
briossant dc74576
fix: rework getVoxelPositionFromMouse to give the right coords
briossant ac03537
refactor: simplify getVoxelPositionFromMouse logic by removing redund…
briossant 73834c6
feat: optimize voxel drawing and transform caching
briossant 118711c
feat: modularize `VolumeChunk` and chunk format handling
briossant 402256c
feat: implement multiscale voxel editing and raw chunk encoding pipeline
briossant b24666e
feat: improve chunk handling and integrate SSA write/delete support (…
briossant 35c58a1
feat: enhance retry logic, s3 support, and voxel annotation
briossant 235af99
feat: add targeted chunk invalidation and improve voxel annotation pr…
briossant fd15293
feat: remove legacy local://voxel-annotations code and improve chunk …
briossant d59de80
feat: update voxel editing to support bigint values and improve label…
briossant 3ef5f98
feat: refactor voxel annotation handling to support bigint and improv…
briossant ff0c70b
feat: convert voxel values to BigInt for improved precision in annota…
briossant 9ceb2ad
feat: refactor voxel annotation to support multiscale resolutions and…
briossant c8b079b
feat: improve uncompressed chunk editing and fix TODOs
briossant 06abea9
feat: add undo/redo support for voxel editing and enhance change trac…
briossant c51788d
fix: add mask for label generation to ensure it respect the DataType
briossant 6c5cbf1
feat: enhance disk brush tool with arbitrary plane support
briossant 45fb2c9
fix: ensure voxel coordinates align between CPU and GPU
briossant bb4698a
fix: adjust default `voxFloodMaxVoxels` and refine flood fill plane l…
briossant d2afe3f
chore: cleanup dev files and format + lint code
briossant cba1c9f
fix: properly align flood fill seed
briossant 176f96a
refactor: start switching vox tools to the new tool system
briossant 8c7fadb
refactor: fully migrate voxel tools to new tool system
briossant a1d56f1
feat: add dynamic cursor support for brush and flood fill tools
briossant c845d0d
feat: improve voxel layer rendering and UI enhancements
briossant fdef2c0
refactor: Merging vox layer into seg and img layers
briossant b46224e
feat: took care of every remaining ts errors
briossant a8feb09
feat: add writable subsource support and enable voxel editing
briossant 595bba0
feat: add in-memory voxel editing capabilities
briossant ba01de6
feat: add support for compressed chunks in applyEdits() and zarr write()
briossant b2cc38d
feat: add dynamic cursor for voxel picker tool
briossant 1a20724
refactor: replace the SingleScaleVolumeChunkSource with a proper Mult…
briossant 557ce29
fix: finally found the bug of the drawing preview -> getChunk of InMe…
briossant c7edca0
refactor: rewrite the InMemoryVolumeChunkSource to no longer create a…
briossant 0f38e50
feat: add chunk invalidation for the preview sources
briossant d89174a
fix: undo stack was corrupted
briossant 85e7f2d
chore: lint + format
briossant 83316aa
feat: save writable state to json state
briossant b7dec47
refactor: replace label system with paint value mechanism and simplif…
briossant c1cbb8b
feat: add state serialization and restoration for voxel editing context
briossant 3acf73f
fix: planeNormal used to aligned floddfill and brush was wrong if the…
briossant 48761ed
refactor: format + lint + cleanup
briossant 8e11ffd
feat: ensure the draw tab is only visible if there is a writable source.
briossant e119731
fix: the brush cursor was disappearing because browsers have a limita…
briossant bef93e3
fix: ensure brush cursor is shown on tool activation
briossant b306e07
refactor(voxel-annotations): remove obsolete color controls and limit…
briossant 3b7650e
fix(voxel-annotations): do not display the brush cursor in the 3d view
briossant 3a7ebbc
refactor(voxel-annotations): rework chunk reloading pipeline -> wait …
briossant 8eca17e
refactor(voxel-annotations): previous commit introduced serious flick…
briossant 9c1cfd0
chore(voxel-annotations): Adjust flood fill to avoid small artifacts.
briossant 2513c55
feat(voxel-annotations): add support for the seg picker tool to cycle…
briossant fb029f6
feat(datasource): add POC for dataset creation feature : ui + main pi…
briossant c6592b0
fix(datasource): correct the dataset creation POC to actually produce…
briossant 0ab5bd5
feat(datasource): started generalizing dataset creation feature
briossant 77b1317
chore: run format
briossant f67b9b8
refactor(datasource): simplify dataset creation UI and remove unused …
briossant 898d8f5
fix(datasource): ensure datasource gets reloaded upon creation
briossant d4c171a
fix(voxel-annotation): support every data type (expect float32)
briossant cdd14be
feat(datasource): implement support for gzip and blosc codecs in enco…
briossant bc84ca0
chore: format code + update TODOs
briossant b5d90b8
refactor(datasource): following @chrisj comment: generalize KvStore i…
briossant 9078c41
feat(voxel-annotation): support elliptical brush outlines (cursor)
briossant c2f9016
chore(voxel-annotation): fix diagnosis of the preview color issue and…
briossant 1a4d3fd
fix(voxel-annotation): ensure paint value is clamped in the datatype…
briossant a32360c
fix(voxel-annotation): Correct buffer type for new compressed segment…
briossant 1ac34bd
fix(datasource): resolve incorrect blosc encoding
briossant d84f0b0
feat(dataset-creation): generalize to ranks and fix copying of units …
briossant 0e0a105
chore: format + update TODOs
briossant 22f083e
refactor(dataset-creation): enhance metadata copying
briossant d484dd2
test(sliceview/volume/backend.ts): add tests for applyEdits ; added d…
briossant 61483e9
test(voxel-annotation): add tests for `_calculateParentUpdate` ; add …
briossant 701b139
test(voxel-annotation): add tests for `_getParentChunkInfo`
briossant f5993ce
test(voxel-annotation): add integration tests for downsampling in `Vo…
briossant 7e8b6d4
test(voxel-annotation): add `flushPending` tests
briossant b537ed8
test(voxel-annotation): add undo/redo tests
briossant 844b1a1
feat(voxel-annotation): add constraint validation on voxel annotation…
briossant 16bb033
test(voxel-annotation): add unit tests for getVoxelPositionFromMouse,…
briossant 6ff5830
test(voxel-annotation): add unit tests for applyLocalEdits
briossant d68342a
test(voxel-annotation): add unit tests for floodFillPlane2D and paint…
briossant 1a58e55
feat(voxel-annotation): add user confirmation prompt for write action…
briossant 2452a4e
chore: dev utilities
briossant bdbc575
test(voxel-annotation): finally able to run browser_test and create o…
briossant f7510f4
test(voxel-annotation): expand browser tests with additional scenario…
briossant 40f588b
test(voxel-annotation): migrate unit tests to browser tests for layer…
briossant 76d55f2
cleanup: Remove OPFS and SSA-S3 KV store implementations and related …
briossant 9871115
refactor(voxel-annotation): use the already implemented multiscale lo…
briossant d3f77a2
cleanup: Remove dataset creation feature.
briossant 5624813
cleanup: remove dev files (docker for testsuite and dev scripts) and …
briossant 22394eb
chore: add missing license headers across multiple files in the codebase
briossant 91a71e4
refactor(voxel-annotation): remove unused styles, improve toolbox str…
briossant df9092a
refactor(voxel-annotation): replace `planeNormal` with `basis` in flo…
briossant b0d8421
cleanup(voxel-annotation): remove redundant or clarify comments
briossant 9612dda
chore: merge master
briossant 9f41d3b
refactor(voxel-annotation): rename `writable` to `writingEnabled` acr…
briossant 46fb66d
fix(voxel-annotation): rename writable to writingEnabled in getActive…
briossant b3256b6
fix(voxel-annotation): fix paintValue json serialization
briossant 1d6689b
feat(voxel-annotation): update TODOs with some found bugs and quality…
briossant b434958
fix(voxel-annotation): prevent redundant chunk reloads in downsamplin…
briossant b1bcaec
feat(voxel-annotation): render the brush cursor when changing the bru…
briossant d023f9f
refactor(voxel-annotation): fix missing keybind display for voxel ann…
briossant d1eb0d5
refactor(voxel-annotation): renamed edit_controller.ts and edit_backe…
briossant 4d8b3bd
feat(voxel-annotation): add selective erase mode and refactor edit me…
briossant 86a2009
fix(voxel-annotation): correctly retrieve value from voxEraseSelected…
briossant 00de4cf
feat(voxel-annotation): remove double-opacity artifact from the optim…
briossant 0bd9fd9
feat(voxel-annotation): added eraser preview with the help of a senti…
briossant ff5b752
feat(voxel-annotation): add a bottom bar when a voxel tool is active,…
briossant 52dd642
fix(voxel-annotation): ensure proper cleanup of optimistic render lay…
briossant 4acff9e
fix(voxel-annotation): enforce the activation of single writable sour…
briossant 17ea651
fix(voxel-annotation): ensure brush outline/cursor always aligns with…
briossant 243715d
refactor(voxel-annotation): extract `getBasisFromNormal`
briossant f33e54a
feat(voxel-annotation): implement a gap filling painting postprocessi…
briossant e920a98
fix(voxel-annotation): made the settings in the bottom bar of the pai…
briossant fa11f98
refactor(voxel-annotation): move erase mode to contole+shift+mousedow…
briossant 72b326c
refactor(voxel-annotation): refactor erase action binding to ensure i…
briossant 9bf17db
feat(voxel-annotation): made painting tool cursor show erase mode whe…
briossant b9df814
fix(voxel-annotation): prevent activation of voxel tools when no writ…
briossant 64a8323
refactor(kvstore): remove unused proxy write logic
briossant ac372bf
refactor(voxel-annotation):
briossant de7bb60
refactor(voxel-annotation): temporarily add different ways to render …
briossant efacdaa
feat(voxel-annotation): discard the drawing action done before user c…
briossant 9209334
test(voxel-annotation): remove obsolete frontend voxel annotation tes…
briossant b923709
chore(voxel-annotation): format
briossant 7c86fb0
fix(voxel-annotation): fix `TypeError: Cannot convert undefined to a …
briossant 9eb0278
feat(voxel-annotation): update tool cursors SVGs: added a crosshair a…
briossant 6b01299
feat(voxel-annotation): adjust cursors aesthetic
briossant ab17db4
feat(voxel-annotation): adjust the brush radius calculation minimum t…
briossant e02b424
feat(voxel-annotation): add stamina bar
briossant 66f52f2
feat(voxel-annotation): refine stamina computations and ui
briossant 550b323
fix(voxel-annotation): ensure cursor overlay is only drawn when a wri…
briossant 622410a
test(voxel-annotation): adapt backend.spec.ts to the latest updates
briossant 4ad6e83
feat(voxel-annotation): introduce brush caching for performance optim…
briossant d52b800
feat(voxel-annotation): make pushIf a sync function when filterValue …
briossant 7796df1
feat(voxel-annotation): optimize brush operations by removing memory …
briossant a6ea83c
feat(voxel-annotation): benchmarked the entire drawing pipeline to pr…
briossant 55f57b4
feat(voxel-annotation): update stamina bar logic to dynamically adjus…
briossant ae68146
refactor(voxel-annotation):
briossant 16df51f
test(voxel-annotation): fix backend.spec.ts
briossant 9b392db
feat(voxel-annotation): remove the temporary brush shapes (kept SPHER…
briossant 818131c
fix(voxel-annotation): make the brush cursor red again when `xtrl+shi…
briossant 98eb68a
feat(voxel-annotation): add `ctrl+middleclick` shortcut for flood fil…
briossant bcedbb6
feat(voxel-annotation): add fast flood fill preview time limited (cur…
briossant 019c40e
feat(voxel-annotation): add concurrency to downsampling jobs
briossant 54cfd7b
feat(voxel-annotation): group paintBrushWithShape calls into a single…
briossant 76dce78
fix(voxel-annotation): adjust the chunk reloading in the downsampling…
briossant 8c6753d
chroe(voxel-annotation): run format + revert chunk reload edits from …
briossant c1384ab
fix(voxel-annotation): handle cases with no downsampling (single reso…
briossant fae54db
docs(voxel-annotation): add user guide for voxel annotation features
briossant ec5ddbd
docs(voxel-annotation): update from @seankmartin review
briossant 2a6f12a
docs(voxel-annotation): remove duplicate
briossant 12e3f27
refactor(voxel-annotation): renamed seg picker to value picker
briossant b33d913
fix(voxel-annotation): fix comment typo and remove shader debug method
briossant f25e482
fix(voxel-annotation): rename snake_case vars to camelCase and fix in…
briossant 181d161
refactor(voxel-annotation): rename _createVoxelRenderLayer to _create…
briossant 4d2f061
refactor(voxel-annotation): convert stamina benchmark to proper bench…
briossant ac82620
refactor(voxel-annotation): define VOXEL_EMPTY_VALUE constant and doc…
briossant abb9e11
refactor(voxel-annotation): replace remaining 0n erase value with VOX…
briossant 35c747e
refactor(voxel-annotation): throw on Float32 and extract cursor SVGs …
briossant dc7c070
refactor(voxel-annotation): move Draw tab before Annotations and remo…
briossant fa90d63
docs(voxel-annotation): clarify compressedSegmentationBlockSize decom…
briossant 61b4407
fix(voxel-annotation): restore backward-compatible subsource serialis…
briossant 70a2aa0
refactor(voxel-annotation): dispatch brush stroke once at mouseup ins…
briossant 9e20ca6
refactor(voxel-annotation): re-implement @chrisj sphere optimisations…
briossant df28681
test(voxel-annotation): add back @chrisj tests for chunkGridPosition …
briossant 29e7a12
fix(voxel-annotation): restore shift+wheel brush size keybind
briossant c438791
fix(voxel-annotation): give overlay preview its own render scale hist…
briossant e156417
fix(voxel-annotation): compute stroke basis only after getPoint recor…
briossant 08e0c65
fix(voxel-annotation): apply edits on isolated chunks and invalidate …
briossant 081ff62
fix(zarr): refuse to write detached or size-mismatched chunk buffers
briossant 3d3f040
feat(voxel-annotation): clear optimistic overlay on fresh-chunk arriv…
briossant ee30e91
fix(voxel-annotation): revalidate HTTP reads on sources this session …
briossant 50aa60d
test(voxel-annotation): browser tests for repaint, gzip, dense labels…
briossant 5adcd05
fix(voxel-annotation): clear overlay only when the written data cover…
briossant 9d7f173
fix(voxel-annotation): capture cascade coverage at chain start and lo…
briossant dc88631
fix(voxel-annotation): tag overlay chunks with their stroke seq and r…
briossant 1303430
perf(chunk): replace reload-time queue drain with receipt-seq causali…
briossant 6b8ee31
refactor(voxel-annotation): resolve overlay swaps by observation, rem…
briossant 58523e0
fix(voxel-annotation): small review findings
briossant 480608e
fix(voxel-annotation): clear overlays explicitly on undo/redo and pru…
briossant 0655699
fix(voxel-annotation): self-correcting accessor loads and flush-first…
briossant a2874ca
fix(voxel-annotation): serialize LOD-0 writers through a single exclu…
briossant e1f0227
fix(voxel-annotation): swap undone overlays on arrival instead of cle…
briossant 55b15bf
fix(voxel-annotation): reconcile stroke overlays against the backend'…
briossant f4be994
feat(voxel-annotation): make flood-fill morphological gating optional
briossant 6e6e816
test(voxel-annotation): update applyEdits spec for the isolated-chunk…
briossant 0b11543
refactor: address review nits from PR #858
briossant 5a635b9
refactor(zarr): extract chunk key computation shared by download and …
briossant 1e218c3
refactor(kvstore): cache-bust S3 reads with a random query param inst…
briossant 88046fd
fix(zarr): do not advertise writing support for sharded or transposed…
briossant 818af71
refactor(sliceview): drop the NaN chunk-position tripwire in drawChunk
briossant 77b3837
fix(kvstore): reject dot-segment components in S3 object keys
briossant File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -26,3 +26,6 @@ tsconfig.tsbuildinfo | |
| -/docs/python/api/index.rst | ||
| /docs/python/api/*.rst | ||
| /.vite | ||
| /.idea | ||
| /.local | ||
| /.env | ||
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,115 @@ | ||
| .. _voxel-annotation: | ||
|
|
||
| Voxel Annotation | ||
| ================ | ||
|
|
||
| Voxel annotation allows for direct painting and editing of volumetric data | ||
| within Neuroglancer. This feature is available for both :ref:`image-layer` and | ||
| :ref:`segmentation-layer`. | ||
|
|
||
| Enabling Voxel Editing | ||
| ---------------------- | ||
|
|
||
| To enable voxel editing, you must first have a writable volume source. | ||
|
|
||
| 1. Open the **Source** tab of an Image or Segmentation layer. | ||
| 2. Locate a volume source and click the **Write** checkbox next to it. | ||
|
|
||
| .. note:: | ||
| Only one source can be writable at a time within a layer. Voxel annotation is currently supported only for 3D volumes. | ||
|
|
||
| The first time you attempt a drawing operation (like a brush stroke) after enabling writing, a confirmation dialog will appear. Note that this initial operation will be canceled; you can resume drawing once you have confirmed. | ||
|
|
||
| .. note:: | ||
| For the segmentation layer, it is recommended to deactivate the Highlight on hover option under the Render tab. | ||
|
|
||
| Supported Storage and Formats | ||
| ----------------------------- | ||
|
|
||
| Voxel editing is currently supported for the following configurations: | ||
|
|
||
| **Storage**: | ||
|
|
||
| - Amazon S3 or any S3 compatible storage. | ||
|
seankmartin marked this conversation as resolved.
|
||
|
|
||
| **Data Format**: | ||
|
seankmartin marked this conversation as resolved.
|
||
|
|
||
| - Zarr v2 and Zarr v3 (including OME-Zarr), with the following Compression/Encoding: | ||
| - None (Raw) | ||
| - Blosc | ||
| - Gzip | ||
|
|
||
| Tools | ||
| ----- | ||
|
|
||
| Voxel editing provides several tools for different annotation tasks. You can | ||
| bind these tools from the **Draw** tab to use/activate them. | ||
|
|
||
| .. _voxel-brush-tool: | ||
|
|
||
| Brush Tool | ||
| ~~~~~~~~~~ | ||
|
|
||
| The Brush tool allows you to paint voxels by clicking and dragging. | ||
|
|
||
| - **Paint**: Hold :kbd:`Control` + :kbd:`Left Click` and drag. | ||
| - **Erase**: Hold :kbd:`Control` + :kbd:`Shift` + :kbd:`Left Click` and drag. | ||
| - **Quick Flood Fill**: Hold :kbd:`Control` + :kbd:`Right Click` to trigger a | ||
| flood fill at the current position. Hold :kbd:`Shift` as well to erase. | ||
|
|
||
| Settings: | ||
| - **Brush size**: Adjust the radius of the brush. | ||
| - **Brush shape**: Choose between **Disk** and **Sphere** shapes. | ||
|
|
||
| .. _voxel-flood-fill-tool: | ||
|
|
||
| Flood Fill Tool | ||
| ~~~~~~~~~~~~~~~ | ||
|
|
||
| The Flood Fill tool fills a connected region of voxels on the current 2D plane. | ||
|
|
||
| - **Fill**: Hold :kbd:`Control` + :kbd:`Left Click`. | ||
| - **Clear**: Hold :kbd:`Control` + :kbd:`Shift` + :kbd:`Left Click`. | ||
|
|
||
| Settings: | ||
| - **Max fill voxels**: Limits the maximum number of voxels to fill to | ||
| prevent accidental large-scale changes. If the limit is exceeded, the | ||
| operation will be canceled. | ||
|
|
||
| .. note:: | ||
| The flood fill will automatically fill small gaps in the connected region, proportionally to the number of voxels in the region. This feature may sometimes leave unpainted voxels in tight corners of the region. | ||
|
|
||
| .. _voxel-seg-picker-tool: | ||
|
|
||
| Seg Picker | ||
| ~~~~~~~~~~ | ||
|
|
||
| The Seg Picker tool allows you to adopt the voxel value at the current mouse | ||
|
seankmartin marked this conversation as resolved.
Outdated
|
||
| position as your active Paint Value. | ||
|
|
||
| Common Controls | ||
| --------------- | ||
|
|
||
| The **Draw** tab provides several common controls: | ||
|
|
||
| - **Erase only selected value**: When enabled, the erase action only affects | ||
| voxels that match the current **Paint Value**. This feature will slow down | ||
| painting performance when erasing. | ||
| - **Undo / Redo**: Revert or re-apply recent changes. | ||
| - **Paint Value**: Manually specify the segment ID or intensity value to paint. | ||
| - **New Random Value**: Generates a new random segment ID. | ||
|
seankmartin marked this conversation as resolved.
Outdated
|
||
|
|
||
| Stamina System | ||
| -------------- | ||
|
|
||
| When you perform many edits quickly, a stamina bar will appear below your cursor. This bar represents the amount of remaining work before all of your edits are processed and saved. **If you reload the page while the stamina bar is visible, you will lose some edits**. If the bar gets emptied painting will be halted until the system is able to catch up, this prevents neuroglancer from crashing due to too many edits in a short period of time. | ||
|
|
||
| About multi-resolution datasets | ||
| ------------------------------- | ||
|
|
||
| Any multi-resolution dataset that has many-to-1 mapping (i.e. one child cannot have multiple parents) can be used for voxel annotation. | ||
|
|
||
| Although voxel annotation supports multi-resolution, any drawing operation will be performed on the highest resolution level, no matter what the current view is. Once an operation is completed, a downsampling pipeline will be triggered to update the lower resolution levels. | ||
|
|
||
| .. note:: | ||
| Because of the 3D nature of the datasets, the downsampling may cause visual artifacts: when zoomed out you may see annotations that then disappear when zoomed in, those "invisible" annotations will be found on nearby slices. | ||
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| /** | ||
| * @license | ||
| * Copyright 2025 Google Inc. | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
|
|
||
| import { encodeBlosc } from "#src/async_computation/encode_blosc_request.js"; | ||
| import { registerAsyncComputation } from "#src/async_computation/handler.js"; | ||
|
|
||
| registerAsyncComputation(encodeBlosc, async (data, config) => { | ||
| const { default: Blosc } = await import("numcodecs/blosc"); | ||
| const codec = Blosc.fromConfig({ id: "blosc", ...config }); | ||
| const result = await codec.encode(data); | ||
| return { value: result, transfer: [result.buffer] }; | ||
| }); |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| /** | ||
| * @license | ||
| * Copyright 2025 Google Inc. | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
|
|
||
| import { asyncComputation } from "#src/async_computation/index.js"; | ||
|
|
||
| export const encodeBlosc = | ||
| asyncComputation<(data: Uint8Array, config: any) => Uint8Array>( | ||
| "encodeBlosc", | ||
| ); |
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
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
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
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,2 +1,3 @@ | ||
| import "#src/async_computation/decode_blosc.js"; | ||
| import "#src/async_computation/decode_zstd.js"; | ||
| import "#src/async_computation/encode_blosc.js"; |
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.