Skip to content

扫描管理 ​

接口列表 ​

方法路径说明
POST/scan扫描并导入本地音乐
POST/scan/cancel取消扫描
GET/scan/dir-names获取所有目录名称
GET/scan/directories获取子目录列表
POST/scan/fingerprints触发批量指纹计算
POST/scan/fingerprints/cancel中断指纹计算
GET/scan/fingerprints/failed获取指纹计算失败的歌曲列表
GET/scan/fingerprints/progress获取指纹计算进度
GET/scan/fingerprints/status获取指纹计算状态
GET/scan/progress获取扫描进度
PUT/settings/auto-scan更新自动扫描配置
GET/settings/auto-scan获取自动扫描配置
PUT/settings/music-path更新音乐路径与扫描排除配置
GET/settings/music-path获取音乐路径与扫描排除配置
PUT/settings/scan-auto-create-playlists更新「扫描后自动创建歌单」开关
GET/settings/scan-auto-create-playlists获取「扫描后自动创建歌单」开关
PUT/settings/scan-auto-fingerprint更新「扫描后自动计算音频指纹」开关
GET/settings/scan-auto-fingerprint获取「扫描后自动计算音频指纹」开关
PUT/settings/scan-playlist-mode更新歌单创建方式
GET/settings/scan-playlist-mode获取歌单创建方式
PUT/settings/scan-title-source更新扫描标题来源配置
GET/settings/scan-title-source获取扫描标题来源配置

POST /scan ​

扫描并导入本地音乐

