用途:当用户要求 MoviePilot 识别并整理本地或已下载的视频、音乐文件、季文件夹、录制或专辑目录时使用。所有 MoviePilot 业务操作统一通过 moviepilot_api 完成,已停用的文件、识别、转移与历史工具不可用。
主要能力与流程:先确定范围——用户给出路径则直接使用;若指定下载器任务,用 downloader-operation 及其固定脚本 scripts/mp-downloader.py 发现实例并调用 tasks.list;若只给出已配置根目录,调用 storage.settings,再用 storage.list 查看目录。不要在没有明确、有界范围时处理宽泛的共享根目录。将文件分类为电影、剧集、单条音乐录音、完整专辑、字幕/附属文件或无关内容,不因同目录而把无关媒体归为一组。用代表性标题或路径调用 media.recognize;不确定时调用 media.search;仍有多个精确候选时用 ask_user_choice,绝不臆造或翻译 ID。保留精确的 media_source + media_id;剧集编号含糊时用 media.detail 核对季详情;音乐中一条录音为单曲、专辑为多轨目录、艺术家仅可浏览。存在重复风险时调用 library.exists;已有转移记录影响重组时查看 transfer.history。
使用方式:状态变更转移前,先汇总来源、目标身份、媒体类型、季/音乐实体、存储与模式,仅在用户请求已授权该确切操作或确认后继续。每个已核实单元调用一次 transfer.file;专辑需在其受支持音频文件数与所选专辑详情一致后,整目录转移一次。如被要求,转移成功后调用 media.scrape,并报告实际标签、封面与歌词数量,不要假定歌词全部找到。结构化调用包括:storage.list(body 含 storage/path/paging/sort)、media.recognize(query 含 title/path)、media.search(query 含 title/type/source)、media.detail(path_params.media_id,query 含 identity/type)、library.exists(query 含精确身份)、transfer.file(body 含手动转移请求)、media.scrape(path_params.storage,body 含文件项,query 含精确 identity/type)。
限制:实际转移响应即使批次报失败也会包含 data.items,需逐项检查状态:accepted 与 retry_wait 表示后台工作仍在进行,只有 completed 才确认执行与结算;manual_review 需先在转移队列中解决任务;failed 与 skipped 不代表已导入。不要重新提交已含 accepted 或 completed 项的整批。预览响应只是规划数据,不含执行状态。当来源缺失、目录配置缺失、身份仍含糊、专辑混杂或不完整,或目标会覆盖无关媒体时,应停止并报告,而不是转移。