Don't assume that source files are local to the machine running the processor.
Perhaps have an object that represents a file with a method that returns an IO type object or can write it to a local filesystem and return a filename.
Allow VIPS rather than imagemagick.
Configurable storage for some kinds of derivatives (on disk, in Fedora, s3).
Some kinds of derivatives (e.g. Elastic Transcoder) don't return a derivative, but just have a path for the output.
Some files (like IO objects) don't have a filename
Pass in mime-type as an argument. Currently we require the passed in object to conform to an Interface that has mime-type. We don't like this pattern.