Facing various ads on video platforms, I chose to set up my own platform to watch shows, which can achieve automatic anime tracking, high-definition quality, playback on all platforms, and sharing with friends.

Preparation

  • NAS or your own server
  • ANI-RSS
  • QB
  • EMBY
  • MP
  • Autofilm (optional)

qbittorrent

Then establish the downloader, create a docker-compose.yml file, with the content as follows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "2"
services:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai # Your time zone
- UMASK_SET=022
- WEBUI_PORT=49850 # Change this to the WEB management platform port you want to use
volumes:
- ./config:/config # Change the absolute path to your own config folder
- /data/downloads:/downloads # Change the absolute path to your own downloads folder
ports:
# The mapping download port and internal download port to be used can be kept as default; you can still change to other ports on the management page after installation.
- 49849:49849
- 49849:49849/udp
# Ensure that the WEB UI target port and internal port are the same here, see issue 1
- 49850:49850
restart: unless-stopped

ANI-RSS

Mainly used with QB to achieve automatic anime downloading and renaming, automatic tracking, subscription, and downloading from Mikan RSS Anime.

ani-rss interface​

Create a docker-compose.yml file, with the content as follows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
ani-rss:
container_name: ani-rss
volumes:
- ./config:/config
- /data/downloads:/downloads
ports:
- 7789:7789
environment:
- PORT=7789
- CONFIG=/config
- TZ=Asia/Shanghai
restart: always
image: wushuo894/ani-rss

The downside is that it temporarily does not support aggregated subscriptions and can only subscribe individually.

Settings​

Note that the save location needs to be the same as the qbittorrent download location.

Of course, you can also upload the downloaded videos to a third-party cloud drive via alist. You can then create strm files on other servers using Autofile and scrape them with MoviePilot.

MoviePilot

Mainly used for scraping; here, for convenience in management, I am using the strm hard link method.

Not using Emby for scraping is mainly to improve performance and speed.

You can choose either MoviePilot V1 or MoviePilot V2.

MoviePilot V1

Create a docker-compose.yml file, with the content as follows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: "2.3"
services:
moviepilo:
image: jxxghp/moviepilot:latest
container_name: moviePilot
environment:
- UID=1000
- GID=1000
- UMASK=022
- NGINX_PORT=3000
- PORT=3001

# Proxy (used for connecting to TMDB, updates, etc.)
# - PROXY_HOST=http://10.0.0.4:10080
# - MoviePilot_AUTO_UPDATE = ture
# Authentication site information
- AUTH_SITE=xxxxx
- WINTERSAKURA_UID=xxxx
- WINTERSAKURA_PASSKEY=xxxxx

volumes:

# MoviePilot configuration directory
- ./moviepilot/main:/moviepilot # Program main directory, required [modify yourself]
- ./moviepilot/config:/config # Config configuration file, required [modify yourself]
# Media library directory
- /data/downloads:/media # Remember this path is the downloads path set above in qb [modify yourself]
ports:
- 3000:3000 # HTTP port
restart: on-failure

Download the directory monitoring plugin from the plugin market and set it as shown in the following figure.

Directory Monitoring Configuration​

MoviePilot V2

Compared to V1, V2 has integrated the directory monitoring function.

Create a docker-compose.yml file, with the content as follows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
version: '3.3'

services:
moviepilot:
stdin_open: true
tty: true
container_name: moviepilot-v2
hostname: moviepilot-v2
networks:
- moviepilot
ports:
- target: 13000
published: 13000
protocol: tcp
volumes:
- '/data/downloads:/media'
- './moviepilot-v2/config:/config'
- './moviepilot-v2/core:/moviepilot/.cache/ms-playwright'
- './var/run/docker.sock:/var/run/docker.sock:ro'
#- '/root/.config/rclone:/moviepilot/.config/rclone'
# - '/alist:/alist'
- '/data:/data'
environment:
- 'NGINX_PORT=13000'
- 'PORT=13001'
- 'PUID=0'
- 'PGID=0'
- 'UMASK=000'
- 'TZ=Asia/Shanghai'
- 'AUTH_SITE=xxxxx'
- 'WINTERSAKURA_UID=xxxxx'
- 'WINTERSAKURA_PASSKEY=xxxxx'
- 'SUPERUSER=admin'
# - 'API_TOKEN=No need to configure manually, the system will generate it automatically. If you need to customize, it must be a complex string of 16 characters or more'
restart: always
image: jxxghp/moviepilot-v2:latest

