diff --git a/flandmark/ext/ext.cpp b/flandmark/ext/ext.cpp
index a768e26a236f9542e2e4431aea99abe4d8a71d7f..8845409ea7a3cea731c591f8264c164678b14667 100644
--- a/flandmark/ext/ext.cpp
+++ b/flandmark/ext/ext.cpp
@@ -109,7 +109,7 @@ class Localizer {
         for (int i = 0; i < (2*m_flandmark->data.options.M); i += 2) {
           lmlist.append(make_tuple(m_landmarks[i], m_landmarks[i+1]));
         }
-        det["landmark"] = lmlist;
+        det["landmark"] = tuple(lmlist);
 
         retval.append(det);
       }
diff --git a/flandmark/script/__init__.py b/flandmark/script/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/flandmark/script/annotate.py b/flandmark/script/annotate.py
new file mode 100644
index 0000000000000000000000000000000000000000..c1bfd4e0e723ae338aa9227a3cb83a794de29369
--- /dev/null
+++ b/flandmark/script/annotate.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+# Andre Anjos <andre.anjos@idiap.ch>
+# Fri 21 Sep 2012 10:43:12 CEST 
+
+"""Annotates videos, dumps annotations as text files.
+"""
+
+import os
+import sys
+import bob
+from .. import Localizer
+import pkg_resources
+
+def get_biggest(dets):
+  """Returns the biggest detection found"""
+  retval = dets[0]
+  for d in dets[1:]:
+    if retval['bbox'][2] < d['bbox'][2]: retval = d
+  return retval
+
+def main():
+
+  import argparse
+
+  parser = argparse.ArgumentParser(description=__doc__,
+      formatter_class=argparse.RawDescriptionHelpFormatter)
+
+  parser.add_argument('video', metavar='VIDEO', type=str,
+      help="Video file to load")
+
+  from ..version import __version__
+  name = os.path.basename(os.path.splitext(sys.argv[0])[0])
+  parser.add_argument('-V', '--version', action='version',
+      version='Automatic Video Keypoint Annotation Tool v%s (%s)' % (__version__, name))
+
+  args = parser.parse_args()
+
+  if not os.path.exists(args.video):
+    parser.error("Input video file '%s' cannot be read" % args.video)
+
+  op = Localizer()
+  v = bob.io.VideoReader(args.video)
+  for k, frame in enumerate(v):
+    dets = op(frame)
+    if dets:
+      biggest = get_biggest(dets)
+      bbox = biggest['bbox']
+      landmarks = biggest['landmark']
+      print "%d %d %d %d %d" % ((k,) + bbox),
+      for pair in landmarks:
+        print "%d %d" % (round(pair[0]), round(pair[1])),
+      print ""
+    else:
+      print "%d 0 0 0 0" % k