This example demonstrates how to use save_frame to render out an image sequence that you can assemble into a movie using the processing MovieMaker tool. Although linux users may prefer to use ffmpeg from the command line.

#
# Save Frames
# by Daniel Shiffman.

# A boolean to track whether we are recording are not
attr_reader :recording

def setup
  sketch_title 'Save Frames'
  @recording = false
  directory = 'output'
  Dir.mkdir(directory) unless File.exist?(directory)
end

def draw
  background(0)
  # An arbitrary oscillating rotating animation
  # so that we have something to render
  (0...TAU).step(0.2) do |a|
    push_matrix
    translate(width / 2, height / 2)
    rotate(a + sin(frame_count * 0.004 * a))
    stroke(255)
    line(-100, 0, 100, 0)
    pop_matrix
  end

  # If we are recording call saveFrame!
  # The number signs (#) indicate to Processing to
  # number the files automatically
  save_frame('output/frames####.png'.to_java(:String)) if recording
  # Let's draw some stuff to tell us what is happening
  # It's important to note that none of this will show up in the
  # rendered files b/c it is drawn *after* saveFrame
  text_align(CENTER)
  fill(255)
  if !recording
    text('Press r to start recording.', width / 2, height - 24)
  else
    text('Press r to stop recording.', width / 2, height - 24)
  end

  # A red dot for when we are recording
  stroke(255)
  recording ? fill(255, 0, 0) : no_fill
  ellipse(width / 2, height - 48, 16, 16)
end

def key_pressed
  # If we press r, start or stop recording!
  case key
  when 'r', 'R'
    @recording = !recording
  end
end

def settings
  size(640, 360)
  smooth
end