Download latest release (Windows, Linux)
Ruxx is a content downloader with a lot of filters for maximum search precision (and ugly GUI). Supported websites are in description, everywhere else ‒ abbreviations only
Note that Ruxx does not restrict your searches to a couple pages or something. You may even search for something like id:>=0 (everything), this won't work though as websites actually put a limit on maximum search results returned. For something stupid like this you'll have to split your searches using id filter. Plus you may still get banned for abusing the resource. Ruxx is not a scraping tool
dd-mm-yyyy
, ignored if set to default (min: 01-01-1970
, max:
). Enter some gibberish to reset to default. RX, RN, RZ, RP and EN onlyNote that only recognized parameters will be loaded - missing parameters will just stay unchanged without any errors given, so if you want to not save some parameters (ex. window position) just remove associated rows from the file
.cfg
file folder with executable and Ruxx will automatically pick it and configure itself. You have to use one of the following names: ['ruxx.cfg', 'auto.cfg', 'settings.cfg', 'config.cfg']cf_clearance
cookie, and the User-Agent
header has to match the one used in your web browser for target website ‒ to find it while browsing said website open Web Developer tools -> Network
(or similar), reload the page and check request headers
(id:x~id:y~id:z)
which is an OR group expression, effectively allowing you to search for those ids. 1.1.284
for all modules using a workaround, but doesn't run in parallel so be aware of thatvideos
/images
/flash (RN, EN)
or by extension itself. Note that both jpeg
and jpg
files will be placed into jpg folder0.5 10 3.0 5.00
100 250 50 500
AND
group, OR
groups with meta tags, etc.). As a result the Tags field will briefly flash green / red. Additionally, if successful, a window will appear showing the number of results found. Note that this number my be not equal to the files count you'll get downloaded, as date filters, file type filters and related posts filter do not apply during this quick check; when using favorited_by:X
or pool:X
special meta tags negative tags also do not apply (except for RN module's favorited_by
tag where it's supported natively)Ruxx normally allows most symbols for tags search, there are some specifics though:
*
as wildcard in tags (any number of any symbols). You can use any number of wildcards in tags in any place: b*m*e_cit*
instead of baltimore_city
. For some search engines *
is just a symbol normal tag may contain, namely: RZ; but you can still use wildcarded -t*ags
.
*_city
will work for RN, RS, RP and EN, but RX will return default result (all)-tags
can be used for exclusion: -rating:explicit
id:>X id:. See below for more syntax
- Meta
-tags
cannot be used with inequality, like -score:<0
. Flip the comparison instead: score:>=0
- Meta
-tags
cannot be used with sort: -sort:score
, this syntax won't cause an error but its behavior is undefined. Please use common sense
sort
and order
for RX / RS and RN / RP respectively), you can only use them if they don't conflict with other parameters (ex. date filters)id:X
(OR id:=X
), id:>X
, id:, id:>=X
, id:<=Y
. X
,Y
=
score:X
(OR score:=X
), score:>X
, score:, score:>=X
, score:<=Y
. X
,Y
=
parent:X
(OR parent:=X
). X
=
width:X
(OR width:=X
), width:>X
, width:, width:>=X
, width:<=Y
. X
,Y
=
height:X
(OR height:=X
), height:>X
, height:, height:>=X
, height:<=Y
. X
,Y
=
user:X
. X
=
rating:X
. X
=
, ex. safe
, questionable
, explicit
.md5:X
, X
=
sort:X[:Y]
. X
=
, ex. score
, id
(default). Y
=
(optional), asc
or desc
(default)id=X
, id>X
, id, id>=X
, id<=Y
. X
,Y
=
score=X
, score>X
, score, score>=X
, score<=Y
. X
,Y
=
favorited_by=X
. X
=
width=X
, width>X
, width, width>=X
, width<=Y
. X
,Y
=
height=X
, height>X
, height, height>=X
, height<=Y
. X
,Y
=
user=X
. X
=
rating:X
. X
=
, ex. q
, s
, etc.order=X
. X
=
, id_desc
or score_desc
id:X
(OR id:=X
), id:>X
, id:, id:>=X
, id:<=Y
. X
,Y
=
score:X
(OR score:=X
), score:>X
, score:, score:>=X
, score:<=Y
. X
,Y
=
width:X
(OR width:=X
), width:>X
, width:, width:>=X
, width:<=Y
. X
,Y
=
height:X
(OR height:=X
), height:>X
, height:, height:>=X
, height:<=Y
. X
,Y
=
user:X
. X
=
rating:X
. X
=
, ex. safe
, questionable
, explicit
.sort:X[:Y]
. X
=
, ex. score
, id
(default). Y
=
(optional), asc
or desc
(default)id:X
(OR id:=X
), id:>X
, id:, id:>=X
, id:<=Y
. X
,Y
=
score:X
(OR score:=X
), score:>X
, score:, score:>=X
, score:<=Y
. X
,Y
=
id=X
, id>X
, id, id>=X
, id<=Y
. X
,Y
=
score=X
, score>X
, score, score>=X
, score<=Y
. X
,Y
=
favorited_by=X
. X
=
width=X
, width>X
, width, width>=X
, width<=Y
. X
,Y
=
height=X
, height>X
, height, height>=X
, height<=Y
. X
,Y
=
poster=X
. X
=
order=X
. X
=
, id_desc
or score_desc
id:X
, id:>X
, id:, id:>=X
, id:<=Y
. X
,Y
=
score:X
, score:>X
, score:, score:>=X
, score:<=X
. X
,Y
=
.
favorited_by:X
, favoritedby:X
or fav:X
. X
=
parent:X
. X
=
width:X
, width:>X
, width:, width:>=X
, width:<=Y
. X
,Y
=
height:X
, height:>X
, height:, height:>=X
, height:<=Y
. X
,Y
=
user:X
. X
=
rating:X
. X
=
, ex. safe
, questionable
, explicit
md5:X
, X
=
sort:X[_asc|_desc]
. X
=
, ex. score
, id
(default id_desc
):X..
(ex. score:5000..
is equal to score:>=5000
):..X
(ex. score:..-500
<=> score:<=-500
):X..
(ex. id:5000000..
<=> id:>=5000000
):X..Y
(ex. score:90..99
<=> score:>=90 score:<=99
)OR
groupsOR
group is simplified compared to what you would normally use for RX: (tag1~tag2~...~tagN)
instead of ( tag1 ~ tag2 ~ ... ~ tagN )
OR
groups with any module, regardless of whether website supports it natively or notOR
group can't be negative and needs to be unwrapped:
-(tag1~tag2~tag3)
=> -tag1 -tag2 -tag3
OR
groups (id:=X~score:=Y)
is broken (RX), not always reliable (EN) or straight impossible (RS, RN, RZ, RP), Ruxx will always unwrap such groups to process them properly-(tag1,tag2,...,tagN)
. Ruxx allows to filter out tag combinations (posts where all tags in group are present), which you can't normally do using website search engine. In addition to normal tag symbols, in negative group tags you can use wildcard symbols ?
and *
for any symbol
and any number of any symbols
repectively. You can also use pipe symbol |
for direct regex OR
group composition. Example: -(tag?1,ta*g2|tag3)
will be effectively converted to regular expressions "^tag.1$"
and "^ta.*g2|tag3$"
to check for, posts with tags matching both will get filtered out
-tags
, negative group will not check tag aliasessort:...
tag or -tags
only-tags
to narrow down the search. If resulting query is too long Ruxx will automatically create a specific negative group from excessive -tags
and use them as additional filter. The message will be given as follows: 'excluded tags combination' custom filter(s) parsed
RZ
: max 3
tags
, max 3
-tags
, 6
total
RP
: max 3
tags & -tags
, 3
total
EN
: max 40
tags & -tags
, 40
total
, max 1
wildcard
-tags
will be converted into a negative group and used locally as an internal filter (and mess up 'check tags' results). Note that this only applies to -tags
, exceeding positive tag limit will result in an error-t*ags
into a single negative group to prevent unwanted tag expansion (see below) resulting in too many -tags
, it's simple really: '-a -b -c -d* -f*g*h*j' -> '-a -b -c -(*,d*|f*g*h*j)'
RZ
tags
, -tags
and tags
in OR
group have to be valid in order to get any search results. Tags are considered valid only if they:
r
,t
, etc., also &
and unicode escaped sequences like u00a0
t*ags
: never (invalid)-t*ags
: always(t1~t*2)
: never (invalid)-(t1,t*2)
: never (converted to regex)Expanding tags from wtag 'pale*s'...
- 'pale_eyes'
- 'pale_soles'
%
, ex: %mumbling%
(1 post, unlisted), or, if negative: -%mumbling%
Ruxx provide lists of known tags for all modules (except RS), which can also be used to attempt to complete whatever word typed in Tags field
Found 5 tag lists:
- /rx_tags.txt
- /rn_tags.txt
- /rz_tags.txt
- /rp_tags.txt
- /en_tags.txt
2tags/
)
, the first time you use it Ruxx will attempt to load current module tags into storage - this will require a little extra memory, that memory is also freed if autocompletion feature get disabled againRuxx doesn't provide a method of authentication natively on either of supported sites. To use your identity during search you need to follow 3 simple steps:
Web Developer tools -> Network
and reload the page, look for request headers
Headers / Cookies
window
and fill Ruxx connection tables accordingly:
User-Agent
(remove existing value first)cf_clearance
, user_id
, pass_hash
cf_clearance
, shm_user
, shm_session
user_id
, pass_hash
_danbooru_session
, remember
cf_clearance
cookie duration is 15 minutesDownloading user's favorites using native tags search functionality is only available with RN, RP and EN (see meta tags above), other websites don't implement that neither through tags nor through API. In order to enable users to download one's favorites Ruxx implements favorited_by
tag for other modules as well. It's an extra layer of functionality but here is what you need to use it:
favorited_by:X
. X
=
. User ID you can get from user's favorites page, it's a part of its web address. Note: this syntax is not invalid as RN / RP / EN tag either but it won't do anything therecf_clearance
cookie (see above) as it isn't a part of dapiid:x
types it can still use favorited_by:name / id
tag, tags
/ -tags
can't be used (negative groups can), at the same time it doesn't suffer any slowdownDownloading post pool using native tags search functionality is not possible and only RX and EN implement pool functionality
To download RX pool use special pool
tag:
pool:X
. X
=
. Pool ID you can get from pool page, it's a part of its web addresspool:Y
. Y
=
. Pool name must be in lower case and with all spaces replaced with underscores, ex. 'Long Night' -> 'pool:long_night'
cf_clearance
cookie (see above) as it isn't a part of dapiEN module also allows creating post sets. Essentially they are no different from pools:
set:X
, X
=
. Set ID can be extracted from set page addressset:Y
. Y
=
. Important: set's short name isn't equal to its name in set list and is only listed on its own page!It is possible to use Ruxx as a cmdline tool. In main window you will find Cmd
section ‒ it generates your cmdline arguments every time you make a change ‒ use those arguments as an example. In console window you may need to escape some of them (path, OR
groups, tags containing dots, etc.). Most arguments are optional though ‒ the only ones required are tags
(default module is RX)
Python 3.9 or greater required. See requirements.txt
for additional dependencies. Install with:
python -m pip install -r requirements.txt
To run Ruxx directly using python target ruxx_cmd.py
or ruxx_gui.py
python ruxx_cmd.py <...args>
- run Ruxx commandpython ruxx_gui.py
- run Ruxx GUI...or just use ruxx.py
universally
python ruxx.py <...args>
- run Ruxx commandpython ruxx.py
- run Ruxx GUIInvoke Ruxx --help
or python ruxx_cmd.py --help
for full help
Ruxx will log most of its actions, which you can see in Log window
If any problem occurs it will yield some info unless it's an unexpected fatal error. Ruxx is able to resolve most non-fatal networking errors and IO mishaps, including dropped searches (search overload), non-matching e-tags, file size mismatch, malformed packets, etc.
Ruxx is written in Python (3.9 for Windows, 3.11 for Linux). Lines of code: 12700+. Executables built using PyInstaller 6.1
For bug reports, questions and feature requests use our issue tracker