{"id":26051835,"url":"https://github.com/ljzd-pro/ktoolbox","last_synced_at":"2025-12-28T17:55:43.634Z","repository":{"id":206458863,"uuid":"715152522","full_name":"Ljzd-PRO/KToolBox","owner":"Ljzd-PRO","description":"Downloader for Kemono.su / .party with High Customizability | 高度可自定义性的 Kemono 下载器","archived":false,"fork":false,"pushed_at":"2025-05-12T21:06:49.000Z","size":4600,"stargazers_count":373,"open_issues_count":30,"forks_count":14,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-14T10:39:38.648Z","etag":null,"topics":["a-shell","cli-app","coomer","coomer-party","downloader","fanbox","fantia","gallery","ios","ios-shortcut","ios-shortcuts","kemono","kemono-downloader","kemono-party","os-independent","patreon","pixiv-fanbox","python","shortcut"],"latest_commit_sha":null,"homepage":"https://ktoolbox.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ljzd-PRO.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-11-06T15:24:12.000Z","updated_at":"2025-05-13T14:25:38.000Z","dependencies_parsed_at":"2023-11-15T03:28:00.999Z","dependency_job_id":"24db5987-5e7f-42f4-994b-9febb6fb3da2","html_url":"https://github.com/Ljzd-PRO/KToolBox","commit_stats":null,"previous_names":["ljzd-pro/ktoolbox"],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ljzd-PRO%2FKToolBox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ljzd-PRO%2FKToolBox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ljzd-PRO%2FKToolBox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ljzd-PRO%2FKToolBox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ljzd-PRO","download_url":"https://codeload.github.com/Ljzd-PRO/KToolBox/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254414499,"owners_count":22067272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a-shell","cli-app","coomer","coomer-party","downloader","fanbox","fantia","gallery","ios","ios-shortcut","ios-shortcuts","kemono","kemono-downloader","kemono-party","os-independent","patreon","pixiv-fanbox","python","shortcut"],"created_at":"2025-03-08T05:13:25.017Z","updated_at":"2025-12-28T17:55:43.627Z","avatar_url":"https://github.com/Ljzd-PRO.png","language":"Python","funding_links":["https://ko-fi.com/N4N51J14RW'","https://ko-fi.com/img/githubbutton_sm.svg'"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\" style=\"text-decoration:none\"\u003e\n  \u003cimg align=\"center\" src=\"https://cdn.jsdelivr.net/gh/Ljzd-PRO/KToolBox@latest/static/repository-open-graph-2.svg\" alt=\"logo\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\n  KToolBox\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  KToolBox is a useful CLI tool for downloading posts content in\n  \u003ca href=\"https://kemono.cr/\"\u003eKemono.cr / Kemono.su / Kemono.party\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/ktoolbox\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/Ljzd-PRO/KToolBox?logo=python\" alt=\"Version\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://pypi.org/project/ktoolbox\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/dm/ktoolbox?label=pypi-downloads\" alt=\"PyPI Downloads\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/Ljzd-PRO/KToolBox/releases\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/downloads/Ljzd-PRO/KToolBox/total?label=github-downloads\" alt=\"GitHub Release Downloads\"\u003e\n  \u003c/a\u003e\n  \n  \u003ca href=\"./LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/Ljzd-PRO/KToolBox\" alt=\"BSD 3-Clause\"/\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/Ljzd-PRO/KToolBox/activity\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/Ljzd-PRO/KToolBox/devel\" alt=\"Last Commit\"/\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://codecov.io/gh/Ljzd-PRO/KToolBox\" target=\"_blank\"\u003e\n      \u003cimg src=\"https://codecov.io/gh/Ljzd-PRO/KToolBox/branch/master/graph/badge.svg?token=5XK9CYQHQN\" alt=\"codecov\"/\u003e\n  \u003c/a\u003e\n\n  \u003ca href='https://ktoolbox.readthedocs.io/'\u003e\n    \u003cimg src='https://readthedocs.org/projects/ktoolbox/badge/?version=latest' alt='Documentation Status' /\u003e\n  \u003c/a\u003e\n\n  \u003ca style=\"text-decoration:none\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Platform-Windows%20|%20Linux%20|%20macOS-blue\" alt=\"Platform Win | Linux | macOS\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"./README.md\"\u003eEnglish\u003c/a\u003e | \u003ca href=\"./README_zh-CN.md\"\u003e中文\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href='https://ko-fi.com/N4N51J14RW'\u003e\n    \u003cimg src='https://ko-fi.com/img/githubbutton_sm.svg' alt='ko-fi' /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Features\n\n- Support concurrent downloading of multiple files\n- Automatically retry on API call or download failure\n- Support downloading a single post or **all posts** of a specified artist\n- Can **update downloaded** artist directories to the latest state\n- Support customizing the **file and directory name format** and **directory structure** for downloaded posts/artists\n  - For example, the post directory can be set to the format `[2025-01-02]_TheTitle`, and image files can be named sequentially as `1.jpg`, `2.jpg`, etc.\n  - If you want to store all images from an artist's posts in a single directory for preview, you can use the `job.mix_posts` config option with a custom filename format to get a directory with hundreds or thousands of images\n    - Such as `[2025-01-02]_TheTitle_1.jpg`, `[2025-01-02]_TheTitle_2.jpg`, `[2025-01-02]_TheTitle_3.jpg`, etc.\n- Support excluding **specified file formats** or downloading only specified formats\n  - For example, if you don't want to download large and duplicate PSD or archive files, you can exclude `.psd` and `.zip` files in the config\n- Support filtering downloads by **file size**\n  - For example, if you want to avoid downloading large video files when running out of disk space, you can set a maximum file size limit in the config\n  - You can also set a minimum file size to skip downloading thumbnail or preview images\n- Support filtering downloads by post **title keywords**\n  - For example, if you only want to download posts whose titles contain \"表情\" or \"効果音差分\", you can use the `sync-creator` command with the `--keywords` option\n  - You can also exclude posts with specific keywords in the title using the `--keywords-exclude` option\n- Support filtering downloads by post **publish date range**\n- Can parse and download images contained in the multi-info text of the post page HTML\n  - These posts are characterized by images not loading immediately when the browser enters the page, and no preview images\n- Can collect **cloud drive links** listed on the post page and save them to a text file\n- Can search for artists and posts, and export results\n  - If you want to process artist and post data yourself, you can use this feature to export JSON data\n- Cross-platform support, with iOS shortcuts provided\n  - The pure Python branch can run on iOS a-Shell or in the browser via Pyodide\n- For _Coomer.st / Coomer.su / Coomer.party_ support, please refer to the documentation [Coomer](https://ktoolbox.readthedocs.io/latest/zh/coomer/)\n\n## Dev Plan\n\n- [ ] GUI\n- [ ] Discord support\n\n## Tutorial\n\nSee [documentation](https://ktoolbox.readthedocs.io/) for more details.\n\n### Installation\n\nYou can use executables from [releases](https://github.com/Ljzd-PRO/KToolBox/releases) page\n\nManually install:\n\n- Recommend\n  ```bash\n  pip3 install pipx\n  \n  # Windows\n  pipx install \"ktoolbox[urwid,winloop]\"\n  # Linux / macOS\n  pipx install \"ktoolbox[urwid,uvloop]\"\n  ```\n\n- For [a-Shell](https://github.com/holzschu/a-shell) or [pyodide](https://pyodide.org/en/stable/), \n  or if you can only use pure Python and you cannot compile [pydantic](https://docs.pydantic.dev/latest/) v2.x.x\n  ```bash\n  pip3 install ktoolbox-pure-py\n  ```\n\n### Command\n\nFor more information, use the help command or goto [Command](https://ktoolbox.readthedocs.io/latest/commands/guide) page.\n  \n#### ❓ Get general help\n```bash\nktoolbox -h\n```\n  \n#### ❓ Get help of a command\n```bash\nktoolbox download-post -h\n```\n\n#### ⬇️🖼️ Download a specific post\n```bash\nktoolbox download-post https://kemono.su/fanbox/user/49494721/post/6608808\n```\n\nIf some files failed to download, you can try to execute the command line again, \nthe downloaded files will be **skipped**.\n  \n#### ⬇️🖌️ Download posts from a creator\n```bash\n# Download all posts of the creator/artist\nktoolbox sync-creator https://kemono.su/fanbox/user/9016\n\n# Download latest 10 posts of the creator/artist\nktoolbox sync-creator https://kemono.su/fanbox/user/9016 --length=10\n\n# Download latest No.11-No.15 posts of the creator/artist\nktoolbox sync-creator https://kemono.su/fanbox/user/9016 --offset=10 --length=5\n\n# Download posts from the creator/artist from 2024-1-1 to 2024-3-1\nktoolbox sync-creator https://kemono.su/fanbox/user/9016 --start-time=2024-1-1 --end-time=2024-3-1\n\n# Download posts from the creator/artist whose title contains \"表情\"\nktoolbox sync-creator https://kemono.su/fanbox/user/9016 --keywords \"表情\"\n\n# Download posts from the creator/artist whose title contains \"表情\" or \"効果音差分\"\nktoolbox sync-creator https://kemono.su/fanbox/user/9016 --keywords \"表情,効果音差分\"\n```\n\n### Configuration\n\n- Download 10 files at the same time\n- Rename attachments in numerical order, e.g. `1.png`, `2.png`, ...\n- Prefix the post directory name with its release/publish date, e.g. `[2024-1-1]HelloWorld`\n- Use the post title as the prefix for file names, e.g. `HelloWorld_1.png`, `HelloWorld_2.png`, ...\n- Download revisions of posts\n- Exclude `.psd` and `.zip` files\n- Extract cloud drive links from posts and save them to a text file\n- ...\n\nGoto [Configuration-Guide](https://ktoolbox.readthedocs.io/latest/configuration/guide/) page for more details.\n\n![KToolBox Configuration Editor](https://cdn.jsdelivr.net/gh/Ljzd-PRO/KToolBox@latest/static/preview-2.png)\n![KToolBox Configuration Editor](https://cdn.jsdelivr.net/gh/Ljzd-PRO/KToolBox@latest/static/preview-3.png)\n\n### iOS Shortcuts\n\nGoto [Shortcuts for iOS](https://ktoolbox.readthedocs.io/latest/shortcut/) page for more details.\n\n## Other Branches\n\n- Pure Python branch: [🔗pure-py](https://github.com/Ljzd-PRO/KToolBox/tree/pure-py)\n  - Use pydantic v1 so that cargo is not needed for installation\n  - For example, you can use it on iOS terminal App [a-Shell](https://github.com/holzschu/a-shell)\n  - 🔗[PyPI](https://pypi.org/project/ktoolbox-pure-py/)\n- Development branch: [🔗devel](https://github.com/Ljzd-PRO/KToolBox/tree/devel)\n\n## Code Coverage\n\n![codecov.io](https://codecov.io/gh/Ljzd-PRO/KToolBox/graphs/sunburst.svg?token=5XK9CYQHQN)\n\n## License\n\nKToolBox is licensed under BSD 3-Clause.\n\nCopyright © 2023 by Ljzd-PRO.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fljzd-pro%2Fktoolbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fljzd-pro%2Fktoolbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fljzd-pro%2Fktoolbox/lists"}