AIFooler API 接入文档
Base URL:https://www.aifooler.com/api/v1。提供人声分离的上传、提交、查询和下载接口。
快速开始
先登录并创建 Key,将它保存为服务端环境变量。按上传 → 提交 → 查询 → 下载四步调用。以下查询步骤只执行一次,任务未完成时由你的业务定时再次查询;成功后再执行下载。
Python 3 · 先安装 requests:pip install requests
import os, requests
base = "https://www.aifooler.com/api/v1"
headers = {"Authorization": "Bearer " + os.environ["AIFOOLER_API_KEY"]}
# 1. 上传文件
with open("song.wav", "rb") as audio:
response = requests.post(base + "/uploads", headers=headers, files={"file": audio})
response.raise_for_status()
file = response.json()
# 2. 提交分离任务
response = requests.post(base + "/jobs/separate",
headers=headers,
json={"file_id": file["id"], "profile_id": "vocal_background"})
response.raise_for_status()
job = response.json()
print(job["id"])
# 3. 稍后查询任务;未完成时,每隔 3–5 秒再次查询此接口
response = requests.get(base + "/jobs/" + job["id"], headers=headers)
response.raise_for_status()
result = response.json()
print(result["status"])
# 4. 任务成功后,使用返回的地址下载音轨
if result["status"] == "succeeded":
for track in result["artifacts"]:
response = requests.get("https://www.aifooler.com" + track["download_url"], headers=headers)
response.raise_for_status()
with open(track["name"] + ".audio", "wb") as output:
output.write(response.content)认证与密钥
Authorization: Bearer afk_…每个账户最多 5 个有效 Key;完整 Key 只在创建时展示一次,删除后新请求立即失效。每个文件、任务和下载都校验账户归属。Key 不可以替代网站登录态,也不能用于会员管理或支付接口。
接口参考
账户与处理预设
查询可用时长,选择人声分离的处理方式。
GET /account/quota返回 available_seconds、reserved_seconds、used_seconds、total_seconds、membership_active 和 key_id。所有时长以秒为单位。
GET /operation-presets读取公开预设,使用返回的 id 作为 profile_id。完整取值、用途及输出音轨见下方模型参数表。
上传音频
POST /uploadsmultipart/form-data 上传 file。成功返回 201:id、file_name、duration_seconds 和 size_bytes。上传不扣处理时长,但需要有效会员和正余额。本站不额外设置上传有效期,上游文件须仍可读取。
提交分离任务
POST /jobs/separateJSON:file_id、profile_id;可选提供 8–128 个可见 ASCII 字符的 Idempotency-Key,防止重试重复创建;不提供时每次请求创建新任务。返回 200 及任务 id(仅表示受理成功,处理仍为异步,请继续查询任务状态)。相同账户、相同幂等键和参数返回原任务;不同参数返回 409。使用幂等键的请求,重试时复用原键。
任务历史
GET /jobs返回本账户最近 50 条 API 任务。
查询任务结果
GET /jobs/{id}使用提交任务返回的 id 查询。详情返回状态、输入时长、计费秒数和结算状态。成功时包含 artifacts,每个产物提供 name、display_label、站点根相对 download_url。不要将下载路径再次拼接到 /api/v1 后。
下载分离音轨
任务成功后,直接请求详情中每条音轨的 download_url,无需自行拼接路径。这一步用于取得人声和伴奏文件。
GET /jobs/{id}/artifacts/{name}携带同一账户的有效 API Key 下载,支持单段 Range。本站转发文件,不向调用者返回上游地址。每次下载都会检查有效会员资格;会员过期无法下载。本站不额外设置结果有效期,上游文件失效时返回下载错误。
创建任务参数
以下为完整可配置字段。模型通过 profile_id 选择,不直接传网站内部的 model 编号。两个字段都必填且没有默认值;额外字段会返回 400。当前不接受自定义 stem、输出格式、采样率或客户端申报的时长,时长由服务器解析。
| 位置 | 参数 | 类型 / 必填 | 说明 |
|---|---|---|---|
| Header | Authorization | string / 是 | Bearer API Key |
| Header | Content-Type | string / 是 | application/json |
| Header | Idempotency-Key | string / 否 | 8–128 个可见 ASCII 字符,同一请求重试复用原键 |
| JSON | file_id | string / 是 | 上传返回的 id(UUID),须属于当前账户且上游文件可用 |
| JSON | profile_id | string / 是 | 下表或 GET /operation-presets 返回的 id |
模型与处理预设
与人声分离页共享模型配置;每个预设自动设置对应处理模型和输出音轨。所有预设均按输入音频时长计费,切换模型需要创建新任务并使用新的幂等键。
| profile_id | 模型 / 用途 | 输出音轨 |
|---|---|---|
| speech_overlap | 重叠说话人声分离可分离两个人的说话声/影视对白分离 | 人声1(speech0)、人声2(speech1) |
| choir | 合唱人声音色分离可分离男女声/和声,适合合唱团或和声分析 | 男声(male)、女声(female) |
| debleed | 漏音/串音消除用于多轨录音中麦克风串音抑制,提升轨道纯净度 | 泄露(bleed)、伴奏(instrumental) |
| harmony | 和声 / 非和声智能提取可精准提取歌曲中的和声部分 / 非和声声部独立分离 | 和声(vocals)、非和声部分(instrumental) |
| instrumental_kim_v2 | 伴奏提取(Kim版 V2)升级版伴奏模型,进一步优化乐器分离 | 人声(vocals)、伴奏(instrumental) |
| karaoke | 卡拉OK伴奏制作专为K歌场景优化,强力去除人声,保留清晰伴奏 | 人声(vocals)、伴奏(instrumental) |
| dereverb | 去混响(Roformer by anvuew)Roformer架构去混响,SDR高达19.17 | 去除混响部分(noreverb)、混响部分(reverb) |
| strong_noise | 强噪声场景录音升级版伴奏模型,进一步优化乐器分离 | 干声(dry)、其他(other) |
| vocal_background | 人声提取(微调增强版)Roformer微调版,进一步增强人声表现力 | 人声(vocals)、伴奏(other) |
| high_fidelity | 通用高保真人声/伴奏分离高质量通用模型,适合大多数流行音乐分离 | 人声(vocals)、伴奏(instrumental) |
| dry_vocal | 人声去混响(干声输出)专用于去除录音中的房间混响,输出干净人声 | 干声(dry)、非干声(no dry) |
| breath | 呼吸声/吐字音分离专门分离人声中的呼吸声、气音、咬字细节 | 呼吸声/气声(aspiration)、其他(other) |
| breath_soft | 呼吸声分离(弱化版)呼吸声分离的温和版本,保留更多主音色 | 呼吸声/气声(aspiration)、其他(other) |
| vocal_kim | 人声提取(Kimberley版)Kimberley优化版Roformer,专注人声提取质量 | 人声(vocals)、其他(other) |
| instrumental_kim_v1 | 伴奏提取(Kim版 V1)Kimberley版Roformer,专注伴奏提取质量 | 人声(vocals)、伴奏(instrumental) |
| band_split | 人声/伴奏分离(Band-split)标准Band-split Roformer,平衡性能与质量 | 人声(vocals)、伴奏(instrumental) |
| band_split_enhanced | 人声/伴奏分离(Band-split)迭代版Band-split Roformer,小幅优化 | 人声(vocals)、伴奏(instrumental) |
| dereverb_band_split | 去混响(Band-split Roformer)基于Band-split Roformer的去混响专用模型 | 去除混响部分(noreverb)、混响部分(reverb) |
| background_noise | 背景噪声抑制擅长处理复杂环境噪声,适合户外录音净化。 | 干声(dry)、其他(other) |
{"file_id":"上传返回的 UUID","profile_id":"harmony"}例如使用 harmony 提取和声,使用 vocal_background 分离人声与伴奏,使用 dereverb 去混响。GET /operation-presets 返回 data 数组,每项包含 id、name、description、billing 和 outputs(name、display_label),以接口实际返回的列表为准。
状态与结算
HTTP 200 表示创建请求已成功受理,不代表处理完成。queued → submitting → processing → succeeded / failed。创建请求超时或受理结果不明确时为 uncertain,保留额度等待核对;查询无法消除不确定性时请联系支持,不要更换幂等键重复提交。billing_state 为 reserved、charged 或 released。
计费与共享余额
- 计费沿用网页规则,将服务器解析的音频时长向下取整为整数秒(Math.floor)。例如 200.9 秒计为 200 秒,不足 1 秒计为 0 秒,多个输出音轨只计一次。
- 提交前原子预留,处理成功结算,明确失败释放;查询和下载不重复扣处理时长。
- 网页版和 API 使用同一账户时长余额,不能消费网页免费次数。
- 创建 Key、上传、提交任务、查询和下载需要有效会员。会员过期后 Key 不删除,但调用被拒绝;已受理任务继续处理并结算。
- 已受理任务不受 Key 后续删除影响,仍会处理并结算。当前不开放取消接口。
限制与错误
所有调用统一使用 Authorization: Bearer API Key,无需打开网页或保持网页登录。
- 账户必须为有效会员(未到期或终身会员),每个账户最多 5 个有效 Key;删除后的 Key 立即不能调用。
- 文件、任务、历史和下载按账户隔离,只能访问本账户资源。
- 上传时需有可用处理时长;提交时可用余额须足够支付整个音频,否则返回 402。查询和下载不额外扣费,余额耗尽仍可查询和下载已完成任务。
- 本站不设置调用频率、并发、任务数量、文件大小和音频时长上限。文件须非空且能被上游解析为音频,实际上游及部署网关能力仍决定文件是否可处理;本站不承诺无限文件大小。
- 上传仅接受一个 file 字段;提交 JSON 仅接受必填的 file_id、profile_id。预设须来自下表,时长由服务器解析,不能由调用方指定。
- 幂等键可选;填写时需为 8–128 个不含空格的可见 ASCII 字符,相同键不能用于不同参数。
- 本站不额外设置上传和结果的过期时间;上游文件失效后将无法处理或下载。
- Key 名称为 1–80 个字符。JSON 请求体最多 8 KiB;上游普通接口请求超时 60 秒,准备上传 30 秒、上传 120 秒,下载连接超时 30 秒。下载支持单段 Range。任务历史接口返回最近 50 条,控制台显示最近 20 条调用。
| HTTP | 错误码示例 | 处理方式 |
|---|---|---|
| 400 | invalid_fields / invalid_profile / idempotency_key_required | 检查参数 |
| 401 | invalid_api_key | 检查 Key 是否正确或已删除 |
| 402 | insufficient_minutes | 充值或等待预留释放 |
| 403 | membership_required | 开通或续费会员 |
| 404 | file_not_found / job_not_found / artifact_not_found | 检查资源及账户归属 |
| 409 | idempotency_conflict / job_not_ready / key_limit_reached | 检查幂等键、任务状态或有效 Key 数量 |
| 413 / 422 | media_too_large / invalid_duration / audio_required | 检查非空文件及有效音频时长 |
| 502 / 503 | upstream_rejected / service_unavailable | 检查服务状态,使用原幂等键重试 |
{"error":{"code":"insufficient_minutes","message":"账户可用时长不足,请充值或等待其他任务结束"}}