跳到正文

Artwork API ​

专辑封面获取。支持 fb2k:// 协议 URL、Base64 dataUrl、批量获取等多种方式。共 13 个 API。

此 API 命名空间为 artwork.*,不支持别名。

封面获取方式对比 ​

方法返回格式适用场景推荐度
artwork.getFb2kUrl()fb2k:// URL当前播放曲目★★★★★
artwork.getFb2kUrlByPath()fb2k:// URL任意曲目懒加载★★★★★
artwork.getFb2kUrlByPathBatch()fb2k:// URL 数组批量封面★★★★★
artwork.getCurrent()Base64 dataUrl需要立即显示★★★
artwork.getForTrack()Base64 dataUrl单曲封面+缩放★★★

artwork.getFb2kUrl ​

(v1.1.7+)获取当前播放曲目的 fb2k://artwork/... URL。

参数类型必填默认值说明
typestring否front
maxSizeinteger否00 表示不缩放。

返回值: {"available":true,"dataUrl":"...","error":"...","reason":"...","type":"..."}

javascript
const result = await fb2k.invoke('artwork.getFb2kUrl', { maxSize: 300 });
if (result.available) document.getElementById('cover').src = result.dataUrl;

artwork.getFb2kUrlByPath ​

(v1.1.7+)根据曲目路径生成 fb2k://artwork/... URL。

参数类型必填默认值说明
pathstring是—
typestring否front
maxSizeinteger否00 表示不缩放。

返回值: {"available":true,"dataUrl":"...","error":"...","path":"...","type":"..."}

javascript
// 推荐:通过 API 获取 URL(最安全)
const result = await fb2k.invoke('artwork.getFb2kUrlByPath', {
    path: trackPath, type: 'front', maxSize: 300
});
img.src = result.dataUrl;

// 或手动拼接(使用 query param 格式,避免 Chromium 路径规范化问题)
function getCoverUrl(trackPath, maxSize = 300) {
    return `fb2k://artwork/?path=${encodeURIComponent(trackPath)}&type=front&maxSize=${maxSize}`;
}

artwork.getFb2kUrlByPathBatch ​

批量返回多个曲目的 fb2k:// URL。纯字符串拼接,不访问 SDK。

参数类型必填默认值说明
pathsarray否—路径数组;与 items 二选一,必须提供其中之一。
itemsarray否—条目为含 path 成员的对象;字符串条目请使用 paths。两参数必须恰好提供其一。
typestring否front
maxSizeinteger否00 表示不缩放。

返回值: {"artworks":"...","success":true}

javascript
// 100 张封面,单次 IPC 往返 (~2ms)
const tracks = await fb2k.invoke('playlist.getTracks', { count: 100 });
const result = await fb2k.invoke('artwork.getFb2kUrlByPathBatch', {
    paths: tracks.tracks.map(t => t.absolutePath),
    type: 'front', maxSize: 300
});

fb2k:// URL 格式参考 ​

fb2k://artwork/?path={encodedPath}&type={type}&maxSize={size}

getFb2kUrl* 虽然把结果放在 dataUrl 字段中,但该值不是标准 Data URL,也不是图片字节。它只由本组件 WebView2 的资源拦截器解析,适合当前 WebView 中即时赋给 <img src>;不要把它持久化、传给 file.write,也不要当作系统级 URL 使用。

需要真实图片内容时,应使用 getCurrent、getByPath、getForTrack、getByPlaylistItem 或 getBatch,它们返回标准 data:image/...;base64,...。落盘时取逗号后的裸 Base64 payload,再以 content: 'base64:' + payload 和 encoding: 'binary' 调用 file.write;传给 metadata.embedArtwork 时则只传裸 payload,不要带 Data URL 头或 base64:。

新格式(v1.4.0+)

路径放在 query string 的 path 参数中,避免 Chromium URL 规范化解码 %5C/%2F 导致 Windows 路径损坏。 旧格式 fb2k://artwork/{encodedPath}?type=... 仍向后兼容。

javascript
const artwork = await fb2k.invoke('artwork.getCurrent', { type: 'front' });
if (artwork.available) {
    const comma = artwork.dataUrl.indexOf(',');
    const payload = artwork.dataUrl.slice(comma + 1);
    await fb2k.invoke('file.write', {
        path: '%profile%\\cover.jpg',
        content: `base64:${payload}`,
        encoding: 'binary',
    });
}
用途maxSize预计大小
播放列表缩略图50-1002-5 KB
专辑网格200-30010-20 KB
当前播放封面400-60030-60 KB
高清大图1000+100-500 KB

Base64 封面 ​

artwork.getCurrent ​

获取当前播放曲目的封面图片。

参数类型必填默认值说明
typestring否front

返回值: {"available":true,"dataUrl":"...","error":"...","mimeType":"...","path":"...","reason":"...","size":0,"source":"...","type":"..."}

source 值说明
now_playing_manager当前 front 封面的缓存数据。
album_art_manager_v2由 album-art manager fallback 解析的封面。
extractor由文件 extractor fallback 直接解析的封面。

artwork.getByPath ​

通过文件路径获取封面。直接使用 album_art_extractor 提取器。

参数类型必填默认值说明
pathstring是—支持原生路径、file:// 与 路径|subsong:N。
typestring否front

返回值: {"available":true,"dataUrl":"...","error":"...","mimeType":"...","path":"...","size":0,"type":"..."}

路径 Contract

  • 支持: 原生路径、file:// 前缀、path|subsong:N(subsong 会被剥离,提取器以文件级别操作)
  • 拒绝: file-relative:// 路径会返回显式错误,请改用 artwork.getByPlaylistItem
  • 路径会在内部自动规范化(canonical path)

