diff --git a/animate.cabal b/animate.cabal
--- a/animate.cabal
+++ b/animate.cabal
@@ -1,9 +1,11 @@
--- This file has been generated from package.yaml by hpack version 0.17.1.
+-- This file has been generated from package.yaml by hpack version 0.20.0.
 --
 -- see: https://github.com/sol/hpack
+--
+-- hash: 49d97c06a6ee7a87c120cefd771eaace13f5dd09656f8aa4d8712e5e43093f7f
 
 name:           animate
-version:        0.6.0
+version:        0.6.1
 synopsis:       Animation for sprites
 description:    Prototypical sprite animation with type-safety.
 category:       Game
@@ -30,14 +32,17 @@
   default-extensions: DuplicateRecordFields FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase NamedFieldPuns ScopedTypeVariables OverloadedStrings
   ghc-options: -Wall
   build-depends:
-      base >=4.7 && <5
-    , aeson
+      aeson
+    , base >=4.7 && <5
     , bytestring
     , containers
     , text
     , vector
+    , yaml
   exposed-modules:
       Animate
+  other-modules:
+      Paths_animate
   default-language: Haskell2010
 
 test-suite animate-test-suite
@@ -48,12 +53,13 @@
   default-extensions: DuplicateRecordFields FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase NamedFieldPuns ScopedTypeVariables OverloadedStrings
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base
-    , aeson
+      aeson
     , animate
+    , base
     , containers
     , hspec
     , vector
   other-modules:
       AnimateSpec
+      Paths_animate
   default-language: Haskell2010
diff --git a/library/Animate.hs b/library/Animate.hs
--- a/library/Animate.hs
+++ b/library/Animate.hs
@@ -25,12 +25,15 @@
   , nextKey
   , prevKey
   , readSpriteSheetInfoJSON
+  , readSpriteSheetInfoYAML
   , readSpriteSheetJSON
+  , readSpriteSheetYAML
   ) where
 
 import qualified Data.Vector as V (Vector, (!), length, fromList)
 import qualified Data.Map as Map
 import qualified Data.ByteString.Lazy as BL
+import qualified Data.Yaml as Y
 import Control.Applicative ((<|>))
 import Control.Monad (mzero)
 import Data.Aeson (FromJSON(..), ToJSON(..), (.:), eitherDecode, object, (.=), Value(..))
@@ -230,9 +233,25 @@
   :: FromJSON delay
   => FilePath -- ^ Path of the sprite sheet info JSON file
   -> IO (SpriteSheetInfo key delay)
-readSpriteSheetInfoJSON path = do
+readSpriteSheetInfoJSON = readSpriteSheetInfo eitherDecode
+
+readSpriteSheetInfoYAML
+  :: FromJSON delay
+  => FilePath -- ^ Path of the sprite sheet info JSON file
+  -> IO (SpriteSheetInfo key delay)
+readSpriteSheetInfoYAML = readSpriteSheetInfo eitherDecodeYAML
+
+eitherDecodeYAML :: FromJSON a => BL.ByteString -> Either String a
+eitherDecodeYAML = Y.decodeEither . BL.toStrict
+
+readSpriteSheetInfo
+  :: FromJSON delay
+  => (BL.ByteString -> Either String (SpriteSheetInfo key delay))
+  -> FilePath -- ^ Path of the sprite sheet info JSON file
+  -> IO (SpriteSheetInfo key delay)
+readSpriteSheetInfo decoder path = do
   metaBytes <- BL.readFile path
-  case eitherDecode metaBytes of
+  case decoder metaBytes of
     Left _err -> error $ "Cannot parse Sprite Sheet Info \"" ++ path ++ "\""
     Right ssi -> return ssi
 
@@ -243,8 +262,23 @@
   => (FilePath -> Maybe Color -> IO img) -- ^ Inject an image loading function
   -> FilePath -- ^ Path of the sprite sheet info JSON file
   -> IO (SpriteSheet key img delay)
-readSpriteSheetJSON loadImage infoPath = do
-  SpriteSheetInfo{ssiImage, ssiClips, ssiAnimations, ssiAlpha} <- readSpriteSheetInfoJSON infoPath
+readSpriteSheetJSON = readSpriteSheet eitherDecode
+
+readSpriteSheetYAML
+  :: (KeyName key, Ord key, Bounded key, Enum key, FromJSON delay)
+  => (FilePath -> Maybe Color -> IO img) -- ^ Inject an image loading function
+  -> FilePath -- ^ Path of the sprite sheet info JSON file
+  -> IO (SpriteSheet key img delay)
+readSpriteSheetYAML = readSpriteSheet eitherDecodeYAML
+
+readSpriteSheet
+  :: (KeyName key, Ord key, Bounded key, Enum key, FromJSON delay)
+  => (BL.ByteString -> Either String (SpriteSheetInfo key delay))
+  -> (FilePath -> Maybe Color -> IO img)
+  -> FilePath
+  -> IO (SpriteSheet key img delay)
+readSpriteSheet decoder loadImage infoPath = do
+  SpriteSheetInfo{ssiImage, ssiClips, ssiAnimations, ssiAlpha} <- readSpriteSheetInfo decoder infoPath
   i <- loadImage ssiImage ssiAlpha
   let frame key = (key, map (\a -> Frame (ssiClips !! fst a) (snd a)) (ssiAnimations Map.! keyName key))
   let animationMap = Map.fromList $ map frame [minBound..maxBound]
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: animate
-version: '0.6.0'
+version: '0.6.1'
 category: Game
 synopsis: Animation for sprites
 description: Prototypical sprite animation with type-safety.
@@ -26,6 +26,7 @@
   - containers
   - text
   - vector
+  - yaml
   source-dirs: library
 tests:
   animate-test-suite:
