Skip to content

Releases: idossha/tetravox

Tetravox 0.6.1

Choose a tag to compare

@github-actions github-actions released this 20 Sep 08:46

Fixed

  • Save works on scenes opened by another application. After a native scene API open,
    File ▸ Save (⌘S / Ctrl+S) updates that scene instead of reporting "not on the write list".
    Dataset files and unrelated scenes receive no write permission; the request protocol is unchanged.

Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

What's Changed

  • fix(scene): allow native Save after an API scene open by @idossha in #47

Full Changelog: v0.6.0...v0.6.1

Tetravox 0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 07:30

Added

  • Diffusion tensors can be viewed as direction-coloured ellipsoids. In a six-component
    floating-point volume, choose Layer properties ▸ Display ▸ Tensor · FSL / SimNIBS or
    Tensor · NIfTI symmetric matrix, then adjust glyph spacing and minimum FA. Coordinate
    conventions are selectable; ordinary scalar frames and saved scenes retain their existing display.

  • External applications can load and save scenes. The native scene API opens a scene or exports
    the current edited view to a caller-selected path, with a completion reply and optional overwrite.
    Existing scene files and native File ▸ Save / Save As… behavior are unchanged.

  • Surface outlines follow scalar fields continuously. Slice outlines use the surface's
    colormap and threshold, including soft edges. Solid and annotation outlines are unchanged.

  • Gmsh sidecars can select the initial field. The first explicitly visible view seeds its
    unambiguous field, range and supported colormap for meshes and triangle-only surfaces.
    Caller-specified scene settings take precedence; opacity functions are not converted into thresholds.
    Sidecars without visibility metadata retain their previous defaults.

Fixed

  • Scene requests restore a missing viewer window. A running app without a window waits for its
    new renderer before delivering the request.

  • A mesh field threshold with no upper bound no longer hides the whole layer. hide with
    hi left open (null in a scene file) is "hide everything below lo"; it used to measure its
    soft edge against the float sentinel standing in for infinity and dropped every value.


Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

What's Changed

  • feat(volume): display diffusion tensors as ellipsoids by @idossha in #45
  • feat(api): add generic native scene loading and saving by @idossha in #44
  • feat(mesh): preserve generic field display on surfaces and contours by @idossha in #46

Full Changelog: v0.5.2...v0.6.0

Tetravox 0.5.2

Choose a tag to compare

@github-actions github-actions released this 15 Sep 23:11

Fixed

  • The toolbar keeps one row for longer in a narrow window. The side columns now give way
    before the centre controls wrap, and the right-hand controls are never pushed out of view. At
    full width nothing moves.

Changed

  • The Extensions button is always in the toolbar. With nothing installed its menu holds
    Manage extensions…, so installing one no longer starts from File ▸ Extensions… alone.

Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

Full Changelog: v0.5.1...v0.5.2

Tetravox 0.5.1

Choose a tag to compare

@github-actions github-actions released this 15 Sep 21:18

Fixed

  • Toolbar controls no longer overlap at narrow window widths. When the toolbar's centre cluster
    wrapped onto a second row, the right-hand controls (Extensions, ?, ) floated to the middle of
    the taller row instead of staying pinned to the first — they now stay aligned to the top, so nothing
    overlaps.

  • The Extensions button stays one line tall. Its label could wrap onto two lines under a shrinking
    toolbar, doubling its height compared to every other button. It now keeps to one line at any width.

  • A launch that finds a new version now opens Software Update itself. Checking for updates on
    launch previously only posted a toast; the update dialog now opens automatically, with the same
    Update/Skip/Later choices the manual check has always had. It defers to a toast instead if another
    dialog is already open, so it never interrupts what you're doing.

Added

  • Check for Updates… is in the Tetravox menu. Previously only the native macOS app menu could
    open Software Update; the in-app "Tetravox" menu now has the same entry.

Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

Full Changelog: v0.5.0...v0.5.1

Tetravox 0.5.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 20:39

Fixed

  • Point layers keep their filenames. Loading .geo or .pos files no longer replaces the layer
    name with an internal view title such as “view 1”.

  • Replace numeric bounds freely. Contrast and threshold inputs allow clearing all characters;
    valid replacements commit on Enter or when leaving the input.

  • Surface colors follow scene order during concurrent loading. A faster download no longer
    takes another surface’s default color. Explicit colors are retained.

