1. A method comprising: displaying, by a processor, a plurality of images, wherein each of the plurality of images has one or more image attributes; receiving, by the processor, a selection of one or more first images from the plurality of images; placing, by the processor, the one or more selected first images into one of one or more openings of a template based on a template score, wherein the one or more openings are positioned according to a pre-determined layout of the template, and wherein each of the one or more openings has one or more opening attributes; selecting, by the processor, one or more second images from the plurality of images based at least on the template score and a similarity to the one or more selected first images; placing, by the processor, each of the one or more selected second images into a remaining opening of the template, wherein the remaining opening does not contain an image; and modifying, by the processor, at least one image attribute of at least one of the placed images based on one or more aesthetic criteria associated with the template, wherein the at least one modified image attribute comprises at least one of a tonescale attribute, a contrast attribute, and a texture attribute.