Make

Make::usage = "Make[targets, sources, Hold[action]] makes a target, or a list of targets, given sources, or a list of sources, in the style of the unix 'make' command.";
Make[target_String, sources_, action_Hold] := Make[Evaluate@{target}, sources, action];
Make[targets_, source_String, action__Hold] := Make[targets, Evaluate@{source}, action];
Make[targets_List, sources_List, action_Hold] := Module[{},
If[
(And @@ ((FileType[#] =!= None)& /@ sources)) &&
Or[
Or @@ ((FileType[#]===None)& /@ targets),
Min[AbsoluteTime[FileDate[#]]& /@ targets] < Max[AbsoluteTime[FileDate[#]]& /@ sources]
],
Print["Making ",targets, " ..."];
ReleaseHold[action]
]
];

Collage

SetDirectory["C:\\drorbn\\AcademicPensieve\\Classes\\2122-257-AnalysisII\\Album"];

FileNames[{"*.jpg","*.jpeg","*.png","*.gif"}]

target="Collage.jpg";
sources=Complement[FileNames[{"*.jpg","*.jpeg","*.png","*.gif"}], {target}];

Export[target,ImageCollage[
1-> ImagePad[#,8,White]& /@ ImageCrop /@ Import /@ sources,
"Fit", {2400,2400},
Method -> "ClosestPacking",Background -> White, Padding -> Red, ImagePadding -> 4
]];
MakeThumb@target

Make[target, sources, Hold[
Export[target,ImageCollage[
1-> ImagePad[#,8,White]& /@ ImageCrop /@ Import /@ sources,
"Fit",{2400,2400},
Method -> "ClosestPacking",Background -> White, Padding -> Red, ImagePadding -> 4
]
];
MakeThumb@target;
]]

Output

{
"TitleNotes" -> "2021-22 MAT257 Public Album."
}