more quality of life updates
This commit is contained in:
51
arhdf.log
51
arhdf.log
@@ -1,51 +0,0 @@
|
|||||||
|
|
||||||
=== Channel: Adhesion:Retrace ===
|
|
||||||
DimScaling shape: (2, 2)
|
|
||||||
DimScaling[0,:]: [8.656250e-06 1.665625e-05] (row 0)
|
|
||||||
DimScaling[1,:]: [-4.e-06 4.e-06] (row 1)
|
|
||||||
--- If [start, end] interpretation ---
|
|
||||||
xreal (row1 range) = 8e-06
|
|
||||||
yreal (row0 range) = 7.999999999999998e-06
|
|
||||||
--- If [step, offset] interpretation ---
|
|
||||||
row0: step=8.656249999999648e-06 offset=1.6656249999999646e-05
|
|
||||||
row1: step=-4e-06 offset=4e-06
|
|
||||||
DimUnits: ['m' 'm']
|
|
||||||
DataUnits: N
|
|
||||||
DimExtents ('Resolution 0'): [512 384]
|
|
||||||
|
|
||||||
=== Channel: FFMZSensor:Retrace ===
|
|
||||||
DimScaling shape: (2, 2)
|
|
||||||
DimScaling[0,:]: [8.656250e-06 1.665625e-05] (row 0)
|
|
||||||
DimScaling[1,:]: [-4.e-06 4.e-06] (row 1)
|
|
||||||
--- If [start, end] interpretation ---
|
|
||||||
xreal (row1 range) = 8e-06
|
|
||||||
yreal (row0 range) = 7.999999999999998e-06
|
|
||||||
--- If [step, offset] interpretation ---
|
|
||||||
row0: step=8.656249999999648e-06 offset=1.6656249999999646e-05
|
|
||||||
row1: step=-4e-06 offset=4e-06
|
|
||||||
DimUnits: ['m' 'm']
|
|
||||||
DataUnits: m
|
|
||||||
DimExtents ('Resolution 0'): [512 384]
|
|
||||||
|
|
||||||
=== Channel: MaxForce:Retrace ===
|
|
||||||
DimScaling shape: (2, 2)
|
|
||||||
DimScaling[0,:]: [8.656250e-06 1.665625e-05] (row 0)
|
|
||||||
DimScaling[1,:]: [-4.e-06 4.e-06] (row 1)
|
|
||||||
--- If [start, end] interpretation ---
|
|
||||||
xreal (row1 range) = 8e-06
|
|
||||||
yreal (row0 range) = 7.999999999999998e-06
|
|
||||||
--- If [step, offset] interpretation ---
|
|
||||||
row0: step=8.656249999999648e-06 offset=1.6656249999999646e-05
|
|
||||||
row1: step=-4e-06 offset=4e-06
|
|
||||||
DimUnits: ['m' 'm']
|
|
||||||
DataUnits: N
|
|
||||||
DimExtents ('Resolution 0'): [512 384]
|
|
||||||
|
|
||||||
=== 2D dataset shapes ===
|
|
||||||
Image/DataSet/Resolution 0/Frame 0/Adhesion:Retrace/Image shape=(512, 384)
|
|
||||||
Image/DataSet/Resolution 0/Frame 0/FFMZSensor:Retrace/Image shape=(512, 384)
|
|
||||||
Image/DataSet/Resolution 0/Frame 0/MaxForce:Retrace/Image shape=(512, 384)
|
|
||||||
Image/DataSetInfo/Global/Channels/Adhesion:Retrace/Thumbnail shape=(128, 128)
|
|
||||||
Image/DataSetInfo/Global/Channels/FFMZSensor:Retrace/Thumbnail shape=(128, 128)
|
|
||||||
Image/DataSetInfo/Global/Channels/MaxForce:Retrace/Thumbnail shape=(128, 128)
|
|
||||||
Image/DataSetInfo/Global/Thumbnail shape=(128, 128)
|
|
||||||
@@ -23,7 +23,7 @@ class ThresholdMask:
|
|||||||
|
|
||||||
OUTPUTS = (
|
OUTPUTS = (
|
||||||
('IMAGE', 'mask'),
|
('IMAGE', 'mask'),
|
||||||
('RECORD_TABLE', 'threshold'),
|
('FLOAT', 'threshold'),
|
||||||
)
|
)
|
||||||
FUNCTION = "process"
|
FUNCTION = "process"
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,22 @@ FRONTEND_DIR = frontend_dir()
|
|||||||
DIST_DIR = frontend_dist_dir()
|
DIST_DIR = frontend_dist_dir()
|
||||||
PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n"
|
PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n"
|
||||||
|
|
||||||
|
GITHUB_REPO = "vipqualitypost/tono"
|
||||||
|
_APP_VERSION: str | None = None
|
||||||
|
|
||||||
|
|
||||||
|
def _get_app_version() -> str:
|
||||||
|
global _APP_VERSION
|
||||||
|
if _APP_VERSION is not None:
|
||||||
|
return _APP_VERSION
|
||||||
|
try:
|
||||||
|
import tomllib
|
||||||
|
with open(project_root() / "pyproject.toml", "rb") as f:
|
||||||
|
_APP_VERSION = tomllib.load(f)["project"]["version"]
|
||||||
|
except Exception:
|
||||||
|
_APP_VERSION = "0.0.0"
|
||||||
|
return _APP_VERSION
|
||||||
|
|
||||||
|
|
||||||
class _SafeEncoder(json.JSONEncoder):
|
class _SafeEncoder(json.JSONEncoder):
|
||||||
def default(self, obj):
|
def default(self, obj):
|
||||||
@@ -568,6 +584,30 @@ def create_app(
|
|||||||
)
|
)
|
||||||
return ws
|
return ws
|
||||||
|
|
||||||
|
async def check_update(_request: web.Request) -> web.Response:
|
||||||
|
import aiohttp as _aiohttp
|
||||||
|
|
||||||
|
current = _get_app_version()
|
||||||
|
url = f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
|
||||||
|
try:
|
||||||
|
async with _aiohttp.ClientSession() as session:
|
||||||
|
async with session.get(url, timeout=_aiohttp.ClientTimeout(total=5),
|
||||||
|
headers={"Accept": "application/vnd.github.v3+json"}) as resp:
|
||||||
|
if resp.status != 200:
|
||||||
|
return web.json_response({"current": current, "latest": None, "update_available": False})
|
||||||
|
data = await resp.json()
|
||||||
|
latest = str(data.get("tag_name", "")).lstrip("vV")
|
||||||
|
html_url = str(data.get("html_url", ""))
|
||||||
|
update_available = latest != "" and latest != current
|
||||||
|
return web.json_response({
|
||||||
|
"current": current,
|
||||||
|
"latest": latest,
|
||||||
|
"update_available": update_available,
|
||||||
|
"url": html_url,
|
||||||
|
})
|
||||||
|
except Exception:
|
||||||
|
return web.json_response({"current": current, "latest": None, "update_available": False})
|
||||||
|
|
||||||
app = web.Application()
|
app = web.Application()
|
||||||
app["allow_local_filesystem"] = allow_local_filesystem
|
app["allow_local_filesystem"] = allow_local_filesystem
|
||||||
|
|
||||||
@@ -587,6 +627,7 @@ def create_app(
|
|||||||
app.router.add_get("/help-docs", get_help_docs)
|
app.router.add_get("/help-docs", get_help_docs)
|
||||||
app.router.add_get("/help-docs/{filename}", get_help_doc_file)
|
app.router.add_get("/help-docs/{filename}", get_help_doc_file)
|
||||||
app.router.add_post("/prompt", submit_prompt)
|
app.router.add_post("/prompt", submit_prompt)
|
||||||
|
app.router.add_get("/check-update", check_update)
|
||||||
app.router.add_get("/ws", websocket_handler)
|
app.router.add_get("/ws", websocket_handler)
|
||||||
|
|
||||||
if (DIST_DIR / "assets").exists():
|
if (DIST_DIR / "assets").exists():
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Interactive 3D surface view of a DATA_FIELD. Use the mesh input for geometry and
|
|||||||
| resolution | INT | 128 | Downsampling resolution for mesh generation (32–512) |
|
| resolution | INT | 128 | Downsampling resolution for mesh generation (32–512) |
|
||||||
| make_solid | BOOLEAN | False | When enabled adds a flat base and side walls to close the mesh |
|
| make_solid | BOOLEAN | False | When enabled adds a flat base and side walls to close the mesh |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Resolution is applied by uniform subsampling; fine features smaller than one mesh step may be lost.
|
- Resolution is applied by uniform subsampling; fine features smaller than one mesh step may be lost.
|
||||||
- Non-square pixels emit a warning and the 3D surface represents physical scan area, not pixel grid.
|
- Non-square pixels emit a warning and the 3D surface represents physical scan area, not pixel grid.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Compute the one-dimensional autocorrelation function of a line profile. Only pos
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| level | dropdown | mean | Pre-processing: subtract mean before correlation, or none |
|
| level | dropdown | mean | Pre-processing: subtract mean before correlation, or none |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Only one-sided (positive lag) ACF is returned.
|
- Only one-sided (positive lag) ACF is returned.
|
||||||
- Peak period detection finds only the first local maximum; multi-periodic signals report only the shortest detected period.
|
- Peak period detection finds only the first local maximum; multi-periodic signals report only the shortest detected period.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Compute the two-dimensional autocorrelation function with Gwyddion-style mean or
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| level | dropdown | mean | Pre-processing applied before correlation: mean subtraction, plane subtraction, or none |
|
| level | dropdown | mean | Pre-processing applied before correlation: mean subtraction, plane subtraction, or none |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Output is not normalized to [−1, 1]; peak value equals the field variance.
|
- Output is not normalized to [−1, 1]; peak value equals the field variance.
|
||||||
- Plane levelling assumes a linear trend; strongly curved surfaces may not detrend correctly.
|
- Plane levelling assumes a linear trend; strongly curved surfaces may not detrend correctly.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Measure the included angle between two draggable line segments over a DATA_FIELD
|
|||||||
| color | STRING (color picker) | #ff9800 | Overlay color for the angle arms and arc |
|
| color | STRING (color picker) | #ff9800 | Overlay color for the angle arms and arc |
|
||||||
| stroke_width | FLOAT | 1.35 | Line thickness in display pixels (0.35–6.0) |
|
| stroke_width | FLOAT | 1.35 | Line thickness in display pixels (0.35–6.0) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Coordinates are stored as fractions of the image dimensions; physical units depend on the input field's calibration.
|
- Coordinates are stored as fractions of the image dimensions; physical units depend on the input field's calibration.
|
||||||
- Angle measurement is the included angle at the vertex, always in [0°, 180°].
|
- Angle measurement is the included angle at the vertex, always in [0°, 180°].
|
||||||
|
|||||||
@@ -25,6 +25,6 @@ Attach optional publication-style annotations (scale bar, color-map legend) to a
|
|||||||
| show_color_map | BOOLEAN | True | Render a color-map legend with min/mid/max values |
|
| show_color_map | BOOLEAN | True | Render a color-map legend with min/mid/max values |
|
||||||
| text_size | FLOAT | 14.0 | Font size in points for annotation labels (6–96) |
|
| text_size | FLOAT | 14.0 | Font size in points for annotation labels (6–96) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Scale bar and color-map legend require the input to carry physical dimension and unit metadata; plain images without metadata will emit a warning and the feature will be skipped.
|
- Scale bar and color-map legend require the input to carry physical dimension and unit metadata; plain images without metadata will emit a warning and the feature will be skipped.
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Blind tip estimation from a measured SPM image using the Villarrubia algorithm.
|
|||||||
| method | dropdown | partial | partial: uses local maxima only (faster, needs sharp isolated features); full: uses all points above morphological opening (slower, more robust) |
|
| method | dropdown | partial | partial: uses local maxima only (faster, needs sharp isolated features); full: uses all points above morphological opening (slower, more robust) |
|
||||||
| use_edges | BOOLEAN | False | When enabled, also uses image edge pixels as refinement candidates |
|
| use_edges | BOOLEAN | False | When enabled, also uses image edge pixels as refinement candidates |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Requires sharp, isolated features on the surface for reliable results.
|
- Requires sharp, isolated features on the surface for reliable results.
|
||||||
- Output tip has the same pixel size as the input field; tip deconvolution requires matching pixel sizes.
|
- Output tip has the same pixel size as the input field; tip deconvolution requires matching pixel sizes.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ None.
|
|||||||
| preset | dropdown | viridis | Built-in colormap preset name; visible when mode is preset |
|
| preset | dropdown | viridis | Built-in colormap preset name; visible when mode is preset |
|
||||||
| stops | STRING (colormap editor) | default gradient | JSON array of color stops for the custom gradient; visible when mode is custom |
|
| stops | STRING (colormap editor) | default gradient | JSON array of color stops for the custom gradient; visible when mode is custom |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Custom colormaps must include at least a minimum and maximum color stop.
|
- Custom colormaps must include at least a minimum and maximum color stop.
|
||||||
- Stops must be valid JSON; invalid JSON will raise an error.
|
- Stops must be valid JSON; invalid JSON will raise an error.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Adjust how a DATA_FIELD maps into its colormap without changing the underlying d
|
|||||||
| scale | FLOAT | 1.0 | Zoom the colormap range (0.05–4.0); values below 1 stretch contrast |
|
| scale | FLOAT | 1.0 | Zoom the colormap range (0.05–4.0); values below 1 stretch contrast |
|
||||||
| auto | BUTTON | — | Reset offset to 0 and scale to 1 (full data range) |
|
| auto | BUTTON | — | Reset offset to 0 and scale to 1 (full data range) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Only the display mapping metadata is changed; raw data values are unaffected.
|
- Only the display mapping metadata is changed; raw data values are unaffected.
|
||||||
- Scale must be positive and finite; zero or negative values raise an error.
|
- Scale must be positive and finite; zero or negative values raise an error.
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ Combine two COORD values into a single COORDPAIR for use with nodes that accept
|
|||||||
|
|
||||||
None.
|
None.
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Coordinates are expected to be in the [0, 1] fractional range; values outside this range may produce unexpected results in downstream nodes.
|
- Coordinates are expected to be in the [0, 1] fractional range; values outside this range may produce unexpected results in downstream nodes.
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ None.
|
|||||||
| x | FLOAT | 0.5 | Horizontal position as a fraction of image width (0 = left, 1 = right) |
|
| x | FLOAT | 0.5 | Horizontal position as a fraction of image width (0 = left, 1 = right) |
|
||||||
| y | FLOAT | 0.5 | Vertical position as a fraction of image height (0 = top, 1 = bottom) |
|
| y | FLOAT | 0.5 | Vertical position as a fraction of image height (0 = top, 1 = bottom) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Values are clamped to [0, 1] by downstream nodes; this node does not enforce clamping itself.
|
- Values are clamped to [0, 1] by downstream nodes; this node does not enforce clamping itself.
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Crop a DATA_FIELD with a draggable rectangle defined by two corners, then option
|
|||||||
| target_height | INT | 0 | Output pixel height after resampling (0 = keep cropped height) |
|
| target_height | INT | 0 | Output pixel height after resampling (0 = keep cropped height) |
|
||||||
| interpolation | dropdown | bilinear | Resampling interpolation: bilinear, nearest, or bicubic |
|
| interpolation | dropdown | bilinear | Resampling interpolation: bilinear, nearest, or bicubic |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The crop region must have non-zero width and height; an error is raised otherwise.
|
- The crop region must have non-zero width and height; an error is raised otherwise.
|
||||||
- If only one of target_width or target_height is set, the other dimension is computed to preserve aspect ratio.
|
- If only one of target_width or target_height is set, the other dimension is computed to preserve aspect ratio.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Extract a cross-section height profile along a line between two draggable points
|
|||||||
| extend | dropdown | none | none: profile between the two markers; to_edges: extend line to image borders |
|
| extend | dropdown | none | none: profile between the two markers; to_edges: extend line to image borders |
|
||||||
| n_samples | INT | 0 | Number of sample points along the profile (0 = auto, one per pixel diagonal) |
|
| n_samples | INT | 0 | Number of sample points along the profile (0 = auto, one per pixel diagonal) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Profile is sampled using cubic spline interpolation (order 3); sharp step edges may show ringing.
|
- Profile is sampled using cubic spline interpolation (order 3); sharp step edges may show ringing.
|
||||||
- Physical x-axis of the output profile is the Euclidean distance in field xy units.
|
- Physical x-axis of the output profile is the Euclidean distance in field xy units.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Compute 2D cross-correlation between two fields. The correlation peak indicates
|
|||||||
| mode | dropdown | same | Output size: full (Na+Nb−1), same (same as field_a), or valid (overlapping region only) |
|
| mode | dropdown | same | Output size: full (Na+Nb−1), same (same as field_a), or valid (overlapping region only) |
|
||||||
| normalize | BOOLEAN | True | Normalize the result to [−1, 1] by dividing by the product of RMS values |
|
| normalize | BOOLEAN | True | Normalize the result to [−1, 1] by dividing by the product of RMS values |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Both fields must be of compatible numpy array types; very different sizes in full mode produce large outputs.
|
- Both fields must be of compatible numpy array types; very different sizes in full mode produce large outputs.
|
||||||
- Mean is subtracted before correlation; absolute offset information is lost.
|
- Mean is subtracted before correlation; absolute offset information is lost.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Place two draggable cursors on a line plot or 2D field to measure positions and
|
|||||||
|
|
||||||
None (cursor positions are set by dragging in the preview panel).
|
None (cursor positions are set by dragging in the preview panel).
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- When a COORDPAIR is connected, the cursor positions are locked and cannot be dragged interactively.
|
- When a COORDPAIR is connected, the cursor positions are locked and cannot be dragged interactively.
|
||||||
- On 2D fields, z values are sampled with bilinear (order 1) interpolation.
|
- On 2D fields, z values are sampled with bilinear (order 1) interpolation.
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Fit a quadratic surface and report the overall principal curvature radii and dir
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| masking | dropdown | ignore | How to use the mask: ignore (fit all pixels), include (fit only masked pixels), or exclude (fit unmasked pixels) |
|
| masking | dropdown | ignore | How to use the mask: ignore (fit all pixels), include (fit only masked pixels), or exclude (fit unmasked pixels) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Requires at least six usable pixels for the quadratic fit; fewer pixels produce no output.
|
- Requires at least six usable pixels for the quadratic fit; fewer pixels produce no output.
|
||||||
- The fit assumes a globally smooth quadratic surface; locally rough or step-like surfaces give unreliable results.
|
- The fit assumes a globally smooth quadratic surface; locally rough or step-like surfaces give unreliable results.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Apply a user-defined convolution kernel to a DATA_FIELD. Enter rows of space-sep
|
|||||||
| normalize | BOOLEAN | True | Divide the result by the sum of absolute kernel values to preserve amplitude |
|
| normalize | BOOLEAN | True | Divide the result by the sum of absolute kernel values to preserve amplitude |
|
||||||
| boundary | dropdown | reflect | Boundary handling: reflect, nearest, or wrap |
|
| boundary | dropdown | reflect | Boundary handling: reflect, nearest, or wrap |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Kernel must be a rectangle: all rows must have the same number of values.
|
- Kernel must be a rectangle: all rows must have the same number of values.
|
||||||
- Maximum kernel size is 51×51; larger kernels are rejected.
|
- Maximum kernel size is 51×51; larger kernels are rejected.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Paint a binary mask directly over an image preview. Pen size controls newly draw
|
|||||||
| invert | BOOLEAN | False | When enabled, swaps painted and unpainted regions |
|
| invert | BOOLEAN | False | When enabled, swaps painted and unpainted regions |
|
||||||
| clear_mask | BUTTON | — | Clears all painted strokes |
|
| clear_mask | BUTTON | — | Clears all painted strokes |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Strokes are stored as path data; very long painting sessions with many strokes may accumulate large state.
|
- Strokes are stored as path data; very long painting sessions with many strokes may accumulate large state.
|
||||||
- The mask resolution matches the input field resolution and cannot be changed independently.
|
- The mask resolution matches the input field resolution and cannot be changed independently.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Detect edges using Sobel, Prewitt, Laplacian, or Laplacian-of-Gaussian (LoG) ope
|
|||||||
| method | dropdown | sobel | Edge detection operator: sobel, prewitt, laplacian, or log (Laplacian of Gaussian) |
|
| method | dropdown | sobel | Edge detection operator: sobel, prewitt, laplacian, or log (Laplacian of Gaussian) |
|
||||||
| sigma | FLOAT | 1.0 | Gaussian smoothing sigma used only for the LoG operator (0.1–10.0) |
|
| sigma | FLOAT | 1.0 | Gaussian smoothing sigma used only for the LoG operator (0.1–10.0) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- sigma is ignored for sobel, prewitt, and laplacian methods.
|
- sigma is ignored for sobel, prewitt, and laplacian methods.
|
||||||
- Sobel and Prewitt return gradient magnitude; Laplacian and LoG return signed second-derivative values.
|
- Sobel and Prewitt return gradient magnitude; Laplacian and LoG return signed second-derivative values.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Compute the Shannon entropy of the height or slope distribution. H = −Σ p·ln
|
|||||||
| mode | dropdown | height values | Compute entropy of height values or slope magnitude |
|
| mode | dropdown | height values | Compute entropy of height values or slope magnitude |
|
||||||
| n_bins | INT | 256 | Number of histogram bins for probability estimation (16–1024) |
|
| n_bins | INT | 256 | Number of histogram bins for probability estimation (16–1024) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Entropy is sensitive to n_bins; very few bins underestimate entropy while very many bins overestimate it for small fields.
|
- Entropy is sensitive to n_bins; very few bins underestimate entropy while very many bins overestimate it for small fields.
|
||||||
- Non-finite pixel values are removed before binning.
|
- Non-finite pixel values are removed before binning.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Compute the FFT amplitude spectrum of a line profile and identify the dominant p
|
|||||||
|
|
||||||
None.
|
None.
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The DC component is excluded from the output.
|
- The DC component is excluded from the output.
|
||||||
- Spectrum is one-sided (real FFT); the x-axis shows period, not frequency.
|
- Spectrum is one-sided (real FFT); the x-axis shows period, not frequency.
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Compute the 2D FFT with optional windowing and mean/plane subtraction. Outputs l
|
|||||||
| windowing | dropdown | hann | Window function applied before FFT: hann, hamming, blackman, or none |
|
| windowing | dropdown | hann | Window function applied before FFT: hann, hamming, blackman, or none |
|
||||||
| level | dropdown | mean | Pre-processing: subtract mean, subtract plane, or none |
|
| level | dropdown | mean | Pre-processing: subtract mean, subtract plane, or none |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Output fields are in the frequency domain; physical units on axes are spatial frequency (1/m).
|
- Output fields are in the frequency domain; physical units on axes are spatial frequency (1/m).
|
||||||
- Phase output uses the raw FFT phase and is sensitive to field origin; it is most useful when paired with the Inverse 2D FFT node.
|
- Phase output uses the raw FFT phase and is sensitive to field origin; it is most useful when paired with the Inverse 2D FFT node.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Frequency-domain filtering of a line profile or 2D data field using a Butterwort
|
|||||||
| cutoff_high | FLOAT | 0.4 | Upper cutoff for bandpass/notch modes (0.001–1.0) |
|
| cutoff_high | FLOAT | 0.4 | Upper cutoff for bandpass/notch modes (0.001–1.0) |
|
||||||
| order | INT | 2 | Butterworth filter order; higher values give steeper roll-off (1–10) |
|
| order | INT | 2 | Butterworth filter order; higher values give steeper roll-off (1–10) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- cutoff_high is only used for bandpass and notch modes.
|
- cutoff_high is only used for bandpass and notch modes.
|
||||||
- The filter is applied in the frequency domain via FFT; very short lines may show wrap-around artefacts.
|
- The filter is applied in the frequency domain via FFT; very short lines may show wrap-around artefacts.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Level a field by iteratively finding the dominant local facet orientation and su
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| masking | dropdown | exclude | How to use the mask: exclude (ignore masked facets), include (use only masked facets), or ignore (use all facets) |
|
| masking | dropdown | exclude | How to use the mask: exclude (ignore masked facets), include (use only masked facets), or ignore (use all facets) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Requires compatible XY and Z physical units for correct facet gradient estimation.
|
- Requires compatible XY and Z physical units for correct facet gradient estimation.
|
||||||
- Needs at least four valid facet cells; fields smaller than 2×2 pixels are not processed.
|
- Needs at least four valid facet cells; fields smaller than 2×2 pixels are not processed.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Apply a point-wise arithmetic operation to two DATA_FIELDs of the same resolutio
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| operation | dropdown | add | Element-wise operation: add, subtract, multiply, divide, min, max, or hypot (√(a²+b²)) |
|
| operation | dropdown | add | Element-wise operation: add, subtract, multiply, divide, min, max, or hypot (√(a²+b²)) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Both fields must have exactly the same pixel dimensions; mismatched sizes raise an error.
|
- Both fields must have exactly the same pixel dimensions; mismatched sizes raise an error.
|
||||||
- divide may produce NaN or Inf pixels where field_b is zero.
|
- divide may produce NaN or Inf pixels where field_b is zero.
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ Shift data so that the minimum, mean, or median value becomes zero. Equivalent t
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| method | dropdown | min | Reference value to set to zero: min (lowest pixel), mean (average), or median |
|
| method | dropdown | min | Reference value to set to zero: min (lowest pixel), mean (average), or median |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ Reflect a DATA_FIELD across the X axis (top/bottom) or Y axis (left/right). Phys
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| axis | dropdown | x | Flip axis: x flips top/bottom (vertical mirror), y flips left/right (horizontal mirror) |
|
| axis | dropdown | x | Flip axis: x flips top/bottom (vertical mirror), y flips left/right (horizontal mirror) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ None.
|
|||||||
| max_value | FLOAT | 1.0 | Upper bound of the slider range |
|
| max_value | FLOAT | 1.0 | Upper bound of the slider range |
|
||||||
| value | FLOAT (slider) | 0.5 | Current value within [min_value, max_value] |
|
| value | FLOAT (slider) | 0.5 | Current value within [min_value, max_value] |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ None.
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| folder | FOLDER_PICKER | "" | Path to the folder to list |
|
| folder | FOLDER_PICKER | "" | Path to the folder to list |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Only files with supported extensions are listed; subdirectories and unsupported file types are ignored.
|
- Only files with supported extensions are listed; subdirectories and unsupported file types are ignored.
|
||||||
- The number of file output sockets is determined at load time by the folder contents.
|
- The number of file output sockets is determined at load time by the folder contents.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ None.
|
|||||||
| family | dropdown | System default | Font family name; includes discovered system fonts plus "Custom file" option |
|
| family | dropdown | System default | Font family name; includes discovered system fonts plus "Custom file" option |
|
||||||
| font_file | FILE_PICKER | "" | Path to a custom font file; visible only when family is set to "Custom file" |
|
| font_file | FILE_PICKER | "" | Path to a custom font file; visible only when family is set to "Custom file" |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Custom font files must be in a format supported by the underlying font rendering library (e.g. TTF, OTF).
|
- Custom font files must be in a format supported by the underlying font rendering library (e.g. TTF, OTF).
|
||||||
- System fonts are enumerated at startup; newly installed fonts require restarting the application.
|
- System fonts are enumerated at startup; newly installed fonts require restarting the application.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Calculate the surface fractal dimension using Gwyddion's partitioning, cube coun
|
|||||||
| method | dropdown | partitioning | Algorithm: partitioning, cube_counting, triangulation, psdf (power spectrum), or hhcf (structure function) |
|
| method | dropdown | partitioning | Algorithm: partitioning, cube_counting, triangulation, psdf (power spectrum), or hhcf (structure function) |
|
||||||
| interpolation | dropdown | linear | Interpolation used when resampling the field to a square grid: linear, nearest, or cubic |
|
| interpolation | dropdown | linear | Interpolation used when resampling the field to a square grid: linear, nearest, or cubic |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The field is resampled to a square grid internally; highly anisotropic scan sizes may introduce interpolation artefacts.
|
- The field is resampled to a square grid internally; highly anisotropic scan sizes may introduce interpolation artefacts.
|
||||||
- Fit range can be adjusted interactively on the log-log plot; the default range covers the full data.
|
- Fit range can be adjusted interactively on the log-log plot; the default range covers the full data.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Apply a Gaussian blur to a DATA_FIELD. Equivalent to gwy_data_field_filter_gauss
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| sigma | FLOAT | 1.0 | Standard deviation of the Gaussian kernel in pixels (0.01–50.0) |
|
| sigma | FLOAT | 1.0 | Standard deviation of the Gaussian kernel in pixels (0.01–50.0) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- sigma is specified in pixels, not physical units; the effective physical blur depends on pixel size.
|
- sigma is specified in pixels, not physical units; the effective physical blur depends on pixel size.
|
||||||
- Large sigma values (> ~20 pixels) are slow due to the large kernel.
|
- Large sigma values (> ~20 pixels) are slow due to the large kernel.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Compute the spatial gradient using a Sobel operator. Outputs the gradient magnit
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| component | dropdown | magnitude | Output component: magnitude (√(gx²+gy²)), x (horizontal gradient), y (vertical gradient), or azimuth (angle in degrees) |
|
| component | dropdown | magnitude | Output component: magnitude (√(gx²+gy²)), x (horizontal gradient), y (vertical gradient), or azimuth (angle in degrees) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Gradient components are in units of z_unit/xy_unit; azimuth is in degrees.
|
- Gradient components are in units of z_unit/xy_unit; azimuth is in degrees.
|
||||||
- Sobel operator uses a 3×3 kernel; sub-pixel features smaller than one pixel cannot be resolved.
|
- Sobel operator uses a 3×3 kernel; sub-pixel features smaller than one pixel cannot be resolved.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Label connected grain regions in a binary mask and compute per-grain statistics:
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| min_size | INT | 10 | Minimum grain area in pixels; smaller connected regions are ignored (1–100000) |
|
| min_size | INT | 10 | Minimum grain area in pixels; smaller connected regions are ignored (1–100000) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Grain detection uses 2D connected-component labeling on the binary mask; the field and mask must have the same pixel dimensions.
|
- Grain detection uses 2D connected-component labeling on the binary mask; the field and mask must have the same pixel dimensions.
|
||||||
- Physical area and diameter values require the field to carry valid physical calibration (xreal, yreal, si_unit_xy).
|
- Physical area and diameter values require the field to carry valid physical calibration (xreal, yreal, si_unit_xy).
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Compute the mask distance transform using Gwyddion-style interior, exterior, or
|
|||||||
| output_type | dropdown | interior | Output mode: interior (distances inside grains), exterior (distances outside), or signed (positive inside, negative outside) |
|
| output_type | dropdown | interior | Output mode: interior (distances inside grains), exterior (distances outside), or signed (positive inside, negative outside) |
|
||||||
| from_border | BOOLEAN | True | When enabled, image borders are treated as mask boundaries |
|
| from_border | BOOLEAN | True | When enabled, image borders are treated as mask boundaries |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Output distances are in physical xy units derived from the field calibration.
|
- Output distances are in physical xy units derived from the field calibration.
|
||||||
- The mask must have the same pixel dimensions as the field.
|
- The mask must have the same pixel dimensions as the field.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Remove grains from a binary mask based on size and border contact. Equivalent to
|
|||||||
| max_area | INT | 0 | Discard grains with more pixels than this value (0 = no upper limit) |
|
| max_area | INT | 0 | Discard grains with more pixels than this value (0 = no upper limit) |
|
||||||
| remove_border | BOOLEAN | False | Discard any grain that touches the image edge |
|
| remove_border | BOOLEAN | False | Discard any grain that touches the image edge |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Grain detection uses 4-connected or 8-connected labeling; the exact connectivity is determined by the implementation.
|
- Grain detection uses 4-connected or 8-connected labeling; the exact connectivity is determined by the implementation.
|
||||||
- min_area and max_area are in pixels, not physical units.
|
- min_area and max_area are in pixels, not physical units.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Compute the height distribution histogram (DH). Use log scale to reveal small pe
|
|||||||
| n_bins | INT | 256 | Number of histogram bins (10–1000) |
|
| n_bins | INT | 256 | Number of histogram bins (10–1000) |
|
||||||
| y_scale | dropdown | linear | Y-axis scale: linear or log |
|
| y_scale | dropdown | linear | Y-axis scale: linear or log |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Cursor positions are stored as fractions of the histogram range and are set interactively.
|
- Cursor positions are stored as fractions of the histogram range and are set interactively.
|
||||||
- Log scale displays bins as log(count); bins with zero count appear as the minimum log value.
|
- Log scale displays bins as log(count); bins with zero count appear as the minimum log value.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ None.
|
|||||||
| name | dropdown | (first demo file) | Name of the bundled demo file to load |
|
| name | dropdown | (first demo file) | Name of the bundled demo file to load |
|
||||||
| colormap | dropdown | viridis | Colormap applied to the field; hidden when colormap_map is connected |
|
| colormap | dropdown | viridis | Colormap applied to the field; hidden when colormap_map is connected |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Only files present in the bundled demo directory are available; custom files cannot be added here.
|
- Only files present in the bundled demo directory are available; custom files cannot be added here.
|
||||||
- If no demo files are found, the dropdown shows "(no demo files found)".
|
- If no demo files are found, the dropdown shows "(no demo files found)".
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Load any supported file. SPM formats (.gwy, .sxm, .ibw) and HDF5 (.h5, .hdf5) pr
|
|||||||
| filename | FILE_PICKER | "" | Path to the file to load; hidden when path input is connected |
|
| filename | FILE_PICKER | "" | Path to the file to load; hidden when path input is connected |
|
||||||
| colormap | dropdown | viridis | Colormap applied to the loaded field; hidden when colormap_map is connected |
|
| colormap | dropdown | viridis | Colormap applied to the loaded field; hidden when colormap_map is connected |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Uncalibrated formats (images, arrays) emit a warning and produce fields without physical dimensions.
|
- Uncalibrated formats (images, arrays) emit a warning and produce fields without physical dimensions.
|
||||||
- Multi-channel files (e.g. .gwy with multiple data channels) produce one DATA_FIELD output socket per channel; the socket count is determined at load time.
|
- Multi-channel files (e.g. .gwy with multiple data channels) produce one DATA_FIELD output socket per channel; the socket count is determined at load time.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Reconstruct a spatial-domain image from a 2D frequency spectrum. For exact recon
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| representation | dropdown | magnitude | How to interpret the spectrum input: magnitude, log_magnitude, or psdf |
|
| representation | dropdown | magnitude | How to interpret the spectrum input: magnitude, log_magnitude, or psdf |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The spectrum input must be a frequency-domain DATA_FIELD; connecting a spatial-domain field raises an error.
|
- The spectrum input must be a frequency-domain DATA_FIELD; connecting a spatial-domain field raises an error.
|
||||||
- If phase is connected, it must also be a frequency-domain field with the same shape as the spectrum.
|
- If phase is connected, it must also be a frequency-domain field with the same shape as the spectrum.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Edge-preserving smoothing using Kuwahara's minimum-variance quadrant method. Unl
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| iterations | INT | 1 | Number of times the 5×5 Kuwahara pass is applied (1–20) |
|
| iterations | INT | 1 | Number of times the 5×5 Kuwahara pass is applied (1–20) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The kernel is fixed at 5×5 pixels; coarser smoothing requires more iterations.
|
- The kernel is fixed at 5×5 pixels; coarser smoothing requires more iterations.
|
||||||
- Multiple iterations increase processing time proportionally; 20 iterations on a large field may be slow.
|
- Multiple iterations increase processing time proportionally; 20 iterations on a large field may be slow.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Correct scan-line mismatches using Gwyddion-derived row alignment methods. Suppo
|
|||||||
| trim_fraction | FLOAT | 0.05 | Fraction of extreme values to trim; visible only for trimmed_mean and trimmed_diff methods (0–0.5) |
|
| trim_fraction | FLOAT | 0.05 | Fraction of extreme values to trim; visible only for trimmed_mean and trimmed_diff methods (0–0.5) |
|
||||||
| polynomial_degree | INT | 1 | Polynomial degree for the polynomial method (0–5); visible only for polynomial method |
|
| polynomial_degree | INT | 1 | Polynomial degree for the polynomial method (0–5); visible only for polynomial method |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The step method is designed for step-like scan artifacts and may over-correct smooth surfaces.
|
- The step method is designed for step-like scan artifacts and may over-correct smooth surfaces.
|
||||||
- Mask shape must match the field shape if a mask is connected.
|
- Mask shape must match the field shape if a mask is connected.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Expand the local dynamic range at each pixel to reveal fine surface features tha
|
|||||||
| kernel_size | INT | 10 | Size of the local neighbourhood window in pixels (2–100) |
|
| kernel_size | INT | 10 | Size of the local neighbourhood window in pixels (2–100) |
|
||||||
| weight | FLOAT | 0.5 | Blend weight between original and full-contrast output (0 = original, 1 = full local contrast; 0–1) |
|
| weight | FLOAT | 0.5 | Blend weight between original and full-contrast output (0 = original, 1 = full local contrast; 0–1) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Large kernel sizes are slow; values above ~50 pixels may be noticeably slow on large fields.
|
- Large kernel sizes are slow; values above ~50 pixels may be noticeably slow on large fields.
|
||||||
- The enhancement is purely a display-contrast operation; it changes the underlying data values.
|
- The enhancement is purely a display-contrast operation; it changes the underlying data values.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Draw simple vector shapes (lines, rectangles, circles, arrows) over a DATA_FIELD
|
|||||||
| stroke_width | INT | 3 | Line thickness in display pixels for newly drawn shapes (1–64) |
|
| stroke_width | INT | 3 | Line thickness in display pixels for newly drawn shapes (1–64) |
|
||||||
| clear_shapes | BUTTON | — | Remove all drawn shapes |
|
| clear_shapes | BUTTON | — | Remove all drawn shapes |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Shapes are stored as fractional coordinates; physical positions depend on field calibration.
|
- Shapes are stored as fractional coordinates; physical positions depend on field calibration.
|
||||||
- Individual shape properties (color, width) cannot be changed after drawing; use Clear Shapes to start over.
|
- Individual shape properties (color, width) cannot be changed after drawing; use Clear Shapes to start over.
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ Invert a binary mask — swap masked and unmasked regions.
|
|||||||
|
|
||||||
None.
|
None.
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -23,6 +23,6 @@ Apply morphological operations to a binary mask. Dilate expands regions, erode s
|
|||||||
| radius | INT | 1 | Structuring element radius in pixels (1–50) |
|
| radius | INT | 1 | Structuring element radius in pixels (1–50) |
|
||||||
| shape | dropdown | disk | Structuring element shape: disk or square |
|
| shape | dropdown | disk | Structuring element shape: disk or square |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Large radius values (> ~20 pixels) may be slow on large masks.
|
- Large radius values (> ~20 pixels) may be slow on large masks.
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ Apply boolean logic to two binary masks. Supports AND, OR, XOR, NAND, NOR, XNOR,
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| operation | dropdown | and | Boolean operation: and, or, xor, xnor, nand, nor, a_minus_b, b_minus_a, a, b, not_a, not_b, a_implies_b, b_implies_a, false, true |
|
| operation | dropdown | and | Boolean operation: and, or, xor, xnor, nand, nor, a_minus_b, b_minus_a, a, b, not_a, not_b, a_implies_b, b_implies_a, false, true |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Both masks must have the same pixel dimensions.
|
- Both masks must have the same pixel dimensions.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Apply a median filter to a DATA_FIELD. Equivalent to gwy_data_field_filter_media
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| size | INT | 3 | Kernel size (side length) in pixels; odd values only (1–21) |
|
| size | INT | 3 | Kernel size (side length) in pixels; odd values only (1–21) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The median filter is applied with a square kernel; non-square (e.g. rectangular) kernels are not supported.
|
- The median filter is applied with a square kernel; non-square (e.g. rectangular) kernels are not supported.
|
||||||
- Large kernel sizes are significantly slower than the Gaussian filter for the same smoothing extent.
|
- Large kernel sizes are significantly slower than the Gaussian filter for the same smoothing extent.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Read the Note metadata from an .ibw (Igor binary wave) file and display all entr
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| filename | FILE_PICKER | "" | Path to the .ibw file; hidden when path input is connected |
|
| filename | FILE_PICKER | "" | Path to the .ibw file; hidden when path input is connected |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Only .ibw files are supported; other formats raise an error.
|
- Only .ibw files are supported; other formats raise an error.
|
||||||
- If the .ibw note section is empty or missing, an error is raised.
|
- If the .ibw note section is empty or missing, an error is raised.
|
||||||
|
|||||||
@@ -18,6 +18,6 @@ None.
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| value | FLOAT | 0.0 | The numeric value to output |
|
| value | FLOAT | 0.0 | The numeric value to output |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Compute the two-dimensional power spectral density function with Gwyddion-style
|
|||||||
| windowing | dropdown | hann | Window function applied before FFT to reduce spectral leakage: hann, hamming, blackman, or none |
|
| windowing | dropdown | hann | Window function applied before FFT to reduce spectral leakage: hann, hamming, blackman, or none |
|
||||||
| level | dropdown | mean | Pre-processing: subtract mean, subtract plane, or none |
|
| level | dropdown | mean | Pre-processing: subtract mean, subtract plane, or none |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Output is in the frequency domain; physical units on axes are spatial frequency (1/m) and PSDF units are z_unit²·m².
|
- Output is in the frequency domain; physical units on axes are spatial frequency (1/m) and PSDF units are z_unit²·m².
|
||||||
- Window RMS compensation is applied to normalize the spectral density consistently across window choices.
|
- Window RMS compensation is applied to normalize the spectral density consistently across window choices.
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ Fit and subtract a least-squares plane from the data. Supports include/exclude m
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| masking | dropdown | ignore | How to use the mask: ignore (use all pixels), include (fit plane to masked pixels only), or exclude (exclude masked pixels from fit) |
|
| masking | dropdown | ignore | How to use the mask: ignore (use all pixels), include (fit plane to masked pixels only), or exclude (exclude masked pixels from fit) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- When masking is include or exclude, the unmasked/masked region must contain at least three non-collinear pixels to fit a plane.
|
- When masking is include or exclude, the unmasked/masked region must contain at least three non-collinear pixels to fit a plane.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Fit and subtract a polynomial background of given degree in x and y. Equivalent
|
|||||||
| degree_x | INT | 2 | Polynomial degree in the x direction (0–5) |
|
| degree_x | INT | 2 | Polynomial degree in the x direction (0–5) |
|
||||||
| degree_y | INT | 2 | Polynomial degree in the y direction (0–5) |
|
| degree_y | INT | 2 | Polynomial degree in the y direction (0–5) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- High polynomial degrees (> 4) may overfit and introduce artificial long-range modulation.
|
- High polynomial degrees (> 4) may overfit and introduce artificial long-range modulation.
|
||||||
- No masking support; all pixels contribute equally to the fit.
|
- No masking support; all pixels contribute equally to the fit.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ None.
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| colormap | dropdown | auto | Colormap used when rendering a DATA_FIELD or grayscale IMAGE; hidden when colormap_map is connected |
|
| colormap | dropdown | auto | Colormap used when rendering a DATA_FIELD or grayscale IMAGE; hidden when colormap_map is connected |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- When no input is connected, an error is raised at execution time.
|
- When no input is connected, an error is raised at execution time.
|
||||||
- Connecting a FILE_PATH socket (instead of DATA_FIELD) raises a type error; ensure the correct socket is connected.
|
- Connecting a FILE_PATH socket (instead of DATA_FIELD) raises a type error; ensure the correct socket is connected.
|
||||||
|
|||||||
@@ -16,6 +16,6 @@ None.
|
|||||||
|
|
||||||
None.
|
None.
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Compute the azimuthally averaged radial profile from a centre point. The output
|
|||||||
| cy | FLOAT | 0.5 | Centre y position as a fraction of field height (0 = top, 1 = bottom) |
|
| cy | FLOAT | 0.5 | Centre y position as a fraction of field height (0 = top, 1 = bottom) |
|
||||||
| n_bins | INT | 128 | Number of radial bins (4–4096) |
|
| n_bins | INT | 128 | Number of radial bins (4–4096) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Pixels are assigned to radial bins by Euclidean distance; bins near the centre contain fewer pixels and may be noisier.
|
- Pixels are assigned to radial bins by Euclidean distance; bins near the centre contain fewer pixels and may be noisier.
|
||||||
- Physical x-axis units come from the field's si_unit_xy; uncalibrated fields produce pixel-unit radii.
|
- Physical x-axis units come from the field's si_unit_xy; uncalibrated fields produce pixel-unit radii.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Resample a DATA_FIELD to a new pixel resolution while preserving physical dimens
|
|||||||
| height | INT | 256 | Output pixel height (2–16384) |
|
| height | INT | 256 | Output pixel height (2–16384) |
|
||||||
| interpolation | dropdown | linear | Interpolation method: linear, cubic, or nearest |
|
| interpolation | dropdown | linear | Interpolation method: linear, cubic, or nearest |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Physical dimensions are preserved; upsampling does not add new information.
|
- Physical dimensions are preserved; upsampling does not add new information.
|
||||||
- Very large output sizes (e.g. 16384×16384) require substantial memory.
|
- Very large output sizes (e.g. 16384×16384) require substantial memory.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Rotate a DATA_FIELD counterclockwise by an angle in degrees. Optionally expand t
|
|||||||
| interpolation | dropdown | bilinear | Interpolation method for resampling: bilinear, nearest, or bicubic |
|
| interpolation | dropdown | bilinear | Interpolation method for resampling: bilinear, nearest, or bicubic |
|
||||||
| expand_canvas | BOOLEAN | True | When True, canvas is expanded to contain the full rotated image; when False, canvas is clipped to original size |
|
| expand_canvas | BOOLEAN | True | When True, canvas is expanded to contain the full rotated image; when False, canvas is clipped to original size |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Rotation by angles other than multiples of 90° introduces interpolation artefacts.
|
- Rotation by angles other than multiples of 90° introduces interpolation artefacts.
|
||||||
- expand_canvas may produce fields with non-square pixel sizes for arbitrary angles.
|
- expand_canvas may produce fields with non-square pixel sizes for arbitrary angles.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ None.
|
|||||||
| format | dropdown | TIFF | Output format: TIFF (multi-page, float32 for fields) or NPZ (named arrays) |
|
| format | dropdown | TIFF | Output format: TIFF (multi-page, float32 for fields) or NPZ (named arrays) |
|
||||||
| layer_name_0 … layer_name_N | STRING | "" | Optional name for each layer; used as TIFF page descriptions or NPZ array keys |
|
| layer_name_0 … layer_name_N | STRING | "" | Optional name for each layer; used as TIFF page descriptions or NPZ array keys |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- At least one layer must be connected; an error is raised otherwise.
|
- At least one layer must be connected; an error is raised otherwise.
|
||||||
- TIFF writes DATA_FIELD layers as float32; IMAGE layers are written as uint8.
|
- TIFF writes DATA_FIELD layers as float32; IMAGE layers are written as uint8.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ None.
|
|||||||
| format | STRING (context-dependent) | TIFF | Output format; available choices depend on the connected input type |
|
| format | STRING (context-dependent) | TIFF | Output format; available choices depend on the connected input type |
|
||||||
| plot_title | STRING | "" | Optional title for line plots saved as PNG or TIFF |
|
| plot_title | STRING | "" | Optional title for line plots saved as PNG or TIFF |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Available formats per input type: DATA_FIELD → TIFF, PNG, NPZ; IMAGE → PNG, TIFF, NPZ; LINE → PNG, TIFF, CSV, NPZ, JSON; RECORD_TABLE/DATA_TABLE → CSV, JSON; FLOAT → TXT, JSON; MESH_MODEL → OBJ, STL.
|
- Available formats per input type: DATA_FIELD → TIFF, PNG, NPZ; IMAGE → PNG, TIFF, NPZ; LINE → PNG, TIFF, CSV, NPZ, JSON; RECORD_TABLE/DATA_TABLE → CSV, JSON; FLOAT → TXT, JSON; MESH_MODEL → OBJ, STL.
|
||||||
- divide-by-zero or NaN values in fields are preserved in TIFF/NPZ but may not render correctly in PNG.
|
- divide-by-zero or NaN values in fields are preserved in TIFF/NPZ but may not render correctly in PNG.
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ Detect and remove horizontal scan scars using Gwyddion-derived scar marking thre
|
|||||||
| min_length | INT | 16 | Minimum horizontal run length in pixels to classify as a scar (1–4096) |
|
| min_length | INT | 16 | Minimum horizontal run length in pixels to classify as a scar (1–4096) |
|
||||||
| max_width | INT | 4 | Maximum vertical width in pixels for a scar candidate (1–32) |
|
| max_width | INT | 4 | Maximum vertical width in pixels for a scar candidate (1–32) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Designed for horizontal (fast-scan) scars only; vertical scars are not detected.
|
- Designed for horizontal (fast-scan) scars only; vertical scars are not detected.
|
||||||
- Aggressive thresholds may remove legitimate surface features that resemble scars.
|
- Aggressive thresholds may remove legitimate surface features that resemble scars.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Compute the angular slope distribution of a DATA_FIELD surface. Equivalent to Gw
|
|||||||
| distribution | dropdown | theta | Distribution type: theta (inclination angle, probability density in 1/deg), phi (azimuthal direction, weighted by slope², 0–360°), or gradient (slope magnitude, probability density in 1/(z/xy)) |
|
| distribution | dropdown | theta | Distribution type: theta (inclination angle, probability density in 1/deg), phi (azimuthal direction, weighted by slope², 0–360°), or gradient (slope magnitude, probability density in 1/(z/xy)) |
|
||||||
| n_bins | INT | 90 | Number of histogram bins (10–1000) |
|
| n_bins | INT | 90 | Number of histogram bins (10–1000) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The gradient magnitude distribution requires valid physical xy and z units for correct normalization.
|
- The gradient magnitude distribution requires valid physical xy and z units for correct normalization.
|
||||||
- phi distribution is weighted by slope squared; flat surfaces with near-zero slopes produce a noisy azimuthal distribution.
|
- phi distribution is weighted by slope squared; flat surfaces with near-zero slopes produce a noisy azimuthal distribution.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Fill defect pixels (hot pixels, dropouts, scan artifacts) by interpolation. The
|
|||||||
| method | dropdown | laplace | Inpainting method: laplace (smooth Laplace equation solution), mean (local mean), or zero |
|
| method | dropdown | laplace | Inpainting method: laplace (smooth Laplace equation solution), mean (local mean), or zero |
|
||||||
| max_iter | INT | 100 | Maximum number of iterations for the Laplace solver (1–2000) |
|
| max_iter | INT | 100 | Maximum number of iterations for the Laplace solver (1–2000) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Large masked regions may not converge fully within max_iter iterations using the Laplace method.
|
- Large masked regions may not converge fully within max_iter iterations using the Laplace method.
|
||||||
- The mean method uses a simple neighbourhood average and may leave visible discontinuities at large defect clusters.
|
- The mean method uses a simple neighbourhood average and may leave visible discontinuities at large defect clusters.
|
||||||
|
|||||||
@@ -18,6 +18,6 @@ Compute basic surface statistics: min, max, mean, RMS roughness, median, and ske
|
|||||||
|
|
||||||
None.
|
None.
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Compute a contextual scalar statistic from a LINE, record table, DATA_FIELD, or
|
|||||||
| operation | STRING (context-dependent dropdown) | mean | Statistical operation; available choices depend on the input type |
|
| operation | STRING (context-dependent dropdown) | mean | Statistical operation; available choices depend on the input type |
|
||||||
| column | STRING | value | Column name for DATA_TABLE inputs; visible only when a DATA_TABLE is connected |
|
| column | STRING | value | Column name for DATA_TABLE inputs; visible only when a DATA_TABLE is connected |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Available operations vary by input type; connecting a different type changes the available options.
|
- Available operations vary by input type; connecting a different type changes the available options.
|
||||||
- For DATA_TABLE inputs, the column must match an existing column name; an error is raised otherwise.
|
- For DATA_TABLE inputs, the column must match an existing column name; an error is raised otherwise.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Find a template pattern within a larger data field using normalised cross-correl
|
|||||||
|------|------|---------|-------------|
|
|------|------|---------|-------------|
|
||||||
| threshold | FLOAT | 0.8 | Minimum correlation score to mark as a detection (0.0–1.0) |
|
| threshold | FLOAT | 0.8 | Minimum correlation score to mark as a detection (0.0–1.0) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The template must be smaller than the image; equal or larger sizes are not supported.
|
- The template must be smaller than the image; equal or larger sizes are not supported.
|
||||||
- Normalized cross-correlation assumes uniform background; strong global gradients reduce detection accuracy.
|
- Normalized cross-correlation assumes uniform background; strong global gradients reduce detection accuracy.
|
||||||
|
|||||||
@@ -17,6 +17,6 @@ None.
|
|||||||
| text | STRING (multiline) | "# Guide\n\nDouble-click to edit this note.\n\n- Step 1\n- Step 2" | Markdown text displayed on the canvas card |
|
| text | STRING (multiline) | "# Guide\n\nDouble-click to edit this note.\n\n- Step 1\n- Step 2" | Markdown text displayed on the canvas card |
|
||||||
| color | dropdown | default | Card background color: default, blue, green, yellow, red, or purple |
|
| color | dropdown | default | Card background color: default, blue, green, yellow, red, or purple |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- None.
|
- None.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Create a binary mask by thresholding data. Otsu automatically finds the optimal
|
|||||||
| threshold | FLOAT | 0.0 | Threshold value; for absolute: raw z value; for relative: fraction 0–1; ignored for otsu (socket-only input) |
|
| threshold | FLOAT | 0.0 | Threshold value; for absolute: raw z value; for relative: fraction 0–1; ignored for otsu (socket-only input) |
|
||||||
| direction | dropdown | above | Which pixels to select: above or below the threshold |
|
| direction | dropdown | above | Which pixels to select: above or below the threshold |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- For the relative method, the threshold fraction is applied to the full data range [min, max].
|
- For the relative method, the threshold fraction is applied to the full data range [min, max].
|
||||||
- Otsu thresholding may not give meaningful results on non-bimodal height distributions.
|
- Otsu thresholding may not give meaningful results on non-bimodal height distributions.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Reconstruct the true surface from a tip-broadened measured AFM image. Uses morph
|
|||||||
|
|
||||||
None.
|
None.
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The tip pixel size must match the image pixel size exactly; mismatched calibrations will produce incorrect results.
|
- The tip pixel size must match the image pixel size exactly; mismatched calibrations will produce incorrect results.
|
||||||
- Deconvolution can only reduce tip broadening; it cannot recover information lost below the noise floor.
|
- Deconvolution can only reduce tip broadening; it cannot recover information lost below the noise floor.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Generate a synthetic AFM tip model DATA_FIELD. The input field sets the pixel si
|
|||||||
| half_angle | FLOAT | 20.0 | Half-cone angle from the tip axis in degrees for the cone shape (1–89°) |
|
| half_angle | FLOAT | 20.0 | Half-cone angle from the tip axis in degrees for the cone shape (1–89°) |
|
||||||
| n_pixels | INT | 65 | Side length of the square tip grid in pixels (odd values only, 3–511) |
|
| n_pixels | INT | 65 | Side length of the square tip grid in pixels (odd values only, 3–511) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- half_angle is only used for the cone shape.
|
- half_angle is only used for the cone shape.
|
||||||
- The tip grid must be smaller than or equal to the image size for Tip Deconvolution to work correctly.
|
- The tip grid must be smaller than or equal to the image size for Tip Deconvolution to work correctly.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Display a FLOAT value, or a selected numeric row from a measurement table, and p
|
|||||||
| number_input | STRING (text input) | "0" | Manual numeric entry, e.g. "1.5 nm"; hidden when value socket is connected |
|
| number_input | STRING (text input) | "0" | Manual numeric entry, e.g. "1.5 nm"; hidden when value socket is connected |
|
||||||
| measurement | STRING (dropdown) | "" | Row selector when a RECORD_TABLE is connected; visible only for RECORD_TABLE inputs |
|
| measurement | STRING (dropdown) | "" | Row selector when a RECORD_TABLE is connected; visible only for RECORD_TABLE inputs |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- When a RECORD_TABLE is connected, only rows with numeric values can be selected; non-numeric rows are not accessible.
|
- When a RECORD_TABLE is connected, only rows with numeric values can be selected; non-numeric rows are not accessible.
|
||||||
- Manual text entry supports optional SI unit suffix (e.g. "1.5 nm") for display only; the output FLOAT is always the raw numeric value.
|
- Manual text entry supports optional SI unit suffix (e.g. "1.5 nm") for display only; the output FLOAT is always the raw numeric value.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Segment a height field into grains using the two-stage Gwyddion watershed workfl
|
|||||||
| watershed_drop_size | FLOAT | 0.1 | Relative drop size for watershed growth stage (0.0001–1.0) |
|
| watershed_drop_size | FLOAT | 0.1 | Relative drop size for watershed growth stage (0.0001–1.0) |
|
||||||
| combine_mode | dropdown | replace | How to combine with an existing mask: replace (ignore existing), union (OR), or intersection (AND) |
|
| combine_mode | dropdown | replace | How to combine with an existing mask: replace (ignore existing), union (OR), or intersection (AND) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- Parameter tuning is required; the default settings work best for isolated round features.
|
- Parameter tuning is required; the default settings work best for isolated round features.
|
||||||
- Very large locate_threshold values may reject all seeds and produce an empty mask.
|
- Very large locate_threshold values may reject all seeds and produce an empty mask.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Denoise a DATA_FIELD using wavelet coefficient thresholding. BayesShrink adapts
|
|||||||
| sigma | FLOAT | 0.0 | Noise level estimate in data units; 0 = automatic estimation (0–1.0) |
|
| sigma | FLOAT | 0.0 | Noise level estimate in data units; 0 = automatic estimation (0–1.0) |
|
||||||
| mode | dropdown | soft | Thresholding mode: soft (smooth shrinkage) or hard (zero below threshold) |
|
| mode | dropdown | soft | Thresholding mode: soft (smooth shrinkage) or hard (zero below threshold) |
|
||||||
|
|
||||||
## Limitations
|
## Notes
|
||||||
|
|
||||||
- The field size should ideally be a power of two for best wavelet decomposition; other sizes are handled by padding.
|
- The field size should ideally be a power of two for best wavelet decomposition; other sizes are handled by padding.
|
||||||
- sigma = 0 triggers automatic noise estimation from the finest-scale wavelet coefficients; this may be inaccurate on strongly structured surfaces.
|
- sigma = 0 triggers automatic noise estimation from the finest-scale wavelet coefficients; this may be inaccurate on strongly structured surfaces.
|
||||||
|
|||||||
@@ -3001,6 +3001,13 @@ function Flow() {
|
|||||||
return () => document.removeEventListener('pointerdown', handler);
|
return () => document.removeEventListener('pointerdown', handler);
|
||||||
}, [menuOpen]);
|
}, [menuOpen]);
|
||||||
|
|
||||||
|
// Auto-dismiss status toast after 5 seconds
|
||||||
|
useEffect(() => {
|
||||||
|
if (!status.text) return;
|
||||||
|
const timer = setTimeout(() => setStatus({ text: '', level: 'info' }), 5000);
|
||||||
|
return () => clearTimeout(timer);
|
||||||
|
}, [status]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handler = (e: KeyboardEvent) => {
|
const handler = (e: KeyboardEvent) => {
|
||||||
if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {
|
if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {
|
||||||
|
|||||||
@@ -2,6 +2,18 @@ import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import { marked } from 'marked';
|
import { marked } from 'marked';
|
||||||
|
|
||||||
|
// Open external links in new tabs
|
||||||
|
const renderer = new marked.Renderer();
|
||||||
|
const defaultLinkRenderer = renderer.link.bind(renderer);
|
||||||
|
renderer.link = function (token) {
|
||||||
|
const html = defaultLinkRenderer(token);
|
||||||
|
if (token.href && /^https?:\/\//.test(token.href)) {
|
||||||
|
return html.replace(/^<a /, '<a target="_blank" rel="noopener noreferrer" ');
|
||||||
|
}
|
||||||
|
return html;
|
||||||
|
};
|
||||||
|
marked.use({ renderer });
|
||||||
|
|
||||||
interface Heading {
|
interface Heading {
|
||||||
level: number;
|
level: number;
|
||||||
text: string;
|
text: string;
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ html, body, #root {
|
|||||||
.floating-menu-toggle {
|
.floating-menu-toggle {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
border-radius: 10px;
|
border-radius: 20px;
|
||||||
border: 1px solid var(--border-toolbar);
|
border: 1px solid var(--border-toolbar);
|
||||||
background: var(--bg-toolbar);
|
background: var(--bg-toolbar);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -170,8 +170,8 @@ html, body, #root {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.floating-menu-logo {
|
.floating-menu-logo {
|
||||||
width: 28px;
|
width: 40px;
|
||||||
height: 28px;
|
height: 40px;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -744,6 +744,9 @@ html, body, #root {
|
|||||||
|
|
||||||
.node-help-panel-body strong { color: #e2e8f0; }
|
.node-help-panel-body strong { color: #e2e8f0; }
|
||||||
|
|
||||||
|
.node-help-panel-body a { color: #ff9800; }
|
||||||
|
.node-help-panel-body a:hover { color: #ffb74d; }
|
||||||
|
|
||||||
/* ── Help panel TOC + content layout ──────────────────────────────── */
|
/* ── Help panel TOC + content layout ──────────────────────────────── */
|
||||||
|
|
||||||
.help-content-row {
|
.help-content-row {
|
||||||
|
|||||||
BIN
profile.png
Normal file
BIN
profile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user