# 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)

Install the library with
```bash
pip install sortpics
```
and normalize your image collection with
```bash
sortpics
```
in your picture folder.

Note that the above only proposes a file renaming, it does not impact the file. 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`.

Additional 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 file 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:

# 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
```
