Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
7590 commits
Select commit Hold shift + click to select a range
65feed5
[wikimedia] ignore missing files (#8388)
mikf Oct 11, 2025
f89f55b
[bellazon] improve video URL regex (#8392)
mikf Oct 12, 2025
41a0d78
[bellazon] ignore links to other threads or posts (#8392)
mikf Oct 12, 2025
00a9e5d
release version 1.30.10
mikf Oct 12, 2025
4845d39
[dt] create separate module for datetime utilities
mikf Oct 12, 2025
be46fac
[bellazon] fix errors when handling guest users (#8397)
mikf Oct 13, 2025
6e4f9e2
[pixiv] fix "KeyError: 'is_bookmarked'" (#8398)
mikf Oct 13, 2025
5582134
[bunkr] extract 'album_...' metadata for '/f/' URLs (#8405)
mikf Oct 13, 2025
ab3e34e
[instagram] extract correct 'width' & 'height' for videos (#8399)
mikf Oct 13, 2025
899dcc6
[job] implement '"archive-event": "after"' (#8373)
mikf Oct 14, 2025
cda63b9
[job] use identity checks
mikf Oct 14, 2025
9d054ad
[workflows:tests] include Python 3.14 & pypy3.11
mikf Oct 14, 2025
8c62be3
[output] add 'Logger.traceback()' helper
mikf Oct 14, 2025
dc00af8
[dt] rename & reorganize functions
mikf Oct 14, 2025
d0f5d4e
[tests/dt] add tests
mikf Oct 14, 2025
43448f7
[webtoons] fix 'thumbnail' extraction (#8413)
mikf Oct 15, 2025
d44a0f8
[imagetwist] detect removed images (#8415)
mikf Oct 15, 2025
17156ab
[text] implement 'nameext_from_name()'
mikf Oct 15, 2025
36a3fe4
[subscribestar] improve 'filename' (#8416)
mikf Oct 15, 2025
3252ead
[kemono] improve 'filename'
mikf Oct 15, 2025
975b0bb
[cookies] fix cookie count logging message order (#8414)
mikf Oct 15, 2025
c794600
[workflows:tests] install yt-dlp from PyPI for Python 3.9
mikf Oct 15, 2025
b336049
[bellazon] add 'num_internal' & 'num_external' metadata fields (#8415)
mikf Oct 15, 2025
d708181
[simpcity] implement login with username & password (#8418)
mikf Oct 15, 2025
d0c1fd0
[workflows:tests] install yt-dlp from PyPI for PyPy 3.9
mikf Oct 15, 2025
0eb3c8a
[dt] replace 'util' datetime functions
mikf Oct 15, 2025
21350c5
[dt] introduce 'NullDatetime' to represent invalid datetimes
mikf Oct 15, 2025
69f7cfd
[dt] replace 'datetime' imports
mikf Oct 16, 2025
e42030a
[twitter] fix 'KeyError' for "temporarily unavailable" users (#8423)
mikf Oct 16, 2025
d57dc48
[tests/results] replace 'datetime' usage
mikf Oct 16, 2025
085616e
[dt] replace 'text.parse_datetime()' & 'text.parse_timestamp()'
mikf Oct 17, 2025
4072687
[pixhost] force '.to' TLD (#8428)
mikf Oct 17, 2025
555ac2d
[civitai] add 'sort' & 'period' options (#8426)
mikf Oct 17, 2025
6c71b27
[dt] update 'parse_datetime' calls with one argument
mikf Oct 17, 2025
e2fb2c0
[reddit] support comment share link (#8434)
enduser420 Oct 18, 2025
238d097
[twitter] fix "KeyError - 'source_id'" with disabled 'transform' (#8429)
mikf Oct 18, 2025
9ad937a
[kemono] use f-strings
mikf Oct 18, 2025
11ccadf
[schalenetwork][hdoujin] re-implement 'cbz' option (#8431)
mikf Oct 18, 2025
f9a8598
[weibo] add 'text' option (#8422)
mikf Oct 19, 2025
989136b
[dt] replace 'parse_compat' with compat workaround
mikf Oct 19, 2025
5802107
[dt] update representation of invalid datetime objects
mikf Oct 19, 2025
c38856b
[dt] use 'parse_datetime_iso()' for ISO formats
mikf Oct 19, 2025
ed8fe07
[tests/formatter] update results
mikf Oct 20, 2025
c8fc790
merge branch 'dt': move datetime utils into separate module
mikf Oct 20, 2025
9bf76c1
replace 'util.re()' with 'text.re()'
mikf Oct 20, 2025
d7c97d5
use f-strings when building 'pattern'
mikf Oct 20, 2025
3deb5a4
improve arguments for relative '__import__()'
mikf Oct 21, 2025
06e3126
[pp:metadata] add 'newline' option (#8439)
featherbutt Oct 21, 2025
df1b620
[e621] add 'artist' & 'artist-search' extractors (#8448)
mikf Oct 22, 2025
eefd8f9
[wikimedia] add 'format=original' to file URLs (#5512)
mikf Oct 22, 2025
98d3354
[wikimedia] implement config lookup for fandom/wikigg sites (#7283)
mikf Oct 23, 2025
da4b8c1
[wikimedia] fix 'limit' config lookup
mikf Oct 23, 2025
5e18628
[wikimedia] provide 'lang' metadata (#7283)
mikf Oct 23, 2025
6890972
[wikimedia] restrict default 'format' to fandom/wikigg (#5512)
mikf Oct 23, 2025
481bf1e
[realbooru] fix 'tags' for video posts (#8455)
PrivateAccount85642650 Oct 24, 2025
caa76e0
[instagram] extract 'subscription' metadata for story/highlight items…
Nedrozak Oct 24, 2025
c0e665e
[cyberfile] add 'shared' extractor (#8323)
mikf Oct 25, 2025
92be3fb
[cyberfile:folder] support subfolders (#8323)
mikf Oct 25, 2025
3573dcb
[fanbox:creator] add 'offset' option (#6582)
mikf Oct 28, 2025
8fabf7c
[shimmie2] support 'soybooru.com' (#8467)
mikf Oct 28, 2025
fb9be55
[paheal] fix 'AttributeError'
mikf Oct 28, 2025
5ab0c60
[imgbox] match direct links (#8474)
mikf Oct 28, 2025
f692380
[imagebam] fix 'filename' & 'extension' for names without ext (#8476)
mikf Oct 29, 2025
d7a7557
[imagevenue] improve error for dead images (#8477)
mikf Oct 29, 2025
62e9d75
[common] fix 'AttributeError'
mikf Oct 28, 2025
20bca3f
[imagehosts] add and use 'not_found()' method
mikf Oct 29, 2025
2194dde
[itaku] add 'order' option
mikf Oct 30, 2025
7571ca9
[patreon] add 'order-posts' option (#7856 #8482)
mikf Oct 30, 2025
a3734e2
[path] improve 'exists()' performance
mikf Oct 31, 2025
3848a91
[path] treat broken symlinks as existing files (#8490)
mikf Oct 31, 2025
37aa733
[text] reject long filename extensions (#8491)
mikf Nov 1, 2025
e174d4f
[cyberdrop] update domain to 'cyberdrop.cr' (#8496)
moonshiner Nov 1, 2025
0ecc1b6
[pp:metadata] document '"mode": "print"'
mikf Nov 1, 2025
91a5fd8
[formatter] add 'Xb' format specifier - 'X' for bytes (#6582)
mikf Nov 3, 2025
5591a16
[formatter] add 'Lb' format specifier - 'L' for bytes
mikf Nov 3, 2025
7ed04d8
[postimg] force 'postimg.cc' domain (#8505)
mikf Nov 4, 2025
e604c22
[imagehost] improve 'filename' & 'extension' handling
mikf Nov 4, 2025
cc0a313
[silverpic] force '.net' TLD & fix extraction
mikf Nov 4, 2025
617bd7a
[imhentai:search] support '/advanced-search/' URLs (#8507)
mikf Nov 4, 2025
9b03990
[postimg] fix extraction (#8505)
mikf Nov 5, 2025
dfe66e8
[cien] fix 'creator' & 'recent' extractors (#8524)
mikf Nov 8, 2025
aba68f8
[deviantart:gallery] match URLs with query parameters (#8514)
mikf Nov 9, 2025
a9018d1
Added support for sex.com's feed (cookie required) (#8519)
gengenson-code Nov 9, 2025
9417d2c
[misskey] remove base-class constructor
mikf Nov 9, 2025
3942e6d
[jpgfish] update domain to 'jpg7.cr' (#8530)
mikf Nov 9, 2025
89ece8f
[common] allow general ISO 8601 values for 'date-min' & '-max'
mikf Nov 9, 2025
9e3e12e
[misskey] add 'text-posts' option (#8516)
mikf Nov 10, 2025
8876272
[misskey] add 'date-min' & 'date-max' options (#8516)
mikf Nov 10, 2025
d75a135
[myhentaigallery] add 'tag' extractor (#8537)
mikf Nov 10, 2025
793956d
[arena] add 'channel' extractor (#5847 #8509)
dev-KingMaster Nov 11, 2025
c07421c
[arena] update metadata structure
mikf Nov 11, 2025
76081b3
[tests/results] improve '{…, …, ...}' tests
mikf Nov 11, 2025
b6f855d
[scripts/generate_result] don't reorder "small" dicts/lists
mikf Nov 11, 2025
da47214
[bellazon] remove query parameters from attachment IDs (#8544)
mikf Nov 12, 2025
d7e1351
[bellazon] improve 'filename' & 'extension' (#8544)
mikf Nov 12, 2025
691775d
[job] add 'keywords-global' option (#6582)
mikf Nov 12, 2025
359681a
[pixhost] extract 'directory' metadata (#6582)
mikf Nov 12, 2025
65c4f00
[imagehosts] provide 'post_url' metadata (#6582)
mikf Nov 12, 2025
1b63530
[rule34us:tag] support URLs with empty 'q' query parameter (#8546)
mikf Nov 12, 2025
e840e3c
[docs/configuration] update 'twitter.users' example (#8548)
mikf Nov 12, 2025
5cda64c
[job] apply 'keywords-eval' to 'keywords-global' values (#6582)
mikf Nov 13, 2025
e6930eb
[instagram] improve error for non-existent profiles (#8550)
mikf Nov 13, 2025
5da4fb3
[reddit] fix "KeyError: 'media_metadata'" for embeds (#8551)
mikf Nov 14, 2025
2578f7b
[flickr] extract public API key from website (#7564 #7649 #7700 #8553)
mikf Nov 14, 2025
f6e6711
[cfake] add support (#707 #6021 #8549 #8430)
SpiffyChatterbox Nov 15, 2025
6ee7096
[instagram] fix "AttributeError: 'videos_dash'" (#8561)
mikf Nov 15, 2025
3b33c25
[reddit] use REST API by default (#8559)
mikf Nov 16, 2025
9e6b87f
[fanbox:redirect] disable cookie usage (#8565)
mikf Nov 17, 2025
0e0f446
[rawkuma] update extractors to new site layout (#8568)
mikf Nov 18, 2025
e60007a
[xasiat] fix 'IndexError' for albums without category (#8569)
mikf Nov 18, 2025
991fe0f
[aryion] add 'search' extractor (#8567)
vorsatile Nov 18, 2025
157a37b
[sxypix] add support (#4507 #8391 #8574)
MyFinalBellyache Nov 19, 2025
cc7003a
[okporn] add support (#8575)
MyFinalBellyache Nov 19, 2025
a9687d2
[pornstarstube] add support (#8576)
MyFinalBellyache Nov 19, 2025
aa39770
[aryion:search] simplify further
mikf Nov 18, 2025
89be2f4
[mangadex] add 'data-saver' option (#8573)
mikf Nov 19, 2025
e91337d
[Danbooru] add 'media-asset' extractor (#8580)
mikf Nov 19, 2025
7b05995
[fansly] handle posts without accountId/contentId/attachments (#8572)
mikf Nov 19, 2025
2bff682
[scripts/init] Fix error running with default values (#8583)
MyFinalBellyache Nov 20, 2025
d74809c
[eporner] add support (#8581)
MyFinalBellyache Nov 20, 2025
685777e
[patreon] include full metadata with each URL (#4286 #8498)
octylFractal Nov 20, 2025
f06772e
[tiktok] ignore empty 'music' entries (#8571)
mikf Nov 21, 2025
8ae4c55
[simpcity] fix starting from a specific page (#8599)
mikf Nov 23, 2025
60b3f66
[belazon] fix starting from a specific page
mikf Nov 23, 2025
aac1d8f
[simpcity] fix 'content' for first post of a thread
mikf Nov 24, 2025
25ac509
[simpcity] extract attachment/inline files (#8560)
mikf Nov 26, 2025
1dc7955
[simpcity] extract "click to load media" URLs (#8609)
mikf Nov 26, 2025
36fa543
[twitter] add 'search-results' option (#8613)
mikf Nov 26, 2025
b3aefd4
[twitter] restore better user NotFoundError messages (#8621)
mikf Nov 27, 2025
0b05254
[bunkr] detect when album is deleted mid-download (#8619)
mikf Nov 26, 2025
1e7f4ee
[output] add 'defer' option for logging files (#8523)
mikf Nov 27, 2025
acf281a
[twitter] implement 'retries-api' option (#8317)
mikf Nov 27, 2025
1115103
[motherless] fix 'gallery_title' extraction (#8605)
spicybiguy Nov 28, 2025
5e3284f
[actions] add 'LoggerAdapter.traceback()' method (#8317)
mikf Nov 28, 2025
bb16e03
[twitter] reset 'api_tries' after successful API call (#8317)
mikf Nov 28, 2025
e589d6f
[pp:exec] add 'verbose' option (#7743)
mikf Nov 28, 2025
994cc34
[audiochan] add initial support (#8602)
mikf Nov 28, 2025
5c7a27e
[schalenetwork] fix 'tags' categories (#8625)
mikf Nov 29, 2025
9bf52ab
[civitai] implement extracting 'tags' metadata (#8626)
mikf Nov 29, 2025
f515446
[audiochan] add 'search' extractor (#8602)
mikf Nov 29, 2025
7676534
[2ch] support 'org' TLD (#8629)
mikf Nov 30, 2025
5f38d8a
[twitter] increase 'retries-api' default to '9' (#8317)
mikf Nov 30, 2025
cff04f1
[dl:http] implement '_http_segmented' (#8602)
mikf Nov 30, 2025
f1aa3af
[vsco] use '"browser": "firefox"' by default (#8127)
mikf Dec 1, 2025
ab55399
[discord] limit length of default filenames (#6582)
mikf Dec 1, 2025
406a74c
[twitter] update/fix 'pinned' Tweet extraction (#8500)
mikf Dec 2, 2025
0ebb74d
[twitter] implement using multiple values for 'search-limit' (#8173)
mikf Dec 2, 2025
d15b3d4
[twitter] add 'limit' option (#8173)
mikf Dec 2, 2025
c6b2041
[twitter] fix 'AttributeError' for "search-pagination": "max_id" (#8613)
mikf Dec 2, 2025
4e2987e
[path] implement conditional 'part-directory' (#8329)
mikf Dec 3, 2025
4a4c1a1
[fanbox] yield data for inaccessible posts (#8643)
mikf Dec 3, 2025
918b06c
[dl:ytdl] restructure code
mikf Dec 4, 2025
8f91daa
[dl:ytdl] improve error message when importing default ytdl modules
mikf Dec 4, 2025
b2e377b
[twitter] fix TypeError when '_user_obj' is None (#8648)
mikf Dec 4, 2025
1f65772
[dl:ytdl] update '_extract_manifest()'
mikf Dec 4, 2025
402f536
[dl:ytdl] implement 'retry' functionality (#1131 #8269)
mikf Dec 4, 2025
d9c1d15
[job] inline 'dispatch' loop
mikf Dec 5, 2025
5da2009
implement 'post-filter' & 'post-range' options
mikf Dec 5, 2025
80878c1
[twitter] support '"search-results": "media"' results (#8613 #8635)
mikf Dec 5, 2025
968597a
yield 3-tuples for Message.Directory
mikf Dec 5, 2025
d1de48e
remove Message.Version
mikf Dec 5, 2025
2944cd4
[oauth] inline/remove top-level imports
mikf Dec 6, 2025
da46d4f
[output] defer creation of 'unsupported' files by default (#8622)
mikf Dec 7, 2025
b5712e7
[docs/configuration] update 'Logging Configuration' defaults
mikf Dec 7, 2025
526a42a
[newgrounds] set error status when failed to extract post (#8654)
mikf Dec 7, 2025
d2b3eb6
[chevereto] extract 'album_id' & 'album_slug' metadata (#8604)
mikf Dec 7, 2025
9a8746f
[tiktok] add 'covers' option (#8515)
mikf Dec 7, 2025
2ab74df
[hentaifoundry] extract 'categories' metadata (#8656)
icelit4 Dec 8, 2025
826b557
[util] support integer values for '…-range' options (#8604)
mikf Dec 8, 2025
e387512
[dl:ytdl] fix 'AttributeError' when ytdl returns None (#8660)
mikf Dec 8, 2025
f5f4122
[chevereto:album] extract 'album_…' metadata (#8604)
mikf Dec 8, 2025
b1b7052
[common] use 'parent' value as 'parent-metadata' default (#8525 #8604)
mikf Dec 8, 2025
ef9c472
[twitter] always use '3' as 'search-stop' default (#8613)
mikf Dec 8, 2025
a35e200
[twitter] fix "UnboundLocalError: 'last_tweet'" (#8613)
mikf Dec 8, 2025
7516537
[twitter] implement workarounds for empty 'core' data (#8613)
mikf Dec 8, 2025
1b4249e
[sankaku][idolcomplex] support URLs with locale code (#8667)
mikf Dec 9, 2025
ae41de3
[sankaku][idolcomplex] fix download URLs (#8666)
mikf Dec 9, 2025
efad906
[dl:http] fail downloads of empty files (#8661)
mikf Dec 9, 2025
4ee998d
[realbooru] extract video fallbacks (#8661)
mikf Dec 9, 2025
b141bbd
[erome] improve error message for deleted & copyrighted albums (#8665)
mikf Dec 9, 2025
5831679
[blueskx] add 'api-server' option (#8668)
mikf Dec 9, 2025
dc16ee4
[docs/README] add Docker instructions to pull 'dev' images (#6582)
mikf Dec 9, 2025
8e5d8d8
[chevereto:album] extract 'count' & 'num' metadata (#8604)
mikf Dec 9, 2025
d5f4a3f
[redbust] remove module (#6582)
mikf Dec 10, 2025
c2c00d1
[dl:ytdl] forward '_ytdl_manifest_headers' to formats
mikf Dec 10, 2025
f5fafd7
[fikfap] add support (#8673)
mikf Dec 10, 2025
2c82509
[pornpics] add 'category' and 'listing' extractors (#8662)
SpiffyChatterbox Dec 10, 2025
484a15f
[fitnakedgirls] add support (#8671)
SpiffyChatterbox Dec 10, 2025
1eaafff
[nudostarforum] add support (#8664)
SpiffyChatterbox Dec 11, 2025
d85fa5f
[facebook] do not match '/permalink' URLs (#8679)
mikf Dec 10, 2025
03b45df
[gofile] fix extraction (#8681 #8683)
mikf Dec 11, 2025
8140850
[reddit] guess 'mp4' extension for ytdl downloads (#8684)
mikf Dec 11, 2025
ab2c03b
[xenforo] implement generic XenForo forum extractors
mikf Dec 11, 2025
739e940
[audiochan] extract 'description' texts (#6582)
mikf Dec 12, 2025
05817c5
[audiochan] relax 'pattern'
mikf Dec 12, 2025
b891c03
[dl:ytdl] improve error detection
mikf Dec 12, 2025
4557ab5
[xenforo] emit AuthRequired errors for 403 downloads
mikf Dec 12, 2025
db90fe9
[docs] update 'xenforo' options
mikf Dec 12, 2025
d36a441
release version 1.31.0
mikf Dec 12, 2025
0907ba1
[audiochan] use proper variable name
mikf Dec 13, 2025
db8dd52
[ytdl] respect '--no-skip'
mikf Dec 13, 2025
a8ca947
[pixiv] warn about invalid 'PHPSESSID' cookie (#8689)
mikf Dec 13, 2025
8f621b3
[2chen] implement generic 2chen board extractors
mikf Dec 13, 2025
a53cc87
[misskey] implement 'order-posts' option (#8516)
mikf Dec 13, 2025
85b7f63
[twitter] fix avatar & background downloads with "expand": true (#8698)
mikf Dec 14, 2025
774cb1e
[comedywildlifephoto] add 'gallery' extractor (#8690)
mikf Dec 14, 2025
2980e8f
[docs] remove 'twitter.username-alt' entries
mikf Dec 14, 2025
468570a
[boosty] warn about expired 'auth' cookie tokens (#8704)
mikf Dec 14, 2025
4f33751
[koofer] add 'shared' extractor (#8700)
mikf Dec 14, 2025
d497523
[mastodon] fix "AttributeError: 'parse_datetime_iso'" (#8709)
mikf Dec 15, 2025
207f613
[dl:ytdl] fix "UnboundLocalError: 'tries'" (#8707)
mikf Dec 15, 2025
c268f79
[xenforo] support 'allthefallen.moe/forum' (#3249 #8268)
mikf Dec 15, 2025
d43ce45
[boosty] send 'Authorization' header for file downloads (#8704)
mikf Dec 15, 2025
9133ee3
[fanbox] make '_extract_post()' non-fatal (#8711)
mikf Dec 15, 2025
83ca65d
[aryion:favorite] support folder items (#8705)
mikf Dec 15, 2025
58ccde3
[aryion:favorite] support 'category' URLs (#8705)
mikf Dec 15, 2025
3536816
[aryion] fix 'description' metadata
mikf Dec 15, 2025
7804f70
[tenor] fix 'title' metadata
mikf Dec 16, 2025
62d6a22
[aryion] add 'watch' extractor (#8705)
mikf Dec 16, 2025
f909637
[picazor] add 'user' extractor (#7083 #7504 #7795 #8717)
petercunha Dec 16, 2025
717d38f
[reddit] use '"videos": "dash"' by default (#8657)
mikf Dec 17, 2025
ff94002
[formatter] add 'I' format specifier - identity
mikf Dec 17, 2025
218dbdb
[path] combine 'build_*' & 'build_*_conditional'
mikf Dec 17, 2025
982d990
[aryion] fix "AttributeError: '_pagination'" (#8723)
mikf Dec 18, 2025
73db184
[furaffinity] fix 'tags' metadata (#8724)
mikf Dec 18, 2025
c3d8602
[path] implement dynamic length directories (#1350)
mikf Dec 18, 2025
8ec48a0
[aryion:favorite] ignore already seen folders (#8728)
mikf Dec 19, 2025
e971b4c
[tests] add 'path' tests
mikf Dec 19, 2025
afe8673
[weebdex] add support (#8722)
mikf Dec 19, 2025
4dba407
[tests:pp] prevent failures due to config dependencies
mikf Dec 20, 2025
af475a3
[scripts/release] reduce expected executable sizes
mikf Dec 20, 2025
575bf7a
release version 1.31.1
mikf Dec 20, 2025
19a27a4
[options] add '--sleep-skip' option (#6582)
mikf Dec 20, 2025
e006d26
Revert "use f-strings when building 'pattern'"
mikf Dec 20, 2025
d0f06be
use 'operator +' when building 'pattern'
mikf Dec 20, 2025
375ab40
[facebook] add 'loop' option (#8696)
mikf Dec 21, 2025
609e192
[subscribestar] add 'user-tag' extractor (#8737)
mikf Dec 21, 2025
457c8b2
[exhentai] fix possible exception in 'finalize()' (#8741)
mikf Dec 22, 2025
00c6821
replace 2-element f-strings with simple '+' concatenations
mikf Dec 21, 2025
b69e5a7
[scripts/init] use 'operator +' when building 'pattern'
mikf Dec 22, 2025
b5a7540
Merge branch 'op+': use '+' for 2-element string concatenations
mikf Dec 22, 2025
7669a1f
[subscribestar:user-tag] update 'pattern'
mikf Dec 22, 2025
568faee
[imagehosts] remove '_https'
mikf Dec 22, 2025
eda6957
[imagehosts] remove 'splitext' import
mikf Dec 22, 2025
c3ef760
[discord] add 'server-assets' extractor (#8589)
mikf Dec 22, 2025
aeefec6
Add LinkedIn support
shakeelmohamed Dec 16, 2025
1d30d1c
formatting
shakeelmohamed Dec 22, 2025
4d95b75
reformat test results
mikf Dec 27, 2025
7676329
reorder 'modules' list entry
mikf Dec 27, 2025
589f494
update docs/supportedsites
mikf Dec 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[**.py]
indent_size = 4
indent_style = space
max_line_length = 79

[Makefile]
indent_style = tab
2 changes: 2 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ko_fi: mikefaehrmann
custom: https://www.paypal.me/mikefaehrmann
69 changes: 69 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Docker Images

on:
workflow_dispatch:
push:
branches:
- master
tags:
- v[0-9]+.[0-9]+.[0-9]+


permissions:
packages: write

concurrency:
group: docker
cancel-in-progress: false

jobs:
build:

runs-on: ubuntu-latest

# on release commits, run only for tag event
if: ${{
github.repository == 'mikf/gallery-dl' &&
( ! startsWith( github.event.head_commit.message , 'release version ' ) ||
startsWith( github.ref , 'refs/tags/v' ) )
}}

steps:
- uses: actions/checkout@v5

- uses: docker/metadata-action@v5
id: metadata
with:
images: |
mikf123/gallery-dl
ghcr.io/mikf/gallery-dl
tags: |
type=ref,event=tag
type=raw,value=dev
type=sha,format=long,prefix=
type=raw,priority=500,value={{date 'YYYY.MM.DD'}}

- uses: docker/setup-qemu-action@v3

- uses: docker/setup-buildx-action@v3

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GHCR_TOKEN }}

- uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
platforms: linux/amd64,linux/arm64
108 changes: 108 additions & 0 deletions .github/workflows/executables.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: Executables

on:
workflow_dispatch:
push:
branches:
- master
tags-ignore:
- "*"

env:
DATE_FORMAT: "%Y.%m.%d"

jobs:
build:

if: github.repository == 'mikf/gallery-dl'
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
os: ["windows-latest", "macOS-latest"]
architecture: ["x64"]
python-version: ["3.13"]
python-packages: [""]
include:
- os: "ubuntu-latest"
architecture: "x64"
python-version: "3.13"
python-packages: "secretstorage"
- os: "windows-2022"
architecture: "x86"
python-version: "3.8"
python-packages: "toml"

steps:
- uses: actions/checkout@v5

- name: Set up Python ${{ matrix.python-version }} ${{ matrix.architecture }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.architecture }}

- name: Environment Variables
run: |
echo "DATE=$(date '+${{ env.DATE_FORMAT }}')" >> "$GITHUB_ENV"
echo "LABEL=$(python ./scripts/pyinstaller.py --print --os '${{ matrix.os }}' --arch '${{ matrix.architecture }}')" >> "$GITHUB_ENV"

- name: Update Version
# use Python since its behavior is consistent across operating systems
shell: python
run: |
import re
path = "./gallery_dl/version.py"
with open(path) as fp:
content = fp.read()
content = re.sub(
r'\b(__version__ = "[^"]+)',
r"\1:${{ env.DATE }}",
content)
content = re.sub(
r'\b(__variant__ =).+',
r'\1 "dev/${{ env.LABEL }}"',
content)
with open(path, "w") as fp:
fp.write(content)

- name: Build executable
run: |
pip install requests requests[socks] yt-dlp[default] pyyaml ${{ matrix.python-packages }} pyinstaller
pip install truststore || true
python ./scripts/pyinstaller.py --label '${{ env.LABEL }}'

- uses: actions/upload-artifact@v4
with:
name: executable-${{ matrix.os }}-${{ matrix.architecture }}-${{ matrix.python-version }}
path: dist/*
retention-days: 1
compression-level: 0

release:

needs: build
runs-on: ubuntu-latest

steps:
- uses: actions/download-artifact@v4

- name: Environment Variables
run: echo "DATE=$(date '+${{ env.DATE_FORMAT }}')" >> "$GITHUB_ENV"

- name: Body
run: printf 'https://github.com/%s/commit/%s' '${{ github.repository }}' '${{ github.sha }}' > body.md

- uses: ncipollo/release-action@v1
with:
owner: gdl-org
repo: builds
tag: ${{ env.DATE }}
bodyFile: body.md
artifacts: "executable-*/*"
allowUpdates: true
makeLatest: true
token: ${{ secrets.REPO_TOKEN }}
58 changes: 58 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: GitHub Pages

on:
workflow_dispatch:
push:
branches:
- master
paths:
- docs/**

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
dispatch:

if: github.repository == 'mikf/gallery-dl'
runs-on: ubuntu-latest

steps:
- name: Dispatch to gdl-org/docs
run: >
curl -L
-X POST
-H "Accept: application/vnd.github+json"
-H "Authorization: Bearer ${{ secrets.REPO_TOKEN }}"
-H "X-GitHub-Api-Version: 2022-11-28"
https://api.github.com/repos/gdl-org/docs/actions/workflows/pages.yml/dispatches
-d '{"ref":"master"}'

deploy:

if: github.repository == 'mikf/gallery-dl'
runs-on: ubuntu-latest

environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

steps:
- uses: actions/checkout@v5
- uses: actions/configure-pages@v4

- name: Copy static files
run: |
mkdir --parents -- ./_site
cp --archive --target-directory=./_site -- \
./docs/oauth-redirect.html

- uses: actions/upload-pages-artifact@v3
- uses: actions/deploy-pages@v4
id: deployment
70 changes: 70 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Tests

on:
workflow_dispatch:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
test:

runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- "pypy3.9"
- "pypy3.11"

steps:
- uses: actions/checkout@v5

- name: Check file permissions
run: |
if [[ "$(find ./gallery_dl -type f -not -perm 644)" ]]; then exit 1; fi

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: |
pip install -r requirements.txt
pip install flake8 youtube-dl

- name: Install yt-dlp
run: |
case "${{ matrix.python-version }}" in
3.8|3.9|pypy3.9)
# install from PyPI
pip install yt-dlp
;;
*)
# install from master
pip install https://github.com/yt-dlp/yt-dlp/archive/refs/heads/master.tar.gz
;;
esac

- name: Lint with flake8
run: |
flake8 .

- name: Run tests
run: |
make test

- name: Test autogeneration of man pages, bash/zsh/fish completion, etc
run: |
make
70 changes: 70 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
archive/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

# C extensions
*.so

# Distribution / packaging
.Python
env/
data/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover

# Translations
*.mo
*.pot

# Django stuff:
*.log

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Snap packaging specific
/snap/.snapcraft/
/parts/
/stage/
/prime/

/*.snap
/*_source.tar.bz2
/gallery-dl
Loading