Changed

  • Windows portable ZIP. Builds include an x64 ZIP for managed installations alongside the
    regular NSIS installer, avoiding replacement of a separately installed copy.

  • Native application integration. The browser embed and its host protocol are removed. Open
    .tetravox.json files with the native application; batch rendering through --job is retained.

  • Managed installations keep their pinned version. Launches with TETRAVOX_MANAGED_BY set leave
    updates to that installation manager and explain this in Updates.

  • Annotations color 2D surface outlines. Axial, coronal and sagittal outlines follow the attached
    annotation's region colors and visibility, as well as layer opacity.

  • Removed the Reverse cut button from clip-plane controls.

  • NIfTI thresholds are ready to edit. Contrast and threshold rows sit beneath the histogram, with
    thresholds initially spanning min–max. Removed the enable checkbox and Use display range button;
    switching Values/Percentiles preserves the selected cutoffs.

  • Reverse mesh cuts directly. Reverse cut keeps the opposite side without moving the plane.
    Filled caps inherit mesh colors automatically, replacing the cap and color-source controls.

  • Simpler mesh controls. Field colors share the volume contrast, histogram and optional threshold
    editor. Controls follow the selected color source; vector components, tissue overrides and attached
    data remain available. Mesh edges use one switch, cross-sections use Fill/Outline, and single-tissue
    meshes omit search and bulk controls. Removed redundant advanced appearance controls.

  • Grab all four histogram bounds directly. Contrast and threshold low/high handles have distinct,
    staggered grab markers that remain accessible at the plot edges. Removed threshold helper paragraphs.

  • Less clutter in 3D surface controls. Use the iso slider; the redundant exact input is removed.
    Build progress disappears when the surface is ready. Surfaces use smooth, two-sided shading
    without extra toggles.

  • Choose threshold values or percentiles. Switch units without changing visibility; intermediate
    percentiles are estimated. 3D slices and 3D surface now sit side by side with clearer tooltips.

  • Simpler volume contrast and thresholding. In Layers ▸ Volume properties, display bounds,
    histogram and 1–99%, 50–99.9%, 95–99.9% presets share one panel. Enable thresholding to make values
    outside a separate range transparent. Label volumes focus on tissue controls. Advanced volume scale
    and threshold selectors are removed; editing contrast now uses a linear scale.

