Skip to content

Releases: brice-fr/hex-studio

Hex Studio v0.3.3

Choose a tag to compare

@github-actions github-actions released this 29 Jul 07:17

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's COM_AXIS runs 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 the COMPU_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

Choose a tag to compare

@github-actions github-actions released this 28 Jul 18:43

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-scheme media 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 reading 4 × 5 hours is 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

Choose a tag to compare

@github-actions github-actions released this 28 Jul 05:52

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_AXIS here, a COM_AXIS/RES_AXIS/CURVE_AXIS on the object that owns it (linked from the grid), and a FIX_AXIS nowhere — 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_DIR swaps X with Y only — it is not a reversal of the dimension order. The demo's 2×3×4 ROW_DIR/COLUMN_DIR twins hold the same 1…24; swapping recovers that, reversing the full order yields 1,13,4,16,11,….
  • INDEX_DECR reverses 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::Axis a 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 curve category, 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, not to_raw.
  • A padded MATRIX_DIM was read as a grid. ASAP2 up to 1.6 writes a flat array of eight as MATRIX_DIM 8 1 1, or 1 8 1 column-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

Choose a tag to compare

@github-actions github-actions released this 26 Jul 22:34

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

Choose a tag to compare

@github-actions github-actions released this 18 Apr 08:37
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

hex-editor v0.2.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Mar 14:27

Basic release without compare nor edit features. Signed MacOS binaries