{ "info": { "author": "William Minchin", "author_email": "w_minchin@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "photosorter\n===========\n\n.. image:: https://img.shields.io/pypi/v/minchin.scripts.photosorter.svg?style=flat\n :target: https://pypi.python.org/pypi/minchin.scripts.photosorter/\n.. image:: https://travis-ci.org/MinchinWeb/minchin.scripts.photosorter.svg?branch=master\n :target: https://travis-ci.org/dbader/photosorter)\n.. image:: https://coveralls.io/repos/MinchinWeb/minchin.scripts.photosorter/badge.svg?branch=master\n :target: https://coveralls.io/r/dbader/photosorter?branch=master\n\nA little Python script to keep my photos from Dropbox organized. Designed to be\nrun intermittently, but will run forever by default.\n\nIt watches a *source directory* for modifications and moves new image files to\na *target directory* depending on when the photo was taken, using EXIF data and\ncreation date as a fallback.\n\nDirectory and file names follow a simple naming convention\n(``YYYY-MM/YYY_MM_DD/YYYY-MM-DD hh:mm:ss.ext``) that keeps everything neatly\norganized. Duplicates are detected and ignored based on their SHA1 hash. Photos\ntaken in the same instant get de-duplicated by adding a suffix (``-1``, ``-2``,\netc) to their filenames.\n\nThe result looks somewhat like this:\n\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01\n \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013_01_05\n \u00e2\u201d\u201a \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-05\\ 13.24.45.jpg\n \u00e2\u201d\u201a \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-05\\ 14.25.54.jpg\n \u00e2\u201d\u201a \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u201d\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-05\\ 21.28.48-1.jpg\n \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013_01_06\n \u00e2\u201d\u201a \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-06\\ 16.05.02.jpg\n \u00e2\u201d\u201a \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-06\\ 19.59.25.jpg\n \u00e2\u201d\u201a \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-06\\ 20.40.28.jpg\n \u00e2\u201d\u201a \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u201d\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-06\\ 21.14.38.jpg\n \u00e2\u201d\u201a\u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u201d\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013_01_08\n \u00e2\u201d\u201a \u00c2\u00a0\u00c2\u00a0 \u00e2\u201d\u201d\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-01-08\\ 11.45.51.jpg\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-02\n | \u00e2\u201d\u201d\u00e2\u201d\u20ac ...\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac ...\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2013-12\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2014-01\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2014-02\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac ...\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac 2014-12\n \u00e2\u201d\u0153\u00e2\u201d\u20ac\u00e2\u201d\u20ac ...\n\nI use ``C:\\Users\\[windows username\\Dropbox\\Camera Uploads`` as the source\ndirectory and ``Z:\\Photos`` as the target. This allows me to move my photo from\nDropbox to a local drive, and merge them with the rest of my photo collection.\n\nInspired by\n\n- \n- \n- \n- \n\nSetup\n-----\n\nThe easiest way to install the script is through pip:\n\n > pip install minchin.scripts.photosorter\n\nRun\n---\n\nWatch `src_dir` and sort incoming photos into ``dest_dir``:\n\n > photosorter src_dir dest_dir\n\nWhen you're done with it, ``Ctrl + C`` will end the program.\n\nIf you also want to move the existing files in ``src_dir`` (which are, by\ndefault, ignored):\n\n > photosorter src_dir dest_dir --move-existing\n\nRun on System Startup\n---------------------\n\n.. note:: This is currently un-tested.\n\n1. Move `photosorter.conf.example` to `/etc/init` as `photosorter.conf`\n and edit it to suit your needs by replacing the user, source and target\n directories.\n2. Run `$ sudo start photosorter`.\n3. Check the logs at `/var/log/upstart/photosorter.log`.\n\nMeta\n----\n\nDistributed under the MIT license. See ``LICENSE.txt`` for more information.\n\nhttps://github.com/MinchinWeb/minchin.scripts.photosorter\n\nChanges\n------\n\n2.1.0 -- 2017-08-28\n\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\n\n- also move MP4 files\n- add changelog to readme\n\n2.0.0 -- 2017-08-27\n\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\n\n- move to ``minchin.scripts.photosorter`` namespace\n- do releases via ``minchin.releaser``\n- add option to move existing files", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MinchinWeb/minchin.scripts.photosorter", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "minchin.scripts.photosorter", "package_url": "https://pypi.org/project/minchin.scripts.photosorter/", "platform": "any", "project_url": "https://pypi.org/project/minchin.scripts.photosorter/", "project_urls": { "Homepage": "https://github.com/MinchinWeb/minchin.scripts.photosorter" }, "release_url": "https://pypi.org/project/minchin.scripts.photosorter/2.1.0/", "requires_dist": null, "requires_python": "", "summary": "A Python script to keep my photos from Dropbox organized.", "version": "2.1.0" }, "last_serial": 3129616, "releases": { "2.0.0": [ { "comment_text": "", "digests": { "md5": "8f8f0ac50e9d04dd6718cdbc5ec0f85a", "sha256": "6992a1f51ffc737eb47717a0f57532c8db3595b823d3ef6e6548c543db05fc1e" }, "downloads": -1, "filename": "minchin.scripts.photosorter-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8f8f0ac50e9d04dd6718cdbc5ec0f85a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5858357, "upload_time": "2017-08-28T02:19:37", "url": "https://files.pythonhosted.org/packages/e7/89/14d804f269f594742aa4983ee954e75004b54ca46364607ac3e205e47631/minchin.scripts.photosorter-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84dcf74c833cc5750411b81c0484b038", "sha256": "7e6d1de992c46dd69a754042d43fc1b459b07c84d2e8c6065cc57548c8dc4365" }, "downloads": -1, "filename": "minchin.scripts.photosorter-2.0.0.tar.gz", "has_sig": false, "md5_digest": "84dcf74c833cc5750411b81c0484b038", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5857101, "upload_time": "2017-08-28T02:18:53", "url": "https://files.pythonhosted.org/packages/bb/a8/a7fd6afb6b868583d29dc0fa5ec365b45dd83d51b6d18f85c49c46b3e8f9/minchin.scripts.photosorter-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "f554af98e77cce7b31c824b1da848fce", "sha256": "13440ac61d2a52618ffea1c39efc8f05fa08baf5dd479eb9bdc660256bb03e80" }, "downloads": -1, "filename": "minchin.scripts.photosorter-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f554af98e77cce7b31c824b1da848fce", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5858566, "upload_time": "2017-08-28T17:38:16", "url": "https://files.pythonhosted.org/packages/16/1c/9f74c76d142ea6b3f605ae9484a8d47a3383e7afc01703a85dcce0c62f73/minchin.scripts.photosorter-2.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "021682c0698bf2ba42ee65feaf125e00", "sha256": "b16f237945063c09c1ffc7d9416da59a78e1af6a71f0b95ad9525e2e5aab5d17" }, "downloads": -1, "filename": "minchin.scripts.photosorter-2.1.0.tar.gz", "has_sig": false, "md5_digest": "021682c0698bf2ba42ee65feaf125e00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5857247, "upload_time": "2017-08-28T17:37:36", "url": "https://files.pythonhosted.org/packages/8b/18/26452697bf9c560d878b8a54fd7227ab62b7c5b6dd61ed9f8289ac3e6f3b/minchin.scripts.photosorter-2.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f554af98e77cce7b31c824b1da848fce", "sha256": "13440ac61d2a52618ffea1c39efc8f05fa08baf5dd479eb9bdc660256bb03e80" }, "downloads": -1, "filename": "minchin.scripts.photosorter-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f554af98e77cce7b31c824b1da848fce", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5858566, "upload_time": "2017-08-28T17:38:16", "url": "https://files.pythonhosted.org/packages/16/1c/9f74c76d142ea6b3f605ae9484a8d47a3383e7afc01703a85dcce0c62f73/minchin.scripts.photosorter-2.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "021682c0698bf2ba42ee65feaf125e00", "sha256": "b16f237945063c09c1ffc7d9416da59a78e1af6a71f0b95ad9525e2e5aab5d17" }, "downloads": -1, "filename": "minchin.scripts.photosorter-2.1.0.tar.gz", "has_sig": false, "md5_digest": "021682c0698bf2ba42ee65feaf125e00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5857247, "upload_time": "2017-08-28T17:37:36", "url": "https://files.pythonhosted.org/packages/8b/18/26452697bf9c560d878b8a54fd7227ab62b7c5b6dd61ed9f8289ac3e6f3b/minchin.scripts.photosorter-2.1.0.tar.gz" } ] }