Added

  • An embedded Tetravox tells a surface from a mesh. The browser build speaks protocol 3, and
    a ViewSpec now has a third geometry layer kind: "surface". A mesh is a tetrahedral FEM
    volume — a SimNIBS .msh with an interior, tissue tags, per-element fields and a clip plane that
    can be capped. A surface is a triangular sheet — FreeSurfer lh.pial / rh.white /
    lh.central, GIfTI, STL/PLY/OBJ — with none of that, and one colour source at a time: a solid
    colour, a per-vertex overlay (curvature, thickness, a .func.gii), or an annotation (a
    .annot or .label.gii atlas). It is the same distinction the desktop app gained in 0.4.0, said
    in the host protocol.

    A .annot, a morph file or a data-only GIfTI is attached by listing it in the dataset's
    sidecars.fields — resolved against the surface's own directory, so SimNIBS's
    ../segmentation/lh.ernie_DK40.annot is written exactly like that. The geometry format is read
    from the file's bytes and never from its name, which is why the extensionless FreeSurfer surfaces
    work; there is deliberately no format field to get wrong.

    A host written for protocol 2 needs no change, and every volume/mesh/points scene it can write
    means what it always did. What it must not do is send a surface layer to a build whose
    ready.version is below 3: an older viewer silently drops a layer kind it does not know and still
    reports a successful load. From protocol 3 that failure is gone in the other direction too — an
    unknown layer kind is refused with an error naming the layer and the four kinds that exist, rather
    than opening a scene with a hole in it. docs/EMBED.md §4.0 and §5(c) are the contract.

  • An embedded panel can show only the visualization. Add presentation=viewport beside embed=1
    to give the entire frame to the view grid while your application supplies the controls. Orientation
    annotations, 3D gestures and host messages remain available. The full viewer stays the default when
    the option is omitted; docs/EMBED.md §2 documents the URL and the inactive shell shortcuts.

  • The browser embed ships with a checksum and a manifest beside it. Every release now carries
    tetravox-embed-<version>.tgz.sha256 (in sha256sum format, so sha256sum -c works on it) and
    tetravox-embed-<version>.manifest.json — a copy of the manifest inside the tarball. An
    application that installs the viewer automatically can read which protocol a release implements
    before downloading it, and verify what it downloaded before unpacking it. The release workflow
    refuses to publish unless all three are attached and the digest matches the tarball.

  • Tetravox embeds in a web application. A new release asset, tetravox-embed-<version>.tgz,
    contains a browser build of the viewer that a host serves from any route and mounts in an
    <iframe>, then drives over postMessage — load a scene, move the cursor, patch a layer, probe a
    point, take a screenshot, read the scene back. It is the same shell and the same WebGL2 engine the
    desktop window runs, not a cut-down second viewer, so every message ends in something a user could
    have done with the mouse. docs/EMBED.md is the contract: the URL, the message table, the headers
    and CSP a host must send, three complete ViewSpec examples, and a working example page. The
    protocol is versioned ({ tvx: 1, … }) and additive-only from here.

  • Datasets can be loaded from URLs. A scene may point at https://… files, and the dataset
    worker streams them the way it has always streamed local ones. This was previously listed as a
    non-goal; it is now a supported, tested path, exercised on every CI run against real NIfTI and
    .msh data over HTTP. Remote browsing is still out of scope — a host names files, and there is
    no catalogue or directory listing.

  • An embedded Tetravox can show electrodes, answer clicks, and remember where the camera was.
    The browser build includes protocol 2's point controls, retained in protocol 3; all are optional. A host
    can put a points layer straight into the scene — the coordinates inline, its own ids, and each
    point marked selected, disabled or neither, so an application says what an electrode is
    rather than working out what selected should look like. It can arm the same point tool the sEEG
    contact editor uses, so a user places and drags points with the mouse and the host hears about it;
    it can ask to be told what a click landed on — the point, the region, the tissue tag and the
    world position, in one message; and it can read the 3-D camera and put it back. docs/EMBED.md §6
    is the contract.

    A host written against protocol 1 needs no change at all. The message envelope is still
    tvx: 1; only the feature level a host reads out of ready.version (and the tarball's
    manifest.json) identifies the supported protocol. The new events are off until asked for, so an older host receives
    exactly the messages it received before — which is a test, not a promise.

  • An embedded host can be told which point the pointer is on. setHoverEvents turns on a
    pointHover message naming the point under the mouse, and naming nothing when it leaves one — so
    an application can light up the electrode you are about to click. It reports the same point a
    click would select, and it fires when the answer changes rather than on every mouse move.

