Skip to content

pre-release

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Aug 11:30

🔧 其他

  • 重构 release/pre-release 发布工作流 by @AkimioJR
  • bump quinn-proto from 0.11.14 to 0.11.16 by @dependabot[bot]
  • 更新 README 并添加 docker-compose 文件 by @AkimioJR
  • 在多个系统架构上进行单元测试 by @AkimioJR
  • 将单元测试和代码格式检查合并到 ci 工作流中 by @AkimioJR
  • 添加 cargo release 模式下的编译优化 by @AkimioJR

完整更新记录: v2.0.0...pre-release

🐳 Docker Compose 配置示例

services:
  autofilm:
    image: akimio/autofilm:main
    container_name: autofilm
    restart: unless-stopped # 推荐加上:容器异常退出时自动重启
    volumes:
      - ./config:/config # 配置文件目录,该目录下需要一个 config.yaml 文件
      - ./logs:/logs # 日志目录,容器运行时会在该目录下生成日志文件
      - ./fonts:/fonts # 字体目录,library_poster_tasks 需要使用,若不启用该任务则无需配置(也可以直接将字体文件放到`/config`目录下,根据配置文件自由选择)
      - ./media:/media # 输出目录,不一定需要映射`/media`,根据配置文件自行选择

⚙️ config.yaml 配置示例

alist:                                      # AList 服务器列表(兼容 OpenList),支持多个服务器配置;每个服务器配置一个独立的 ID,供后续任务引用
  - id: 我的Alist                            # 标识 ID,用于关联 AList 客户端对象
    base_url: http://alist:5244             # AList 服务器地址;未写协议时会默认补 https://
    public_url: https://alist.example.com   # 公共访问地址,用于 AlistURL 模式生成 .strm 内容(可选)
    username: admin                         # AList 用户名(使用 token 时可留空)
    password: adminadmin                    # AList 密码(使用 token 时可留空)
    otp_code:                               # AList 两步验证验证码(可选)
    token:                                  # AList 永久令牌(可选;填写后无需 username/password)
    wait_time: 0                            # AList API 请求最小间隔时间,单位秒;0 表示不限速

  - id: OpenList                            # 标识 ID,用于关联 AList 客户端对象
    base_url: http://openlist.com:443       # 兼容 OpenList
    public_url: 
    username: admin
    password: adminadmin
    otp_code:
    token:
    wait_time: 0

  - id: 使用Token认证的Alist
    base_url: http://alist.com:5244
    public_url:
    username:
    password:
    otp_code:
    token: alist-your-static-token
    wait_time: 0.2

media_servers:
  - id: 我的Jellyfin                     # 标识 ID,用于 LibraryPoster 任务引用
    kind: jellyfin                      # 服务器类型:jellyfin 或 emby
    base_url: http://jellyfin:8096      # 媒体服务器地址
    api_key: your-api-key               # Jellyfin/Emby API Key
    user_id:                            # 查询媒体项使用的用户 ID;留空时自动使用首个用户
    timeout: 30                         # HTTP 请求超时时间,单位秒


