How To Time-lapse With CHDK


Here are instructions are to take high-resolution time-lapse images with a Canon A650. They should work with pretty much any Canon compact camera that is CHDK compatible. It assumes that you have already placed a copy of the CHDK firmware enhancement on the camera’s memory card. Of course, many of the settings in these instructions can be altered to suit your specific needs.


Turn on and update to CHDK

Put switch into "Play mode"

Turn on

Press Menu

Scroll (up/down on circular button) to bottom option: Firm Update

Press "Func Set" button to select

Should say "Update firmware version?"

Press right to highlight "OK"

Press "Func Set" button to select

Firmware should update to CHDK firmware and screen return to 'Play mode' image preview

Set up for record

Switch camera into "Record mode"

Settings that only need to be set once

Press the MF button until the "MF" icon is displayed

Start the timelapse

Press “Print” button

“Timelapse” should show at bottom

Press “Func Set” and change timings (bottom)

Press shutter button to start; press again to stop.

Creating Video

On Windows I use the free VirtualDub, listed on my ‘Works for me’ page. It is perfect for time-lapse as it imports a series of images (e.g. jpgs) and turns them into a video. You can apply all sort of filters such as scaling, cropping, overlays, etc.

Appendix - Installing

Getting CHDK

CHDK is available from Be sure to download the correct version - there are plenty of instruction on the web site.

Timelapse Script

Download my timelapse.bas and put the script in the CHDK/SCRIPTS folder on the card. FYI, this is the contents of the script which you could alternatively cut and paste into a file:

rem Author - dylski

rem Unknown what happens when you run out of memory

@title Timelapse

@param d Interval (Minutes)

@default d 0

@param e Interval (Seconds)

@default e 10

@param f Interval (10th Seconds)

@default f 0

@param m Max Shots

@default m 0


if t<100 then let t=100

print "Time-lapse: ",d," min, ",e," sec, ",f," 10th sec"



  print "Shot", n


  sleep t


  if m<1 then goto "start"

  if n<m then goto "start"