Hi everyone!
Today we are glad to announce a new development project: XISF. XISF stands for Extensible Image Serialization Format, and is from now on the file format used by default in PixInsight for storage and management of images and their associated data and properties. XISF effectively replaces the FITS format, which is now deprecated in PixInsight, and will be supported exclusively for compatibility with existing data and applications.
XISF is an open file format. This means that its formal specification is publicly available, it can be freely used and implemented by anyone, and is open to contributions from third parties, including all software developers involved in PixInsight development, as well as individuals and teams from other companies and groups. The official XISF development repository will be part of the
official PixInsight GitHub repositories.
We have just released a new open-source XISF module for all supported platforms (FreeBSD, Linux, OS X and Windows). The XISF module is an initial implementation of the XISF version 1.0 specification. We have also released a new version 1.38 of the BatchPreprocessing script that uses XISF for all generated output by default. Both updates are now available for PixInsight Core 1.8.3.1123.
Main Format FeaturesThe initial XISF version 1.0 specification has the following main features:
* Two storage models: -
Monolithic model, where all image metadata, pixel sample data and image properties are stored in a single storage unit (e.g. a disk file). Monolithic XISF file names carry the .xisf suffix.
-
Distributed model, where image definitions and metadata are stored in a single header unit, and pixel sample data and image properties can be stored as separate units, including local and remote storage (for example, we can send you a XISF header that points to image contents and properties stored in a remote server). XISF header units carry the .xish file suffix, while XISF binary data blocks (known as 'XISF blobs') have the .xisb file suffix.
The initial implementation of XISF that we have released as a PixInsight module only supports monolithic XISF files.
* Storage of multiple images, metadata and image properties. An XISF file can store an unlimited number of images with different geometries, color spaces, and associated metadata and properties.
* Multidimensional images. XISF supports arbitrary image dimensions, including one-dimensional, two-dimensional and three-dimensional images, as well as images of higher dimensions such as tesseracts and other hypercubes.
The current XISF PixInsight module only supports two-dimensional images.
* Multiple image channels. XISF supports an unlimited number of image planes (not to be confused with the
dimensionality of the image), such as nominal color channels and alpha channels, for each stored image.
* Sequential and random access to pixel data. Monolithic XISF files support sequential and random access to load individual pixel sample rows or sets of contiguous rows.
* Seven pixel sample data types supported: - Unsigned 8-bit integer real
- Unsigned 16-bit integer real
- Unsigned 32-bit integer real
- 32-bit IEEE 754 floating point real
- 64-bit IEEE 754 floating point real
- 32-bit IEEE 754 floating point complex
- 64-bit IEEE 754 floating point complex
* Seven color spaces supported: - Grayscale
- RGB
- CIE XYZ
- CIE L*a*b*
- CIE L*c*h*
- HSV
- HSI
* Support for RGB working spaces. XISF can serialize the parameters of colorimetrically defined RGB working spaces, which can be associated with stored images.
* Support for ICC color profiles. XISF can store standard ICC color profiles associated with stored images.
* Arbitrary floating point data ranges. Floating point images (both real and complex) can be stored using arbitrary values and ranges. However, an unambiguous specification of the numeric range to which floating point image data is referred—that is, the black and white points of the image—is mandatory. Specifying the numeric range of integer image data is optional (by default, integer images utilize the whole [0,2
n-1] range, where n is the sample bit depth)..
* Data compression. XISF supports arbitrary data compression codecs, including lossless and lossy compression schemes.
The current XISF PixInsight module supports zlib/defalte lossless compression.
* Digital signatures. XISF implements digitally signed files with standard X.509 certificates and
XML signatures. Digital signatures protect both data integrity and authenticity.
Note: The current PixInsight XISF module still does not support digital signatures; this feature will be available in an upcoming version.
* XML file headers. XISF headers (in both the monolithic and distributed models) are plain text in standard XML 1.0 format encoded as UTF-8.
* Full Unicode support. Image metadata and textual properties fully support Unicode. XISF headers are encoded as UTF-8 data.
* Strongly-typed image properties. An XISF property is a data block accessible through a unique identifier (
name-value pairs). Properties can be associated with images, with the whole XISF unit, or be serialized as independent elements. XISF properties are strongly-typed objects of scalar, vector and matrix types:
Scalar property types:
Boolean (a one-byte integer with 0 or 1 value)
8-bit signed integer
8-bit unsigned integer
16-bit signed integer
16-bit unsigned integer
32-bit signed integer
32-bit unsigned integer
64-bit signed integer
64-bit unsigned integer
32-bit IEEE 754 floating point (float)
64-bit IEEE 754 floating point (double)
Vector property types:
ByteArray - a vector of unsigned 8-bit integers
IVector - a vector of signed 32-bit integers
UIVector - a vector of unsigned 32-bit integers
I64Vector - a vector of signed 64-bit integers
UI64Vector - a vector of unsigned 64-bit integers
F32Vector - a vector of 32-bit IEEE 754 floating point real values
F64Vector - a vector of 64-bit IEEE 754 floating point real values
String16 - a null-terminated vector of 16-bit Unicode code points (UTF-16)
String8 - a null-terminated vector of 8-bit ISO/IEC-8859-1 or Unicode code points (UTF-8)
Matrix property types:
ByteMatrix - a matrix of unsigned 8-bit integers
IMatrix - a matrix of signed 32-bit integers
UIMatrix - a matrix of unsigned 32-bit integers
I64Matrix - a matrix of signed 64-bit integers
UI64Matrix - a matrix of unsigned 64-bit integers
F32Matrix - a matrix of 32-bit IEEE 754 floating point real values
F64Matrix - a matrix of 64-bit IEEE 754 floating point real values
* FITS compatibility. XISF is fully compatible with the FITS format. FITS header keywords can be stored in XISF files and then retrieved just as if you were working with actual FITS files. In this way existing tools and processing pipelines can work with XISF files without modification in PixInsight and other applications.
XISF RoadmapToday we have released an initial implementation of XISF on the PixInsight platform. The full source code of this implementation is also
available on our GitHub repositories under
PCL license.
However, this is not an official release of the XISF format, mainly because we still lack a formal definition of XISF. Along with the need of a formal definition, we've got a lot of work to do with this project. The current roadmap for the XISF project includes the following main goals:
- Release of a formal definition document for XISF version 1.0. This is a top-priority task for us, so this document will be available in the incoming weeks.
- Release of a reference, open-source, multiplatform implementation of XISF in the C++ language. This implementation will be available under a BSD license on the PixInsight GitHub repositories.
- Contact the developers of other software applications, especially image acquisition applications, asking them to support XISF. We'll assist all interested teams in their XISF implementations.
- Contact other developers and development teams to encourage them to participate in the development of XISF.
- Further development of the XISF implementation in PixInsight.
I hope you'll enjoy this new initiative. Thank you for your continued support.