     save_canvas_to_png canvas, filename
 
     for interval_name, semitones in intervals
-      canvas = new Canvas(fretboard_width_with_gutter, fretboard_height_with_gutter)
+      canvas = new Canvas(padded_fretboard_width, padded_fretboard_height)
       ctx = canvas.getContext('2d')
       erase_background()
       draw_fingerboard()

      draw_note string, fret, false, color

interval_cards = ->
  positions_each (string, fret) ->
    canvas = new Canvas(fretboard_width_with_gutter, fretboard_height_with_gutter)
    ctx = canvas.getContext('2d')
    erase_background()
    draw_fingerboard()

  ctx.fillStyle = 'rgb(128, 128, 128)'
  ctx.fillText canvas_label, canvas_gutter / 2, header_height

  fingerings_each (string, fret) ->
    return if hidden_strings.indexOf(string) >= 0
    row = string - 1
    row -= hidden_strings.length if show_hidden_strings and string > hidden_strings[0]
    dx = fret * (padded_fretboard_width + canvas_gutter) + canvas_gutter / 2
    dy = header_height + row * (padded_fretboard_height + canvas_gutter) + canvas_gutter / 2
    ctx.save()
    ctx.translate dx, dy
    draw_fingerboard()
    draw_intervals_from semitones, string, fret
    if show_hidden_strings
      ctx.fillStyle = 'rgba(255,255,255,0.75)'
      ctx.fillRect 0, v_gutter + 1.5 * string_spacing, padded_fretboard_width, hidden_strings.length * string_spacing
      ctx.fillStyle = 'rgba(0,0,0,0.0125)'
      ctx.fillRect 0, v_gutter + 1.5 * string_spacing, padded_fretboard_width, hidden_strings.length * string_spacing
    ctx.restore()

  unless pdf
