diff --git a/Changelog.md b/Changelog.md
new file mode 100644
--- /dev/null
+++ b/Changelog.md
@@ -0,0 +1,31 @@
+# Change log for cut-the-crap
+
+## Version 1.4.1 - 2020.08.01
+- Add changelog
+- Try fix nixpkgs and hackage build.
+- Add seperate CI target
+- Change overlay to be a copy of nixpkgs
+
+### Known issues
+
+It's unlikely the subtitle generation
+will be able to find the model dir:
+
+https://github.com/jappeace/cut-the-crap/issues/45
+
+But this release at least fixes building,
+so that editing works again.
+
+## Version 1.4.0 - 2020.08.01
+- Add prototype buggy subtitle generation feature
+
+## Version 1.3.0 - 2020.07.24
+- Fix more bugs.
+- Remove redundant code
+
+## Version 1.2.0 - 2020.07.23
+- Fix bugs.
+- Better UX
+
+## Version 1.0.0 - 2019.12.23 
+- Initial release.
diff --git a/cut-the-crap.cabal b/cut-the-crap.cabal
--- a/cut-the-crap.cabal
+++ b/cut-the-crap.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 049daf60575f804858c61c7086f734c94914339b6e267e91c9eab7ea26f0dc6d
+-- hash: 460c4ab2daa37b762effdcec95bf2957aa7f9a24e28ad1a544215ac47db9da3a
 
 name:           cut-the-crap
-version:        1.4.0
+version:        1.4.1
 synopsis:       Cuts out uninteresting parts of videos by detecting silences.
 description:    Cut the crap is an automatic video editing program for streamers. It can cut out uninteresting parts by detecting silences. This was inspired by [jumpcutter](https://github.com/carykh/jumpcutter), where this program can get better quality results by using an (optional) dedicated microphone track. This prevents cutting of [quieter consonants](https://youtu.be/DQ8orIurGxw?t=675) for example. Using ffmpeg more efficiently also produces faster results and is less error prone.
 category:       video
@@ -20,6 +20,7 @@
 extra-source-files:
     Readme.md
     LICENSE
+    Changelog.md
 
 library
   exposed-modules:
@@ -35,11 +36,12 @@
       src
   default-extensions: EmptyCase FlexibleContexts FlexibleInstances InstanceSigs MultiParamTypeClasses LambdaCase MultiWayIf NamedFieldPuns TupleSections DeriveFoldable DeriveFunctor DeriveGeneric DeriveLift DeriveTraversable DerivingStrategies GeneralizedNewtypeDeriving StandaloneDeriving OverloadedStrings TypeApplications
   ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wredundant-constraints -Wincomplete-record-updates -Widentities
-  cc-options: -DMODELDIR="/nix/store/ljgpkp7a6b1jnixz4d68xx96kdh31pxb-pocketsphinx-5prealpha/share/pocketsphinx/model"
+  cc-options: -DMODELDIR="/nix/store/zr5cjjdqvv1vwixb0k5gg455n99cfhl8-pocketsphinx-5prealpha/share/pocketsphinx/model"
   include-dirs:
       includes
   c-sources:
       includes/speech_recognition.c
+      includes/speech_recognition.h
   pkgconfig-depends:
       pocketsphinx
     , sphinxbase
@@ -66,11 +68,12 @@
       app
   default-extensions: EmptyCase FlexibleContexts FlexibleInstances InstanceSigs MultiParamTypeClasses LambdaCase MultiWayIf NamedFieldPuns TupleSections DeriveFoldable DeriveFunctor DeriveGeneric DeriveLift DeriveTraversable DerivingStrategies GeneralizedNewtypeDeriving StandaloneDeriving OverloadedStrings TypeApplications
   ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wredundant-constraints -Wincomplete-record-updates -Widentities -threaded -rtsopts -with-rtsopts=-N
-  cc-options: -DMODELDIR="/nix/store/ljgpkp7a6b1jnixz4d68xx96kdh31pxb-pocketsphinx-5prealpha/share/pocketsphinx/model"
+  cc-options: -DMODELDIR="/nix/store/zr5cjjdqvv1vwixb0k5gg455n99cfhl8-pocketsphinx-5prealpha/share/pocketsphinx/model"
   include-dirs:
       includes
   c-sources:
       includes/speech_recognition.c
+      includes/speech_recognition.h
   pkgconfig-depends:
       pocketsphinx
     , sphinxbase
@@ -109,11 +112,12 @@
       src
   default-extensions: EmptyCase FlexibleContexts FlexibleInstances InstanceSigs MultiParamTypeClasses LambdaCase MultiWayIf NamedFieldPuns TupleSections DeriveFoldable DeriveFunctor DeriveGeneric DeriveLift DeriveTraversable DerivingStrategies GeneralizedNewtypeDeriving StandaloneDeriving OverloadedStrings TypeApplications
   ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wredundant-constraints -Wincomplete-record-updates -Widentities
-  cc-options: -DMODELDIR="/nix/store/ljgpkp7a6b1jnixz4d68xx96kdh31pxb-pocketsphinx-5prealpha/share/pocketsphinx/model"
+  cc-options: -DMODELDIR="/nix/store/zr5cjjdqvv1vwixb0k5gg455n99cfhl8-pocketsphinx-5prealpha/share/pocketsphinx/model"
   include-dirs:
       includes
   c-sources:
       includes/speech_recognition.c
+      includes/speech_recognition.h
   pkgconfig-depends:
       pocketsphinx
     , sphinxbase
diff --git a/includes/speech_recognition.h b/includes/speech_recognition.h
new file mode 100644
--- /dev/null
+++ b/includes/speech_recognition.h
@@ -0,0 +1,30 @@
+
+#define PPCAT_NX(A, B) A
+
+
+// size = 16
+typedef struct { 
+  int from_frame; // 4
+  int to_frame; // 4
+  char* word; // 8
+  // TODO https://github.com/cmusphinx/pocketsphinx/blob/3a193dd38e2b6107a8068b6679cca38e41248b18/include/pocketsphinx.h#L510
+} word_frame;
+
+typedef struct { // size = 16 ?!
+  word_frame* frames; // 8
+  int used; // 4
+} detected_words;
+
+typedef enum {
+                 SUCCESS,               
+                 FAILED_CONFIG_OBJECT,
+                 FAILED_CREATE_RECOGNIZER,
+                 FAILED_UNABLE_INPUTFILE
+} result_code ;
+
+typedef struct { // 24
+  result_code code; // 4
+  detected_words words; // ??
+} detect_result;
+
+detect_result* detect_words(char* filepath);
