NEWS
ieegio 0.1.3 (2026-10-12)
volume_to_surface with the default implicit smoothing reduces surfaces with more than max_vertices vertices (500,000 by default) with ravetools::vcg_decimate before smoothing; a whole-brain mask at sub-millimeter resolution gives millions of vertices, and the implicit solver needs memory that grows quickly with the surface. The same lambda and degree smooth a decimated mesh more, so raise max_vertices to smooth at full resolution. With a ravetools version that has no vcg_decimate (0.3.2 and earlier, whose implicit smoother crashes on large surfaces), surfaces with more than 20,000 vertices are returned without smoothing, with a warning
volume_to_surface gains smooth_method = "explicit" to smooth with ravetools::mris_smooth (smooth_iterations rounds of neighbor averaging) instead of the implicit solver, falling back to the "laplace" type of ravetools::vcg_smooth_explicit when mris_smooth is not available, and smooth_method = "none" to skip smoothing; neither is decimated
volume_to_surface treats NA, NaN, and infinite voxels as invalid and leaves them out of the surface. A volume file with NaN voxels used to stop with missing value where TRUE/FALSE needed, and infinite voxels above threshold_lb were part of the surface when threshold_ub was NA
ieegio 0.1.2 (2026-09-03)
- Added
as_ieegio_roi to mark an image volume, surface, point cloud, or streamlines object as a region of interest, recording the selection criteria (intensity bounds, threshold expressions, arc length filters) rather than applying them right away
- Added
resolve_roi_as to carry out those criteria and convert the region into a chosen representation (volume, point cloud, surface, or streamlines), always in world RAS coordinates so two resolved regions can be compared directly
- Added
detect_roi_overlap to test whether two regions overlap, with distance tolerance, an optional interior test for closed surfaces, and per-unit hit ratios written back onto the second region
- Added
io_read_niml and niml_find to read AFNI and SUMA NIML datasets, supporting every storage form (plain text, binary and base64 in either byte order, optionally gzip compressed) and every column type, including String, Line, complex, rgb, and rgba
- Added
niml_as_surface and an as_ieegio_surface method for NIML objects; read_surface now recognizes '.niml.dset' files and decides between annotations and measurements from the dataset itself
read_colormap now reads the AFNI label table from NIML datasets that store it in binary form
- The
HDF5 back-end is now resolved at run time, choosing among readNSx, h5lite, hdf5r, and h5py; hdf5r is no longer required and has been removed from Suggests
- Fixed the
h5py back-end returning 32-bit integer datasets as double, which turned the missing value sentinel into a large negative number
- Added a
sanitize argument to read_streamlines and as_ieegio_streamlines that discards tracts which are not lines and points with missing coordinates; set it to FALSE to read a file exactly as written
- Fixed streamline scalar and property naming when the scalars are stored as a matrix, and gave automatically generated property names their own prefix
- Fixed
as_ieegio_volume choosing an integer data type for arrays that contain Inf
- Added
NIML sample datasets and std.141 inflated surfaces to example data
ieegio 0.1.1
- Added
io_read_vtk_polys and io_write_vtk_polys to read and write surface meshes stored in VTK polygon formats (legacy .vtk, XML-based .vtp, .pvtp, .vtu, and HDF5-based .vtpb), including vertex colors and vertex-wise measurements; read_surface and write_surface now recognize these formats
- Added read and write functions for color-map files
- Fixed a graphics bug that causes
par not reset after showing surfaces
- Added a helper function to convert volume atlases to surface with proper smoothing
- Added
YBA696 atlas to example data
ieegio 0.1.0 (2026-05-31)
- Added
burn_curve to burn electrode trajectories (e.g. depth/sEEG leads or DBS shafts) into a volume given start and end positions in image native RAS coordinates, with configurable radius and per-segment colors
- Added a
merge mode to burn_curve so newly burned trajectories can be composted onto an existing volume instead of overwriting it
- Added a base
R graphics plot method for ieegio_surface objects as an alternative to the default r3js rendering, useful for static figures and environments without WebGL
- Fixed
get_channel so channels can be looked up by label (in addition to index) for BCI2000 and BrainVision formats
- Fixed
mat_to_quaternion to correctly handle handedness changes, aligning the quaternion sign convention with FreeSurfer
- Code style and lint cleanup across the package; rebuilt documentation
ieegio 0.0.9 (2026-01-27)
- Fixed
CRAN check issues
- Added volume and surface related functions as
MCP tools (can be loaded via package ravepipeline and ellmer)
ieegio 0.0.8 (2026-01-11)
- Added
new_space and as_ieegio_transform to define coordinate spaces and chain transforms
- Added
io_read_ants_transform to read ANTs affine and displacement field transforms
- Added
io_read_flirt_transform to read FSL FLIRT affine transforms
- Added
volume_to_surface and surface_to_surface for mapping data between volumes and surfaces
- Fixed point transform ambiguity when chaining transforms with different interpretations
- Improved
plot.ieegio_volume intensity windowing using percentile-based display range (2-98 percentiles), following conventions from FSLeyes, AFNI, MRIcroGL, and SPM
- Auto-detection for
CT vs MRI data: excludes zeros by default but includes them when lower percentile is below -500 (indicating CT with -1024 background)
- Statistical overlay detection: applies symmetric range for z-score-like data
- Values outside display range are now clamped to boundary colors instead of rendering as transparent
ieegio 0.0.7
- Added
as_nifti_header as a workaround when RNifti is missing (not installed or running in WebAssembly)
- Added automatic checks when pushing commits the repository to
Github
ieegio 0.0.6 (2025-10-24)
- Added
write_edf to save signals as continuous EDF format
- Added
YBA atlas (690 segments) to example data
- Improved
HDF5 checking error messages
ieegio 0.0.5 (2025-07-22)
- Added
LazyFST class
- Fixed a bug where
gzipped is ignored in io_write_nii.array
LazyH5 fall back to alternatives when HDF5 is not supported in wasm
- Plotting surfaces use
r3js by default
- Fixed
BrainVision annotation bugs
- Supported writing to
STL format (to support importing to BrainLab)
- Added supports to read streamlines data (
trk, tck, tt, vtk)
- Writing to
freesurfer surfaces also appends orientation information at the end.
ieegio 0.0.4 (2025-03-07)
- Added merge support for both volume and surface objects; for surface objects, users can choose whether to merge the objects in model or world space
- Added dependency
ravetools to help speed up sample volumes using C++
- Fixed missing transform issue in writing to
GIfTI format
- Fixed
write_surface not working when writing to FreeSurfer measurement (curvature) format
- Fixed a typo that caused setting volume data resulting in errors
as_ieegio_surface does not require vertices
ieegio 0.0.3 (2025-01-13)
- Cleaned
h5py loader
mat_to_quaternion always returns non-negative w now
- Added generics
dim and length to volume object
- Fixed annotation issues in
EDF format
- Time selection is double-sided using greater equal and less equal signs
- Added more sample data
- Supports colored (
RGB[A]) formats
- Fixed color intensity when
cal_min and cal_max is set
- Using
r3js for visualizing surfaces
- Added
resample_volume to sample images (currently only nearest neighbor)
- Added
burn_volume to burn contacts (positions given in the image native RAS coordinate) with any given colors
- Fixed
io_h5_names returning wrong names when using with h5py
- Exported internal class
LazyH5 for down-stream packages
- Added
as_ieegio_volume and as_ieegio_surface to enclose volume or surface data
- Added a flag to disable using
Python
ieegio 0.0.2 (2024-10-31)
- Added
h5py as an alternative back-end support
- Fixed a bug where images are not loaded correctly due to image format being ignored
- Fixed
Torig (index to tkr coordinate transform) issue
- Fixed a global variable issue
- Fixed a bug where file name is not respected
ieegio 0.0.1 (2024-09-16)