Fixed

  • Solid ROI meshes no longer close the viewer while a scene loads. Saved scenes from hosts
    that represented an absent mesh field as null now open correctly, including when the mesh
    finishes before its anatomical volumes, and the host receives its completion reply.

  • Interrupted embed loads answer their callers. Replacing a pending scene or resetting the
    viewer returns a cancellation error for the original request instead of leaving the host waiting.

  • Unnamed embed layers appear once. Omitting a layer name keeps the engine's default name
    without adding a duplicate layer during scene restoration.

  • Scenes appear as their datasets finish loading. A small surface or volume no longer waits
    behind another file before it can be viewed, and progress identifies files while they are being
    parsed. Failed files are reported while successful layers remain available. Layer ordering and
    saved camera settings are preserved.

  • Adding to an embedded selection keeps datasets already loaded. Only missing URLs are read;
    removing a selection releases its resources. Use Reload to refresh a file changed at the same
    URL. Reset and interrupted loads cannot restore an obsolete scene afterward; the existing embed
    protocol remains compatible.

  • Dot-shaped points are dot-shaped in the 3D view too. `shape...

Read more

Tetravox 0.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 04:57

Added

  • Surfaces are their own layer kind — a .gii, FreeSurfer, STL/PLY/OBJ shell opens as a surface
    layer with a simpler editor of its own: one colour source (solid, overlay, annotation) with Attach
    file…
    , the atlas's regions when one is shown, appearance, the 2D outline, and clip planes. No tissue
    table, isolation, glyphs or caps on a surface. The layer row says surface and leads with the
    hemisphere. Tet meshes are unchanged. Scenes saved before this that held a surface as a mesh layer
    still open, as a mesh layer.
  • Surface annotations and overlays — open a FreeSurfer .annot (SimNIBS's
    segmentation/lh.<subject>_DK40.annot, a2009s, HCP_MMP1), a morph file (curv, sulc, thickness) or
    a data-only .func/.shape/.label.gii onto a surface that is already open: through Open / drag-and-drop,
    which picks the matching hemisphere, or the layer panel's Attach file…, which names the surface. An
    annotation colours the surface by its atlas and fills the Region panel; a scalar becomes a field with its own
    colour bar. Attached files are saved with the scene and re-attached on load.

Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

What's Changed

  • feat(surfaces): attach .annot, morph files and data-only GIfTI to an open surface by @idossha in #36
  • feat(surfaces): surfaces are their own layer kind, with their own editor by @idossha in #37

Full Changelog: v0.3.11...v0.4.0

Tetravox 0.3.11

Choose a tag to compare

@github-actions github-actions released this 04 Sep 21:41
0ba898d

Changed

  • Direct anatomical views — Sagittal, Coronal and Axial buttons display a single slice. The 3D+1
    option is removed; older scenes using it open in 1+3 with their view settings preserved.

Fixed

  • Layer controls stay inside the sidebar — opacity sliders and mesh numeric fields shrink to
    fit, keeping adjacent buttons visible without horizontal scrolling.

  • Screenshot options fit the window — size, background and annotations sit beside the preview,
    with figure controls grouped below it. All export options remain available without scrolling at
    the minimum supported window size.


Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

What's Changed

  • fix(ui): simplify view and capture controls; release 0.3.11 by @idossha in #34

Full Changelog: v0.3.10...v0.3.11

Tetravox 0.3.10

Choose a tag to compare

@github-actions github-actions released this 04 Sep 20:48
e65292a

Fixed

  • Changing surface opacity no longer exposes buried triangle seams. Mesh and volume-derived
    surfaces retain smooth shading while you adjust transparency in the 3D viewer. Explicit boundary
    lines remain controlled by the surface-edge setting; fully opaque rendering is unchanged.

Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

What's Changed

  • chore(release): 0.3.9 by @idossha in #32
  • fix(render): smooth surface transparency; release 0.3.10 by @idossha in #33

Full Changelog: v0.3.9...v0.3.10

Tetravox 0.3.9

Choose a tag to compare

@github-actions github-actions released this 04 Sep 18:20

Added

  • An extension can read and restore the 3-D camera, and can hear what you clicked on. Two
    additions to the extension API. scene.camera() / scene.setCamera() mean an extension that moves
    the 3-D view — a QC export taking the four anatomical shots, say — can put it back exactly where
    you had it, instead of leaving you on whichever preset it used last. And an extension can now
    subscribe to the probe itself, so a panel showing "what is under the crosshair" updates when the
    answer for a surface or a mesh actually arrives, rather than showing the previous point's reading.
    Both are additive: every existing extension keeps working unchanged, and none needs a new release.

Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

What's Changed

  • chore(release): 0.3.8 by @idossha in #30
  • feat(modules): an extension can read and restore the 3-D camera, and hear the probe by @idossha in #31

Full Changelog: v0.3.8...v0.3.9

Tetravox 0.3.8

Choose a tag to compare

@github-actions github-actions released this 04 Sep 05:32

Fixed

  • File ▸ Extensions… now always shows at least what your copy of Tetravox shipped with. When the
    online catalogue was behind the application, it replaced the built-in one — so a machine with a
    network connection could be offered an older extension than one with none, or not be offered an
    extension at all. The two lists are now merged: the online catalogue can only add newer versions
    and new extensions, never take one away. New extension releases still appear without updating
    Tetravox.

Installing

Full steps: https://idossha.github.io/tetravox/install

  • macOS — the .dmg is signed with a Developer ID and notarised; drag to Applications and open.
    (A build from a fork without a certificate is unsigned: xattr -dr com.apple.quarantine /Applications/Tetravox.app.)
  • Linuxchmod +x the AppImage and run it, or apt install ./Tetravox-*-linux-amd64.deb.
  • Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.

What's Changed

  • fix(extensions): a stale registry could hide what the build ships by @idossha in #28
  • chore(release): 0.3.8 by @idossha in #29

Full Changelog: v0.3.7...v0.3.8