alist2strm_tasks:
  - id: 动漫                                 # 标识 ID,用于日志和 .strm 智能保护状态文件
    cron: 0 0 20 * * *                      # 后台定时任务 Cron 表达式;格式为`<秒> <分> <时> <日> <月> <星期>`
    alist: 我的Alist                         # 关联上面定义的 AList 客户端 ID(可以多个任务关联同一个 AList 客户端实现复用)
    source_dir: /ani                        # AList 服务器上需要扫描的目录
    target_dir: /media/ani                  # 本地 .strm 和伴生文件输出目录
    mode: AlistURL                          # .strm 内容模式:AlistURL、RawURL、AlistPath
    flatten_mode: false                     # 平铺模式;开启后所有 .strm 输出到同一级目录,且不会下载伴生文件
    overwrite: false                        # 覆盖模式;本地已存在同名文件时是否重新生成/下载
    concurrency: 50                         # 执行任务的最大并发处理数,可以减轻运行设备与 AList 服务器负载
    download:                               # 下载相关配置
      enable: false                         # 是否下载字幕、图片、NFO 和自定义后缀等伴生文件
      subtitle: false                       # 是否下载字幕文件:.ass、.srt、.ssa、.sub
      image: false                          # 是否下载图片文件:.png、.jpg
      nfo: false                            # 是否下载 .nfo 文件
      other_ext: []                         # 自定义下载后缀列表,例如 [".zip", ".md"]
      concurrency: 5                        # 最大同时下载伴生文件数量
    sync:                                   # 同步远程相关配置
      enabled: true                         # 是否同步服务器删除;开启后远端不存在的本地文件会被删除
      ignore: "\.(nfo|jpg)$"               # 同步删除时忽略的文件名正则;仅匹配文件名,不匹配完整路径
      smart_protection:                     # .strm 智能保护,仅在 sync.enabled 为 true 时生效
        enabled: true                       # 是否启用保护(默认 false)
        threshold: 100                      # 触发保护的待删除 .strm 数量阈值
        grace_scans: 3                      # 达到阈值后,连续确认多少次才真正删除

  - id: 电影
    cron: 0 0 20 * * *
    alist: 使用Token认证的Alist
    source_dir: /movies
    target_dir: /media/movies
    mode: RawURL
    flatten_mode: false
    overwrite: false
    concurrency: 20
    download:
      enable: true
      subtitle: true
      image: true
      nfo: true
      other_ext:
        - .zip
        - .md
      concurrency: 5
    sync:
      enabled: true
      ignore:
      smart_protection:
        enabled: false

ani2alist_tasks:
  - id: 新番追更                                      # 标识 ID,用于日志和调度识别
    cron: 0 20 12 * * *                              # 后台定时任务 Cron 表达式
    alist: OpenList                                  # 关联上面定义的 AList 客户端 ID(需要管理员权限)
    target_dir: /Anime                               # UrlTree 存储器挂载路径,不存在时会自动创建
    source:                                          # 数据源配置
      source_url: https://aniopen.an-i.workers.dev   # ANI Open 目录数据源完整 URL
      rss_url: https://api.ani.rip/ani-download.xml  # ANI RSS 完整 URL
    update:                                          # 更新模式(有 rss、latest、keyword 3 种模式)
      mode: rss                                      # RSS 追更模式,读取 rss_url 中的最新条目

  - id: 最新季度
    cron: 0 10 7 * * *
    alist: OpenList
    target_dir: /Anime
    source:
      source_url: https://aniopen.an-i.workers.dev
      rss_url: https://api.ani.rip/ani-download.xml
    update:
      mode: latest                                   # 当前季度模式,运行时自动计算 source_url/{year}-{month}/
      template: "{{ year }}年/{{ month }}月"          # 写入 UrlTree 的子目录模板;留空则直接写入 target_dir

  - id: 自定义关键字
    cron: 0 30 7 * * *
    alist: 我的Alist
    target_dir: /Anime
    source:
      source_url: https://aniopen.an-i.workers.dev
      rss_url: https://api.ani.rip/ani-download.xml
    update:
      mode: keyword                                   # 关键字模式,递归解析 source_url/{keyword}/
      keyword: "2026-4"

library_poster_tasks:
  - id: 媒体库海报
    cron: 0 50 13 * * *                     # 后台定时任务 Cron 表达式
    server: 我的Jellyfin                     # 关联 media_servers 中定义的服务器 ID
    upload: false                           # 是否覆盖服务器上的媒体库 Primary 图片
    output_dir: /media/posters              # 本地预览输出目录;与 upload 至少启用一个
    title_font: /fonts/ch.ttf               # 主标题字体路径
    subtitle_font: /fonts/en.otf            # 副标题字体路径
    render:
      style: collage                        # 风格可选:card、split、collage、blur
      resolution: 1080p                     # 预设分辨率:480p、720p、1080p;或者是自定义分辨率:{width: 1600, height: 900}
      blur_radius: 50                       # 模糊半径,以 1080p 为基准自动缩放
      color_strength: 0.8                   # 主题色叠加强度,范围 0.0~1.0
    libraries:                              # 只处理这里明确列出的媒体库
      - name: 动漫                           # Jellyfin/Emby 中的媒体库名称
        title: 动漫                          # 海报主标题;留空时使用媒体库名称
        subtitle: ANIME                     # 海报副标题
        sort: date_last_content_added       # 可选排序方式:random、date_created、date_last_content_added
      - name: 电影
        title: 电影
        subtitle: MOVIE
        sort: random