{ "info": { "author": "Virantha N. Ekanayake", "author_email": "virantha@gmail.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "Photo Keeper - \n=========================================\n\n|image_pypi| |passing| |quality| \n\nPhoto Keeper is a small script that I wrote to address the demise of my Eye-Fi Wifi SD card.\nThis script will take a source directory (say the contents of a flash card from a camera), \nscan all the image/video file EXIFs, and sort them into date-based folders in a user-specified\ndirectory. It will optionally only copy files that have not already been copied (deduplication per \nfolder). Photo Keeper can also upload all the files to Flickr into the same date-based album \nstructure, also taking care not to duplicate files.\n\nAt some point, I intend to integrate this with the FlashAir series of cards for auto-uploads directly\nfrom the camera, but that is still a work in progress.\n\n* Free and open-source software: ASL2 license\n* Blog: http://virantha.com/category/projects/photokeeper\n* Documentation: http://virantha.github.io/photokeeper/html\n* Source: https://github.com/virantha/photokeeper\n\nFeatures\n########\n\n* Sort image files (JPEG/TIFF) and video files into date-based folders (currently only YYYY-MM-DD format supported)\n* Upload images and videos to Flickr into date-based albums\n* Avoid duplication of files based on photo taken time, size, and filename\n\nUsage:\n######\n\nExamine files\n-------------\n\nExamine the files in a given source directory (no changes or copying):\n\n::\n \n photokeeper SRC_DIR examine\n\nResults in:\n\n::\n\n\tExamining 482 files in /source\n\t100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2589| 481/482 [00:08<00:00, 59.88file/s]\n\tFound images from 14 days\n\t{ '2016-06-24': 5,\n\t\t'2016-07-02': 30,\n\t\t'2016-07-03': 12,\n\t\t'2016-07-04': 32,\n\t\t'2016-07-05': 3,\n\t\t'2016-07-21': 1,\n\t\t'2016-08-02': 20,\n\t\t'2016-08-05': 51,\n\t\t'2016-09-30': 13,\n\t\t'2016-10-09': 131,\n\t\t'2016-10-10': 46,\n\t\t'2016-10-29': 91,\n\t\t'2016-10-31': 45,\n\t\t'2016-11-06': 1}\n\tTotal images: 481\n\nCopy files to a directory\n-------------------------\nCopy the files in a given source directory to a target directory with no duplication:\n\n::\n\n\tphotokeeper SRC_DIR TGT_DIR dedupe file\n\n\nUpload files to Flickr\n----------------------\nFirst, go to Flickr and get a private key at http://www.flickr.com/services/api/misc.api_keys.html \n \nThen, create a directory from where you will start photokeeper, and create a file called flickr_api.yaml: \n \n.. code-block:: yaml \n \n key: \"YOUR_API_KEY\" \n secret: \"YOUR_API_SECRET\" \n\nNow, use the following command:\n\n::\n\n\tphotokeeper SRC_DIR TGT_DIR dedupe flickr\n\n\n\nFull help\n---------\n\n::\n\n\tUsage:\n\t\tphotokeeper.py [options] SOURCE_DIR examine\n\t\tphotokeeper.py [options] SOURCE_DIR TARGET_DIR [dedupe] file\n\t\tphotokeeper.py [options] SOURCE_DIR [dedupe] flickr\n\t\tphotokeeper.py [options] SOURCE_DIR TARGET_DIR [dedupe] file flickr\n\t\tphotokeeper.py [options] SOURCE_DIR TARGET_DIR all\n\t\tphotokeeper.py --conf=FILE\n\t\tphotokeeper.py -h\n\n\tArguments:\n\t\tSOURCE_DIR Source directory of photos\n\t\tTARGET_DIR Where to copy the image files\n\t\tall Run all steps in the flow (examine,dedupe,flickr,file)\n\t\texamine Examine EXIF tags\n\t\tdedupe Only select files not already present in target directory\n\t\tflickr Upload to flickr\n\t\tfile Copy files\n\n\tOptions:\n\t\t-h --help show this message\n\t\t-v --verbose show more information\n\t\t-d --debug show even more information\n\t\t--conf=FILE load options from file\n\nInstallation\n############\n\nPhotoKeeper is currently only tested and provided for Python 3.5. I have no\nplans to backport this to Python 2.x as I am shifting all my new development to\n3.x exclusively.\n\n.. code-block: bash\n\n $ pip install photokeeper\n\nDisclaimer\n##########\n\nThe software is distributed on an \"AS IS\" BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\n.. |image_pypi| image:: https://badge.fury.io/py/photokeeper.png\n :target: https://pypi.python.org/pypi/photokeeper\n.. |passing| image:: https://scrutinizer-ci.com/g/virantha/photokeeper/badges/build.png?b=master\n.. |quality| image:: https://scrutinizer-ci.com/g/virantha/photokeeper/badges/quality-score.png?b=master\n.. |Coverage Status| image:: https://coveralls.io/repos/virantha/photokeeper/badge.png?branch=develop\n :target: https://coveralls.io/r/virantha/photokeeper", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "ASL 2.0", "maintainer": "", "maintainer_email": "", "name": "photokeeper", "package_url": "https://pypi.org/project/photokeeper/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/photokeeper/", "project_urls": null, "release_url": "https://pypi.org/project/photokeeper/0.1.3/", "requires_dist": null, "requires_python": "", "summary": "Keep your photos in sync with Flickr", "version": "0.1.3" }, "last_serial": 2447469, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6815e35a0dc8a3fede1c4c3d5f9febeb", "sha256": "10aafc5980366cec2bd4fcb945619393dfdd57160873eaea017309fa073413fe" }, "downloads": -1, "filename": "photokeeper-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6815e35a0dc8a3fede1c4c3d5f9febeb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14731, "upload_time": "2016-11-07T02:56:09", "url": "https://files.pythonhosted.org/packages/ee/1f/b2d223c7081f08885aa256cf42c46a2fd0e0d14f5658307077a147bccae6/photokeeper-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "08537d2d428e746c7e4d0e31a24c4f55", "sha256": "4f8c0d1e779969b30ce8fe96021fd971eac1b0d1b2786de77a979346fb4926a7" }, "downloads": -1, "filename": "photokeeper-0.1.1.tar.gz", "has_sig": false, "md5_digest": "08537d2d428e746c7e4d0e31a24c4f55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14730, "upload_time": "2016-11-07T03:11:30", "url": "https://files.pythonhosted.org/packages/14/b1/c7f3ebece6e70670747ec934f890e18e08dd2bbe28698b032ea3e81cf778/photokeeper-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c9cd68ef5bb3e0a10ac3895ff55c6c4b", "sha256": "5ef80fa039da7c42007cd28ec037ce9a1862202b76c434188f945886fe62a9a4" }, "downloads": -1, "filename": "photokeeper-0.1.2.tar.gz", "has_sig": false, "md5_digest": "c9cd68ef5bb3e0a10ac3895ff55c6c4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14732, "upload_time": "2016-11-07T03:13:36", "url": "https://files.pythonhosted.org/packages/0d/b0/0ec78c3d02fb1ab62f524808e7e4462d3799e35cd3d4a1255066f895b808/photokeeper-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "cd4ec2769d5dd8222535fbd1b1959fcb", "sha256": "b93d2020f60c345cc547a81e9e63da3b7c94caad3d4a5d7a9143b047fc11a1fb" }, "downloads": -1, "filename": "photokeeper-0.1.3.tar.gz", "has_sig": false, "md5_digest": "cd4ec2769d5dd8222535fbd1b1959fcb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16301, "upload_time": "2016-11-07T18:04:56", "url": "https://files.pythonhosted.org/packages/0c/b7/f3d41e9f6b7580781481120f8e9b28f0134b462eb3432cdf4c3b8bc18dbb/photokeeper-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cd4ec2769d5dd8222535fbd1b1959fcb", "sha256": "b93d2020f60c345cc547a81e9e63da3b7c94caad3d4a5d7a9143b047fc11a1fb" }, "downloads": -1, "filename": "photokeeper-0.1.3.tar.gz", "has_sig": false, "md5_digest": "cd4ec2769d5dd8222535fbd1b1959fcb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16301, "upload_time": "2016-11-07T18:04:56", "url": "https://files.pythonhosted.org/packages/0c/b7/f3d41e9f6b7580781481120f8e9b28f0134b462eb3432cdf4c3b8bc18dbb/photokeeper-0.1.3.tar.gz" } ] }