#This code does everything in subdirectories only. from PIL import Image import os def getFolders(dir): return [name for name in os.listdir(dir) if os.path.isdir(os.path.join(dir, name))] def getFiles(dir): files = [] for c in os.listdir(dir): _, ext = os.path.splitext(c) if ext == '.png': files.append(c) return files def merge_images(dir, file): image = Image.open(os.path.join(dir, file)) base = Image.open(out_file) (width1, height1) = image.size (width2, height2) = base.size result_width = max(width1, width2) result_height = height1 + height2 out = Image.new('RGB', (result_width, result_height)) out.paste(im=base, box=(0, 0)) out.paste(im=image, box=(0, height2)) out.save(out_file,"PNG") return out def createTarget(): result = Image.new('RGB', (1, 1)) result.save(out_file,"PNG") def name(loop): loop = int(loop) + 1 if loop < 10: loop = '00' + str(loop) elif loop < 100: loop = '0' + str(loop) else: loop = str(loop) return str(loop) dir = '/Users/user/Documents/[raws]All Raws/' rootdir = dir folder = getFolders(dir) imgNum = '001' for i in range(len(folder)): subfolder = getFolders(rootdir + folder[i]) if subfolder != []: for x in range(len(subfolder)): subfolderPath = rootdir + folder[i] + '/' + subfolder[x] images = getFiles(subfolderPath) out_file = folder[i] + '_' + imgNum + '.png' createTarget() for im in images: merge_images(subfolderPath, im) imgNum = name(imgNum) print(folder[i] + ': Done.') else: break print('\n\nAll done!')