{"id":26953043,"url":"https://github.com/fekoneko/piximan","last_synced_at":"2026-04-30T10:34:15.330Z","repository":{"id":284119326,"uuid":"953415408","full_name":"fekoneko/piximan","owner":"fekoneko","description":"Pixiv batch downloader and local collection viewer","archived":false,"fork":false,"pushed_at":"2025-09-06T19:02:17.000Z","size":746,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-06T20:34:42.728Z","etag":null,"topics":["adwaita","go","golang","gotk4","gtk","gtk4","libadwaita","pixiv","pixiv-api","pixiv-crawler","pixiv-downloader","viewer"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fekoneko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-23T10:11:20.000Z","updated_at":"2025-09-06T19:01:54.000Z","dependencies_parsed_at":"2025-03-24T09:35:50.622Z","dependency_job_id":"ccd5de75-0f2a-440f-b14d-5a05d07ad53c","html_url":"https://github.com/fekoneko/piximan","commit_stats":null,"previous_names":["fekoneko/piximan"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/fekoneko/piximan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fekoneko%2Fpiximan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fekoneko%2Fpiximan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fekoneko%2Fpiximan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fekoneko%2Fpiximan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fekoneko","download_url":"https://codeload.github.com/fekoneko/piximan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fekoneko%2Fpiximan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32462304,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["adwaita","go","golang","gotk4","gtk","gtk4","libadwaita","pixiv","pixiv-api","pixiv-crawler","pixiv-downloader","viewer"],"created_at":"2025-04-03T01:19:18.884Z","updated_at":"2026-04-30T10:34:15.324Z","avatar_url":"https://github.com/fekoneko.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# piximan - Pixiv Manager\n\nPixiv batch **downloader** and local collection **viewer**. Preserve your favorite art with ease!\n\n\u003e [!NOTE]\n\u003e The project is currently in active development\n\u003e\n\u003e - The downloader CLI tool is pretty stable and feature-rich now\n\u003e - Collection viewer GUI is still being figured out\n\n## Installation\n\n### Arch Linux\n\n[`piximan`](https://aur.archlinux.org/packages/piximan) and [`piximan-bin`](https://aur.archlinux.org/packages/piximan-bin) packages are available in the AUR.\n\n### Linux / Windows / MacOS\n\nDownload a binary from the [latest release page](https://github.com/fekoneko/piximan/releases/latest)\n\n## Getting started with `piximan` CLI\n\n## Downloader Features\n\n- Download illustrations / manga / ugoira / novels\n- Download different sizes (resolutions) of the illustrations / manga\n- Download orginal or English-translated work metadata if available\n- Download your bookmarks or bookmarks of another user\n- Download by work ID\n- Download from list\n- Filter downloaded works with download rules\n- Avoid downloading duplicate works by providing path to your collection\n- Infer work IDs from existing collection paths for easy migration to piximan metadata\n- Interactive mode for download and configuration CLI\n- Use substitutions in download path: `{title}` / `{id}` / `{user}` / `{user-id}` / etc.\n- Make requests concurrently when it's possible without bothering the Pixiv servers too much\n- Authorize requests with your session ID, `piximan` will try to use it as few as possible\n- Encrypt your session ID with a master password\n- Adjust request delays and concurrency limits\n\n### Authorization\n\n\u003e [!NOTE]\n\u003e If you only download works without age restriction and don't need to fetch user bookmarks,\n\u003e the downloader is usable without authorization.\n\nFor some requests Pixiv requires you to be authorized. For example, to fetch frames for R-18 ugoira\nyou must have the R-18 option checked in your profile. To authorize these requests you need to\nconfigure the _session ID_.\n\nYou can get session ID from your browser _cookies_ right now:\n\n- Go to [https://www.pixiv.net](https://wwww.pixiv.net)\n- On the website press `F12` to access the devtools panel\n- In the devtools panel switch to the _Application_ tab (for Chrome) / _Storage_ tab (for Firefox)\n- Expand the _Cookies_ section and select `https://www.pixiv.net` origin\n- Find the row named `PHPSESSID` - this is your cookie\n- Copy the value of the cookie to the clipboard\n\nNow open the terminal and run the command to enter interractive configuration mode:\n\n```shell\npiximan config\n```\n\nPaste the copied session ID and then specify the master password if you want.\n\n### Downloading with interactive mode\n\nThe easiest way to use the tool is with interactive mode. To enter it run the command,\nthen answer the questions about what to download and where to save the files:\n\n```shell\npiximan download\n```\n\n### Downloading a work by ID\n\nYou're ready to go! Try out `piximan` by downloading an artwork from pixiv:\n\n```shell\npiximan download \\\n  --id 584231 \\\n  --path './artworks/{user} ({user-id})/{title} ({id})'\n```\n\nDownloading a novel is as simple:\n\n```shell\npiximan download \\\n  --id 584231 \\\n  --type novel \\\n  --path './novels/{user} ({user-id})/{title} ({id})'\n```\n\n### Downloading bookmarks\n\n\u003e [!NOTE]\n\u003e For downloading any bookmarks you need to be authorized (configure the session ID).\n\nYou can download your public artwork bookmarks like this:\n\n```shell\npiximan download \\\n  --bookmarks my \\\n  --path './bookmarks/{user} ({user-id})/{title} ({id})'\n```\n\nYou can also specify `--type novel` to download novel bookmarks and `--private` to download\nprivate bookmarks.\n\n```shell\npiximan download \\\n  --bookmarks my \\\n  --type novel \\\n  --private \\\n  --path './bookmarks/{user} ({user-id})/{title} ({id})'\n```\n\nYou can also specify a user-assigned tag or download only a specified range. This example\nwill download your public bookmarks with tag 'お気に入り' from 101th to 200th latest:\n\n```shell\npiximan download \\\n  --bookmarks my \\\n  --tag 'お気に入り' \\\n  --from 100 \\\n  --to 200 \\\n  --path './bookmarks/{user} ({user-id})/{title} ({id})'\n```\n\nYou can also download public bookmarks of any user knowing their ID.\nFor example, this will download novel bookmarks of user 12345:\n\n```shell\npiximan download \\\n  --bookmarks 12345 \\\n  --type novel \\\n  --path './bookmarks/{user} ({user-id})/{title} ({id})'\n```\n\n### Downloading from list\n\nYou can specify a queue for downloader using YAML format such as:\n\n\u003e `./list.yaml`\n\n```yaml\n# This will download two artworks with ID 12345 and 23456\n- { id: 12345, type: artwork }\n- { id: 23456, type: artwork }\n\n# This will override provided downloader arguments\n- id: 34567\n  type: artwork\n  size: 1\n  only-meta: false\n  paths: ['./special artwork']\n- id: 45678\n  type: novel\n  only-meta: true\n  paths: ['./special novel']\n```\n\nStart downloading with the command:\n\n```shell\npiximan download \\\n  --list './list.yaml' \\\n  --path './artworks/{user} ({user-id})/{title} ({id})'\n```\n\n### Inferring work IDs from path\n\nYou can infer the IDs of works from the given path. For example, this is useful for updating\nthe metadata in the existing collection when coupled with the `--only-meta` flag:\n\n```shell\npiximan download --infer-id './artworks/*/* ({id})' --only-meta\n```\n\n### Downloading rules\n\nRules are used to filter which works should be downloaded and defined in YAML format.\nAll rules are optional, and if multiple rules are defined, the work should match all of\nthem to be downloaded (AND). Any array matches any of its elements (OR).\n\nHere's an example of all available rules:\n\n```yaml\nids: [12345, 23456]\nnot_ids: [34567, 45678]\ntitle_contains: ['cute', 'cat']\ntitle_not_contains: ['ugly', 'dog']\ntitle_regexp: '^.*[0-9]+$'\nkinds: ['illust', 'manga', 'ugoira', 'novel']\ndescription_contains: ['hello', 'world']\ndescription_not_contains: ['goodbye', 'universe']\ndescription_regexp: '^.*[0-9]+$'\nuser_ids: [12345, 23456]\nnot_user_ids: [34567, 45678]\nuser_names: ['fekoneko', 'somecoolartist']\nnot_user_names: ['notsocoolartist', 'notme']\nrestrictions: ['none', 'R-18', 'R-18G']\nai: false\noriginal: true\npages_less_than: 50\npages_more_than: 3\nviews_less_than: 10000\nviews_more_than: 1000\nbookmarks_less_than: 1000\nbookmarks_more_than: 100\nlikes_less_than: 500\nlikes_more_than: 50\ncomments_less_than: 10\ncomments_more_than: 2\nuploaded_before: 2022-01-01T00:00:00Z00:00\nuploaded_after: 2010-01-01T00:00:00Z00:00\nseries: true\nseries_ids: [12345, 23456]\nnot_series_ids: [34567, 45678]\nseries_title_contains: ['cute', 'cat']\nseries_title_not_contains: ['ugly', 'dog']\nseries_title_regexp: '^.*[0-9]+$'\ntags: ['お気に入り', '東方']\nnot_tags: ['おっぱい', 'AI生成']\n```\n\nWhen downloading, specify the rules with `--rules` flag:\n\n```shell\npiximan download --id 12345 --rules './rules.yaml'\n```\n\n### Syncing bookmarks with existing collection\n\nYou can skip works already present in the directory with `--skip` flag:\n\n```shell\npiximan download --bookmarks my --skip '.' --path './{user-id}/{id}'\n```\n\nInfer ID pattern can be provided here as well (see `--infer-id` flag). Note that in this case\nall matched work IDs will be assumed to be of type provided with `--type` flag:\n\n```shell\npiximan download --bookmarks my --skip './*/{id}' --path './{user-id}/{id}'\n```\n\nWhile the above commands will skip already downloaded works, piximan will need to fetch\nthe list of all your bookmarks to ensure there isn't some older one that isn't present\nin the collection.\n\nFlag `--until-skip` will tell the downloader to stop crawling new bookmark pages once it encounters\na fully skipped one. This may greatly reduce the number of authorized requests to pixiv.net.\n\nSo for syncing your new bookmarks once in a while you can use the downloader like this:\n\n```shell\npiximan download --bookmarks my --skip '.' --until-skip --path './{user-id}/{id}'\n```\n\n### Help\n\nTo see other options and examples use the `help` command in your terminal:\n\n```shell\npiximan help download\npiximan help config\n```\n\n## Development\n\nUse `make` to run and build the project:\n\n```shell\nmake run                 # Run piximan GUI\nmake run ARGS='download' # Run piximan CLI tool with the arguments\nmake build               # Build for all platforms\nmake build:current       # Build for current platform\nmake build:$PLATFORM     # Build for $PLATFORM\n```\n\n## Related projects\n\nThis project is the next iteration on my way to perfect local Pixiv app. So far I tried:\n\n- [React Native for Windows](https://github.com/fekoneko/pixiv-powerful-viewer-legacy)\n- [Electron + React](https://github.com/fekoneko/pixiv-powerful-viewer/tree/v1.0.0-alpha.2)\n- [Tauri + React + Rust](https://github.com/fekoneko/pixiv-powerful-viewer)\n- [Rust + GTK](https://github.com/fekoneko/pixiv-powerful-viewer-gtk)\n- [Go + GTK](https://github.com/fekoneko/piximan) \u003c- this one\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffekoneko%2Fpiximan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffekoneko%2Fpiximan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffekoneko%2Fpiximan/lists"}