异步扫描音乐目录并导入新发现的音乐文件到数据库,立即返回,可通过进度接口查询状态。 reimport=true 时对已入库文件也重新提取元数据;默认 false 走增量(跳过已存在且时长有效的文件)。 paths 为目录级定向扫描(Issue #262):省略/为空时扫描整个音乐根目录;非空时只扫描给定目录(含子目录), 且过期记录清理仅收敛到这些目录之内(不影响其余曲库)。每个目录必须位于音乐根目录之下,否则返回 400。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

扫描请求参数

类型: ScanRequest

字段类型必填说明
pathsstring[]否Paths 为目录级定向扫描(Issue #262):为空时扫描整个音乐根目录(默认行为);
非空时只扫描给定目录(含子目录),过期记录清理也仅收敛到这些目录之内。
每个目录必须位于音乐根目录之下,否则返回 400。
reimportboolean否

响应 ​

200 - 扫描任务已启动 ​

类型: map[string]any

400 - 指定目录不在音乐目录下 ​

类型: map[string]string

409 - 扫描正在进行中 ​

类型: map[string]string

500 - 启动扫描失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

POST /scan/cancel ​

取消扫描

取消正在进行的扫描任务

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 取消成功 ​

类型: map[string]any

400 - 没有正在进行的扫描任务 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /scan/dir-names ​

获取所有目录名称

递归收集音乐目录下所有唯一的目录名称,按字母排序返回,用于排除目录名称的自动补全。 结果带 60 秒进程内缓存;万首级曲库首次遍历可能较慢,客户端超时后重试会直接命中缓存。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 目录名称列表 ​

类型: map[string]any

500 - 收集目录名称失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /scan/directories ​

获取子目录列表

返回指定路径下的一级子目录列表,用于目录树懒加载。path 为空时返回音乐根目录下的子目录

需要认证

此接口需要 Bearer Token 认证

查询参数 ​

参数类型必填说明
pathstring否目录路径(为空时使用音乐根目录)

响应 ​

200 - 子目录列表 ​

类型: map[string]any

400 - 无效的路径 ​

类型: map[string]string

500 - 读取目录失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

POST /scan/fingerprints ​

触发批量指纹计算

异步为本地歌曲计算音频指纹,需要 ffmpeg 支持 chromaprint。若已有任务在运行则打断重启。传入 recompute_all=true 时清空已有指纹后重新计算全部;传入 retry_failed=true 时仅重置失败项的「已尝试」标记后重试(已算好的指纹保留,适用于 ffmpeg 能力升级后恢复失败歌曲)。两者同时传入时 recompute_all 优先。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

计算选项

类型: startFingerprintRequest

字段类型必填说明
recompute_allboolean否
retry_failedboolean否RetryFailed 仅重置失败项的「已尝试」标记后重试,已算好的指纹保留。

响应 ​

200 - 任务已启动 ​

类型: map[string]any

400 - chromaprint 不可用 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

POST /scan/fingerprints/cancel ​

中断指纹计算

停止正在运行的批量指纹计算任务并杀掉其 ffmpeg 子进程。指纹任务不挂在扫描的取消通道上(扫描「完成」后该通道已关闭),所以需要独立的取消入口。任务不在运行时返回 cancelled=false。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 返回 cancelled 字段 ​

类型: map[string]boolean

内容类型 ​

  • 响应: application/json

GET /scan/fingerprints/failed ​

获取指纹计算失败的歌曲列表

返回所有指纹计算失败的本地歌曲,包含失败原因。用于在重复检测页面展示失败详情。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 成功返回 {items: [...], total: N} ​

类型: map[string]any

500 - 服务器错误 ​

类型: map[string]string

内容类型 ​

  • 响应: application/json

GET /scan/fingerprints/progress ​

获取指纹计算进度

查询当前指纹计算任务的进度

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 计算进度 ​

类型: FingerprintProgress

字段类型必填说明
computedinteger否
failedinteger否
statusstring否idle, running, done, cancelled
totalinteger否

内容类型 ​

  • 响应: application/json

GET /scan/fingerprints/status ​

获取指纹计算状态

返回 ffmpeg chromaprint 可用性、本地歌曲指纹计算统计(含尝试失败数)以及「扫描后自动计算指纹」开关状态

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 指纹状态 ​

类型: FingerprintStatus

字段类型必填说明
auto_enabledboolean否AutoEnabled 扫描后是否自动计算指纹(config scan_auto_fingerprint)
chromaprint_availableboolean否ChromaprintAvailable ffmpeg 是否带 chromaprint muxer,false 时无法计算指纹
computedinteger否Computed 已有指纹的数量
failedinteger否Failed 尝试过但失败的数量(无音轨 / 文件损坏 / 超时),不会自动重试,
需要「重新计算全部」才会再试
missinginteger否Missing 尚未尝试过计算的数量(= total - computed - failed)
totalinteger否Total 本地歌曲总数

500 - 查询指纹统计失败 ​

类型: map[string]string

内容类型 ​

  • 响应: application/json

GET /scan/progress ​

获取扫描进度

获取当前扫描任务的进度信息

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 扫描进度信息 ​

类型: ScanProgress

字段类型必填说明
cleaned_filesinteger否清理的过期文件数
cue_split_sourcesinteger否splitting_cue 阶段已处理的 CUE 来源数
current_filestring否当前处理的文件
discovered_filesinteger否scanning 阶段已发现的音频文件数
end_timestring否结束时间
errorstring否错误信息
failed_filesinteger否失败的文件数
imported_filesinteger否已导入文件数
local_song_countinteger否扫描完成后数据库中本地歌曲总数
scanned_filesinteger否已扫描文件数
skipped_filesinteger否跳过的文件数(已存在)
start_timestring否开始时间
statusany否当前状态
total_filesinteger否总文件数

内容类型 ​

  • 请求: application/json
  • 响应: application/json

PUT /settings/auto-scan ​

更新自动扫描配置

设置自动扫描的启用状态和扫描间隔。interval_seconds 有效范围 [60, 86400]。更新后立即生效(无需重启)。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

自动扫描配置

类型: AutoScanSetting

字段类型必填说明
enabledboolean否
interval_secondsinteger否

响应 ​

200 - OK ​

类型: AutoScanSetting

字段类型必填说明
enabledboolean否
interval_secondsinteger否

400 - 请求格式错误或参数无效 ​

类型: map[string]string

500 - 保存配置失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /settings/auto-scan ​

获取自动扫描配置

返回自动扫描的启用状态和扫描间隔(秒)。默认关闭,间隔 3600 秒(1 小时)。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - OK ​

类型: AutoScanSetting

字段类型必填说明
enabledboolean否
interval_secondsinteger否

内容类型 ​

  • 响应: application/json

PUT /settings/music-path ​

更新音乐路径与扫描排除配置

写入 music_path 配置并触发 Scanner 重建 + 清理排除目录中的歌曲(与 admin /configs PUT 的副作用一致)。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

配置内容

类型: MusicPathSetting

字段类型必填说明
auto_create_exclude_dirsstring[]否
exclude_dirsstring[]否
exclude_pathsstring[]否
pathstring否

响应 ​

200 - OK ​

类型: MusicPathSetting

字段类型必填说明
auto_create_exclude_dirsstring[]否
exclude_dirsstring[]否
exclude_pathsstring[]否
pathstring否

400 - 请求格式错误 ​

类型: map[string]string

500 - 保存配置失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /settings/music-path ​

获取音乐路径与扫描排除配置

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - OK ​

类型: MusicPathSetting

字段类型必填说明
auto_create_exclude_dirsstring[]否
exclude_dirsstring[]否
exclude_pathsstring[]否
pathstring否

内容类型 ​

  • 响应: application/json

PUT /settings/scan-auto-create-playlists ​

更新「扫描后自动创建歌单」开关

控制扫描完成后是否根据音乐目录结构自动创建歌单。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

开关请求

类型: scanAutoCreatePlaylistsRequest

字段类型必填说明
enabledboolean否

响应 ​

200 - 返回 enabled 字段 ​

类型: map[string]boolean

400 - 请求格式错误 ​

类型: map[string]string

500 - 保存配置失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /settings/scan-auto-create-playlists ​

获取「扫描后自动创建歌单」开关

控制扫描完成后是否根据音乐目录结构自动创建歌单。默认启用(true)。关闭后扫描仅入库歌曲,不再自动建歌单。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 返回 enabled 字段 ​

类型: map[string]boolean

内容类型 ​

  • 响应: application/json

PUT /settings/scan-auto-fingerprint ​

更新「扫描后自动计算音频指纹」开关

开启后每次扫描结束会在后台为缺失指纹的本地歌曲计算 chromaprint 指纹(并发按 CPU 自适应,单文件采样前 120 秒,失败只尝试一次)。大音乐库开启前请留意 CPU 开销。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

开关请求

类型: scanAutoFingerprintRequest

字段类型必填说明
enabledboolean否

响应 ​

200 - 返回 enabled 字段 ​

类型: map[string]boolean

400 - 请求格式错误 ​

类型: map[string]string

500 - 保存配置失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /settings/scan-auto-fingerprint ​

获取「扫描后自动计算音频指纹」开关

控制扫描完成后是否自动为缺失指纹的本地歌曲计算 chromaprint 音频指纹。默认关闭(false):指纹只服务于「重复歌曲检测」和插件歌词/封面搜索,属按需功能,全库自动计算会长时间占用 CPU。关闭时可在重复检测页手动触发 POST /scan/fingerprints。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 返回 enabled 字段 ​

类型: map[string]boolean

内容类型 ​

  • 响应: application/json

PUT /settings/scan-playlist-mode ​

更新歌单创建方式

设置扫描后自动创建歌单的目录归并模式。directory:每个文件夹生成独立歌单;top_level:按一级子目录合并歌单;bubble_up:歌曲同时出现在所有上级文件夹歌单。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

模式请求

类型: scanPlaylistModeRequest

字段类型必填说明
modestring否可选值: directory, top_level, bubble_up 示例: "directory"

响应 ​

200 - 返回 mode 字段 ​

类型: scanPlaylistModeResponse

字段类型必填说明
modestring否示例: "directory"

400 - 请求格式错误或 mode 值非法 ​

类型: map[string]string

500 - 保存配置失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /settings/scan-playlist-mode ​

获取歌单创建方式

返回扫描后自动创建歌单的目录归并模式。directory:每个文件夹生成独立歌单;top_level:按一级子目录合并歌单;bubble_up:歌曲同时出现在所有上级文件夹歌单。默认 directory。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 返回 mode 字段 ​

类型: scanPlaylistModeResponse

字段类型必填说明
modestring否示例: "directory"

内容类型 ​

  • 响应: application/json

PUT /settings/scan-title-source ​

更新扫描标题来源配置

tag:优先使用音频标签中的标题;filename:始终使用文件名(不含扩展名)作为标题。切换后需以「重新导入」模式扫描才能生效。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

标题来源配置

类型: scanTitleSourceRequest

字段类型必填说明
title_sourcestring否可选值: tag, filename 示例: "tag"

响应 ​

200 - 返回 title_source 字段 ​

类型: scanTitleSourceRequest

字段类型必填说明
title_sourcestring否可选值: tag, filename 示例: "tag"

400 - 请求格式错误或参数无效 ​

类型: map[string]string

500 - 保存配置失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /settings/scan-title-source ​

获取扫描标题来源配置

tag:优先使用音频标签中的标题(默认);filename:始终使用文件名(不含扩展名)作为标题。切换后需以「重新导入」模式扫描才能生效。

需要认证

此接口需要 Bearer Token 认证

响应 ​

200 - 返回 title_source 字段 ​

类型: scanTitleSourceRequest

字段类型必填说明
title_sourcestring否可选值: tag, filename 示例: "tag"

内容类型 ​

  • 响应: application/json