From 8da76afb28524eacf6421cc7f580087537868a7e Mon Sep 17 00:00:00 2001 From: Zweibach Date: Sat, 21 May 2022 19:04:08 +0200 Subject: [PATCH 1/4] Updated getting started downloading page --- docs/getting_started_downloading.md | 126 +++++++++++++++++++--------- docs/images/file_import.png | Bin 0 -> 30088 bytes 2 files changed, 87 insertions(+), 39 deletions(-) create mode 100644 docs/images/file_import.png diff --git a/docs/getting_started_downloading.md b/docs/getting_started_downloading.md index 1cf681dd..1a2504d7 100644 --- a/docs/getting_started_downloading.md +++ b/docs/getting_started_downloading.md @@ -1,33 +1,76 @@ --- -title: downloading +title: Downloading --- -# getting started with downloading +# Getting started with downloading -## downloading +The hydrus client has a sophisticated and completely user-customisable download system. It can pull from any booru or regular gallery site or imageboard, and also from some special examples like twitter and tumblr. A fresh install will by default have support for the bigger sites, but it _is_ possible, with some work, for any user to [create a new shareable downloader](downloader_intro.md) for a new site. -The hydrus client has a sophisticated and completely user-customisable download system. It can pull from any booru or regular gallery site or imageboard, and also from some special examples like twitter and tumblr. A fresh install will by default have support for the bigger sites, but it _is_ possible, with some work, for any user to create a new shareable downloader for a new site. - -The downloader is highly parallelisable, and while the default bandwidth rules should stop you from running too hot and downloading so much at once that you annoy the servers you are downloading from, there are no brakes in the program on what you can get. +The downloader is highly parallelisable, and while the default [bandwidth rules](#bandwidth) should stop you from running too hot and downloading so much at once that you annoy the servers you are downloading from, there are no brakes in the program on what you can get. !!! danger It is very important that you take this slow. Many users get overexcited with their new ability to download 500,000 files _and then do so_, only discovering later that 98% of what they got was junk that they now have to wade through. Figure out what workflows work for you, how fast you process files, what content you _actually_ want, how much bandwidth and hard drive space you have, and prioritise and throttle your incoming downloads to match. If you can realistically only archive/delete filter 50 files a day, there is little benefit to downloading 500 new files a day. START SLOW. It also takes a decent whack of CPU to import a file. You'll usually never notice this with just one hard drive import going, but if you have twenty different download queues all competing for database access and individual 0.1-second hits of heavy CPU work, you will discover your client starts to judder and lag. Keep it in mind, and you'll figure out what your computer is happy with. I also recommend you try to keep your total loaded files/urls to be under 20,000 to keep things snappy. Remember that you can pause your import queues, if you need to calm things down a bit. -## let's do it { id="start" } +## Downloader types +There are a number of different downloader types, each with its own purpose. This is a short summary of them: +URL download: Intended for single posts or images. (Works with the [API](client_api.md)) +Gallery: For big download jobs such as an artist's catalogue, everything with a given tag on a booru. +Subscriptions: Repeated gallery jobs, for keeping up to date with an artist or tag. Use gallery downloader to get everything and a subscription to keep updated. +Watcher: Imageboard thread downloader, such as 4chan, 8chan, and what else exists. (Works with the [API](client_api.md)) +Simple downloader: Intended for simple one-off jobs like grabbing all linked images in a page. -Open the new page selector with F9 and then hit _download->gallery_: +## File import settings +File import settings has a number of options that deal with the files being downloaded and what should happen to them. There's a few more tickboxes if you turn on advanced mode +![](images/file_import.png) + +**Pre-import checks** +: Pretty self-explanatory for the most part. If you want to redownload previously deleted files turning off `exclude previously deleted files` will have Hydrus ignore deletion status. + +**Import destinations** +: See [multiple file services](advanced_multiple_local_file_services.md), an advanced feature. + +## Parsing +By default, hydrus now starts with a local tag service called 'downloader tags' and it will parse (get) all the tags from normal gallery sites and put them in this service. You don't have to do anything, you will get some decent tags. As you use the client, you will figure out which tags you like and where you want them. On the downloader page, click `tag import options`: + +![](images/tag_import_options_default.png) + +This is an important dialog, although you will not need to use it much. It governs which tags are parsed and where they go. To keep things easy to manage, a new downloader will refer to the 'default' tag import options for a website, but for now let's set some values just for this downloader: + +![](images/tag_import_options_specific.png) + +You can see that each tag service on your client has a separate section. If you add the PTR, that will get a new box too. A new client is set to _get all tags_ for 'downloader tags' service. Things can get much more complicated. Have a play around with the options here as you figure things out. Most of the controls have tooltips or longer explainers in sub-dialogs, so don't be afraid to try things. + +It is easy to get tens of thousands of tags by downloading this way. Different sites offer different kinds and qualities of tags, and the client's downloaders (which were designed by me, the dev, or a user) may parse all or only some of them. Many users like to just get everything on offer, but others only ever want, say, `creator`, `series`, and `character` tags. If you feel brave, click that 'all tags' button, which will take you into hydrus's advanced 'tag filter', which allows you to select which of the incoming list of tags will be added. + +The blacklist button will let you skip downloading files that have certain tags (perhaps you would like to auto-skip all images with `gore`, `scat`, or `diaper`?), again using the tag filter, while the whitelist enables you to only allow files that have at least one of a set of tags. The 'additional tags' adds some fixed personal tags to all files coming in--for instance, you might like to add 'process into favourites' to your 'my tags' for some query you really like so you can find those files again later and process them separately. That little 'cog' icon button can also do some advanced things. + +To edit the defaults, hit up _network->downloaders->manage default tag import options_. You should do this as you get a better idea of your preferences. You can set them for all file posts generally, all watchers, and for specific sites as well. + + +!!! warning + The file limit and file/tag import options on the upper panel, if changed, will only apply to **new** queries. If you want to change the options for an existing queue, either do so on its highlight panel below or use the 'set options to queries' button. + +## URL download +The **url downloader** works like the gallery downloader but does not do searches. You can paste downloadable URLs to it, and it will work through them as one list. Dragging and dropping recognisable URLs onto the client (e.g. from your web browser) will also spawn and use this downloader. + +The button next to the input field lets you paste multiple URLs at once such as if you've copied from a document or browser bookmarks. The URLs need to be newline separated. + +### API +If you use [API-connected](client_api.md) programs such as the Hydrus Companion, then any [non-watchable](downloader_url_classes.md#the-types-of-url--id"urltypes") URLs sent to Hydrus through them will end up in an URL downloader page, the specifics depending on the program's settings. You can't use this to force Hydrus to download paged galleries since the URL downloader page doesn't support traversing to the next page, use the gallery downloader for this. + +## Gallery download ![](images/downloader_page.png) The gallery page can download from multiple sources at the same time. Each entry in the list represents a basic combination of two things: -**source** -: The site you are getting from. Safebooru or Danbooru or Deviant Art or twitter or anywhere else. +**Source** +: The site you are getting from. Safebooru or Danbooru or Deviant Art or twitter or anywhere else. In the example image this is the button labelled `artstation artist lookup`. -**query text** -: Something like 'contrapposto' or 'blonde\_hair blue\_eyes' or an artist name like 'incase'. Whatever is searched on the site to return a list of ordered media. +**Query text** +: Something like 'contrapposto' or 'blonde\_hair blue\_eyes' or an artist name like 'incase'. Whatever is searched on the site to return a list of ordered media. In the example image this is the text field with `artist username` in it. So, when you want to start a new download, you first select the source with the button and then type in a query in the text box and hit enter. The download will soon start and fill in information, and thumbnails should stream in, just like the hard drive importer. The downloader typically works by walking through the search's gallery pages one by one, queueing up the found files for later download. There are several intentional delays built into the system, so do not worry if work seems to halt for a little while--you will get a feel for hydrus's 'slow persistent growth' style with experience. @@ -41,30 +84,41 @@ _Note that some sites only serve 25 or 50 pages of results, despite their indice **In general, particularly when starting out, artist searches are best.** They are usually fewer than a thousand files and have fairly uniform quality throughout. -## parsing tags +## Subscriptions +Subscriptions are a way to automatically recheck a good query in future, to keep up with new files. Many users come to use them. When you are comfortable with downloaders and have an idea of what you like, come back and read the subscription help, which is [here](getting_started_subscriptions.md). -But we don't just want files--most sites offer tags as well. By default, hydrus now starts with a local tag service called 'downloader tags' and it will parse (get) all the tags from normal gallery sites and put them in this service. You don't have to do anything, you will get some decent tags. As you use the client, you will figure out which tags you like and where you want them. On the downloader page, click _tag import options_: +Subscriptions are a way of telling the client to regularly and quietly repeat a gallery search. You set up a number of saved queries, and the client will 'sync' with the latest files in the gallery and download anything new, just as if you were running the download yourself. -![](images/tag_import_options_default.png) +Subscriptions only work for booru-like galleries that put the newest files first, and they only keep up with new content--once they have done their first sync, which usually gets the most recent hundred files or so, they will never reach further into the past. Getting older files, as you will see later, is a job best done with a normal download page. -This is an important dialog, although you will not need to use it much. It governs which tags are parsed and where they go. To keep things easy to manage, a new downloader will refer to the 'default' tag import options for a website, but for now let's set some values just for this downloader: +!!! note + The entire subscription system assumes the source is a typical 'newest first' booru-style search. If you dick around with some order_by:rating/random metatag, it will not work reliably. -![](images/tag_import_options_specific.png) +It is important to note that while subscriptions can have multiple queries (even hundreds!), they _generally_ only work on one site. Expect to create one subscription for safebooru, one for artstation, one for paheal, and so on for every site you care about. Advanced users may be able to think of ways to get around this, but I recommend against it as it throws off some of the internal check timing calculations. -You can see that each tag service on your client has a separate section. If you add the PTR, that will get a new box too. A new client is set to _get all tags_ for 'downloader tags' service. Things can get much more complicated. Have a play around with the options here as you figure things out. Most of the controls have tooltips or longer explainers in sub-dialogs, so don't be afraid to try things. +### Setting up subscriptions -It is easy to get tens of thousands of tags by downloading this way. Different sites offer different kinds and qualities of tags, and the client's downloaders (which were designed by me, the dev, or a user) may parse all or only some of them. Many users like to just get everything on offer, but others only ever want, say, 'creator', 'series', and 'character' tags. If you feel brave, click that 'all tags' button, which will take you into hydrus's advanced 'tag filter', which allows you to select which of the incoming list of tags will be added. +Here's the dialog, which is under _network->downloaders->manage subscriptions_: -The blacklist button will let you skip downloading files that have certain tags (perhaps you would like to auto-skip all images with 'gore', 'scat', or 'diaper'?), again using the tag filter, while the whitelist enables you to only allow files that have at least one of a set of tags. The 'additional tags' adds some fixed personal tags to all files coming in--for instance, you might like to add 'process into favourites' to your 'my tags' for some query you really like so you can find those files again later and process them separately. That little 'cog' icon button can also do some advanced things. +![](images/subscriptions_edit_subscriptions.png) -To edit the defaults, hit up _network->downloaders->manage default tag import options_. You should do this as you get a better idea of your preferences. You can set them for all file posts generally, all watchers, and for specific sites as well. +This is a very simple example--there is only one subscription, for safebooru. It has two 'queries' (i.e. searches to keep up with). +Before we trip over the advanced buttons here, let's zoom in on the actual subscription: + +![](images/subscriptions_edit_subscription.png) + +!!! danger + **Do not change the max number of new files options until you know _exactly_ what they do and have a good reason to alter them!** + +This is a big and powerful panel! I recommend you open the screenshot up in a new browser tab, or in the actual client, so you can refer to it. + +Despite all the controls, the basic idea is simple: Up top, I have selected the 'safebooru tag search' download source, and then I have added two artists--"hong_soon-jae" and "houtengeki". These two queries have their own panels for reviewing what URLs they have worked on and further customising their behaviour, but all they _really_ are is little bits of search text. When the subscription runs, it will put the given search text into the given download source just as if you were running the regular downloader. !!! warning - The file limit and file/tag import options on the upper panel, if changed, will only apply to **new** queries. If you want to change the options for an existing queue, either do so on its highlight panel below or use the 'set options to queries' button. - -## watching threads { id="threads" } + Subscriptions syncs are somewhat fragile. Do not try to play with the limits or checker options to download a whole 5,000 file query in one go--if you want everything for a query, run it in the manual downloader and get everything, then set up a normal sub for new stuff. There is no benefit to having a 'large' subscription, and it will trim itself down in time anyway. +## Watchers If you are an imageboard user, try going to a thread you like and drag-and-drop its URL (straight from your web browser's address bar) onto the hydrus client. It should open up a new 'watcher' page and import the thread's files! ![](images/watcher_page.png) @@ -73,7 +127,13 @@ With only one URL to check, watchers are a little simpler than gallery searches, In general, you can leave the checker options alone, but you might like to revisit them if you are always visiting faster or slower boards and find you are missing files or getting DEAD too early. -## bandwidth +### API +If you use [API-connected](client_api.md) programs such as the Hydrus Companion, then any [watchable](downloader_url_classes.md#the-types-of-url--id"urltypes") URLs sent to Hydrus through them will end up in a watcher page, the specifics depending on the program's settings. + +## Simple downloader +The **simple downloader** will do very simple parsing for unusual jobs. If you want to download all the images in a page, or all the image link destinations, this is the one to use. There are several default parsing rules to choose from, and if you learn the downloader system yourself, it will be easy to make more. + +## Bandwidth It will not be too long until you see a "bandwidth free in xxxxx..." message. As a long-term storage solution, hydrus is designed to be polite in its downloading--both to the source server and your computer. The client's default bandwidth rules have some caps to stop big mistakes, spread out larger jobs, and at a bare minimum, no domain will be hit more than once a second. @@ -83,21 +143,9 @@ If you want to download 10,000 files, set up the queue and let it work. The clie Again: the real problem with downloading is not finding new things, it is keeping up with what you get. Start slow and figure out what is important to your bandwidth budget, hard drive budget, and free time budget. Almost everyone fails at this. -## subscriptions +## Logins -Subscriptions are a way to automatically recheck a good query in future, to keep up with new files. Many users come to use them. When you are comfortable with downloaders and have an idea of what you like, come back and read the subscription help, which is [here](getting_started_subscriptions.md). - -## other downloading { id="other_downloaders" } - -There are two other ways of downloading, mostly for advanced or one-off use. - -The **url downloader** works like the gallery downloader but does not do searches. You can paste downloadable URLs to it, and it will work through them as one list. Dragging and dropping recognisable URLs onto the client (e.g. from your web browser) will also spawn and use this downloader. - -The **simple downloader** will do very simple parsing for unusual jobs. If you want to download all the images in a page, or all the image link destinations, this is the one to use. There are several default parsing rules to choose from, and if you learn the downloader system yourself, it will be easy to make more. - -## logins - -The client now supports a flexible (but slightly prototype and ugly) login system. It can handle simple sites and is as completely user-customisable as the downloader system. The client starts with multiple login scripts by default, which you can review under _network->downloaders->manage logins_: +The client now supports a flexible (but slightly prototype and ugly) login system. It can handle simple sites and is as [completely user-customisable as the downloader system](downloader_login.md). The client starts with multiple login scripts by default, which you can review under _network->downloaders->manage logins_: ![](images/manage_logins.png) diff --git a/docs/images/file_import.png b/docs/images/file_import.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa6e7d0ed3874025c5062c151cfd7cfdeeafd1c GIT binary patch literal 30088 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 F{{ZdmqXqx~ literal 0 HcmV?d00001 From 40bd3f300c9c2d26b586a3b2e2546421e3586f76 Mon Sep 17 00:00:00 2001 From: Zweibach Date: Sat, 21 May 2022 19:04:30 +0200 Subject: [PATCH 2/4] What remains after moving subs to the main download doc --- docs/getting_started_subscriptions.md | 29 --------------------------- 1 file changed, 29 deletions(-) diff --git a/docs/getting_started_subscriptions.md b/docs/getting_started_subscriptions.md index 8c66c500..616b3526 100644 --- a/docs/getting_started_subscriptions.md +++ b/docs/getting_started_subscriptions.md @@ -10,31 +10,8 @@ Let's say you found an artist you like. You downloaded everything of theirs from ## what are subs? { id="intro" } -Subscriptions are a way of telling the client to regularly and quietly repeat a gallery search. You set up a number of saved queries, and the client will 'sync' with the latest files in the gallery and download anything new, just as if you were running the download yourself. - -Subscriptions only work for booru-like galleries that put the newest files first, and they only keep up with new content--once they have done their first sync, which usually gets the most recent hundred files or so, they will never reach further into the past. Getting older files, as you will see later, is a job best done with a normal download page. - -Here's the dialog, which is under _network->downloaders->manage subscriptions_: - -![](images/subscriptions_edit_subscriptions.png) - -This is a very simple example--there is only one subscription, for safebooru. It has two 'queries' (i.e. searches to keep up with). - -It is important to note that while subscriptions can have multiple queries (even hundreds!), they _generally_ only work on one site. Expect to create one subscription for safebooru, one for artstation, one for paheal, and so on for every site you care about. Advanced users may be able to think of ways to get around this, but I recommend against it as it throws off some of the internal check timing calculations. - -Before we trip over the advanced buttons here, let's zoom in on the actual subscription: - -[![](images/subscriptions_edit_subscription.png)](images/subscriptions_edit_subscription.png) - -This is a big and powerful panel! I recommend you open the screenshot up in a new browser tab, or in the actual client, so you can refer to it. - -Despite all the controls, the basic idea is simple: Up top, I have selected the 'safebooru tag search' download source, and then I have added two artists--"hong_soon-jae" and "houtengeki". These two queries have their own panels for reviewing what URLs they have worked on and further customising their behaviour, but all they _really_ are is little bits of search text. When the subscription runs, it will put the given search text into the given download source just as if you were running the regular downloader. - **For the most part, all you need to do to set up a good subscription is give it a name, select the download source, and use the 'paste queries' button to paste what you want to search. Subscriptions have great default options for almost all query types, so you don't have to go any deeper than that to get started.** -!!! danger - **Do not change the max number of new files options until you know _exactly_ what they do and have a good reason to alter them!** - ## how do subscriptions work? { id="description" } Once you hit ok on the main subscription dialog, the subscription system should immediately come alive. If any queries are due for a 'check', they will perform their search and look for new files (i.e. URLs it has not seen before). Once that is finished, the file download queue will be worked through as normal. Typically, the sub will make a popup like this while it works: @@ -61,14 +38,8 @@ Attribute subscriptions like 'blue_eyes' or 'smile' make for terrible subs as th If you end up subscribing to eight hundred things and get ten thousand new files a week, you made a mistake. Subscriptions are for _keeping up_ with things you like. If you let them overwhelm you, you'll resent them. -!!! warning - Subscriptions syncs are somewhat fragile. Do not try to play with the limits or checker options to download a whole 5,000 file query in one go--if you want everything for a query, run it in the manual downloader and get everything, then set up a normal sub for new stuff. There is no benefit to having a 'large' subscription, and it will trim itself down in time anyway. - It is a good idea to run a 'full' download for a search before you set up a subscription. As well as making sure you have the exact right query text and that you have everything ever posted (beyond the 100 files deep a sub will typically look), it saves the bulk of the work (and waiting on bandwidth) for the manual downloader, where it belongs. When a new subscription picks up off a freshly completed download queue, its initial subscription sync only takes thirty seconds since its initial URLs are those that were already processed by the manual downloader. I recommend you stack artist searches up in the manual downloader using 'no limit' file limit, and when they are all finished, select them in the list and _right-click->copy queries_, which will put the search texts in your clipboard, newline-separated. This list can be pasted into the subscription dialog in one go with the 'paste queries' button again! -!!! note - The entire subscription system assumes the source is a typical 'newest first' booru-style search. If you dick around with some order_by:rating/random metatag, it will not work reliably. - ## images/how often do subscriptions check? { id="checking" } Hydrus subscriptions use the same variable-rate checking system as its thread watchers, just on a larger timescale. If you subscribe to a busy feed, it might check for new files once a day, but if you enter an artist who rarely posts, it might only check once every month. You don't have to do anything. The fine details of this are governed by the 'checker options' button. **This is one of the things you should not mess with as you start out.** From 66abbf42a6336264471aea755bf797d0ff274583 Mon Sep 17 00:00:00 2001 From: Zweibach Date: Sat, 21 May 2022 19:13:08 +0200 Subject: [PATCH 3/4] Formatted downloader types section to look a bit nicer --- docs/getting_started_downloading.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/getting_started_downloading.md b/docs/getting_started_downloading.md index 1a2504d7..1a8051a9 100644 --- a/docs/getting_started_downloading.md +++ b/docs/getting_started_downloading.md @@ -15,11 +15,20 @@ It also takes a decent whack of CPU to import a file. You'll usually never notic ## Downloader types There are a number of different downloader types, each with its own purpose. This is a short summary of them: -URL download: Intended for single posts or images. (Works with the [API](client_api.md)) -Gallery: For big download jobs such as an artist's catalogue, everything with a given tag on a booru. -Subscriptions: Repeated gallery jobs, for keeping up to date with an artist or tag. Use gallery downloader to get everything and a subscription to keep updated. -Watcher: Imageboard thread downloader, such as 4chan, 8chan, and what else exists. (Works with the [API](client_api.md)) -Simple downloader: Intended for simple one-off jobs like grabbing all linked images in a page. +**URL download** +: Intended for single posts or images. (Works with the [API](client_api.md)) + +**Gallery** +: For big download jobs such as an artist's catalogue, everything with a given tag on a booru. + +**Subscriptions** +: Repeated gallery jobs, for keeping up to date with an artist or tag. Use gallery downloader to get everything and a subscription to keep updated. + +**Watcher** +: Imageboard thread downloader, such as 4chan, 8chan, and what else exists. (Works with the [API](client_api.md)) + +**Simple downloader** +: Intended for simple one-off jobs like grabbing all linked images in a page. ## File import settings File import settings has a number of options that deal with the files being downloaded and what should happen to them. There's a few more tickboxes if you turn on advanced mode From f40ac69b4b686bc6954d18337e0056a0f14b0ede Mon Sep 17 00:00:00 2001 From: Zweibach Date: Sat, 21 May 2022 19:17:11 +0200 Subject: [PATCH 4/4] Where to find bandwidth rules --- docs/getting_started_downloading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started_downloading.md b/docs/getting_started_downloading.md index 1a8051a9..8650db7c 100644 --- a/docs/getting_started_downloading.md +++ b/docs/getting_started_downloading.md @@ -146,7 +146,7 @@ The **simple downloader** will do very simple parsing for unusual jobs. If you w It will not be too long until you see a "bandwidth free in xxxxx..." message. As a long-term storage solution, hydrus is designed to be polite in its downloading--both to the source server and your computer. The client's default bandwidth rules have some caps to stop big mistakes, spread out larger jobs, and at a bare minimum, no domain will be hit more than once a second. -All the bandwidth rules are completely customisable. They can get quite complicated. I **strongly** recommend you not look for them until you have more experience. I **especially strongly** recommend you not ever turn them all off, thinking that will improve something, as you'll probably render the client too laggy to function and get yourself an IP ban from the next server you pull from. +All the bandwidth rules are completely customisable and are found in `network > data > review bandwidth usage and edit rules`. They can get quite complicated. I **strongly** recommend you not look for them until you have more experience. I **especially strongly** recommend you not ever turn them all off, thinking that will improve something, as you'll probably render the client too laggy to function and get yourself an IP ban from the next server you pull from. If you want to download 10,000 files, set up the queue and let it work. The client will take breaks, likely even to the next day, but it will get there in time. Many users like to leave their clients on all the time, just running in the background, which makes these sorts of downloads a breeze--you check back in the evening and discover your download queues, watchers, and subscriptions have given you another thousand things to deal with.