diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -2,9 +2,9 @@
 
 import qualified SDL
 import qualified SDL.Image as Image
-import qualified Data.Animate as Ani
+import qualified Animate
 
-import Control.Monad (unless)
+import Control.Monad (unless, when)
 import Control.Concurrent (threadDelay)
 import Data.StateVar (($=))
 import Foreign.C.Types
@@ -18,8 +18,7 @@
   | DinoKey'Sneak
   deriving (Show, Eq, Ord, Bounded, Enum)
 
-instance Ani.Key DinoKey
-instance Ani.KeyName DinoKey where
+instance Animate.KeyName DinoKey where
   keyName = \case
     DinoKey'Idle -> "Idle"
     DinoKey'Move -> "Move"
@@ -27,7 +26,7 @@
     DinoKey'Hurt -> "Hurt"
     DinoKey'Sneak -> "Sneak"
 
-loadSurface :: FilePath -> Maybe Ani.Color -> IO SDL.Surface
+loadSurface :: FilePath -> Maybe Animate.Color -> IO SDL.Surface
 loadSurface path alpha = do
   surface <- Image.load path
   case alpha of
@@ -42,8 +41,8 @@
   window <- SDL.createWindow "Animate Example" SDL.defaultWindow { SDL.windowInitialSize = V2 320 180 }
   SDL.showWindow window
   screen <- SDL.getWindowSurface window
-  spriteSheet <- Ani.readSpriteSheetJSON loadSurface "dino.json" :: IO (Ani.SpriteSheet DinoKey SDL.Surface)
-  loop window screen spriteSheet (Ani.initPosition DinoKey'Idle)
+  spriteSheet <- Animate.readSpriteSheetJSON loadSurface "dino.json" :: IO (Animate.SpriteSheet DinoKey SDL.Surface Float)
+  loop window screen spriteSheet (Animate.initPosition DinoKey'Idle)
   SDL.destroyWindow window
   SDL.quit
 
@@ -55,27 +54,28 @@
     not repeated
   _ -> False
 
-loop :: SDL.Window -> SDL.Surface -> Ani.SpriteSheet DinoKey SDL.Surface -> Ani.Position DinoKey -> IO ()
-loop window screen ss@Ani.SpriteSheet{ssAnimations, ssImage} pos = do
+loop :: SDL.Window -> SDL.Surface -> Animate.SpriteSheet DinoKey SDL.Surface Float -> Animate.Position DinoKey Float -> IO ()
+loop window screen ss@Animate.SpriteSheet{ssAnimations, ssImage} pos = do
   events <- map SDL.eventPayload <$> SDL.pollEvents
   let quit = elem SDL.QuitEvent events
   let toNextKey = any detectSpacePressed events
-  let pos' = Ani.stepPosition ssAnimations pos frameDeltaSeconds
-  let loc = Ani.currentLocation ssAnimations pos'
+  let pos' = Animate.stepPosition ssAnimations pos frameDeltaSeconds
+  let loc = Animate.currentLocation ssAnimations pos'
   SDL.surfaceFillRect screen Nothing (V4 0 0 0 0) -- Clear screen
   _ <- SDL.surfaceBlit ssImage (Just $ rectFromClip loc) screen Nothing
   SDL.updateWindowSurface window
   delayMilliseconds frameDeltaMilliseconds
-  let pos'' = if toNextKey then Ani.initPosition (Ani.nextKey (Ani.pKey pos')) else pos'
+  let pos'' = if toNextKey then Animate.initPosition (Animate.nextKey (Animate.pKey pos')) else pos'
+  when toNextKey $ print $ Animate.keyName (Animate.pKey pos'')
   unless quit $ loop window screen ss pos''
   where
     frameDeltaSeconds = 0.016667
     frameDeltaMilliseconds = 16
 
-rectFromClip :: Ani.SpriteClip -> SDL.Rectangle CInt
-rectFromClip Ani.SpriteClip{scX,scY,scW,scH} = SDL.Rectangle (SDL.P (V2 (num scX) (num scY))) (V2 (num scW) (num scH))
+rectFromClip :: Animate.SpriteClip -> SDL.Rectangle CInt
+rectFromClip Animate.SpriteClip{scX,scY,scW,scH} = SDL.Rectangle (SDL.P (V2 (num scX) (num scY))) (V2 (num scW) (num scH))
   where
     num = fromIntegral
 
 delayMilliseconds :: Int -> IO ()
-delayMilliseconds ms = threadDelay (10000 * ms)
+delayMilliseconds ms = threadDelay (1000 * ms)
diff --git a/animate-example.cabal b/animate-example.cabal
--- a/animate-example.cabal
+++ b/animate-example.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           animate-example
-version:        0.0.0
+version:        0.1.0
 synopsis:       Animation for sprites
 description:    Prototypical sprite animation with type-safety.
 category:       Game
@@ -16,6 +16,8 @@
 cabal-version:  >= 1.10
 
 extra-source-files:
+    dino.json
+    dino.png
     package.yaml
     README.md
     stack.yaml
diff --git a/dino.json b/dino.json
new file mode 100644
--- /dev/null
+++ b/dino.json
@@ -0,0 +1,37 @@
+{
+  "image": "dino.png",
+  "alpha": [255,0,255],
+  "clips": [
+    [   0, 0, 48, 48],
+    [  48, 0, 48, 48],
+    [  96, 0, 48, 48],
+    [ 144, 0, 48, 48],
+    [ 192, 0, 48, 48],
+    [ 240, 0, 48, 48],
+    [ 288, 0, 48, 48],
+    [ 336, 0, 48, 48],
+    [ 384, 0, 48, 48],
+    [ 432, 0, 48, 48],
+    [ 480, 0, 48, 48],
+    [ 528, 0, 48, 48],
+    [ 576, 0, 48, 48],
+    [ 624, 0, 48, 48],
+    [ 672, 0, 48, 48],
+    [ 720, 0, 48, 48],
+    [ 768, 0, 48, 48],
+    [ 816, 0, 48, 48],
+    [ 864, 0, 48, 48],
+    [ 912, 0, 48, 48],
+    [ 960, 0, 48, 48],
+    [ 1008, 0, 48, 48],
+    [ 1056, 0, 48, 48],
+    [ 1104, 0, 48, 48]
+  ],
+  "animations": {
+    "Idle": [ [0,0.2], [1,0.2], [2,0.2], [3,0.2] ],
+    "Move": [ [4,0.05], [5,0.05], [6,0.05], [7,0.05], [8,0.05], [9,0.05] ],
+    "Kick": [ [10,0.1], [11,0.1], [12,0.1] ],
+    "Hurt": [ [13,0.1], [14,0.1], [15,0.1], [16,0.1] ],
+    "Sneak": [ [17,0.1], [18,0.1], [19,0.1], [20,0.1], [21,0.1], [22,0.1], [23,0.1] ]
+  }
+}
diff --git a/dino.png b/dino.png
new file mode 100644
Binary files /dev/null and b/dino.png differ
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: animate-example
-version: '0.0.0'
+version: '0.1.0'
 category: Game
 synopsis: Animation for sprites
 description: Prototypical sprite animation with type-safety.
@@ -8,6 +8,8 @@
 - package.yaml
 - README.md
 - stack.yaml
+- dino.json
+- dino.png
 ghc-options: -Wall
 default-extensions:
 - DuplicateRecordFields
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -3,6 +3,6 @@
 - '.'
 - '..'
 extra-deps:
-- 'animate-0.2.0'
+- 'animate-0.5.0'
 flags: {}
 extra-package-dbs: []
