Skip to main content

Search, filter, inspect, download posts from Danbooru and local folders.

Project description

lunafind

PyPI downloads PyPI version PyPI pyversions

Search, filter, inspect, download posts from Danbooru/Safebooru and find them back from the command line without setting up any service or database.

Suitable for daily terminal usage, usable for scripts and as a library for Python 3.6+.

See also lunasync to automatically download and keep in sync particular tags using lunafind, similar to Danbooru tag subscriptions or saved searches.

Features

  • Operate on tag searches, URLs or file paths
  • Combine results from multiple searches
  • Specify custom page ranges, or just get everything
  • Filter and order booru results to work around the two tags search limit
  • Optional partial/fuzzy tag matching for filter and local searches
  • Search downloaded posts by tags as if they were on a booru, without the hassle of setting up one
  • Instant results from local searches in most cases after indexing
  • Fast multithreaded downloads; 8 downloads in parallel by default
  • Supports operating on post media (image, ugoira WebM, etc), info, notes, artist commentaries:
    • Getting the URLs or file/folder paths
    • Printing on standard output
    • Downloading

Local searches performance

The first time a local post search is done, an index file to speed up future searches will be automatically created and updated when new post directories exist or are removed.

Test with ~165 000 posts
AMD FX-8300 (8 cores, 3.3GHz), TOSHIBA DT01ACA2 7200 RPM HDD, BTRFS file system, Void Linux 4.18.14 x86_64:

  • It takes about 2m30s - 3m to index everything from scratch
  • After this, search results start coming instantly unless --random or --order is used.
  • Searches finish completely in 8-20s

Test with ~60 000 posts
Celeron B815 (2 cores, 1.60GHz), 5400 RPM HDD, BTRFS file system, Void Linux 4.18.20 x86_64:

  • About 4mn to index everything from scratch
  • Results come instantly
  • Searches finishes in ~20s

Command line usage

Downloading to the current folder every post tagged blonde and 2girls (default booru is https://danbooru.donmai.us):

    lunafind "blonde 2girls" --limit 200 --pages all --download .

Searching through the posts we just downloaded, printing image paths for the results:

    lunafind "blonde blue_eyes rating:s score:>5" --source . --show-location media

See lunafind --help for all options and examples.

Python usage

No real documentation yet. Three main classes are provided:

  • Post: represents a local or remote single post, with its info, media, notes and artcom (artist commentary).

  • Album: works like a dictionary of Post, where keys are the post IDs. Has magic methods and operators to facilitate working with them. Can be filtered, ordered, downloaded, and more.

  • Stream: an efficiant lazy iterator yielding posts. Can be filtered and multithread-downloaded.

Reproducing the command line examples in the section above:

    from lunafind import Stream

    Stream("blonde 2girls", limit=200, pages="all").download()

    for post in Stream("blonde blue_eyes rating:s score:>5", client="."):
        print(post.get_location("media"))

Installation

Requires Python 3.6+ and pip (for automatic easy install).
Tested on GNU/Linux and Windows 7, probably works on OSX and other POSIX systems.
As root:

    pip3 install -U lunafind

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lunafind-0.5.5.tar.gz (28.4 kB view details)

Uploaded Source

Built Distribution

lunafind-0.5.5-py3-none-any.whl (48.8 kB view details)

Uploaded Python 3

File details

Details for the file lunafind-0.5.5.tar.gz.

File metadata

  • Download URL: lunafind-0.5.5.tar.gz
  • Upload date:
  • Size: 28.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.8.0 tqdm/4.42.1 CPython/3.8.5

File hashes

Hashes for lunafind-0.5.5.tar.gz
Algorithm Hash digest
SHA256 cf8d95ea171d050be81c1695bc0f86e1223b72f6dcc58fe13b7c8abdb9b4249e
MD5 f89621abe92b92feccaffbc6bb5cae14
BLAKE2b-256 ef09a6003afae0ffd2b7675405b8dae95a370920786a454e58fa590642d2cda1

See more details on using hashes here.

File details

Details for the file lunafind-0.5.5-py3-none-any.whl.

File metadata

  • Download URL: lunafind-0.5.5-py3-none-any.whl
  • Upload date:
  • Size: 48.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.8.0 tqdm/4.42.1 CPython/3.8.5

File hashes

Hashes for lunafind-0.5.5-py3-none-any.whl
Algorithm Hash digest
SHA256 92f5fda13f069ba37907964800c301c6c62242e4f28eec9a0fdde9f0661348f1
MD5 1da318ae38a744c08b71890f200eccfe
BLAKE2b-256 9a5fc93c3b1a622722e07746a3c8fd5a202b9eccf1583723dbdd661fa4bdbd56

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page