I edited the [script from @IliasMachairas][1] a little bit and finished with the following: ```lang-python import rasterio import os from rasterio.merge import merge from rasterio.warp import calculate_default_transform, reproject, Resampling def merge_tiff(tiff_files, output_file): print("Merging TIFF files...") try: src_files_to_mosaic = [] for fp in tiff_files: src = rasterio.open(fp) src_files_to_mosaic.append(src) # Merge function from Rasterio mosaic, out_trans = merge(src_files_to_mosaic) # Metadata of the output file out_meta = src_files_to_mosaic[0].meta.copy() out_meta.update({ "driver": "GTiff", "height": mosaic.shape[1], "width": mosaic.shape[2], "transform": out_trans }) # Save the merged TIFF with rasterio.open(output_file, 'w', **out_meta) as dest: dest.write(mosaic) # Close all the source files for src in src_files_to_mosaic: src.close() print(f"Merged file saved to {output_file}") except Exception as e: print(f"Error during merging: {e}") def resample_image(input_raster_path, output_raster_path, cell_size=30): print("Resampling image...") try: with rasterio.open(input_raster_path) as src: # Compute the new transform and dimensions transform, width, height = calculate_default_transform( src.crs, src.crs, src.width, src.height, *src.bounds, resolution=cell_size) # Define the new metadata new_meta = src.meta.copy() new_meta.update({ 'transform': transform, 'width': width, 'height': height, 'crs': src.crs }) # Resample the raster with rasterio.open(output_raster_path, 'w', **new_meta) as dst: for i in range(1, src.count + 1): reproject( source=rasterio.band(src, i), destination=rasterio.band(dst, i), src_transform=src.transform, src_crs=src.crs, dst_transform=transform, dst_crs=src.crs, resampling=Resampling.bilinear) # Change to Resampling.nearest for nearest neighbor print(f"Resampled file saved to {output_raster_path}") except Exception as e: print(f"Error during resampling: {e}") def process_geotiffs(input_folder): tiff_files = [os.path.join(input_folder, file) for file in os.listdir(input_folder) if file.endswith('.tif')] if not tiff_files: print("No TIFF files found in the input folder.") return output_folder = os.path.join(input_folder, 'outputs') if not os.path.exists(output_folder): os.makedirs(output_folder) merged_output_file = os.path.join(output_folder, 'merged_image.tif') resampled_output_file = os.path.join(output_folder, 'merged_image_resampled.tif') merge_tiff(tiff_files, merged_output_file) resample_image(merged_output_file, resampled_output_file) if __name__ == "__main__": print("Starting script...") input_folder = os.path.dirname(os.path.abspath(__file__)) process_geotiffs(input_folder) print("Script completed.") ``` Now you can put the skript in the same folder with the GeoTIFF's and execute it. It will create a subfolder `outputs` automatically and store the results inside the folder. Make sure to install `rasterio` in your Python Environment before you execute it. [1]: https://gis.stackexchange.com/a/482543/115