       filename = "#{string}-#{fret}-#{interval_long_name}.png"
       save_canvas_to_png canvas, filename
 
-intervals_from_position_page = (finger_position) ->
+intervals_from_position_page = (root_position) ->
   canvas_gutter = 20
   header_height = 20
-  grid {cols: 3, rows: 4
+  grid cols: 3, rows: 4
   , cell_width: padded_fretboard_width + canvas_gutter
-  , cell_height: padded_fretboard_height + header_height}
+  , cell_height: padded_fretboard_height + header_height
   , (cell) ->
     for interval_name, semitones in Intervals
       cell ->
         ctx.translate 0, header_height
-        draw_fingerboard()
-        draw_intervals_from finger_position, semitones
-        canvas_label = interval_name
-        ctx.font = '10px Times'
-        ctx.fillStyle = 'rgb(10,20,30)'
-        ctx.fillText canvas_label, h_gutter, -3
-
-  # filename = "#{string}-#{fret}-study-sheet.png"
-  # save_canvas_to_png canvas, filename unless pdf
+        draw_title interval_name
+        , font: '10px Times', fillStyle: 'rgb(10,20,30)'
+        , x: 0, y: -3
+        positions = (pos for pos in intervals_from(root_position, semitones) \
+          when not (pos.string == root_position.string and pos.fret == root_position.fret))
+        positions.push string: root_position.string, fret: root_position.fret, is_root: true
+        draw_fretboard positions
+
+draw_intervals_from = (root_position, semitones, color) ->
+  root_note_number = pitch_number_for_position(root_position)
+  draw_finger_position root_position, is_root: true #, color: color
+  for position in intervals_from(root_position, semitones)
+    continue if position.string == root_position.string and position.fret == root_position.fret
+    draw_finger_position position, color: color
 
 intervals_from_note_sheets = ->
   finger_positions_each ({string, fret}) ->



#
# Drawing Fretboard and Diagrams
#

FretboardStyle =

  draw_finger_positions() if positions
  draw_closed_strings() if positions


#
# Specific Cards and Pages
