Releases: brice-fr/hex-studio
Release list
Hex Studio v0.3.3
Maps get a third way to be read, the curves plot becomes usable when it is
crowded, and macOS gets an Intel build.
A map as a 3D surface
A Curves / 3D / None control under the map editor's title chooses what sits
below the grid. The two plots answer the same question differently and the card
is tall enough already, so they take turns rather than stacking.
- Drag to orbit, arrow keys to rotate, Home to reset. Hovering a cell traces
its row in the grid, the same link the curves plot has. - Cells use the grid's own shading, so the two views agree at a glance about
where the highs are. - Axes sit at their true breakpoints wherever those are numeric. The demo
file'sCOM_AXISruns 0…5 then 13, 15, and the surface shows that as bunched
columns and a wide gap — an even mesh would have hidden it. - A verbal axis is the exception. Its breakpoints carry numbers, but they are
keys into theCOMPU_METHOD's table rather than positions — an enumeration of
0, 1, 5, 100 would stretch the mesh for no reason a reader could see. Such an
axis falls back to even spacing and the caption says so.
It is plain SVG: a map is a height field, so cells cannot intersect and painting
them back to front by their footprint is exact. No WebGL and no new dependency.
Every curve can be pointed at, and one can be pinned
The curves plot matched the pointer on x alone. Every row of a map shares
the same x positions, so the distance was identical for all of them and the
first series always won — with a dozen curves on screen, eleven could not be
pointed at, whatever the pointer was nearest to. It now matches in both axes.
Even fixed, reading one curve out of a crowded family means chasing it, so a row
can be pinned: click its header in the grid, or click the curve itself. A
pinned row outranks the hovered one, survives the pointer leaving, and is
released by Escape, by the caption's button, or by clicking it again.
Intel macOS builds
Releases now carry Hex.Studio_0.3.3_x64.dmg as well as the Apple Silicon
build. Both come off one runner — x86_64 cross-compiles — and both are signed
and notarised.
Downloads
| Platform | File |
|---|---|
| macOS (Apple Silicon) | Hex.Studio_0.3.3_aarch64.dmg |
| macOS (Intel) | Hex.Studio_0.3.3_x64.dmg |
| Windows | Hex.Studio_0.3.3_x64-setup.exe or Hex.Studio_0.3.3_x64_en-US.msi |
The macOS builds are signed and notarised. The Windows installers are not code
signed, so SmartScreen may warn on first run — choose More info → Run anyway.
Full changelog: v0.3.2...v0.3.3
Hex Studio v0.3.2
A smaller release than v0.3.1: one new feature and one fix worth having.
Export every decoded value to a spreadsheet
File > Export Values as Excel… writes an .xlsx with one row per value —
673 rows from the 89 objects in the ASAM demo description. Export only; nothing
reads a workbook back.
The Index column places each value:
| Shape | Index |
Breakpoints |
|---|---|---|
| Scalar / String | Scalar / String |
— |
| Curve | (3) |
(4) |
| Map | (2,1) |
(3,orange) |
| Cuboid | (6,2,3) |
(13,3,31) |
CUBE_4 |
(2,1,3,1) |
… |
A tuple rather than X/Y/Z columns because A2L goes to five dimensions and
a fixed set of columns does not. It is 0-based and in A2L dimension order, so
the first component varies fastest — matching MATRIX_DIM, the storage order,
and the index the map editor addresses cells by.
Breakpoints carries the axis values at that position in the same shape, so a
row can be read on its own, and a verbal axis reads as its label rather than the
number behind it. A one-dimensional object also gets its breakpoint as a
number in Axis value, which is what makes a curve chartable in Excel
directly.
Numbers are written as numbers, not text. That is the reason for a workbook
rather than CSV: a comma-separated file opens as a single column wherever the
locale expects ; as the separator and , as the decimal mark. The header row
is frozen and filtered.
Objects that could not be decoded still get a row, with the value columns empty
and In image saying why, so the export and the object count on screen agree.
Fixes
- The toolbar ignored the theme setting. It painted its colours behind a
prefers-color-schememedia query, which follows the operating system, while
the rest of the app keys off the Preferences selection — so choosing Dark
on a light-mode machine left a light toolbar over a dark app, and the reverse. - Maps exported without a unit. The table blanks it deliberately, since a
cell reading4 × 5 hoursis nonsense, but a spreadsheet row holds a single
value and has to carry it. - The map editor centres a grid narrower than its own header, instead of
leaving it against the left edge.
Also
The README now documents the A2L data view, the calibration features and the
constructs actually supported, and leads with three screenshots generated from
the ASAM demo image rather than hand-captured — docs/screenshots/capture.sh
regenerates them.
Downloads
| Platform | File |
|---|---|
| macOS (Apple Silicon) | Hex.Studio_0.3.2_aarch64.dmg |
| Windows | Hex.Studio_0.3.2_x64-setup.exe or Hex.Studio_0.3.2_x64_en-US.msi |
The macOS build is signed and notarised. The Windows installers are not code
signed, so SmartScreen may warn on first run — choose More info → Run anyway.
Full changelog: v0.3.1...v0.3.2
Hex Studio v0.3.1
Multi-dimensional calibration data. MAP, CUBOID, CUBE_4 and CUBE_5 now
decode, encode and round-trip through CDFX — every object in the ASAM ASAP2
demo description resolves, and the unsupported count is zero.
Maps, cuboids and cubes
- The detail pane shows a shaded grid preview with the object's shape and one row per axis, and Edit values… opens a full-size grid: X breakpoints across the top, Y down the side, cells editable in place.
- Anything past two dimensions gets a slice selector per extra dimension, reducing a cuboid or cube to a plane.
- A family-of-curves plot draws each row of the visible slice. Hovering a row in the grid traces its curve and the reverse. All curves share one vertical scale, pinned to the whole object, so slices stay comparable as you step through them.
- Breakpoints are editable only where the bytes actually are: a
STD_AXIShere, aCOM_AXIS/RES_AXIS/CURVE_AXISon the object that owns it (linked from the grid), and aFIX_AXISnowhere — it is computed from the A2L and occupies no image bytes.
Two things the demo file settled that reasoning alone would have got wrong, and
which are now covered by tests:
COLUMN_DIRswaps X with Y only — it is not a reversal of the dimension order. The demo's2×3×4ROW_DIR/COLUMN_DIRtwins hold the same1…24; swapping recovers that, reversing the full order yields1,13,4,16,11,….INDEX_DECRreverses along its own axis only. Reversing the whole flat array is right in one dimension and wrong in two, where it would also mirror X and mispair every value with the wrong breakpoint.
Everywhere else
- 1D curves get a plot in the detail pane, which follows the draft as you type rather than waiting for the commit.
- Verbal breakpoints and values are chosen from their enumeration rather than typed, and written by name — a verbal conversion has no numeric inverse.
- Maps are summarised in the table by their shape (
4 × 5) rather than a value span, which across a whole grid says very little. - The category list is ordered by dimension — Scalars, Axes, 1D curves, Maps & cubes — and Unsupported is hidden unless a file actually contains one.
Fixes
- Axis editing was broken. Giving
PointTarget::Axisa dimension changed its JSON from"axis"to{"axis": n}, so every axis edit from the data view silently failed to deserialise. Both spellings are now accepted, with a test covering the contract. - Maps never loaded their detail. The fetch still tested for the old
curvecategory, so the axes summary, grid preview, editor and everything downstream rendered nothing. It now asks the backend, which sets a point count for exactly the shapes that have one. - Verbal axes were offered as editable and refused every value — they invert through
text_to_raw, notto_raw. - A padded
MATRIX_DIMwas read as a grid. ASAP2 up to 1.6 writes a flat array of eight asMATRIX_DIM 8 1 1, or1 8 1column-oriented; both were presented as volumes. - Exported CDFX numbers are written at round-trip precision, so re-importing an export no longer rewrites the image.
Downloads
| Platform | File |
|---|---|
| macOS (Apple Silicon) | Hex.Studio_0.3.1_aarch64.dmg |
| Windows | Hex.Studio_0.3.1_x64-setup.exe or Hex.Studio_0.3.1_x64_en-US.msi |
The macOS build is signed and notarised. The Windows installers are not code
signed, so SmartScreen may warn on first run — choose More info → Run
anyway.
Full changelog: v0.3.0...v0.3.1
Hex Studio v0.3.0
Add the data view feature that decodes and allow edition/encoding of physical values according to an A2L description
Full Changelog: v0.2.5...v0.3.0
hex-editor v0.2.4
fix: split on both / and \ in lastName() for Windows path compatibility
path.split('/') leaves Windows backslash paths unsplit, so the full
path was shown in the diff header on Windows. The regex /[\\/]/ handles
both separators.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hex-editor v0.2.3
Basic release without compare nor edit features. Signed MacOS binaries