Import/export of Image files into massiv Arrays

Version on this page:
LTS Haskell 22.30:
Stackage Nightly 2024-07-24:
Latest on Hackage:

See all snapshots massiv-io appears in

BSD-3-Clause licensed by Alexey Kuleshevich
Maintained by [email protected]
This version can be pinned in stack with:massiv-io-,3788

Module documentation for


massiv-io is a package that brings together JuicyPixels, Netpbm, Color and massiv in order to easily read, write and convert images in various formats and color spaces.


Language Travis Azure Coveralls
GitHub top language Travis Build Status Coverage Status Join the chat at
Package Hackage Nightly LTS
massiv-io Hackage Nightly Nightly
massiv Hackage Nightly Nightly
Color Hackage Nightly Nightly



  • Reexport Default class.
  • Add support for massiv-0.6
  • Expose Encode and Decode cosntructors
  • Add encodeAdhocM and decodeAdhocM
  • Add writableAdhoc and readableAdhoc
  • Add displayImageUsingAdhoc
  • Add coerceBinaryImage
  • Add instance for writing binary images: Image S X Bit without conversions.
  • Add selectFileFormat


  • Adjust insatnces to account for changes in Color-0.3.0, namely improvements to Luma (Y') and Y'CBCr color spaces.


  • Support for Color-0.2.0, in particular addition of Linearity kind to RGB color spaces. Pixels are re-exported from massiv-io, hence it is a breaking change.


  • Move the package into it’s own repository: lehins/massiv-io
  • Addition of instances for GIF sequences in RGB with Alpha and instanced with GifDisposalMethod
  • Addition of conversion functions: demoteLumaImage, promoteLumaImage, demoteLumaAlphaImage, promoteLumaAlphaImage
  • Instances for reading and writing images in Luma: Y' and Y'A


  • Switch to MonadIO
  • Write files with durability and atomicity guarantees
  • Switch to encodeM and decodeM, as well as corresponding encodeImageM and decodeImageM
  • Addition of decodeWithMetadataM
  • Addition of ConvertError, DecodeError and EncodeError.
  • Got rid of ReadOptions
  • Switch to Color package for pixels and color space coversion


  • Fix HDR decoding, i.e. .hdr and .pic file reading.


  • Fix reading images that have more than 8bit per channel: #85


  • Fix compatibility with JuicyPixels >= 3.3.0
  • Add Traversable instances for all Pixel types.
  • Derive a few more instances for X and Y pixels.
  • Drop dependency on data-default in favor of data-default-class


  • Made it compatible with new massiv >= 0.3 as well as the old ones.


  • All decoded images will be read in sequentially, but will have default computation set to Par.


  • Fixed wrongful export of Bit constructor.
  • Added export of fromDynamicImage and fromAnyDynamicImage


  • Fixed #22 - Invalid guard against image size
  • Made sure format is inferred from all supported file extensions for auto decoding.


  • Exposed Elevator internal functions.
  • Deprecate ColorSpace specific functions (liftPx, foldlPx, etc.) in favor of Functor, Applicative and Foldable.


  • Addition of Ord instances to Pixels.


  • Initial Release