Icy is free and open source (license GPLv3)

Icy requires at least Java 7 to work but we recommend to use Java 8 (OpenJDK or Oracle JDK depending what you prefer).
You can download it here if needed:


  • Mac OSX users
    You need to have JDK 8 installed (not the JRE) otherwise Java won’t be recognized.
    Move the Icy application into the Applications folder
    then the first time you try to launch the application it may not work because of the default Security preferences. You can force it by doing right click on the application icon (or Ctrl+click) and use Open command. Validate the Open operation then now you should now be able to use Icy normally.
  • Windows users
    Do not install Icy in the Program Files folder or the auto update process may fail because of missing write permission (C:\Icy is a good alternative). If VTK library loading fail, try to install the VC++ redistributable package on your system.
  • Linux users
    Icy now includes the VTK binaries (with java binding), be sure to start Icy from its folder so VTK library can load correctly.
    Still you may experience incompatibilities depending your Linux distribution (we tested only for Ubuntu and Mint), in this case you may need to install (or compile) the dedicated VTK package (version 6.3 currently) with java wrapper for your distribution and move the library files (.so) into the lib/linux64/vtk folder of Icy.
  • Old java 6 / OpenGL users
    • Note that if you only have java 6 on your system, you can download an older version of Icy ( You can find the download link at bottom of this page.
    • Starting from Icy the VTK library has been upgraded to version 6.3 and now uses the new OpenGL2 back-end for rendering. That means older graphics card may not support VTK 3D rendering anymore, same is true for older Mac OSX systems (<= 10.6.X) which don’t support the new OpenGL based components for VTK. If you really need to use VTK and OpenGL2 is not supported anymore by your system, then you may stick with the version of Icy (you can find the download link at bottom of this page).

Get previous releases of Icy

Bug fixes and tweaks - Java 7 - ALL
Release date: 2019-10-31 19:00:00
View changelog

* Canvas:
- faster and smaller memory footprint for screenshot for simple 2D image
* VTK:
- fixed colormap alpha restoration for 3D VTK canvas.
* Loader / Bio-Formats:
- fixed tile image loading.
- fixed duplicated data when opening several sequences at once.
- minor tweak to avoid using cache when not needed (better performance).
- minor change on data pre-fetch strategy.
* replaced micro character by 'u' to avoid incorrect display on non UTF-16 softwares
* updated online bug report to make it compliant with new web report.
* small fix in ROI table sorter.

- fixed MANIFEST.MF file containing an invalid character which was making Eclipse to crash.
- small tweak in XMLUtil.loadDocument(..) methods.

Switched to new internal web interface - Java 7 - ALL
Release date: 2019-08-30 16:00:00
View changelog

* Loader:
- empty pre-fetch tasks on Sequence close.
* VTK:
- correct colormap alpha channel loading for IcyCanvas3D
* Search:
- general improvements on search engine (support +/- operator on keyword).
- switched online search to the new web interface

* fixed ROIUtil.convertToSequence(..) method to correctly generate labeled image.

Image cache engine fixes and improvements - Java 7 - ALL OS
Release date: 2019-08-12 18:00:00
View changelog

* Loader:
- fixed empty (black) image when opening multi-series Sequence (shared importer was closed)
- limited number of importer (reduce memory usage when the group contains many files)
* ImageCache:
- removed temporal images from the cache to not waste memory
- tweaked EHCache data expiration settings
- minor fix in GUI refresh
* Sequence:
- added simple data prefetch for faster initial data loading
- added getFilename(t, z, c) to get file path for image at given position when Sequence was loaded from multiple files
* added global layer enable/disable action (shift + L)
* fixed native library patching for Java 12 or above
* VTK:
- better error reporting
- minor tweak on VTK native library loading

New image cache engine - Java 7 - ALL OS
Release date: 2019-04-12 12:00:00
View changelog

* new image cache engine.
* new packaging for easier installation on OSX system.
* GUI:
- added new Icy 'virtual mode' button to force the image cache engine to be used for all opened / created images.
- memory monitor now display image cache load level.
- Icy shows 'virtual mode' in title when image cache engine is forced ON.
- improved 'General' and 'Canvas' preferences presentation.
- added image cache settings in 'General preferences' section.
- added informations on image cache at startup.
- fixed position of Series selection dialog
* Loader:
- added lazy data loading for faster Sequence loading operation.
- improved preview display refresh.
* ROI:
- added 'ROI to Square' conversion.
- added 'ROI to Circle' conversion.
- small changes / improvements on ROI tasks GUI
* Viewer:
- timelaps are now in 'repeat' playback mode by default
- added 'SPACE' key shortcut to play/pause timelaps playback
* better background processing of some basic sequence operations ('Duplicate', 'Convert RGB', 'Convert Gray', 'Crop'...)
* minor speed improvement on application start
* added new splash screens
* many other small changes, tweaks, fixes and refactoring

* IcyBufferedImage:
- many changes to add image cache support.
- added lazy data loading support (for faster Sequence loading operation)
- added isVolatile() / setVolatile(..) method to enable/disable image caching.
- added isDataInitialized() / isDataLoaded().. methods.
- many others changes.
* Sequence:
- added isVolatile() / setVolatile(..) method to enable/disable image caching.
- added setDataXY(..) method (need to use it for image caching)
- changed the way channel bounds are updated (as data can be loaded on demand).
* SequenceUtil:
- fixed getSubSequence(...) method to work with volatile images.
- extractSlice(..) and extractFrame(..) now correctly duplicate original images data (should have been the case).
- minor fix on colormap update in utilities methods.
* Loader:
- added 'forceVolatile' parameter on some methods to force image caching.
- fixed possible Importer leak on error.
* Bio-Formats importer:
- fixed possible bugs during downscaled image/data loading
* ROIUtil:
- added convertToPoint(..), convertToEllipse(..) and convertToRectangle(..) methods
* DataIterator:
- updated to be compatible with volatile images.
* VtkUtil:
- minor change in getBinaryImageData(vtkPolyData, ...) method
* added FileUtil.getDrive(path) method
* added IcyFrame.getBorder() method
* fixed last ROIs objects retention when removing ROIS from an image while keeping the image open.
* added EHCache library.

Fix for Java 11 and small rendering bug with ROI Point in 3D (VTK rendering) - Java 7 - ALL OS
Release date: 2018-11-19 00:00:00
View changelog

* ROI:
- fixed 3D VTK display for ROI2DPoint and ROI3DPoint
- tweaks for faster retrieve of default property value
* Saver:
- FPS is automatically determined from metadata (AVI format)
- added time interval field for easier FPS calculation (AVI format)
* Plugin: minor fix about plugin installation notification
* Network: audit methods cannot lock anymore Icy launch process.
* Minor fix on possible exception with the Clipboard.
* Other minors changes or fixes.

Added image series grouping and improved ROI display in 3D (VTK rendering) - Java 7 - ALL OS
Release date: 2018-09-28 00:00:00
View changelog

* Loader:
- added series grouping when 'grouping' in enabled in Loader dialog
- added groupSeries(..) method to group similar series in an image
* Sequence: fixed series index reset after saving an image
* ROI:
- fixed 3D VTK display (correctly handling specific Z and T position of the ROI)
- fixed ROI Mass Center computation for single point ROI
* VtkCanvas:
- fixed layers refresh on position change
- fixed/better implementation of layers visibility
* Network:
- added warning message for HTTPS compatibility with the future web site
- fixed HTTPS support for future web site (when java version ok)
- replaced automatic redirection by manual (and safer) redirection
- better error handling in general

* Sequence: added getDataInterpolated(t, z, c, y, x) method
* IcyBufferedImage: added getDataInterpolate(x,y,c) method
* Loader: added groupSeries(..) method to group similar series in an image
* Line2DIterator / Line3DIterator: added forceLastPoint parameter.
* VtkUtil:
- added getJavaArray(vtkDataArray) method
- added getPolyDataFromDataSet(vtkDataSet) method
- added getBooleanMaskFromBinaryImage(vtkImageData..) method

Improved automatic stitching, better metadata preservation - Java 7 - ALL OS
Release date: 2018-07-20 00:00:00
View changelog

* Loader:
- fixed time position (timestamp) in metadata when loading sub part of sequence
- fixed a small bug in setting panel (couldn't change 'loading type' in some situation)
- fixed minor bug with possible invalid metadata when stitching was used.
- stitching disabled when 'loading type' is set to 'separate' (better implementation)
* Minor fix to update plugin processing (incorrect message report)

* Sequence:
- better metadata initialization
- added getPosition() method for fast XYZ position retrieving
- added getPositionT() / getTimeStamp() methods
- added getPositionTOffset(..) method
- added setPositionT() / setTimeStamp(..) methods
- added setPositionTOffset(..) method
* MetaDataUtil:
- added getPositionT(..) / getTimeStamp(..) methods
- changed getTimePosition(..) by getPositionTOffset(..) methods
- added setPositionT(..) / setTimeStamp(..) methods
- added setPositionTOffset(..) methods
* SequenceUtil:
- added convertPoint(..) methods for easy coordinate conversion between 2 Sequence objects
- added convertRectangle(..) methods for easy region conversion between 2 Sequence objects
* ROIUtil:
- rewrote adjustToSequence(..) method (better implementation).
* VtkUtil:
- added getROIFromBinaryImage(..) method to convert VTK binary image to ROI
- renamed method polyDataToImageDate(..) to getBinaryImageData(..)
- added getTransform(..) method
- renamed method objToMesh(..) to getSurfaceFromOBJ(..)

Improvements in 'multiple file' image loading - Java 7 - ALL OS
Release date: 2018-05-18 00:00:00
View changelog

* Several fixes and improvements on multi file loading
* Fixed updater to keep it compatible with Java 6

Fixed OSX launch issue - Java 7 - ALL OS
Release date: 2017-11-27 00:00:00
View changelog

* fixed ImageJ issue on last OSX preventing Icy from starting.
* Search: 'Actionable' bundled plugins are not visible in search results.

* added added Sequence.getROIs(Class roiClass, boolean sorted) method
* minor tweak/fix in MetaDataUtil.keepSingleSerie(..)tmp

Added scaling features to ROI - Java 7 - ALL OS
Release date: 2017-08-11 00:00:00
View changelog

- minors fixes and tweaks.

* ROI2DArea / BooleanMask2D:
- added upscale() method for 2x up scaling.
- added downscale() method for 2x down scaling.
* ROI3DArea / BooleanMask3D:
- added upscale() method for 2x up scaling.
- added upscale2D() method for 2x up scaling (2D only).
- added downscale() method for 2x down scaling.
- added downscale2D() method for 2x down scaling (2D only).
* ROI:
- getProperty(..) / setProperty(..) property name is not anymore case sensitive.
* ROIUtil:
- added scale(ROI, ...) method (only work for ROI2DShape and ROI3DShape)
- added getUpscaled(..) method for 2x up scaled ROI.
- added getDownscaled(..) method for 2x down scaled ROI.
* Loader: fixed a minor bug on region image loading.
* Saver: fixed "origin" informations on saving operation
* Sequence: added resetOriginInformation() method

Reworked GUI and improved image opening - Java 7 - ALL OS
Release date: 2017-06-06 00:00:00
View changelog

* GUI: reworked Sequence and ROI menu tasks.
* Loader:
- we can now select image series directly from Loader dialog
- some bug fixes in preview refresh
- fixed Bio-Formats sub resolution loading
- fixed some bugs in Bio-Formats importer
- preserve series information when using 'open sequence region'
* fixed colormap opacity (regression)
* better colormap preservation of some Sequence operations.
* now support HTTPS connection for plugin repository.
* OutputPanel: we can now set a maximum line limit
* several bug fixes

* fixed IcyBufferedImage.toBufferedImage(..) method (regression)
* switched to OMEXMLMetadata class from 'ome' package when possible (refactoring)
* MetadataUtil: lot of refactoring (due to OMEXMLMetadata class change mainly)
* OMEUtil: some refactoring (due to OMEXMLMetadata class change mainly)
* added ImageProvider.getOMEXMLMetadata() method to use the good OMEXMLMetadata class ('ome' package)
* VTKUtil: added getImageData(..) method
* MainInterface: added getROIRibbonTask() method
* IcyCanvas: protected listener operations (add/remove/fireEvent)
* minor fix on ROI2DLine.setLine(..) method
* ROIActions: added fillInterior and fillExterior actions
* Sequence: some refactoring
* minor change in function ClassUtil.getFile(String className)
* minor fix in FileUtil.getFileExtension(..) method

Added new 3D ROI and ROI tools - Java 7 - ALL OS
Release date: 2017-04-03 00:00:00
View changelog

* added new 3D ROI:
- 3D point type ROI.
- 3D line type ROI.
- 3D polyline type ROI.
- Ellipse 3D stack type ROI (available from stacking operation).
- Polygon 3D stack type ROI (available from stacking operation).
* ROI:
- more interaction with 3D VTK display (can move and modify the ROI)
- better and safer VTK rendering in general
- added 'to 3D stack' operation to convert 2D ROI to 3D Stack ROI.
- added 'to Mask' operation to convert shape ROI to Area ROI.
- added 'to Shape' operation to convert area ROI to Polygon ROI.
- added 'Separate' operation to separate unconnected object from an Area ROI.
- added 'ROI Cutter' operation to manually cut/separate ROI.
* ROI Panel:
- can now modify position / size of multiple ROI at same time.
- we can now quickly move view to a specific ROI location by double clicking on it (work in both way: from ROI panel or from the image).
- cleaned GUI:
- removed some ROI operations we usually do from keyboard (copy/paste, delete)
- moved some ROI operations to ROI band (load/save, boolean operator).
- XLS export button moved at the top of the ROI table.
* Image Loader (loader dialog):
- added Z and T range selection
- added channel selection
- added resolution level selection
- added 2D region (XY) selection
- improved preview
- better filename auto ordering
* Image Saver (saver dialog):
- removed Z and T range selection (better to do adjust range before)
- use big tiff when dataset is above 2GB
- setting are now preserved in XML preferences.
- image conversion is now automatically done when you use a save format which isn't compatible with the current image format.
A warning is displayed to inform the user about possible data loss.
* GUI:
- added a new tooltip to explain where is the main menu.
- added java 6 warning for OSX users.
- improved memory usage report in memory monitor.
- reorganized 'File & ROI tools' menu:
- added 'open region...' command to load a specific XY region of an image.
- re-organized the ROI creation actions.
- added many ROI operation actions (see the above 'ROI' and 'ROI Panel' sections).
* Canvas2D:
- reversed panning direction from keypad keys.
- image cache now use volatile accelerated image (image redraw should be much faster on some systems)
* VtkCanvas: improved overlay handling (should be a bit faster and safer)
* better metadata preservation on Sequence operation.
* sequence merging operations is now possible with Sequence of different type.
* ToolTipFrame: we can now clink on URL to open external browser.
* Updater: fixed local directory saving (it was saving in working folder instead of application folder)
* fixed wait for plugin update in headless mode.
* many bug fixes.
* several tweaks and optimizations.
* some code cleanup.

* ROI:
- added 'group' field (will be use in future for 'group' ROI operation)
- added getLength(Sequence) method to compute length/perimeter with Sequence pixel size information.
- added getEffectiveDimension(..) dimension method.
- added unselectAllPoints() method.
- moved some methods to ROIUtil.
* ROI3D:
- added ROI3DPainter class for easier display and interaction for 3D ROI.
- added isOverEdge(..) method.
- added add(..), exclusiveAdd(..), intersects(..) and subtract(..) methods.
- added ROI3DShape: abstract class for 3D Shape ROI.
- added ROI3DPoint: 3D point type ROI.
- added ROI3DLine: 3D line type ROI.
- added ROI3DPolyline: 3D polyline type ROI.
- added ROI3DStackShape: abstract class for 3D Stack Shape ROI.
- added ROI3DStackEllipse: Ellipse 3D stack type ROI (available from stacking operation).
- added ROI3DStackPolygon: Polygon 3D stack type ROI (available from stacking operation).
* ROI3DStack:
- fixed setName(..) methods so children get modified as well.
- deprecated getUseChildColor()/setUseChildColor(..) methods.
* ROI3DArea:
- added ROI3DArea(BooleanMask2D, zMin, zMax) constructor.
- added isOverEdge(..) method.
* ROI5DArea: fixed a bug in optimizeBounds()
* ROI Overlay: drawROI(..) and drawName(..) are now public.
* ROIUtil:
- moved methods from ROI: getUnion(..), getIntersection(..), ...
- added convertToStack(..) method to convert 2D ROI to 3D Stack ROI.
- added convertToMask(..) method to convert Shape ROI to Area ROI.
- added convertToShape(..) method to convert Area ROI to Polygon ROI.
- added getConnectedComponents(..) to separate and retrieve connected components from an input ROI.
- added copyROIProperties(..) to copy properties from an input ROI.
- added split(ROI, Line2D) to cut/split a ROI from a given Line2D.
- added convertToSequence(..) method to convert a list of ROI to a labeled sequence.
* ROIDescriptor: added getDescriptor(descriptors, descriptorId) method
* ROIPerimeterDescriptor: modified to use the new ROI.getLength(..) method.
* BooleanMask2D:
- added getConnectedContourPoints(..) method to retrieve contour in 'connected' order.
- minor change to make it safer.
* added new 'geom' classes: Polygon2D, Polyline2D, Shape3D (base class for 3D shape), Line3D, Polyline3D
* Rectangle3D: added intersectsLine(..) method.
* Point3D:
- added many methods to compute distance, total distance, angle, normalize, length, dot product, cross product...
- added translate(..) method
- better hashCode() implementation.
* Anchor2D:
- added integer Z position information (for 3D position of 2D ROI)
- added VTK display and interaction support (allow ROI2D manipulation with VTK).
* PathAnchor2D: fixed visibility for closing point.
* added Rectangle2DUtil, Line2DUtil and Point2DUtil classes (utilities for the java classes)
* Sequence:
- added position X, Y, Z information (metadata)
- added 'origin' resolution, XY region, Z range, T range, channel information (when loading sub part of an image)
- added getOutputBaseName() / getOutputExtension() and getOutputFilename() to obtain wanted output filename given 'origin' informations
- trying to load too large array of data throw a TooLargeArrayException exception
* SequencePersistent: added isValidXMLPersitence(..) methods
* SequenceUtil:
- added getOriginPoint(..) / convertPoint(..) for point position conversion operation
- added getOriginRectangle(..) / convertRectangle(..) for rectangle position conversion operation
* IcyBufferedImage:
- trying to load too large array of data throw a TooLargeArrayException exception
- added copyData(array, ..) method to copy data from an array
* IcyBufferedImageUtil:
- added fast downscaleBy2(..) methods to quickly downscale image by a factor of 2
- changed toBufferedImage(..) method so it returns accelerated volatile image when possible.
* new 'undoable' operations:
- ROIReplaceSequenceEdit (replaced single ROI in a sequence)
- ROIReplacesSequenceEdit (replaced multiple ROI in a sequence)
- PositionROIEdit (modified single ROI position)
- PositionROIsEdit (modified multiple ROI position)
- BoundsROIEdit (modified single ROI bounds)
- BoundsROIsEdit (modified multiple ROI bounds)
- PropertyROIEdit (modified single ROI property)
- PropertyROIsEdit (modified multiple ROI property)
- Point3DAddedROIEdit (added a new point in a 3D ROI)
- Point3DMovedROIEdit (modified a point in a 3D ROI)
- Point3DRemovedROIEdit (removed a point in a 3D ROI)
* DefaultSequenceEdit: default undo operation on Sequence also preserve ROI and Overlays now (reference only)
* IcyCanvas:
- added canvasToImageLogDeltaZ(..) method, this is the Z equivalent to canvasToImageLogDeltaY(..) / canvasToImageLogDeltaX(..) methods.
- added centerOn(region) method for centering view on a specified image location.
* IcyCanvas2D: improved setMousePos(..) method to be safer.
* IcyCanvas3D:
- added methods to handle mouse (image) position.
- added imageToCanvas(..) and canvasToImage(..) methods (with default implementation to avoid breaking compatibility)
* Canvas2D:
- added getFitToCanvas() / setFirToCanvas() methods
- getARGBImage(..) now returns volatile accelerated image for faster image drawing operation (may consume more memory to prepare the image)
* VtkCanvas:
- added getWorldZ(Point) method to retrieve Z depth for a given 2D canvas position.
- added worldToDisplay(Point3D) method to convert a 3D world point to canvas 3D position.
- added displayToWorld(Point) method to convert a 2D canvas position to a world 3D point.
- implemented imageToCanvas(..) and canvasToImage(..) from previous added methods.
- implemented getScaleX/Y() methods.
- implemented setMouseImagePosX/Y/Z(..) methods.
- mouse event now provide a correct mouse position.
- removed the enable picking on Mouse Move switch.
* VtkUtil: simplified getSurfaceFromImage(..) method.
* IcyVtkPanel: added proper event consuming.
* Loader:
- added checkOpening(..) method to check we have enough resource to open an image
- added methods to load only sub part (Z, T and C) and sub resolution of the image.
- fixed issues while using Importer on non image files.
- many changes in general, new methods, refactoring...
* Bio-Format importer:
- added multi thread support.
- added tile loading for large image and sub resolution loading.
- better thumbnail loading.
* AbstractImageProvider / PluginSequenceFileImporter / PluginSequenceIdImporter:
- improved default getThumbnail(..) implementation
- added getImageByTile(..) method to load an image by tile (useful for large image)
* Saver:
- added many new methods to check compatibility image writing compatibility.
- reverted channel combination for 3 channels image saving in TIFF format (better for RGB image preview)
- methods doing Z/T range saving operation are now deprecated (better to do it before)
- added method getCompatibleSequenceForWriter(..) to automatically convert a Sequence so it can be save by a given writer (possible data loss)
- added SaverOptionPanel for easier setting definition
* SequenceDataIterator: fixed typo making some ROI calculations wrong in some situation.
* MetaDataUtil: replaced OMEXMLMetadataImpl class by OMEXMLMetadata in some methods (more generic, check if that bring issue)
* FileUtil: added getFiles(..) method to easily retrieve file with a specific extension without using a FileFilter.
* XMLUtil: added filtering to avoid incorrect character in name/attribute fields.
* SystemUtil:
- added getJavaVersionAsNumber() method
- getJavaFreeMemory() return the total amount of free memory available to the JVM
- getJavaMaxMemory() return the maximum amount of memory the JVM will attempt to use
- getJavaAllocatedMemory() return the memory currently *allocated* by the JVM
- getJavaUsedMemory() return an estimation of the memory currently *used* by the JVM
- getJavaTotalMemory() is deprecated (replaced by getJavaAllocatedMemory())
* ImageComponent: now use a cache for faster image drawing
* NumberTextField: added setInteger(..) method to force integer value instead of double value.
* ImageJUtil: added convertToIcyBufferedImage(..) method to convert a single image from an ImagePlus to an IcyBufferedImage
* IcyExceptionHandler: added anti spam protection for report(..) method.
* IcyCommandButton: added setPopup(..) method to enable popup action.
* RecentList: thread safe accesses, fixed possible NPE.

Last version compatible with Java 6 - ALL OS
Release date: 2016-07-26 00:00:00
View changelog

* fixed an issue when we tried to reload an image which has been saved after a Z slice remove operation.
* removed POI library from Icy-Kernel package (fix the infamous workbook error in protocol).
* other internals tweaks or changes.

Last version compatible with older VTK OpenGL implementation - Java 6 - ALL OS (required version for OSX < 10.7 or OpenGL < 2.0)
Release date: 2015-11-12 00:00:00
View changelog

Just some bug fixes here and there.