{ "info": { "author": "miruka", "author_email": "miruka@disroot.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "Natural Language :: English", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "# lunafind\n\n[![PyPI downloads](http://pepy.tech/badge/lunafind)](\n http://pepy.tech/project/lunafind)\n[![PyPI version](https://img.shields.io/pypi/v/lunafind.svg)](\n https://pypi.org/projects/lunafind)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/lunafind.svg)](\n https://pypi.python.org/pypi/lunafind)\n\nSearch, filter, inspect, download posts from Danbooru/Safebooru and find them\nback from the command line without setting up any service or database.\n\nSuitable for daily terminal usage, usable for scripts and as a library\nfor Python 3.6+.\n\nSee also [lunasync](https://github.com/mirukan/lunasync) to automatically\ndownload and keep in sync particular tags using **lunafind**,\nsimilar to Danbooru tag subscriptions or saved searches.\n\n## Features\n\n- Operate on tag searches, URLs or file paths\n- Combine results from multiple searches\n- Banned/hidden posts are automatically\n [decensored](https://github.com/mirukan/pydecensooru) when possible\n- Specify custom page ranges, or just get everything\n- Filter and order booru results to work around the two tags search limit\n- Optional partial/fuzzy tag matching for filter and local searches\n- Search downloaded posts by tags as if they were on a booru, without the\n hassle of setting up one\n- Instant results from local searches in most cases after indexing\n- Fast multithreaded downloads; 8 downloads in parallel by default\n- Supports operating on post media (image, ugoira WebM, etc), info, notes,\n artist commentaries:\n - Getting the URLs or file/folder paths\n - Printing on standard output\n - Downloading\n\n## Local searches performance\n\nThe first time a local post search is done, an index file to speed up future\nsearches will be automatically created and updated when new post directories\nexist or are removed.\n\nTests with ~165 000 posts in the same directory,\na CPU with average single-core performance\n(AMD FX-8300 - there is no benefit yet from multiple cores),\ngeneric 7200 RPM hard disk, BTRFS file system, Void Linux 4.18.14 x86\\_64: \n- It takes about 2m30s - 3m to index everything from scratch. \n- After this, search results start coming instantly unless `--random` or\n `--order` is used. \n- Searches finish completely in 8-20s.\n\n## Command line usage\n\nDownloading to the current folder every post tagged *blonde* and *2girls*\n(default booru is ):\n\n```sh\n lunafind \"blonde 2girls\" --limit 200 --pages all --download .\n```\n\nSearching through the posts we just downloaded,\nprinting image paths for the results:\n\n```sh\n lunafind \"blonde blue_eyes rating:s score:>5\" --source . --show-location media\n```\n\nSee `lunafind --help` for all options and examples.\n\n## Python usage\n\nNo real documentation yet. Three main classes are provided:\n\n- `Post`: represents a local or remote single post, with its info, media, notes\n and artcom (artist commentary).\n\n- `Album`: works like a dictionary of `Post`, where keys are the post IDs.\n Has magic methods and operators to facilitate working with them.\n Can be filtered, ordered, downloaded, and more.\n\n- `Stream`: an efficiant lazy iterator yielding posts.\n Can be filtered and multithread-downloaded.\n\nReproducing the command line examples in the section above:\n\n```python3\n from lunafind import Stream\n\n Stream(\"blonde 2girls\", limit=200, pages=\"all\").download()\n\n for post in Stream(\"blonde blue_eyes rating:s score:>5\", client=\".\"):\n print(post.get_location(\"media\"))\n```\n\n## Installation\n\nRequires Python 3.6+ and pip (for automatic easy install). \nTested on GNU/Linux and Windows 7, probably works on OSX and other POSIX\nsystems. \nAs root:\n\n```sh\n pip3 install -U lunafind\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mirukan/lunafind", "keywords": "lunakit lunasync booru danbooru api client image ugoira anime cli terminal scrap tag search filter order download", "license": "LGPLv3", "maintainer": "", "maintainer_email": "", "name": "lunafind", "package_url": "https://pypi.org/project/lunafind/", "platform": "", "project_url": "https://pypi.org/project/lunafind/", "project_urls": { "Homepage": "https://github.com/mirukan/lunafind" }, "release_url": "https://pypi.org/project/lunafind/0.5.4.post3/", "requires_dist": [ "appdirs", "atomicfile", "cached-property", "colorama", "docopt", "fastnumbers", "logzero", "pendulum", "pydecensooru (>=0.1.0)", "requests", "setuptools", "simplejson", "urllib3", "whratio (>=3.1.1)", "dataclasses; python_version < \"3.7\"" ], "requires_python": ">=3.6, <4", "summary": "Search, filter, inspect, download posts from Danbooru and local folders.", "version": "0.5.4.post3" }, "last_serial": 4539119, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "1002daa24e447e05f8ec76c79321f53c", "sha256": "03b88b3a78ceb277024ee627efc8fcbf6ffd74ec1a9bc9923abc2537b7b86e71" }, "downloads": -1, "filename": "lunafind-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1002daa24e447e05f8ec76c79321f53c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 30033, "upload_time": "2018-11-10T00:06:36", "url": "https://files.pythonhosted.org/packages/a6/79/8de3c1337c6fee008c45901411a8d36adccfe4aaf017bb3a4fa8f2e9b0f2/lunafind-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36d79106e5b6f5d42882d69559f3b73c", "sha256": "91db0815f4c0d3944800e9229a8ed9f2c97288c1d8c17fc98ef1b044b1414ed3" }, "downloads": -1, "filename": "lunafind-0.5.0.tar.gz", "has_sig": false, "md5_digest": "36d79106e5b6f5d42882d69559f3b73c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 21951, "upload_time": "2018-11-10T00:06:38", "url": "https://files.pythonhosted.org/packages/eb/02/165d16fd19a47c14e9579fd375cd976a949ba96606ef45c59cf1b92d629b/lunafind-0.5.0.tar.gz" } ], "0.5.0.post1": [ { "comment_text": "", "digests": { "md5": "5128dd11f3dde7479d095d398b583e00", "sha256": "6fe5e088293ee6313efb8f1c769c6833b2ce6070a4e4b5bbe5ac2859a2f73d26" }, "downloads": -1, "filename": "lunafind-0.5.0.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "5128dd11f3dde7479d095d398b583e00", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 30216, "upload_time": "2018-11-10T00:22:31", "url": "https://files.pythonhosted.org/packages/e6/dd/90b8af487ade79cda03e65373a2ed2188239ff6bf4dcac8f3504d739558e/lunafind-0.5.0.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10f8d8e8b52c8d34ec3d7b9df5a0f34b", "sha256": "cdc574e540b203d4ca9bc680004f0cee84bc40c3f06a0bf0809e0e95ba33feaa" }, "downloads": -1, "filename": "lunafind-0.5.0.post1.tar.gz", "has_sig": false, "md5_digest": "10f8d8e8b52c8d34ec3d7b9df5a0f34b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 22074, "upload_time": "2018-11-10T00:22:33", "url": "https://files.pythonhosted.org/packages/0c/6f/5f6a4458ceeee88447574b76881ce9927bee4946a0d607ca72d40b09831c/lunafind-0.5.0.post1.tar.gz" } ], "0.5.0.post2": [ { "comment_text": "", "digests": { "md5": "db3c2e14c64964095a3b3607751469a7", "sha256": "994a77107ce8dd48bf84dbb4aa338aa016eadd70eb06cbbd1e8b20d8d64deee7" }, "downloads": -1, "filename": "lunafind-0.5.0.post2-py3-none-any.whl", "has_sig": false, "md5_digest": "db3c2e14c64964095a3b3607751469a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 30236, "upload_time": "2018-11-10T00:44:38", "url": "https://files.pythonhosted.org/packages/4a/8a/e161d26c0f8f4e1923a21d13c89c6fc51bf2b182ec0e05f1adeb997a40b2/lunafind-0.5.0.post2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b7cb1f29f845581acf06fdb6fde6056", "sha256": "f969775bd00605c0841d3440257c37e83fbe5828d4513ea3740fa7f19ac4a030" }, "downloads": -1, "filename": "lunafind-0.5.0.post2.tar.gz", "has_sig": false, "md5_digest": "5b7cb1f29f845581acf06fdb6fde6056", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 22072, "upload_time": "2018-11-10T00:44:40", "url": "https://files.pythonhosted.org/packages/49/9e/a00ba1eb2336e597707c0055b5a31710381eebc4c5889a1261704a5d0299/lunafind-0.5.0.post2.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "a45adb102062ac14261bdbfc0c8f4184", "sha256": "5d849a71de616d39fe7f192f46b000d81a2526cf39feb7eac615ded9155a3036" }, "downloads": -1, "filename": "lunafind-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a45adb102062ac14261bdbfc0c8f4184", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 30729, "upload_time": "2018-11-15T06:33:30", "url": "https://files.pythonhosted.org/packages/e1/38/81b5d095c6696488058ca828036bfc514f23e175ec25b3a4ce4d11bd3927/lunafind-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9ffbad91c2807e9bd9c8cc6ca769ea7", "sha256": "a78fe64130d10f4ca5b66f929c01dc4515e329d7233c9f7131836d22c753bfbc" }, "downloads": -1, "filename": "lunafind-0.5.1.tar.gz", "has_sig": false, "md5_digest": "f9ffbad91c2807e9bd9c8cc6ca769ea7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 22571, "upload_time": "2018-11-15T06:33:33", "url": "https://files.pythonhosted.org/packages/ac/fc/e38b61e806b45a08255da0f3fb32909b9852ad7660e15d5cffa6282f137d/lunafind-0.5.1.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "38cda6bef60673aa83ce8dcc65958530", "sha256": "165b9fa5ddce64c4cea82178b13efbb073e6530fe8bf28fa2cfb8e96d764ade1" }, "downloads": -1, "filename": "lunafind-0.5.4-py3-none-any.whl", "has_sig": false, "md5_digest": "38cda6bef60673aa83ce8dcc65958530", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 33664, "upload_time": "2018-11-20T02:22:04", "url": "https://files.pythonhosted.org/packages/5f/c4/73b8df092bc7f635885cb061f12a1e21e645af18d448cdae02ab748efa7c/lunafind-0.5.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5bb1c2b1ecd11bc12c21efc87c68386", "sha256": "ffa46bd4030abbeab6047332f9936ba767f4304b7868bd2194f52aac2cd3478e" }, "downloads": -1, "filename": "lunafind-0.5.4.tar.gz", "has_sig": false, "md5_digest": "a5bb1c2b1ecd11bc12c21efc87c68386", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 25761, "upload_time": "2018-11-20T02:22:07", "url": "https://files.pythonhosted.org/packages/35/25/bd57ba39e4070b3f48a45031fe2140066ad7c497b4d25584a53701eb40f6/lunafind-0.5.4.tar.gz" } ], "0.5.4.post1": [ { "comment_text": "", "digests": { "md5": "271f88b9fc418c1965f8cdc71f60783e", "sha256": "3d0da23342b9e24ce276136fa0c67e1828be6269ce42a84bda8803d96c69e4d6" }, "downloads": -1, "filename": "lunafind-0.5.4.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "271f88b9fc418c1965f8cdc71f60783e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33869, "upload_time": "2018-11-21T00:19:35", "url": "https://files.pythonhosted.org/packages/35/a2/8289f8f88ca73a49805f47964c328f74af04d97870a7a40ca02c956d138a/lunafind-0.5.4.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9461d1428a87bd4c9efcd60f237b7c52", "sha256": "c467803b08ec952e94d58ccd4a9d97954a9de576c555cd815248f84ecbb6da7c" }, "downloads": -1, "filename": "lunafind-0.5.4.post1.tar.gz", "has_sig": false, "md5_digest": "9461d1428a87bd4c9efcd60f237b7c52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25833, "upload_time": "2018-11-21T00:19:37", "url": "https://files.pythonhosted.org/packages/27/d9/c2065cefe0d91894ae0a443020cb217c30a65016e250ce0441c0fda80504/lunafind-0.5.4.post1.tar.gz" } ], "0.5.4.post2": [ { "comment_text": "", "digests": { "md5": "84e0ca3e90106b6bca67467de389d117", "sha256": "60d3847e1d58f62a396b54e8fac97622cdaca37595ae677a78e08693c914b574" }, "downloads": -1, "filename": "lunafind-0.5.4.post2-py3-none-any.whl", "has_sig": false, "md5_digest": "84e0ca3e90106b6bca67467de389d117", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 33757, "upload_time": "2018-11-21T00:23:29", "url": "https://files.pythonhosted.org/packages/a6/6d/644ba5a5bd3b41d405ad040c68ba7f5829cc8a7357ec11cf466cc22e11a1/lunafind-0.5.4.post2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d1e2b4413d33a63448eabb1cccee6ff", "sha256": "5dcc573971bd365798a4c2e95d21822664c034fef02d519cddbc09fea427b0f1" }, "downloads": -1, "filename": "lunafind-0.5.4.post2.tar.gz", "has_sig": false, "md5_digest": "9d1e2b4413d33a63448eabb1cccee6ff", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 25800, "upload_time": "2018-11-21T00:23:31", "url": "https://files.pythonhosted.org/packages/a6/88/76de49c45537ed70cbad204ceee659478d115a5777d9f204eb07a8190d2c/lunafind-0.5.4.post2.tar.gz" } ], "0.5.4.post3": [ { "comment_text": "", "digests": { "md5": "3fa9f250385a9cd0c3b6f506c533b8e6", "sha256": "5475010059d631befd9ccfbb7ff543eb01f26115700a8d91ac1bc205306f5760" }, "downloads": -1, "filename": "lunafind-0.5.4.post3-py3-none-any.whl", "has_sig": false, "md5_digest": "3fa9f250385a9cd0c3b6f506c533b8e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 33760, "upload_time": "2018-11-28T15:25:34", "url": "https://files.pythonhosted.org/packages/f2/14/26a02916c9dbadfefeb8376304f84eaaf45520a9b7946c9153f8a55c6d0d/lunafind-0.5.4.post3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb603c8c7872eb01fb49a8bdc09d5b94", "sha256": "e1f46ea1306389dd395a51a2db93c160747f73814d2ca766b790e25ae6323cf4" }, "downloads": -1, "filename": "lunafind-0.5.4.post3.tar.gz", "has_sig": false, "md5_digest": "eb603c8c7872eb01fb49a8bdc09d5b94", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 25799, "upload_time": "2018-11-28T15:25:36", "url": "https://files.pythonhosted.org/packages/e4/19/3e44f11ab248a333818730db9de6cd4247b16cad682b16e7991b256a13ac/lunafind-0.5.4.post3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3fa9f250385a9cd0c3b6f506c533b8e6", "sha256": "5475010059d631befd9ccfbb7ff543eb01f26115700a8d91ac1bc205306f5760" }, "downloads": -1, "filename": "lunafind-0.5.4.post3-py3-none-any.whl", "has_sig": false, "md5_digest": "3fa9f250385a9cd0c3b6f506c533b8e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 33760, "upload_time": "2018-11-28T15:25:34", "url": "https://files.pythonhosted.org/packages/f2/14/26a02916c9dbadfefeb8376304f84eaaf45520a9b7946c9153f8a55c6d0d/lunafind-0.5.4.post3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb603c8c7872eb01fb49a8bdc09d5b94", "sha256": "e1f46ea1306389dd395a51a2db93c160747f73814d2ca766b790e25ae6323cf4" }, "downloads": -1, "filename": "lunafind-0.5.4.post3.tar.gz", "has_sig": false, "md5_digest": "eb603c8c7872eb01fb49a8bdc09d5b94", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 25799, "upload_time": "2018-11-28T15:25:36", "url": "https://files.pythonhosted.org/packages/e4/19/3e44f11ab248a333818730db9de6cd4247b16cad682b16e7991b256a13ac/lunafind-0.5.4.post3.tar.gz" } ] }