     else
       msg
 
-    # Composite `sprite` onto `dst` in full.
+  # Composite `sprite` onto `dst` in full.
   # Offsets `sprite` `+left` from the left
   # and `+top` from the top
   compositeImage: (dst, sprite, left, top) ->

  # and passes flow to the builder.
  constructor: (@script, @ready) ->
    @info =
      when: Date.now()
      script: @script
      image: null
      image_url: null
      url: null

    do @buildComic


      0, 0,      # src x, y
      dim..., dim... # No size change
    return dst

  # Build a JPEG version of the image and invoke the callback
  # with the data. The resulting data is also stored in
  # @info.image_jpeg
  #
  # Requires `@info.image` to exist
  #
  # cb invoked as `cb(error, data)`
  buildJPEG: (cb=(->)) =>
    return cb(new Error("@info.image does not exist")) unless @info.image

    # Save locally, cleanup
    name = "ayp-#{@info.when}.jpg"
    outPath = path.resolve("/tmp", name)
    @info.image.saveJpeg outPath, 95, (err) ->
      return cb(new Error("Failed to write result: #{err}")) if err
      fs.readFile outPath, (err, data) ->
        return cb(new Error("Failed to read file I just wrote to #{outPath}: #{err}")) if err
        # We can unlink unconditionally now that we have it or failed
        fs.unlink(outPath, ->)
        cb(false, data)


# PantsBuffer is the abstraction of "The Logs".
#
