# iOS ## Photos Export ```bash podman run -it --rm --name icloudpd \ -v $(pwd)/iPhotos:/data \ -e TZ=America/New_York \ icloudpd/icloudpd:latest \ icloudpd \ --directory /data \ --username apple@ducoterra.net \ --watch-with-interval 3600 ``` You can browse all downloaded photos with `feh`: ```bash pacman -S feh feh --recursive --scale-down -d -S filename $(pwd)/iPhotos ``` ## Extensions - PNG - HEIC: iOS HDR photo - MOV - DNG: iOS raw photo - JPG - 3gp: quicktime video file - MP4 - GIF - WEBP: Google photo container - CR2: Canon raw photo ## Conversion You will need `imagemagick` and `libraw`: ```bash pacman -S imagemagick libraw ``` Then you can convert any image with magick: ```bash magick input.HEIC output.png magick input.HEIC output.jpeg ``` You get a list of all unique file extensions with: ```bash find . -type f | awk -F. '!a[$NF]++{print $NF}' ``` Then use those file extensions to create a find command: ```bash # -o means "or" in this case # Parentheses are required find . -type f -printf '%p\n' \( \ -iname '*.jpg' \ -o -iname '*.heic' \ -o -iname '*.dng' \ -o -iname '*.png' \ -o -iname '*.WEBP' \ -o -iname '*.cr2' \ \) ``` And then use xargs with magick to convert the images: ```bash find . -type f \( \ -iname '*.jpg' \ -o -iname '*.heic' \ -o -iname '*.dng' \ -o -iname '*.png' \ -o -iname '*.WEBP' \ -o -iname '*.cr2' \ \) -print0 | xargs -0 -P $(nproc) -I % python -c "\ import subprocess; \ from pathlib import Path; \ to_folder = '/run/media/ducoterra/photos/'; \ p = Path(\"%\"); \ realpath = (str(p.parent) + '/' if str(p.parent) != '.' else '') + p.stem + '.jpg'; \ subprocess.run(['mkdir', '-p', to_folder + str(Path(realpath).parent)]); \ subprocess.run(['magick', \"%\", to_folder + realpath])" ``` And then videos: ```bash find . -type f \( \ -iname '*.MOV' \ -o -iname '*.3gp' \ -o -iname '*.MP4' \ -o -iname '*.GIF' \ \) -print0 | xargs -0 -I % python -c "\ import subprocess; \ from pathlib import Path; \ to_folder = '/run/media/ducoterra/photos/'; \ p = Path(\"%\"); \ realpath = (str(p.parent) + '/' if str(p.parent) != '.' else '') + p.stem + '.mp4'; \ subprocess.run(['mkdir', '-p', to_folder + str(Path(realpath).parent)]); \ subprocess.run(['ffmpeg', '-i', '%', '-c', 'copy', to_folder + realpath])" ```