Repository navigation
Expand file tree
/
Copy pathdescriptions.json
More file actions
267 lines (267 loc) · 64.6 KB
/
Copy pathdescriptions.json
File metadata and controls
267 lines (267 loc) · 64.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
{
"about": "Hover descriptions for VC3D's Spiral tab. 'panel' is keyed by Spiral panel control ids (registered in SpiralPanel.cpp; an id missing here falls back to the 'config' entry of the same name). 'config' is keyed by configuration keys from config.py and is served to clients as the catalog's field descriptions. Edits need no rebuild: VC3D reloads the panel text when this file changes, and the service re-reads it for each /configuration request (reconnect to see new config text).",
"panel": {
"service_profile": "Which Spiral service to use. Local (this computer) launches and owns a service process bound to the object store attached here and the Output, Cache and Winding inference below; Remote (LAN) and Remote (SSH) profiles connect to a service already running elsewhere. Switching profiles disconnects, and form values are kept per profile.",
"service_add_lan": "Add a Remote (LAN) profile: direct HTTP to a service on a trusted network.",
"service_add_ssh": "Add a Remote (SSH) profile: VC3D manages an SSH tunnel to a persistent service.",
"service_remove_profile": "Remove the selected profile. The built-in Local profile cannot be removed.",
"service_endpoint": "Base URL of the remote service, e.g. http://gpu-host:8765. Plain HTTP is unencrypted, so use it only on networks you trust; use an SSH profile otherwise.",
"service_ssh_host": "SSH destination ([user@]host), resolved through ~/.ssh/config. VC3D opens and manages a tunnel to the service on that host. Needs non-interactive authentication (key or agent) and an already trusted host key.",
"service_ssh_port": "Loopback port of the persistent service on the host.",
"service_api_key": "API key for the service. For a LAN profile, paste the key the service prints at startup (or set SPIRAL_API_KEY). For an SSH profile it is optional: when empty, the key is read from the host over SSH. Never saved.",
"service_output": "Root for all generated state (--output). Empty derives a default per attached object store under the VC3D data directory.",
"service_cache": "Derived host cache directory (--cache). Empty uses the documented user cache default.",
"service_winding_inference": "Optional winding-inference directory the local service reads winding-model supervision from (--winding-inference). VC3D only names it to the service; changing it restarts the local service. A remote service's binding is configured on its host.",
"service_connect": "Connect to the selected service. For the Local profile this launches VC3D's own service with the attached object store and the Output, Cache and Winding inference above. Fit controls enable once the handshake and API-version check succeed.",
"service_disconnect": "Disconnect from the service. A service VC3D launched (Local profile) is shut down; a remote service and its fit keep running. If inputs are uncommitted, you are asked to commit or discard them first.",
"service_status": "Connection state: Disconnected, Starting, Connecting, Connected (with the API version), Reconnecting, or Failed with the reason.",
"object_store": "The object store the service reads patches, point collections and fibers from (its UUID, history generation and location: a file on the service host, or a served store's endpoint), and whether VC3D has the same store attached. Fit inputs are displayed from the attached store only when the UUIDs match; a replica of the same store matches. A service bound to a hub fits hub positions: it matches only a replica of that hub, which Clone the Service's Hub creates.",
"scroll_summary": "The scroll's physical facts (name, voxel size in µm, outward spiral sense), from the project's fit volume. Read-only.",
"path_umbilicus": "umbilicus.json: the umbilicus axis the spiral is wound around. Always required.",
"winding_inference_summary": "Whether the service can run winding-model supervision (dense_spacing_mode winding_model): it needs a usable winding-inference artifact bound on the service host at launch. Read-only.",
"vertical_fiber_offset": "Vertical fibers sit on the back face of the sheet. When checked, the fit expects vertical fiber strips this many voxels radially outside the fitted winding instead of on it (pcl_vertical_fiber_radial_offset_*). Horizontal fibers are unaffected. Applies at the next Run without a rebuild.",
"vertical_fiber_offset_voxels": "How far, in voxels, vertical fiber strips are expected radially outside the fitted winding. Used only while the offset is checked.",
"track_length_bin_sampling": "Draw short, medium, and long tracks using configurable weights. The bin boundaries are computed from eligible-track arclength tertiles.",
"track_length_bin_weights": "Relative sampling weights for short, medium and long tracks when length-bin sampling is on (track_length_bin_weights).",
"max_track_crossings": "Maximum differently oriented crossing partners appended for each sampled primary track. Applies on the next Run; zero disables crossing-pair sampling. The upper bound is prepared when the session loads.",
"path_outer_shell": "Directory of outer-shell surfaces (tifxyz) used by the shell losses and the winding-model spacing mode. Service-host path, read-only.",
"path_normal_x": "Lasagna normal-field store, X component (OME-Zarr), used by the dense normals loss. Read at the zarr group given under Store layout. Service-host path, read-only.",
"path_normal_y": "Lasagna normal-field store, Y component (OME-Zarr), used by the dense normals loss. Read at the zarr group given under Store layout. Service-host path, read-only.",
"path_surf_sdt": "Lasagna surface signed-distance (SDT) store. The current service does not advertise this input, so the row normally stays empty.",
"path_gradient_magnitude": "Lasagna gradient-magnitude store (OME-Zarr), used by the dense spacing loss in grad_mag mode. Service-host path, read-only.",
"path_cache_directory": "Directory for derived host caches (the service's --cache). Set when the service starts; read-only.",
"store_layout": "The project's selected Lasagna dataset as the fit reads it (identity, array group and its scale relative to the fit volume). Read-only.",
"path_output_directory": "Root on the service host for all generated state: run directories, autosaves, previews and checkpoints (the service's --output). Set when the service starts; read-only.",
"path_scroll_zarr": "Scroll volume Zarr used as the background of diagnostic slice renders, at Render-volume scale. Set by the service and read-only; may be empty.",
"run_tag": "Optional suffix added to this fit's output-directory name and final mesh outputs on the service. Changing it requires Rebuild Fit.",
"render_volume_scale": "Downsampling factor of the Scroll/render Zarr relative to full-resolution voxels, used when drawing diagnostic slice renders. Changing it requires Rebuild Fit.",
"advanced_config": "Open the Spiral Configuration window: searchable fit settings, each marked as applying at the Next Run or needing Rebuild Fit, plus an Expert JSON tab. Saved profiles are available to every Spiral connection.",
"display_volume": "Volume from the open volume package shown in the viewers. Kept in sync with VC3D's other volume selectors.",
"display_min_winding": "First winding to display (inclusive).",
"display_max_winding": "Last winding to display (inclusive); -1 displays through the final winding.",
"display_button": "Open the Display window to choose which Spiral overlays are shown.",
"display_surface_intersections": "Show rendered surface intersections on the plane views.",
"display_relative_pcls": "Show relative-winding PCLs with their winding labels. Left-click a point to activate its editable collection; E adds a new collection (winding 0, 1, 2, ... per point) or appends to the active one, on the flattened view or any plane view; F flips the winding direction; Delete removes the collection after confirmation; Escape exits placement and clears the active PCL.",
"display_same_winding_pcls": "Show same-winding PCLs. Left-click a point to activate its editable collection; Q adds a new collection or appends to the active one, on the flattened view or any plane view; F reverses the active PCL; Delete removes it after confirmation; Escape exits placement and clears the active PCL.",
"display_fitted_fibers": "Show the fit's fibers as the attached store holds them now, on the plane views, colored blue for horizontal and orange for vertical fibers. Read-only; fibers in the slab set by the point view tolerance are drawn.",
"display_point_tolerance": "Maximum distance from the preview surface at which same-winding and relative-winding point markers are shown, and the half-depth of the slab in which fitted fibers are drawn.",
"display_intersection_stride": "Sample every Nth input-surface grid cell when building Spiral intersections; larger values are faster but less detailed.",
"display_patch_overlap": "Color areas of the flattened output that overlap the selected patch categories.",
"display_run_diff": "Overlay the XYZ displacement magnitude between the previous and current completed runs. Magnitude increases from blue through green, yellow, and orange to red; the first run has no diff.",
"display_winding_transitions": "Draw the boundaries between adjacent windings on the flattened output, labeled with the winding numbers on either side. A red boundary joins non-adjacent windings and usually indicates a mapping problem.",
"display_loss_map": "Overlay a weighted per-sample loss residual on the flattened output. Only listed when the preview computed loss overlays.",
"display_loss_map_opacity": "Loss overlay opacity.",
"display_loss_map_diagnostics": "Loss overlays roughly double the cost of a preview: every enabled loss is evaluated again and each overlay is mapped onto the flattened output. They are published after the surface, so the preview itself still appears as soon as it is ready.",
"display_output": "Show the latest fit preview: it becomes the flattened output view and its intersections are drawn on the plane views.",
"display_lasagna": "Toggle for Lasagna input overlays. No overlay currently responds to it.",
"checkpoint_session": "The checkpoint the resident fit was built from, or that it was not loaded from one.",
"checkpoint_choice": "Checkpoints the service can load, plus any local file browsed for here.",
"checkpoint_browse": "Choose a .ckpt file on this computer; it is uploaded to the service before loading.",
"checkpoint_load": "Load this checkpoint. If no fit exists, initialize the fit directly from the checkpoint. Otherwise replace the resident model's weights, optimiser and RNG state; if it does not match, the service says what a rebuild would have to replace and asks before doing it. If the fit is in error, Load rebuilds it directly from the selected checkpoint.",
"checkpoint_save": "Save a checkpoint of the resident fit on the service, under a name you choose in the session output directory. It then appears in the checkpoint list. Available while the fit is idle.",
"checkpoint_download": "Create a checkpoint of the resident fit on the service and download it to a .ckpt file on this computer, with progress shown below. Available while the fit is idle.",
"stored_commit": "Commit the preview on display to the service's object store as a surface tagged spiral-fit: its flattened geometry and winding IDs, with the model state and inputs it was fitted to. Committing the same fit again reuses that surface. A service bound to a hub pushes it there; when the push fails it stays on the service until a later push, and Retry Push asks again. Overlays (run difference, loss maps) are not committed.",
"stored_open": "Open a committed fit from the object store Spiral's inputs are routed to, in place of the current preview until the next one is published. It shows no overlays, and edits keep going to the inputs.",
"stored_status": "The latest commit: the surface it wrote (or reused), whether it reached the hub, or why it failed.",
"run_update_inputs": "Update Fit Inputs pushes the edits saved in this replica to the hub, then initializes or rebuilds the fit from a hub position including them: the service links the inputs at the hub's head, publishes its links only on that head, and fits that fixed position. Later edits are not part of the fit and show as stale. Available when the service is bound to a hub and a replica of that hub is attached here; the resident fit is unchanged when the update fails.",
"run_input_position": "Where the fit's inputs come from: the hub position it fits (requested, linked at, and with the service's links), an update in progress or the last one that failed, and this replica's unpushed edits and conflicts.",
"run_initialize": "Initialize Fit builds a new fit from the project's inputs, the service's object store and current settings (to start from a checkpoint, use Load under Checkpoint). Afterwards it becomes Rebuild Fit, which applies settings that need a rebuild and discards training so far; Rebuild Fit (recover) can also use the service's launch defaults.",
"run_iterations": "Number of optimizer iterations the next Run adds to the fit.",
"run_dt_loss_schedule": "Suppress directional DT losses until the final percentage of this Run; stopping early does not resize the window.",
"run_dt_loss_last_pct": "Percentage of requested iterations eligible for DT losses.",
"run_background_preview": "Capture iteration-consistent previews during this Run; flattening continues on the service while fitting resumes.",
"run_preview_cadence": "Iterations between background previews during this Run. Used only while Background preview is checked.",
"run_start": "Run the requested iterations on the resident fit, applying Next Run settings from the advanced config. Disabled while a rebuild is required. A preview is exported when the Run ends.",
"run_stop": "Stop the running fit once the current iteration finishes. The fit stays resident and a preview of its state is exported.",
"fit_inputs": "What the resident fit read from its object store: the input digest, the surfaces, point collections and fibers selected, the links consumed and the fit volume. Below it, whether the attached store still holds those inputs as fitted: missing inputs, and objects or links changed since, mark the fit stale. Nothing changes the fit until Rebuild Fit reads the store again.",
"inputs_filter": "Show only inputs whose entry contains this text (not case-sensitive), such as a name, kind or state.",
"inputs_show_original": "Include unchanged inputs read from the object store. Hidden inputs remain selected for the fit.",
"inputs_list": "Local drawing drafts, kept for store-backed editing. They are not part of the fit: its inputs are frozen and come from the service's object store.",
"inputs_add": "Save Drafts to Store writes the ready brush patches and point-collection edits into the attached object store as checked revisions (new patches are surfaces tagged spiral-brush, edited collections keep their objects and point ids, removed ones are retired). A hosted replica pushes them to its hub in the background. The fit sees them at its next input update (or, without a hub, when it is rebuilt with current inputs).",
"inputs_commit": "Save and Update Fit Inputs saves the ready drafts to the store, then runs Update Fit Inputs: the fit is rebuilt from a hub position including them.",
"inputs_remove": "Stage removal from subsequent fit steps; Restore is available until Commit. On a local brush edit, Remove discards it.",
"logs": "Show the spiral service's Python stdout / stderr."
},
"config": {
"z_begin": "First z slice (inclusive) of the fit. Affects host input filtering, dense-store coverage, per-step count scaling, rendering, and model/checkpoint z-domain compatibility.",
"z_end": "One past the last z slice of the fit. Affects host input filtering, dense-store coverage, per-step count scaling, rendering, and model/checkpoint z-domain compatibility.",
"optimizer_random_seed": "Seed for the NumPy and PyTorch random generators used during input preparation and per-step sampling; in multi-GPU runs each GPU uses the seed plus its rank. Change it to draw a different random sequence.",
"optimizer_distributed_split_batch": "In multi-GPU runs, divide the per-step sample counts across GPUs so each step draws roughly the configured total. When off, every GPU draws the full counts, giving more samples per step at more compute. No effect on a single GPU.",
"optimizer_learning_rate": "Base AdamW learning rate for all model parameters, before the decay schedule; the flow lattices use it times their own learning-rate multipliers. Higher values fit faster but risk unstable or overshooting updates; lower values are steadier but slower.",
"optimizer_exp_lr_schedule": "Decay the learning rate exponentially so it reaches optimizer_lr_final_factor times the base rate at optimizer_num_training_steps. When off, the learning rate stays constant.",
"optimizer_lr_final_factor": "Fraction of the base learning rate reached at optimizer_num_training_steps when exponential decay is on. Lower values give a stronger anneal and steadier late updates; 1 means no decay.",
"optimizer_num_training_steps": "Training horizon in optimisation steps: the length of a headless fit and the step at which the exponential learning-rate decay reaches its final factor. Interactive runs that go past it extend the horizon automatically.",
"optimizer_flow_grad_smoothing": "Gaussian-smooth flow gradients before the optimizer step. The loss is unchanged, but Adam scaling and masks mean the resulting update need not retain the kernel profile. Cylindrical smoothing runs along z and around rings, with optional separate across-ring smoothing.",
"optimizer_flow_grad_smoothing_sigma_voxels": "Standard deviation in scroll-voxel units of the flow frame: along z and around cylindrical rings, or isotropically for Cartesian lattices. These lattice directions approximate sheet directions. Used for both lattices unless the low-resolution override is set. Divide by model_flow_voxel_resolution for fine-cell units; coarse cells are six times wider. Very small widths become identity kernels. Effective widths are logged at startup when smoothing is enabled.",
"optimizer_flow_grad_smoothing_across_sigma_voxels": "Standard deviation in scroll-voxel units for smoothing across cylindrical rings at matching angles. This approximates coupling across windings; it does not identify sheet boundaries. 0 disables across-ring smoothing. Ignored for Cartesian lattices.",
"optimizer_flow_grad_smoothing_low_res_sigma_voxels": "Along-sheet smoothing width for the coarse lattice alone; 0 uses the fine lattice's width in scroll-voxel units. For example, at the default 16-voxel fine spacing, 32 voxels is 2 fine cells but about 0.33 coarse cells. The across-ring width is not affected.",
"optimizer_flow_lazy_moments": "Use SparseAdam-style masked updates on dense flow gradients: entries with zero gradient after conditioning retain their moments and receive no gradient update. Smoothing can activate entries without direct samples. Preserves history through quiet steps, including stale momentum, and does not correct first touch scaling. Configured weight decay still applies everywhere.",
"optimizer_flow_shared_second_moment": "Use one Adam denominator across cells and components of each lattice slab, separately for each flow stage and coarse/fine lattice. Preserves relative first-moment magnitudes before lazy masking and weight decay, rather than normalizing each entry independently. The denominator uses a winsorised mean of positive stored second moments. Full per-entry state is retained; the flag can change between runs.",
"optimizer_flow_shared_second_moment_clip_quantile": "Quantile of positive second-moment entries, estimated from a fixed-stride sample, used to cap values before averaging the full slab for the shared denominator. Limits outliers' effect on the common scale. 1 disables the cap; an empty positive sample also leaves values uncapped.",
"optimizer_flow_grad_clip_median_multiple": "Clip individual gradient components at this multiple of the median nonzero absolute component value, per lattice slab, estimated from a fixed-stride sample. Runs after DDP averaging and nonfinite sanitization, before smoothing and optimizer moments. Limits spike propagation but can suppress valid corrections and change vector direction. 0 disables clipping. Logs the bound and clipped fraction.",
"model_num_flow_integration_steps": "Runge-Kutta steps used to integrate each flow stage's velocity field into a deformation. More steps follow large or curved deformations more accurately, at proportionally more compute per step. It does not reshape the model: a checkpoint written with another count still loads, with the deformation changed slightly.",
"model_flow_integration_solver": "Numerical integrator that turns each flow stage's velocity field into a deformation. rk4 (classic fourth-order Runge-Kutta) is currently the only option. Shapes the model, so checkpoints saved with a different value cannot be loaded.",
"model_num_flow_stages": "Number of velocity fields applied one after another to form the flow deformation. More stages can represent more complex deformations, but every stage adds a full copy of the coarse and fine flow lattices (memory, compute). Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_flow_bounds_z_margin": "Extra z slices beyond each end of the model z range covered by the flow field, gap and per-slice linear-transform parameters, so the deformation stays defined slightly past the fitted slab. Larger margins add parameters. Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_flow_bounds_radius": "Half-width, in scroll voxels, of the region around the umbilicus axis that the flow field covers in each slice (cylindrical fields use the inscribed disk). It should enclose the scroll's outer windings; larger values add lattice cells. Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_flow_voxel_resolution": "Cell spacing of the fine flow lattice in scroll voxels; the coarse lattice is six times coarser. Smaller values let the deformation follow finer local detail but add parameters, memory and time. Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_flow_field_type": "How the flow velocity field is stored and interpolated. cartesian: a regular z/y/x grid, trilinear. cylindrical: rings around the umbilicus axis in z, radius and angle, with radial and tangential components, trilinear. bspline: a z/y/x grid of smooth cubic B-spline control points. bspline_cylindrical: the cylindrical lattice with cubic B-spline interpolation. Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_flow_field_high_res_lr_scale_initial": "Fine flow-lattice learning-rate multiplier, relative to the scheduled base learning rate, before the ramp starts. Lower values let the coarse lattice settle the large-scale shape before fine detail moves. The multiplier is capped at 1.",
"model_flow_field_high_res_lr_scale_final": "Fine flow-lattice learning-rate multiplier, relative to the scheduled base learning rate, reached at the end of the ramp and kept afterwards. Higher values let fine local deformation adapt faster. The multiplier is capped at 1.",
"model_flow_field_high_res_lr_ramp_start_step": "Optimisation step (counted from the start of the fit) at which the fine flow-lattice learning-rate multiplier begins moving linearly from its initial to its final value.",
"model_flow_field_high_res_lr_ramp_steps": "Length, in optimisation steps, of the linear ramp of the fine flow-lattice learning-rate multiplier from its initial to its final value. 1 switches almost immediately; longer ramps blend fine detail in more gradually.",
"model_flow_field_low_res_lr_scale": "Coarse flow learning-rate multiplier relative to the scheduled base rate, independent of the fine flow multiplier. Shared second moments can change update sizes; use the logged increments to assess the scale. 0 freezes coarse values, including weight decay, but moments may still update. Read every step by the fitter; currently classified as a model-rebuild setting by the configuration catalog.",
"model_flow_field_direct_lr": "For cartesian flow fields on the GPU, sample the coarse lattice directly at each point instead of upsampling it to the fine lattice every step. Faster and uses less memory; the interpolated field differs slightly within fine cells that straddle coarse grid planes. Ignored by the other field types.",
"model_gap_expander_logit_resolution": "Spacing, in scroll voxels, of the gap expander's control points along z and around each winding (at the nominal winding spacing). The gap expander varies the gap between adjacent windings locally; smaller spacing allows more local gap variation but adds parameters. Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_gap_expander_num_windings": "Legacy/fallback physical winding-count estimate used by exporters; it does not allocate the gap lattice.",
"model_gap_expander_capacity_windings": "Allocated gap-lattice capacity, not a claim about the physical winding count. Must be at least shell_outer_winding_idx + 3.",
"model_gap_expander_lr_scale": "Multiplier applied to the gap expander's parameters inside the model, which acts as their learning rate relative to the base rate. Higher lets local inter-winding gaps change faster; lower keeps them closer to uniform winding spacing. Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_gap_expander_min_gap": "Hard numerical inter-winding gap floor in working voxels. The minimum-spacing loss remains the separate geological preference.",
"model_gap_expander_softplus_bias": "Bias of the stable lower-bounded softplus gap parameterisation.",
"model_linear_z_resolution": "Spacing in z slices between the control points of the z-varying 2x2 linear transform (scale, shear and rotation of each slice around the umbilicus). Smaller spacing follows faster changes of overall cross-section shape along z but adds parameters. Shapes the model, so checkpoints with a different value cannot be loaded.",
"model_initial_dr_per_winding": "Starting value, in scroll voxels, of the spiral's global radial spacing between successive windings; the fit then learns it. Also sets the nominal spacing that sizes the gap-expander lattice, and must exceed model_gap_expander_min_gap. Shapes the model, so checkpoints with a different value cannot be loaded.",
"theta_crossing_map_update_interval": "How often, in optimisation steps, the cached theta=0 seam crossings of patches and point collections are recomputed from the current model. The same cadence refreshes whole-object DT targets (the DT target update interval always matches it). Lower values keep winding bookkeeping current but cost more compute; higher values are faster but can lag the model.",
"patch_radius_loss_margin": "Tolerance for the patch radius loss, as a fraction of the winding spacing. A sampled patch point is penalised only for the part of its spiral-radius deviation from the patch's mean radius that exceeds this margin. Raise it to tolerate more spread across a patch; 0 penalises any deviation.",
"patch_radius_loss_inv": "When on, the patch radius loss is measured in scroll space: each sampled point is compared with its position at the patch's mean spiral radius, mapped back into the scroll. When off, the deviation is measured directly as spiral radius. When on, patch_radius_within_norm_p is not used.",
"patch_loss_z_margin": "Extra z range, in scroll voxels, added above and below the fit's z range when choosing which patch areas the patch losses sample. The same margin also decides which point-collection points are kept. Raise it to let geometry just outside the fit range constrain the edges; 0 uses the fit range exactly.",
"patch_dt_norm_p": "Exponent of the power mean that combines the per-patch DT errors (each point's distance from its target whole winding) into one loss. Values below 1 reduce the influence of patches with large errors, making the loss robust to a few bad patches. 1 is a plain mean; higher values focus on the worst patches.",
"patch_dt_within_patch_norm_p": "Exponent of the power mean over the sampled points of one patch when computing that patch's DT error (distance in scroll voxels to the target whole winding). Higher values make each patch's error follow its worst-fitting points; 1 is a plain mean.",
"patch_dt_loss_margin": "Tolerance for the patch DT loss, as a fraction of the winding spacing. Only the part of a point's scroll-space distance from its target whole winding that exceeds this margin is penalised. Raise it to stop pulling points that are already close; 0 penalises any distance.",
"patch_radius_within_norm_p": "Exponent of the power mean over the sampled points of one patch in the patch radius loss. Higher values make each patch's loss follow its worst-deviating points rather than the average. 1 is a plain mean. Not used when patch_radius_loss_inv is on.",
"sample_count_patches_per_step": "Number of verified patches drawn each optimisation step for the patch radius loss, which keeps each patch on a single winding. Patches are drawn with replacement, weighted by area. More patches give a smoother, more representative gradient at the cost of GPU time and memory. Scaled with the z range.",
"sample_count_patches_per_step_for_dt": "Number of patches per step used for the patch distance-to-winding (DT) loss, which snaps patches onto the nearest whole winding. These are taken from the same draw as the radius loss. More patches cost more GPU time and memory. Scaled with the z range.",
"sample_count_points_per_patch": "Maximum number of points sampled on each drawn patch. Used by the patch radius and DT losses and by the relative and absolute winding losses. Small patches may give fewer points. More points estimate each patch's winding better but use more GPU time and memory.",
"sample_count_relative_winding_pcls": "Number of relative-winding point collections (annotations linking points on different patches with a winding difference) drawn per step for the relative winding loss. Raising it covers more annotations per step at extra GPU cost. Scaled with the z range.",
"sample_count_relative_winding_patch_pairs_per_pcl": "Maximum number of patch pairs taken from each sampled relative-winding point collection per step. Each pair is constrained to the annotated winding difference. By default only patches adjacent along the collection are paired. More pairs use each annotation more fully but cost more per step.",
"sample_count_absolute_winding_pcls": "Number of absolute-winding point collections (points labelled with a fixed winding number) drawn per step for the absolute winding loss. Raising it covers more annotations per step at extra GPU cost. Scaled with the z range.",
"sample_count_absolute_winding_points_per_pcl": "Maximum number of annotated points taken from each sampled absolute-winding point collection per step. The patch under each point is pulled to that point's labelled winding. More points use each annotation more fully but cost more per step.",
"sample_count_unattached_pcls_per_step": "Number of unattached point collections (strips not attached to a patch, such as fiber traces) drawn per step for the strip radius and DT losses. Linked strips are sampled together as one group. 0 disables these losses. More gives better coverage at extra GPU cost. Scaled with the z range.",
"sample_count_unattached_pcl_points_per_step": "Maximum number of points sampled along each drawn unattached strip (or chain of linked strips) per step. Shorter strips use all of their points. 0 disables the unattached-strip losses. More points constrain long strips better but cost more GPU time.",
"sample_count_tracks_per_step": "Number of surface tracks drawn per step for the track radius and DT losses. Each drawn track is used along its full resampled length, plus any crossing partner tracks. 0 disables track sampling. More tracks improve coverage but use much more GPU time and memory. Scaled with the z range.",
"sample_count_track_points_per_step": "Number of evenly spaced points along each sampled track used to estimate that track's shared target radius (winding). The loss itself still covers the whole resampled track. More points give a more robust target at a small extra cost. 0 disables track sampling.",
"sample_count_dense_normal_points": "Number of random points per step, spread through the scroll volume out to the outer winding, at which the dense surface-normal and gradient-magnitude spacing losses are evaluated. More points give smoother dense supervision but cost GPU time and memory. Scaled with the z range.",
"sample_count_fiber_direction_points": "Number of fiber-direction samples drawn (with replacement) per step for the fiber-direction loss, which keeps fibers lying in the fitted sheet. 0 disables the loss. More samples give a steadier gradient at extra GPU cost. Scaled with the z range.",
"sample_count_regularisation_points": "Number of points per step, spread over the windings up to the outer winding, at which the symmetric Dirichlet regulariser is evaluated. This regulariser resists in-surface stretching, collapse and folding. More points regularise more evenly but cost GPU time. Scaled with the z range.",
"sample_count_winding_model_relative_pairs": "Number of crossing pairs per step sampled from the winding-inference rays for the relative winding-model loss. Each pair is two sheet crossings several windings apart along one ray. Only used when that loss has a non-zero weight; 0 disables it. More pairs cost GPU time. Scaled with the z range.",
"sample_count_winding_model_density_pairs": "Number of adjacent crossing pairs (one winding apart) per step sampled from the winding-inference rays for the winding-model density (spacing) loss. Only used when that loss has a non-zero weight; 0 disables it. More pairs cost GPU time. Scaled with the z range.",
"sample_count_minimum_spacing_independent_samples": "Number of random locations (winding, angle, z) per step at which the minimum-spacing barrier checks the gap between adjacent windings. The barrier stops windings from collapsing onto each other. 0 disables it. More samples catch local collapses more reliably at a small GPU cost. Scaled with the z range.",
"sample_count_patch_dt_target_points": "Approximate number of points in the sparse whole-patch sample used to choose each patch's target winding for the DT loss. Only used in whole-object DT target mode. The max-stride setting can add more points on large patches. More points give a more reliable target but slow down target refreshes.",
"sample_count_dt_target_points_per_strip": "Maximum number of evenly spaced points per unattached strip or track used to choose its whole-object target winding for the DT loss. Only used in whole-object DT target mode. The max-stride setting can add more points on long strips; 0 uses every point. More points give a more reliable target but slow down target refreshes.",
"sample_count_shell_samples": "Number of points per step on the outermost fitted winding that are compared with the outer shell for the shell loss. More samples follow the shell more closely at a small GPU cost. Scaled with the z range.",
"patch_sampling_area_exponent": "Controls how often each patch is drawn for the patch losses: the chance is proportional to the patch's area inside the z range raised to this power. 0 draws every patch equally often; 1 draws in proportion to area, so large patches dominate; values in between balance the two.",
"patch_erode_patches": "Number of grid cells to trim from the edges of each patch's valid region when patches are loaded, removing their often less reliable borders. A patch that erodes to nothing is dropped. 0 disables trimming. A patch can override this in its own metadata.",
"input_use_verified_patches": "Read patches from the object store and allow their radius/DT supervision.",
"input_use_tracks": "Read tracks and their crossings from the object store and allow track sampling and losses.",
"input_use_fibers": "Read fibers from the object store into the point-collection supervision pools.",
"input_use_fiber_directions": "Load packed fiber-direction samples and allow their orientation loss.",
"input_use_pcl_absolute": "Read absolute-winding point collections from the object store. The PCL role toggles must agree: roles are read from each collection's metadata, so all three select every PCL or none.",
"input_use_pcl_relative": "Read relative-winding point collections from the object store. The PCL role toggles must agree: roles are read from each collection's metadata, so all three select every PCL or none.",
"input_use_patch_overlaps": "Use patch-overlap links: refresh them with the store's overlap detector and add same-surface point pairs between overlapping patches to the fit. Off skips the detector (its existing links stay in the store, unused). Changing it rebuilds the fit.",
"input_use_pcl_same_winding": "Read same-winding point collections from the object store. The PCL role toggles must agree: roles are read from each collection's metadata, so all three select every PCL or none.",
"input_use_pcl_drawn_control_points": "Load drawn-control-point point-collection inputs.",
"input_use_normals": "Allow dense normal stores, sampling, and normal-dependent losses. With an object store, it also decides whether startup fiber-patch link refresh uses the lasagna normals (before object_store_normal_ct_path).",
"input_use_gradient_magnitude": "Allow gradient-magnitude dense-spacing supervision.",
"input_use_winding_inference": "Allow compact winding-inference supervision.",
"input_use_outer_shell": "Allow outer-shell losses, lookup maps, and shell-based track filtering.",
"input_disable_patches": "When on, verified patches are not loaded, and every patch-based loss is inactive. The umbilicus anchor still applies. This gives a fit driven only by the other inputs. Same effect as turning off the verified-patches input.",
"pcl_rel_winding_adjacent_patches_only": "Which patch pairs the relative-winding loss draws from each point collection. On: only consecutive patches, in the order the collection's points reach them. Off: any two patches the collection touches, so it also constrains patches many windings apart.",
"pcl_stratified_pcl_sampling": "How point collections are drawn each step for the relative-winding and unattached-strip losses when pcl_sampling_weights is empty. On: each sampling group (abs_winding, relative_windings and same_windings by PCL role, unless a collection's meta.sampling_group names another; all fibers form 'fibers'; object-store patch overlaps form 'patch_overlaps') gets an equal share. Off: uniform draws from the combined pool, so large groups dominate.",
"pcl_sampling_weights": "Relative share of per-step draws for each point collection sampling group (abs_winding, relative_windings, same_windings, fibers, patch_overlaps, or a collection's own meta.sampling_group). When set, every group must be listed and a weight of 0 or less excludes that group from the relative-winding and unattached-strip losses. Empty falls back to pcl_stratified_pcl_sampling.",
"pcl_patch_overlap_pair_spacing": "Patch overlaps from the object store become same-surface point pairs, one on each patch, sampled about this many scroll voxels apart over the overlap. Each pair is its own zero-relative-winding constraint; must be positive.",
"pcl_patch_overlap_max_pairs": "Most same-surface point pairs taken from one object-store patch overlap. An overlap weighs the same in the patch_overlaps sampling group however many pairs it yields.",
"pcl_fiber_min_point_spacing": "Fibers are fitted from their dense traced line (trimmed to the first-to-last control point span), thinned so consecutive kept points are at least this many scroll voxels apart; patch contacts and cross-fiber link endpoints are always kept. Lower keeps more points per fiber; 0 keeps every point.",
"pcl_unattached_pcl_min_point_spacing": "Point thinning for the unattached-strip loss, which follows point collections and fibers through regions without patches. Points are kept in order so consecutive kept points are at least this many scroll voxels apart (end points and fiber link points always kept). Lower gives denser supervision at more cost; 0 disables thinning.",
"pcl_link_distance_tolerance": "Reference-volume voxels within which the object store's point-patch link detector attaches a point collection point to a patch surface when the fit refreshes links at startup. Candidates are ranked largest-area patch first, then nearest.",
"pcl_link_window_points": "Consecutive points (id order, centred on the point, the point included) whose hits on a candidate patch are counted for pcl_link_window_min_points. Even counts round up to the next odd count; 1 disables the window.",
"pcl_link_window_min_points": "A candidate patch (one the point itself lies within tolerance of) is eligible only when at least this many of the window's points lie within tolerance of it; eligible candidates are then ranked as usual (largest area, then nearest). 1 keeps the single-point choice; the requirement is clipped to the window members available at a collection's ends. Must not exceed pcl_link_window_points. Used by the startup link refresh.",
"pcl_use_fiber_links": "Use cross-fiber links (the object store's same-winding fiber branches). On: linked fibers merge into one connected collection, so winding ties propagate through junctions and unattached-strip walks can hop between fibers. Off: links are ignored and each fiber stands alone. Pending branches are used unless object_store_approved_links_only is on.",
"pcl_vertical_fiber_min_z_fraction": "Geometric fallback for tagging a fiber vertical or horizontal when VC3D has no manual tag and no confident automatic tag. A fiber whose z extent is at least this fraction (0 to 1) of its path length is vertical, at most 1 minus it is horizontal, otherwise untagged. Tags drive the vertical radial offset.",
"pcl_vertical_fiber_min_auto_certainty": "Minimum recorded certainty (0 to 1) for VC3D's automatic horizontal/vertical fiber tag to be trusted. Manual tags always win; below this threshold the geometric z-fraction fallback decides instead. Raising it relies less on automatic tags.",
"pcl_vertical_fiber_radial_offset_enabled": "Vertical fibers lie on the back face of the papyrus sheet rather than the front face the fit targets. When on, vertical fibers' radius and distance targets in the unattached-strip loss sit pcl_vertical_fiber_radial_offset_voxels off the winding along the sheet normal. Horizontal fibers are unaffected.",
"pcl_vertical_fiber_radial_offset_voxels": "Distance in scroll voxels, along the sheet normal, between a vertical fiber and the winding it belongs to when the vertical radial offset is enabled. Positive moves the target toward increasing winding (outward). It is a physical distance, converted per point to the model's local stretch.",
"track_min_sample_spacing": "Smallest preferred spacing, in scroll voxels, between consecutive points when tracks are resampled along their length for the track losses. Spacing can fall below this only for one short step next to a track end or a crossing point. Must not exceed track_max_sample_spacing.",
"track_max_sample_spacing": "Largest spacing, in scroll voxels, between consecutive points when tracks are resampled along their length for the track losses. Tracks use the fewest points that keep every gap within this limit, so lowering it puts more points on each track, giving finer constraints at more cost.",
"track_length_bin_weights": "Relative chance of drawing short, medium and long tracks for the track losses, as three non-negative numbers. Tracks are split into equal-count thirds by length, and tracks within a third are equally likely. Only the ratios matter. Null draws all tracks equally often.",
"track_max_tortuosity": "Drops tracks whose length divided by the straight-line distance between their ends exceeds this value, removing very winding or looping tracks. Must be at least 1; lower values keep only straighter tracks. Null keeps all tracks.",
"track_crossing_precompute_max": "Upper limit on the number of crossing tracks that can be paired with each sampled track, prepared when tracks are loaded. track_max_track_crossing_per_step cannot exceed it. 0 skips preparing crossings, so no crossing partners can be used.",
"track_max_track_crossing_per_step": "Maximum number of crossing tracks added to each sampled track at every step. Partners are aligned at their shared crossing point and held to the same winding as the sampled track, so crossings link tracks together. 0 samples tracks on their own.",
"track_exclusion_radius": "Track points closer than this distance, in scroll voxels, to verified patch or point-collection geometry are removed before fitting, so tracks only add constraints where trusted annotations don't already exist. Tracks left with fewer than two points are dropped. 0 keeps all track points.",
"track_radius_target": "Value each sampled track group (a track plus its crossing partners) is pulled towards in the track radius loss. Mean uses the average spiral radius of the group's points; median uses the middle value, which is less affected by a few stray points.",
"track_radius_loss_margin": "Tolerance for the track radius loss, as a fraction of the winding spacing. Only the part of a track point's spiral-radius deviation from its group target that exceeds this margin is penalised. Raise it to allow more spread along tracks; 0 penalises any deviation.",
"track_radius_within_norm_p": "Exponent of the power mean over all points of a track group (a track plus its crossing partners) in the track radius loss. Higher values make each group's loss follow its worst-deviating points, punishing tracks that jump windings; 1 is a plain mean.",
"track_dt_within_track_norm_p": "Exponent of the power mean over all points of a track group (a track plus its crossing partners) when computing that group's DT error (scroll-space distance to its target whole winding). Higher values make the error follow the worst-fitting points; 1 is a plain mean.",
"track_dt_norm_p": "Exponent of the power mean that combines the per-group track DT errors into one loss. Values below 1 reduce the influence of track groups with large errors, making the loss robust to a few bad tracks. 1 is a plain mean; higher values focus on the worst groups.",
"track_dt_loss_margin": "Tolerance for the track DT loss, as a fraction of the winding spacing. Only the part of a track point's scroll-space distance from its target whole winding that exceeds this margin is penalised. Raise it to stop pulling points that are already close; 0 penalises any distance.",
"dense_grad_mag_encode_scale": "Quantisation scale of the gradient-magnitude (winding density) volume: stored bytes are divided by this to recover density. Should match the grad_mag_encode_scale the volume was written with. Raising it lowers the decoded density, so the grad_mag spacing loss favours wider winding spacing.",
"dense_grad_mag_factor": "Multiplier on the decoded gradient-magnitude winding density used by the grad_mag spacing loss. Raising it makes each voxel count as more windings, pushing the fit toward tighter winding spacing; lowering it allows wider spacing. Unused in winding_model mode.",
"dense_spacing_integration_steps": "Number of evenly spaced density samples along each one-winding scroll-space segment when the grad_mag spacing loss integrates winding density. More steps give a more accurate count of windings crossed at the cost of more volume lookups. Unused in winding_model mode.",
"dense_spacing_mode": "Source of dense winding-spacing supervision. grad_mag: integrate the gradient-magnitude winding density across one winding step and push the count toward 1. winding_model: use the precomputed winding-inference store (relative winding between sampled point pairs plus a density term) inside the outer shell; requires the winding-inference store and an outer shell.",
"winding_model_relative_pair_delta": "Range [min, max] of separations, counted in sheet crossings along a winding-inference ray, between the two crossings in each pair sampled for the winding-model relative spacing loss. Requires 1 <= min <= max.",
"winding_model_huber_delta": "Huber threshold, in windings, for both winding-model spacing losses: residuals between fitted and inferred winding differences below it are penalised quadratically, larger ones only linearly, limiting the pull of outlier crossings.",
"loss_weight_min_spacing": "Weight of the minimum-spacing barrier, which stops windings collapsing together by penalising sampled gaps between adjacent fitted windings narrower than dense_min_spacing_d_min_wv. It works in any dense spacing mode and needs no input data. 0 disables it.",
"loss_weight_dense_spacing_density": "Weight of the winding-model density loss (dense_spacing_mode = winding_model only). For adjacent sheet crossings along neural winding-inference rays, it makes the fitted winding difference match the inferred one, controlling local winding spacing. 0 disables it.",
"loss_weight_patch_radius": "Weight of the patch radius loss, which keeps each verified patch on a single winding by penalising spread of its sampled points' unwrapped spiral radius around the patch mean (beyond a small margin). It does not choose which winding. 0 disables it.",
"loss_weight_patch_dt": "Weight of the patch DT (winding snap) loss, which pulls every sampled point of a verified patch onto one whole-winding target chosen as set by dt_target_mode. Active only after loss_start_patch_dt. 0 disables it.",
"loss_weight_rel_winding": "Weight of the relative winding loss. For point collections with winding annotations whose points lie on two or more verified patches, it makes the fitted winding difference between those patches match the annotated difference. 0 disables it.",
"loss_weight_abs_winding": "Weight of the absolute winding loss. For point collections marked as absolute windings, it pulls the verified patches under their points onto the annotated winding number. 0 disables it.",
"loss_weight_unattached_pcl_radius": "Weight of the radius loss for point collections and fibers with points not on any verified patch. It keeps each strip, and fibers joined to it by same-winding links, on one fitted winding (respecting per-point winding annotations). 0 disables it.",
"loss_weight_unattached_pcl_dt": "Weight of the DT (winding snap) loss for point collections and fibers with points not on any verified patch: pulls each sampled point onto a whole-winding target chosen as set by dt_target_mode. Active only after loss_start_unattached_pcl_dt. 0 disables it.",
"loss_fiber_link_branch_probability": "Probability (0 to 1) of hopping onto a linked fiber at each link junction when a walk is sampled through a group of linked fibers for the unattached point-collection losses. Higher values cross more links per step; 0 keeps each walk on one strip.",
"loss_weight_track_radius": "Weight of the track radius loss, which keeps every point of each sampled surface track (and tracks crossing it) on a single fitted winding. It does not choose which winding. 0 disables it; tracks go unused when this and loss_weight_track_dt are both 0.",
"loss_weight_track_dt": "Weight of the track DT (winding snap) loss, which pulls the points of each sampled surface track onto one whole-winding target chosen as set by dt_target_mode. Active only after loss_start_track_dt. 0 disables it.",
"loss_weight_sym_dirichlet": "Weight of the symmetric Dirichlet regulariser on the scroll-to-spiral mapping within the sheet. It penalises in-surface stretching or compression and strongly resists collapse and folds. 0 disables it.",
"loss_weight_dense_normals": "Weight of the dense normals loss, which aligns the fitted sheet orientation with the precomputed surface-normal volume at points sampled throughout the scroll. Needs the normals input; 0 disables it.",
"loss_weight_fiber_directions": "Weight of the fiber direction loss, which penalises predicted fiber axes that point out of the fitted winding's surface, weighted by prediction confidence. It constrains local sheet orientation only, not which winding. Needs the fiber directions input; 0 disables it.",
"loss_weight_dense_spacing": "Weight of the main dense spacing loss. In winding_model mode it makes fitted winding differences between distant crossing pairs on neural winding-inference rays match the inferred ones; in grad_mag mode it makes each fitted winding span one winding of the gradient-magnitude density. 0 disables it.",
"loss_weight_umbilicus": "Weight of the umbilicus loss, which pulls the umbilicus (the scroll's central axis) onto the centre of the fitted spiral. 0 disables it.",
"loss_weight_shell_outer": "Weight of the outer shell loss, which pulls the outermost fitted winding (shell_outer_winding_idx) onto the scroll's outer shell surface. Needs the shell input; 0 disables it.",
"dense_min_spacing_d_min_wv": "Minimum gap between adjacent windings enforced by the minimum-spacing barrier, in the model's radial units (the same units as the nominal spacing per winding). Sampled gaps below it are penalised to stop windings collapsing together. Raising it resists compression more strongly. Active in every dense spacing mode.",
"dense_normals_finite_difference_epsilon": "Finite-difference step, in scroll voxels along each axis, used to estimate the fitted sheet's normal for the dense normals loss. Larger values measure the fitted surface orientation over a wider neighbourhood; smaller values are more local.",
"fiber_directions_finite_difference_epsilon": "Finite-difference step, in scroll voxels, used to estimate the fitted sheet's normal at fiber-direction samples for the fiber-direction loss, which penalises fiber axes that leave the fitted winding's surface. Larger steps average the normal over a wider neighbourhood; smaller steps are more local.",
"model_sym_dirichlet_finite_difference_epsilon": "Finite-difference step, in spiral-space voxels along the sheet (z and around the winding), used to measure local stretching of the fitted surface for the symmetric Dirichlet regulariser, which resists in-sheet distortion and fold-over. Larger steps measure distortion over a wider span; smaller steps are more local.",
"optimizer_weight_decay_gap_expander": "AdamW weight decay on the gap expander's parameters, which pulls each local inter-winding gap back toward the spiral's global winding spacing. Higher values keep winding spacing more uniform; lower values let gaps vary more freely.",
"optimizer_weight_decay_flow_field": "AdamW weight decay on the coarse and fine flow lattices, which pulls the flow toward zero (no deformation). Higher values bias the fit toward smaller deformations; 0 disables it.",
"loss_start_patch_dt": "Optimisation step after which the verified-patch DT (winding snap) loss turns on. It is also the start step for the track and unattached point-collection DT losses when their own start is null.",
"loss_start_track_dt": "Optimisation step after which the track DT (winding snap) loss turns on. Null uses loss_start_patch_dt.",
"loss_start_unattached_pcl_dt": "Optimisation step after which the DT (winding snap) loss for unattached point collections and fibers turns on. Null uses loss_start_patch_dt.",
"dt_target_mode": "How DT losses choose each object's target winding. strip_median: every step, the nearest whole winding to the median of that step's sampled points. whole_object_quantile: chosen from a sparse sample of the whole object and cached; objects lying mostly between windings target the next winding outward.",
"dt_target_floating_threshold": "In whole_object_quantile mode, an object whose points' median distance to the nearest whole winding exceeds this value (in windings) is treated as floating in a gap and targets the next winding outward instead of the nearest. Values of 0.5 or more never mark an object floating.",
"dt_target_update_interval": "Optimisation steps between recomputations of the cached whole-object DT targets (whole_object_quantile mode). It shares one cadence with theta_crossing_map_update_interval; setting either sets both.",
"dt_target_max_stride": "Maximum spacing, in scroll voxels, between the sparse samples used to choose whole-object DT targets along strips and across patch grids (whole_object_quantile mode). Smaller values sample more densely. 0 removes the cap.",
"output_first_winding": "Innermost winding index included in the exported surfaces and PNG overlays. Windings inside it are never written, even if inputs reach further in.",
"output_winding_margin": "Number of extra windings added inside and outside the winding range covered by the inputs (patches, point collections, tracks) when choosing which windings to export. The inner end is still limited by the first output winding.",
"output_step_size": "Grid spacing, in voxels along z and along each winding, of the exported winding surfaces, preview mesh and loss maps. Smaller values give denser meshes but larger files and slower export.",
"shell_outer_winding_idx": "Winding index pinned to the scroll's outer shell by the outer-shell loss, and the outermost winding sampled by the dense normals, spacing, regularisation and minimum-spacing losses. Integer of at least 2. Empty: inferred from the highest winding reached by patches and point collections plus shell_outer_winding_margin when shell losses are active; otherwise those losses are disabled.",
"shell_outer_winding_margin": "Windings added above the highest winding reached by patches and point collections when shell_outer_winding_idx is empty and has to be inferred. No effect when shell_outer_winding_idx is set explicitly.",
"shell_num_theta_bins": "Angular resolution of the outer-shell lookup table: the full turn around the umbilicus is split into this many bins, and shell radius is averaged per z slice and bin. More bins capture finer angular detail but leave more empty bins to fill from neighbours.",
"shell_huber_delta": "Huber transition, in scroll voxels, for the outer-shell loss on the radius gap between the outer winding and the shell. Errors smaller than this are penalised quadratically, larger ones linearly; lowering it makes the loss less sensitive to large mismatches and shell outliers.",
"shell_table_smooth_sigma_z": "Gaussian smoothing of the outer-shell radius and confidence tables along z, in z slices (scroll voxels). Larger values give a smoother shell target along the scroll axis; 0 disables smoothing along z.",
"shell_table_smooth_sigma_theta": "Gaussian smoothing of the outer-shell radius and confidence tables around the umbilicus, in angle bins (each one turn divided by shell_num_theta_bins), wrapping around the full turn. Larger values give a smoother shell target; 0 disables angular smoothing.",
"shell_min_confidence": "Minimum shell coverage confidence (0 to 1, smoothed occupancy of the shell table normalised to the best-covered cell) for a shell lookup to count. Below it, outer-shell loss samples are ignored and winding_model supervision pairs are dropped. Raising it restricts both to well-covered parts of the shell.",
"output_save_png_visualizations": "When on, PNG overlays of the fitted spiral on scroll slices are written at the end of a fit, colored by how well patches and strips are satisfied. This adds slice loading and rendering time at the end of the fit.",
"output_num_slices_for_visualization": "Number of z slices, evenly spaced across the z range, rendered as PNG overlays when PNG visualizations are on. More slices take more time and disk space.",
"object_store_location": "Where the vc_object_store the fit reads patches, fibers, point collections and their relationships from is: a store file (.vcobj) on this host, or the endpoint of the vc_object_server serving one (http://host:port, or ssh://host:port for the server on a remote host's loopback port). Required by the command-line fit, which loads no patch directories, fiber files or PCL documents.",
"object_store_author": "Author recorded on the relationships the startup link refresh writes back to the object store. Required when link refresh is on.",
"object_store_link_timeout_s": "How long one link refresh of a served store may take, in seconds: its detectors run on vc_object_server, which answers when they are done, so set this with the server's --request-deadline (unset: 300, the server's default). A store file links in this process, without a timeout.",
"object_store_input_position": "The store position ({store, generation, commit_sequence}: the store's UUID, history generation and a commit of it; in memory also the pinned object versions) this fit reads exactly, set by the service after it linked and pinned one; a command-line fit links and pins its own. Service-owned.",
"object_store_refresh_links": "At startup, rerun the store's automatic PCL-patch, fiber-patch and patch-overlap detectors over the selected objects and write their results back to the store before reading the fit's inputs. Any detector failure stops the fit before training. Off reads the store's current relationships without writing. The detectors are skipped when the store's link marker shows the links still current (nothing they depend on changed since the last full refresh), and an input update links only objects added since it.",
"object_store_full_link_refresh": "Always run every link detector over the whole selection, ignoring the store's link marker: no skip when nothing changed, and no incremental linking of added objects on an input update.",
"object_store_approved_links_only": "Consume only approved relationships (automatic and explicit). Otherwise pending and approved ones are used; rejected ones never are. Refresh still runs, so newly detected links stay pending and are excluded.",
"object_store_allow_changed_inputs": "Allow resuming a checkpoint whose recorded object-store inputs, frames or materialization settings differ from this fit's. Off refuses such a resume.",
"object_store_patch_uuids": "Patches to fit, by UUID (with the tags below). Unset with no tags selects every active patch with geometry; an empty list selects none.",
"object_store_patch_tags": "Also select the active patches carrying any of these tags.",
"object_store_pcl_uuids": "Point collections to use, by UUID (with the tags below). Unset with no tags selects every active collection with geometry; an empty list selects none.",
"object_store_pcl_tags": "Also select the active point collections carrying any of these tags.",
"object_store_fiber_uuids": "Fibers to use, by UUID (with the tags below). Unset with no tags selects every active fiber with geometry; an empty list selects none.",
"object_store_fiber_tags": "Also select the active fibers carrying any of these tags.",
"object_store_track_uuids": "Tracks to use, by UUID (with the tags below). Unset with no tags selects every active track with geometry; an empty list selects none.",
"object_store_track_tags": "Also select the active tracks carrying any of these tags.",
"object_store_normal_ct_path": "CT zarr whose structure-tensor normals guide fiber-patch link refresh when the fit has no lasagna normals. Lasagna normals are used for link refresh whenever input_use_normals is on and the normal stores exist, even with the dense-normal loss off. Without either, fiber-patch links are gated by the fiber centerline alone, with a warning.",
"object_store_normal_ct_level": "Pyramid level of the normal CT zarr to read: the group <object_store_normal_ct_path>/<level>, whatever the zarr's multiscales metadata lists.",
"object_store_normal_ct_downsampling": "Downsampling of the selected normal CT level relative to the fit volume (selected CT voxel = fit voxel / this).",
"object_store_normal_ct_volume_uuid": "The volume the normal CT belongs to; must be the fit volume.",
"fit_volume_uuid": "The reference volume whose voxels are the fit's units. Unset infers it from the frames the selected objects declare; it must agree with every declaration.",
"fit_volume_level": "The pyramid level of the fit volume the fit works in: a fit voxel is 2^level of the volume's voxels, so the z range and every setting in voxels are in that level's voxels. Inputs are converted to it, and exported surfaces back to the volume's own voxels. The winding-inference artifact and a CT array (scroll_zarr) must already be at that level.",
"spiral_outward_sense": "The direction the spiral winds outwards (CW or ACW) where the fit volume's catalog orientation does not decide it; one that disagrees with the orientation is refused. Read it off the CT, or from an already-fitted spiral."
}
}