Releases: idossha/tetravox
Release list
Tetravox 0.6.1
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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt install ./Tetravox-*-linux-amd64.deb. - Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.
What's Changed
Full Changelog: v0.6.0...v0.6.1
Tetravox 0.6.0
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.
hidewith
hileft open (nullin a scene file) is "hide everything belowlo"; 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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt 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
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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt 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
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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt 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
Fixed
-
Point layers keep their filenames. Loading
.geoor.posfiles 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.jsonfiles with the native application; batch rendering through--jobis retained. -
Managed installations keep their pinned version. Launches with
TETRAVOX_MANAGED_BYset 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
aViewSpecnow has a third geometry layer kind:"surface". A mesh is a tetrahedral FEM
volume — a SimNIBS.mshwith an interior, tissue tags, per-element fields and a clip plane that
can be capped. A surface is a triangular sheet — FreeSurferlh.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-vertexoverlay(curvature, thickness, a.func.gii), or anannotation(a
.annotor.label.giiatlas). 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.annotis 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 noformatfield 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 asurfacelayer to a build whose
ready.versionis 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=viewportbesideembed=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(insha256sumformat, sosha256sum -cworks 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 overpostMessage— 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.mdis the contract: the URL, the message table, the headers
and CSP a host must send, three completeViewSpecexamples, 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
.mshdata 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 markedselected,disabledor 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 ofready.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.
setHoverEventsturns on a
pointHovermessage 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 asnullnow 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...
Tetravox 0.4.0
Added
- Surfaces are their own layer kind — a
.gii, FreeSurfer, STL/PLY/OBJ shell opens as asurface
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 sayssurfaceand 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.giionto 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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt 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
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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt install ./Tetravox-*-linux-amd64.deb. - Windows — the installer is unsigned; SmartScreen warns. More info → Run anyway.
What's Changed
Full Changelog: v0.3.10...v0.3.11
Tetravox 0.3.10
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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt 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
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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt 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
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
.dmgis 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.) - Linux —
chmod +xthe AppImage and run it, orapt 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