{"id":13680419,"url":"https://github.com/RanKKI/BangumiBot","last_synced_at":"2025-04-29T23:31:24.212Z","repository":{"id":44438971,"uuid":"511897348","full_name":"RanKKI/BangumiBot","owner":"RanKKI","description":"Highly customisable automatic project to follow \u0026 watch Anime, works well with media libraries such as Jellyfin ","archived":false,"fork":false,"pushed_at":"2023-05-23T04:46:16.000Z","size":656,"stargazers_count":219,"open_issues_count":4,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-10T03:57:39.473Z","etag":null,"topics":["aria2","automatic","bangumi","emby","jellyfin","qbittorrent","rss","transmission"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RanKKI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2022-07-08T13:02:11.000Z","updated_at":"2025-03-31T13:52:15.000Z","dependencies_parsed_at":"2024-08-02T13:19:23.795Z","dependency_job_id":"3e1abf41-fea3-489e-b707-793c731d790e","html_url":"https://github.com/RanKKI/BangumiBot","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RanKKI%2FBangumiBot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RanKKI%2FBangumiBot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RanKKI%2FBangumiBot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RanKKI%2FBangumiBot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RanKKI","download_url":"https://codeload.github.com/RanKKI/BangumiBot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251600029,"owners_count":21615624,"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":["aria2","automatic","bangumi","emby","jellyfin","qbittorrent","rss","transmission"],"created_at":"2024-08-02T13:01:16.902Z","updated_at":"2025-04-29T23:31:19.189Z","avatar_url":"https://github.com/RanKKI.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# 自动追番\n[![Unittest](https://github.com/RanKKI/Bangumi/actions/workflows/test.yml/badge.svg)](https://github.com/RanKKI/Bangumi/actions/workflows/test.yml) [![Build](https://github.com/RanKKI/Bangumi/actions/workflows/docker.yml/badge.svg)](https://github.com/RanKKI/Bangumi/actions/workflows/docker.yml)\n\n[English](./README.md) [中文](./README_ZH.md)\n\n\u003cimg src=\"/images/img_1.jpg\" width=30% /\u003e \u003cimg src=\"/images/img_2.jpg\" width=50% /\u003e\n\n\u003e The first app is the official Jellyfin iOS client [Swiftfin](https://github.com/jellyfin/Swiftfin) (Still under Testflight)，The second app [Bark](https://github.com/Finb/Bark) which allows sending notification to your iPhone by HTTP request\n\n## Feature\n - RSS\n   - [蜜柑计划](https://mikanani.me/)\n   - [动漫花园](https://dmhy.org/)\n   - Support extra Site plugins\n   - Support Filter based on site or global\n - Deduplicate\n   - Downloaded content\n   - Resolution priority\n - Downloader\n   - Aria2\n   - qBittorrent\n   - Transmission\n - Support seeding after completed\n\n## How to use\n\n - Copy .env.example to .env\n - Setup the downloader config, i.e. type, username, password\n - Set redis IP, Port and password\n - Set scrape frequency\n - Copy ./config_example to ./config\n - Edit [RSS](#rss) Config `./config/rss.json `\n - Edit [Notification](#notification) Config `./config/notification.json`\n - Install all required libs  `pip install -r requirements.txt`\n - Start service `uvicorn main:app --host 0.0.0.0 --log-config conf/log.yml`\n\n## Docker\n\n```\ndocker network create --subnet=10.1.0.0/16 bangumi_network\n\ndocker run --name redis -p 6379:6379 \\\n  --net bangumi_network \\\n  --ip 10.1.0.20 \\\n  -d redis\n\ndocker run -d \\\n  --name aria2 --restart unless-stopped --log-opt max-size=1m \\\n  --net bangumi_network \\\n  -e PUID=$UID -e PGID=$GID -e UMASK_SET=022 \\\n  -e RPC_PORT=6800 -p 6800:6800 \\\n  -e LISTEN_PORT=6888 \\\n  -e RPC_SECRET=\"bangumi_aria2\" \\\n  -p 6888:6888 -p 6888:6888/udp \\\n  -v ${pwd}/.cache/aria2-config:/config \\\n  -v ${pwd}/.cache/aria2-downloads:/downloads \\\n  --ip 10.1.0.21 \\\n  p3terx/aria2-pro\n\ndocker run --name bangumi \\\n  -e BANGUMI_CHECK_INTERVAL=600 \\\n  -e BANGUMI_CLIENT_TYPE=\"aria2\" \\\n  -e BANGUMI_CLIENT_IP=\"10.1.0.21\" \\\n  -e BANGUMI_CLIENT_PORT=\"6800\" \\\n  -e BANGUMI_CLIENT_USERNAME=\"\" \\\n  -e BANGUMI_CLIENT_PASSWORD=\"bangumi_aria2\" \\\n  -e BANGUMI_REDIS_HOST=\"10.1.0.20\" \\\n  -e BANGUMI_REDIS_PORT=\"6379\" \\\n  -e BANGUMI_REDIS_PASSWORD=\"\" \\\n  -e PUID=1000 \\\n  -e PGID=1000 \\\n  -e UMASK=022 \\\n  -e TZ=Asia/shanghai \\\n  --ip 10.1.0.22 \\\n  -p 8000:8000 \\\n  -v /media:/media \\\n  -v /downloads:/downloads \\\n  -v /config:/config \\\n  --net bangumi_network -d \\\n  rankki/bangumi:latest\n```\n\n### Docker Compose\n\n\u003e Noted，no Web UI for Aria2, you may use [ziahamza/webui-aria2](https://github.com/ziahamza/webui-aria2)\n\n```\ncd /docker/\u003cdownloader\u003e/\n\ncat \u003c\u003c EOF \u003e .env\nDOWNLOAD_PATH=/arai2_downloads\nBANGUMI_CONFIG=/bangumi_config\nMEDIA_PATH=/media\nDOWNLOAD_CONFIG=/bt_config\nGID=${GID}\nUID=${UID}\nEOF\n\ndocker compose up\n```\n\n### Docker Proxy\n```\nenvironment:\n  - HTTPS_PROXY=http://host.docker.internal:20173\n  - HTTP_PROXY=http://host.docker.internal:20173\n  - NO_PROXY=10.1.0.1/16, 192.168.1.1/16, *.localhost, *.local, 127.0.0.0/8, localhost\nextra_hosts:\n  - \"host.docker.internal:host-gateway\"\n```\n\n## Config\n### Env\n```\nBANGUMI_LOGGER_LEVEL = \"[INFO|DEBUG]\"  # KEEP at INFO,\nBANGUMI_SEEDING = [1|yes|true] # seeding after completed\n```\n\n### RSS\n\u003e Noted `rules`，**matched** items will be **filtered**。**NOT KEEP MATCHED ITEMS**\n```\n/config/rss.json\n{\n    \"urls\": [\n      \"https://mikanani.me/RSS/MyBangumi?token=\u003ctoken\u003e\",\n      {\n        \"url\": \"https://mikanani.me/RSS/MyBangumi?token=\u003ctoken\u003e\",\n        \"rules\": [\n          \"^filter_options\" # filter for this site only\n        ]\n      }\n    ],\n    \"rules\": [ // filter for all of sites\n      \".*ABC.*\",\n      \"^FILTER_RULE\"\n    ],\n    \"parsers\": [\n        {\n            \"folder\": \"/path/to/plugins\", # absolute path to the plugin, the folder must a Python Module with all plugin imported in the `__init__.py`\n            \"classes\": [\n                \"your-parser-name\", # the name of plugin class\n                \"another-parser-name\"\n            ]\n        }\n    ],\n    \"mapper\": [ # remap the title to other, in case some titles are not recognized\n      [\"^\\[ANi\\] 即使如此依旧步步进逼（仅限港澳台地区） - (\\d+) (\\[.*\\]\\s*)+\", \"Soredemo Ayumu wa Yosetekuru - {} {}\"]\n    ]\n}\n```\n\n### notification\n\nall `url` callback will be called by `curl`\n\n`script` must be a absolute path `/bin/bash /path/to/script.sh`, if you're using Docker, remember to mount the script folder to the container\n\nthe first parameter of the script will be the title of completed Anime. i.e. `/bin/bash /path/to/script.sh 'OVERLORD S02E03'`\n```\n/config/notification.json\n[\n    \"https://api.day.app/\u003cyou-key-here\u003e/AnimeUpdate/{title}\", # http 通知\n    {\n      \"url\": \"https://\u003csome-url\u003e/AnimeUpdate\",\n      \"data\": {\n        \"token\": \"xxxxxxx\", # title will placed in \u003chere\u003e\n      },\n      \"method\": \"\u003cPOST|GET\u003e\"\n    }\n    \"/bin/script\"\n]\n```\n\n## FAQ\n### Seeding\nBANGUMI_SEEDING is not working in Docker due to some file system limitation\n\nmore details: [How to create hard link to file in a docker volume](https://stackoverflow.com/questions/55380443/how-to-create-hard-link-to-file-in-a-docker-volume)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRanKKI%2FBangumiBot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRanKKI%2FBangumiBot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRanKKI%2FBangumiBot/lists"}