sortpics 0.1.2
Pictures from Google Photos, ICloud, or your Camera... all sorted!
License: MIT
Requires Python: >=3.6

# Pictures from Google Photos, ICloud, or your Camera... all sorted!

![CI](https://github.com/mwouts/sortpics/workflows/CI/badge.svg)
[![codecov.io](https://codecov.io/github/mwouts/sortpics/coverage.svg?branch=master)](https://codecov.io/github/mwouts/sortpics?branch=master)
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/mwouts/sortpics.svg)](https://lgtm.com/projects/g/mwouts/sortpics/context:python)
[![Pypi](https://img.shields.io/pypi/v/sortpics.svg)](https://pypi.python.org/pypi/sortpics)
[![pyversions](https://img.shields.io/pypi/pyversions/sortpics.svg)](https://pypi.python.org/pypi/sortpics)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

# Installation

Install the library with
```bash
pip install sortpics
```

# Main features

- The library only renames (moves) images. No deletion or copy occurs.
- When two or more images have identical timestamp at the resolution of a second, the name will include the millisecond.
- If, despite the above, two files have the same target, only the file with the largest size on disk is moved.
- Animated movies (joint `.JPG/.MOV` files) are moved in pair.
- Custom names are preserved, e.g. `My cute cat.jpg` is renamed to e.g. `2019-12/2019-12-12 19.06.44 My cute cat.jpg`.
- And, in case you change your mind, `sortpics` generates a undo script :smiley:

# Sample run

Normalize your image collection with
```bash
sortpics
```
in your picture folder. The output will be like this:
```output
mv '2020-05-23/Custom name.jpg' '2020-05/2020-05-23 17.55.43 Custom name.jpg'
mv 2020-05-23/IMG_1554.JPG '2020-05/2020-05-23 16.55.13.JPG'
mv 2020-05-23/IMG_1555.JPG '2020-05/2020-05-23 16.55.43.JPG'
mv 2020-05-23/IMG_1555.MOV '2020-05/2020-05-23 16.55.43.MOV'
mv 2020/05/23/IMG_1556.JPG '2020-05/2020-05-23 18.55.13.123.JPG'
mv 2020/05/23/IMG_1557.JPG '2020-05/2020-05-23 18.55.13.251.JPG'
# Rerun with --no-test to rename the files, or execute 'bash .sortpics_test_2020-05-23T15.16.27.643763.sh'
# Undo the renaming with 'bash .sortpics_undo_test_2020-05-23T15.16.27.643763.sh'
# When you're done, clean up empty directories with 'find . -type d -empty -delete'
```

Note that the above only proposes a file renaming, and does not move any file at this stage.
If you agree with the proposal, you can run the script generated by `sortpics`, or run `sortpics --no-test`.

Images and movies are renamed based on their creation date. For instance, an image taken on Dec 25th, 2019 at 15:07:12 will be moved to `2019-12/2019-12-25 15.07.12.jpg`.

# Useful links

- [Google Takeout](https://takeout.google.com/settings/takeout) is a convenient way to download your Google Photo collection
- Nathan Broadbent's [ICloud Photo Downloader](https://github.com/ndbroadbent/icloud_photos_downloader) works well with ICloud
- Adrian Lopez's [fdupes](https://github.com/adrianlopezroche/fdupes) for finding exact duplicates.

# Develop in this package

To develop in this package, clone the project, and then create a dedicated Python environment with
```bash
conda env create --file environment.yml
```

and activate it with
```bash
conda activate sortpics
```

Then install the development version with
```bash
pip install -e .
```

If you want to contribute back** your changes, please install the [pre-commit](https://pre-commit.com) package with
```
pre-commit install
```

The tests for this package are in the `tests` folder, and can be run with
```
pytest
```