networks:
moviepilot:
name: moviepilot

EMBY

Video player that supports TV, Android, Apple, and PC playback, allowing online viewing of videos.

Create a docker-compose.yml file, with the content as follows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "2.3"
services:
emby:
image: amilys/embyserver:latest
container_name: emby
# network_mode: host
ports:
- 8096:8096
- 8920:8920
- 1900:1900/udp
- 7359:7359/udp
environment:
- PUID=1000
- PGID=1000
- GIDLIST=0
- TZ=Asia/Shanghai
# - HTTP_PROXY="http://your proxy IP:port/"
# - HTTPS_PROXY="http://your proxy IP:port/"
# devices:
# - /dev/dri:/dev/dri
volumes:
- ./emby:/config
- /data/downloads:/media
# - /alist:/alist

restart: unless-stopped

Set the media library directory.

Media Directory​

Just check the three options in the three images; no need to check the others.

Media Settings​

Autofilm (optional)

If you need to configure EMBY to play videos on another server, you may need to use autofile on that server, which requires alist.

Create a docker-compose.yml file, with the content as follows

1
2
3
4
5
6
7
8
9
10
11
version: '3.8'

services:
autofilm:
image: akimio/autofilm
container_name: autofilm
volumes:
- ./config:/config
- /data/downloads/video:/media
- ./logs:/logs
restart: always

Enter the config folder and create config.yaml, with the configuration as follows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Settings:
DEV: False # Developer mode (optional, default False)

# Download strm files from alist
Alist2StrmList:
- id: Anime # Identification ID
cron: 54 15 * * * # Background scheduled task Crontable expression
url: xxxxx # Alist server address, domain needs ws support
username: xxxxx # Alist username
password: xxxxx # Alist password
source_dir: /Anime # Folder path on the Alist server
target_dir: /media/strm # Output path
flatten_mode: False # Flatten mode, if enabled, subtitle, image, nfo will be forcibly disabled (optional, default False)
subtitle: False # Whether to download subtitle files (optional, default False)
image: False # Whether to download image files (optional, default False)
nfo: False # Whether to download .nfo files (optional, default False)
raw_url: False # Whether to use the original address to replace the Alist server download address (optional, default False)
overwrite: False
# Overwrite mode, whether to regenerate/download the file if a file with the same name exists in the local path (optional, default False)
other_ext: # Custom download suffix, separated by Western half-width commas (optional, default empty)
max_workers: 5 # Maximum number of concurrent file downloads (optional, default 5)
url_encode: True # Whether to perform URL encoding on the links in the generated strm files


# Recommended to delete
#Ani2AlistList:
# - id: New Episode Updates # Identification ID
# cron: 33 15 * * * # Background scheduled task Crontable expression
# url: xxxxx # Alist server address
# username: xxx # Alist username (requires administrator permissions)
# password: xxxx # Alist password
# target_dir: /Anime # Alist address tree storage path, will be automatically created if the storage does not exist (optional, default /Anime)
# rss_update: True # Use RSS subscription to update the latest anime, ignores passed year and month when enabled (optional, default True)
# year: 2024 # Anime season - year, only supports 2019-1 and later updates (optional, default uses current date)
# month: 10 # Anime season - month, only supports 2019-1 and later updates (optional, default uses current date)
# src_domain: openani.an-i.workers.dev # ANI Open project domain (optional, default aniopen.an-i.workers.dev)
# rss_domain: api.ani.rip # ANI Open project RSS subscription domain (optional, default api.ani.rip)


Next, repeat the MoviePilot process for scraping.

Notes

Where is the MoviePilot and qbittorrent password?

1
docker logs <container ID or container name> # View the password

Download directory, media directory

Need to ensure all mounted directories are in the same location.

References

‍