artwork.getForTrack ​

获取指定曲目的封面。支持嵌入式封面和外部封面文件。

参数类型必填默认值说明
pathstring是—支持原生路径、file:// 与 路径|subsong:N。
typestring否front

返回值: {"available":true,"dataUrl":"...","error":"...","height":0,"mimeType":"...","path":"...","size":0,"type":"...","width":0}

性能建议

列表/网格视图中使用 artwork.getCurrent 或 artwork.getByPlaylistItem 的 maxSize: 200 可将数据传输量从 ~2MB 减少到 ~15KB。artwork.getForTrack 不支持 maxSize 参数。

width / height 限制

width 和 height 仅对 PNG 格式封面返回实际尺寸。JPEG、GIF、BMP、WebP 格式返回值为 0。

WARNING

如果曲目路径是 file-relative:// 格式,请使用 artwork.getByPlaylistItem。

artwork.getByPlaylistItem ​

通过播放列表索引获取封面。推荐用于播放列表中的曲目,能正确处理相对路径。

参数类型必填默认值说明
playlistinteger否-1-1 表示活动播放列表。
indexinteger否-1-1 选中第 0 项。
typestring否front

返回值: {"available":true,"dataUrl":"...","error":"...","index":0,"mimeType":"...","playlist":0,"size":0,"type":"..."}

artwork.getAvailableTypes ​

获取曲目可用的封面类型列表。

参数类型必填说明
pathstring否省略时回退到当前播放曲目。

返回值: {"error":"...","success":true,"types":"..."}

artwork.getAvailableArtwork ​

获取曲目所有可用的封面类型及来源。同时检查嵌入式封面和外部封面文件(cover.jpg/folder.jpg 等)。

参数类型必填说明
pathstring是支持 路径|subsong:N。

返回值:

json
{
    "success": true,
    "available": true,
    "artworks": [
        { "type": "front", "source": "embedded" }
    ],
    "sources": ["embedded", "folder:cover.jpg"]
}

artwork.getFolderImages ​

获取文件夹中所有图片文件。

参数类型必填说明
directorystring是要扫描的目录,受 Read 安全级别保护。

支持的图片格式: .jpg, .jpeg, .png, .gif, .bmp, .webp

返回值:

json
{
    "success": true,
    "images": [
        { "name": "cover.jpg", "path": "C:\\Music\\Album\\cover.jpg", "size": 123456 }
    ]
}

artwork.getLyrics ​

获取曲目的歌词(从元数据标签中读取)。显式传入 path 时会自动规范化路径。

参数类型必填说明
pathstring否省略时回退到当前播放曲目。

返回值: {"available":true,"error":"...","lyrics":"...","synced":"...","tag":"..."}

支持的歌词标签: LYRICS, UNSYNCED LYRICS, UNSYNCEDLYRICS, SYNCEDLYRICS, SYNCED LYRICS

artwork.getMetadata ​

获取曲目的基本元数据信息。显式传入 path 时会自动规范化路径。

参数类型必填说明
pathstring否省略时回退到当前播放曲目。

返回值: {"album":"...","albumArtist":"...","artist":"...","available":true,"discNumber":"...","error":"...","genre":"...","hasEmbedded":true,"hasLyrics":true,"title":"...","trackNumber":"...","year":"..."}

artist / albumArtist / genre / composer(仅指该 API 实际返回的字段)的多值标签按 , 原序拼接,不去重。

artwork.getBatch(DEPRECATED) ​

已废弃

请迁移到 artwork.getFb2kUrlByPathBatch。此 API 仍返回 Base64 dataUrl,性能较差。

javascript
// ❌ 旧方式
const result = await fb2k.invoke('artwork.getBatch', { paths });

// ✅ 新方式
const result = await fb2k.invoke('artwork.getFb2kUrlByPathBatch', { paths, type: 'front' });

其他公开 API ​

artwork.getBatch ​

参数类型必填默认值说明
pathsarray是—文件路径数组。
typestring否front

返回值: {"artworks":"...","error":"...","success":true}

js
const { artworks } = await fb2k.invoke('artwork.getBatch', {
	paths: ['C:\\Music\\a.flac', 'C:\\Music\\b.flac'],
});

使用说明 ​

  • 有效的 artwork type 为 front(也可用 cover_front)、back(也可用 cover_back)、disc、icon 和 artist。省略 type 时使用 front;未知值会返回 INVALID_PARAMS。
  • artwork.getByPath 和 artwork.getForTrack 接受原生路径、file:// 路径和 path|subsong:N。它们拒绝 file-relative://,因为 extractor 没有播放列表上下文;此类条目请用 artwork.getByPlaylistItem。
  • 直接读取封面会返回 data:image/... URL。artwork.getFb2kUrl 及其路径变体则在 dataUrl 字段返回 fb2k://artwork/ URL。仅当 maxSize 大于 0 时才应用缩放。
  • artwork.getFb2kUrlByPathBatch 必须提供一个名为 paths 或 items 的数组。数组条目可以是字符串,或含有 path 成员的对象;它没有顶层 path 参数。返回 { success, artworks },每个输入条目对应一个 available 或 error 结果。
  • artwork.getAvailableArtwork 会报告嵌入项和 folder:cover.jpg 等外部来源标签。它通过 album_art_extractor 打开文件;未找到封面以 available: false 表示,不一定是错误。
  • artwork.getFolderImages 读取目录中的 .jpg、.jpeg、.png、.gif、.bmp 和 .webp 文件;directory 参数受运行时 Read 安全级别保护。