diff --git a/Demo/sgi/video/Vinfo.py b/Demo/sgi/video/Vinfo.py
index 3293e41..2aec803 100755
--- a/Demo/sgi/video/Vinfo.py
+++ b/Demo/sgi/video/Vinfo.py
@@ -1,12 +1,53 @@
+#! /usr/local/python
+
+# Print some info about a CMIF movie file
+
+
+# Usage:
+#
+# Vinfo [-d] [-q] [-s] [file] ...
+
+
+# Options:
+#
+# -d       : print deltas between frames instead of frame times
+# -q       : quick: don't read the frames
+# -s       : don't print times (but do count frames and print the total)
+# file ... : file(s) to inspect; default film.video
+
+
 import sys
+sys.path.append('/ufs/guido/src/video')
 import VFile
+import getopt
+
+
+# Global options
+
+short = 0
+quick = 0
+diffs = 0
+
+
+# Main program -- mostly command line parsing
 
 def main():
-	if sys.argv[1:]:
-		for filename in sys.argv[1:]:
-			process(filename)
-	else:
-		process('film.video')
+	global short, quick, diffs
+	opts, args = getopt.getopt(sys.argv[1:], 'dqs')
+	for opt, arg in opts:
+		if opt == '-q':
+			quick = 1
+		elif opt == '-d':
+			diffs = 1
+		elif opt == '-s':
+			short = 1
+	if not args:
+		args = ['film.video']
+	for filename in args:
+		process(filename)
+
+
+# Process one file
 
 def process(filename):
 	vin = VFile.VinFile().init(filename)
@@ -17,22 +58,37 @@
 	print 'Bits:    ', vin.c0bits, vin.c1bits, vin.c2bits
 	print 'Format:  ', vin.format
 	print 'Offset:  ', vin.offset
-	print 'Frame times:',
+	if quick:
+		vin.close()
+		return
+	if not short:
+		print 'Frame times:',
 	n = 0
 	t = 0
+	told = 0
 	while 1:
 		try:
 			t, data, cdata = vin.getnextframe()
 		except EOFError:
-			print
+			if not short:
+				print
 			break
-		if n%8 == 0:
-			sys.stdout.write('\n')
-		sys.stdout.write('\t' + `t`)
+		if not short:
+			if n%8 == 0:
+				sys.stdout.write('\n')
+			if delta:
+				sys.stdout.write('\t' + `t - told`)
+				told = t
+			else:
+				sys.stdout.write('\t' + `t`)
 		n = n+1
 	print 'Total', n, 'frames in', t*0.001, 'sec.',
 	if t:
 		print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
 	print
+	vin.close()
+
+
+# Don't forget to call the main program
 
 main()
diff --git a/Demo/sgi/video/Vplay.py b/Demo/sgi/video/Vplay.py
index 1b9c80c..ce82b68 100755
--- a/Demo/sgi/video/Vplay.py
+++ b/Demo/sgi/video/Vplay.py
@@ -1,15 +1,63 @@
+#! /usr/local/python
+
+# Play CMIF movie files
+
+
+# Usage:
+#
+# Vplay [-l] [-m maginfy] [file] ...
+
+
+# Options:
+#
+# -l         : loop, playing the movie over and over again
+# -m magnify : magnify the image by the given factor
+# file ...   : file(s) to play; default film.video
+
+
+# User interface:
+#
+# Place the windo where you want it.  The size is determined by the
+# movie file and the -m option.
+#
+# Press ESC or select the window manager Quit or Close window option
+# to close a window; if more files are given the window for the next
+# file now pops up.
+
+
 import sys
+sys.path.append('/ufs/guido/src/video')
 import VFile
 import time
 import gl, GL
 from DEVICE import *
+import getopt
+import string
+
+
+# Global options
+
+magnify = 1
+looping = 0
+
+
+# Main program -- mostly command line parsing
 
 def main():
-	if sys.argv[1:]:
-		for filename in sys.argv[1:]:
-			process(filename)
-	else:
-		process('film.video')
+	global magnify, looping
+	opts, args = getopt.getopt(sys.argv[1:], 'lm:')
+	for opt, arg in opts:
+		if opt == '-l':
+			looping = 1
+		elif opt == '-m':
+			magnify = string.atoi(arg)
+	if not args:
+		args = ['film.video']
+	for filename in args:
+		process(filename)
+
+
+# Process one file
 
 def process(filename):
 	vin = VFile.VinFile().init(filename)
@@ -20,9 +68,10 @@
 	print 'Bits:    ', vin.c0bits, vin.c1bits, vin.c2bits
 	print 'Format:  ', vin.format
 	print 'Offset:  ', vin.offset
+	vin.magnify = magnify
 	
 	gl.foreground()
-	gl.prefsize(vin.width, vin.height)
+	gl.prefsize(vin.width * magnify, vin.height * magnify)
 	win = gl.winopen('* ' + filename)
 	vin.initcolormap()
 
@@ -33,25 +82,53 @@
 	t0 = time.millitimer()
 	running = 1
 	data = None
+	t = 0
+	n = 0
 	while 1:
 		if running:
 			try:
 				t, data, chromdata = vin.getnextframe()
+				n = n+1
 			except EOFError:
-				running = 0
+				t1 = time.millitimer()
 				gl.wintitle(filename)
+				print 'Recorded:', n,
+				print 'frames in', t*0.001, 'sec.',
+				if t:
+					print '-- average',
+					print int(n*10000.0/t)*0.1,
+					print 'frames/sec',
+				print
+				t = t1-t0
+				print 'Played:', n,
+				print 'frames in', t*0.001, 'sec.',
+				if t:
+					print '-- average',
+					print int(n*10000.0/t)*0.1,
+					print 'frames/sec',
+				print
+				if looping and n > 0:
+					vin.rewind()
+					vin.magnify = magnify
+					continue
+				else:
+					running = 0
 		if running:
 			dt = t + t0 - time.millitimer()
 			if dt > 0:
 				time.millisleep(dt)
-				vin.showframe(data, chromdata)
+			vin.showframe(data, chromdata)
 		if not running or gl.qtest():
 			dev, val = gl.qread()
 			if dev in (ESCKEY, WINSHUT, WINQUIT):
+				gl.winclose(win)
 				break
 			if dev == REDRAW:
 				gl.reshapeviewport()
 				if data:
 					vin.showframe(data, chromdata)
 
+
+# Don't forget to call the main program
+
 main()
