ASMR 捏碎冷冻水果 App API
使用 asmr-crushing-frozen-fruits 可以生成一个 8 秒的文生视频 ASMR 场景:冷冻水果在玻璃杯中被压碎。
App id
asmr-crushing-frozen-fruits
在 /api/v1/apps/{app} 和 /api/v1/apps/{app}/generations 中使用这个 id。
输入参数
| 参数 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
|---|---|---|---|---|---|
fruit |
string | 是 | 无 | 任意文本 | 放入预设 ASMR prompt 的水果名称。 |
video_ratio |
string | 否 | 16:9 |
16:9、9:16 |
输出视频比例。 |
video_resolution |
string | 否 | 720p |
720p、1080p、4k |
输出分辨率。 |
该 app 固定生成 8 秒视频。最终 prompt 会由已配置模板生成,因此请求体中不需要传 prompt 字段。
计费
当前配置按生成视频时长和分辨率计费:
| 分辨率 | 花费 |
|---|---|
720p |
40 credits |
1080p |
40 credits |
4k |
120 credits |
计费基于该 app 固定的 8 秒视频时长。
查询 app 参数
curl https://img2vid.net/api/v1/apps/asmr-crushing-frozen-fruits \
-H "Authorization: Bearer $BUBLE_API_KEY"
响应示例:
{
"data": {
"id": "asmr-crushing-frozen-fruits",
"input_parameters": [
{
"name": "fruit",
"type": "string"
},
{
"name": "video_ratio",
"type": "string",
"values": ["16:9", "9:16"]
},
{
"name": "video_resolution",
"type": "string",
"values": ["720p", "1080p", "4k"]
}
]
}
}
创建生成任务
curl https://img2vid.net/api/v1/apps/asmr-crushing-frozen-fruits/generations \
-H "Authorization: Bearer $BUBLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fruit": "Strawberries",
"video_ratio": "16:9",
"video_resolution": "720p"
}'
响应示例:
{
"data": {
"id": "task_id",
"status": "pending"
}
}
查询结果
curl https://img2vid.net/api/v1/apps/asmr-crushing-frozen-fruits/generations/task_id \
-H "Authorization: Bearer $BUBLE_API_KEY"
成功响应结构:
{
"data": {
"id": "task_id",
"status": "success",
"result": {
"videos": [
{
"url": "https://..."
}
]
}
}
}
SDK 示例
下面的示例使用本页的 app id 和公开输入参数。片段假设你已经按快速开始初始化了 SDK client,并引入了对应语言需要的 SDK 类型。只发送 /api/v1/apps/{app} 返回的参数名;媒体参数需要传 URL。
JavaScript / TypeScript
const task = await buble.apps.generations.create(
'asmr-crushing-frozen-fruits',
{
fruit: 'Strawberries',
video_ratio: '16:9',
video_resolution: '720p',
}
);
const result = await buble.apps.generations.wait(
'asmr-crushing-frozen-fruits',
task.data.id
);
console.log(result.data.result?.videos?.[0]?.url);
Python
task = client.apps.generations.create(
"asmr-crushing-frozen-fruits",
fruit="Strawberries",
video_ratio="16:9",
video_resolution="720p",
)
result = client.apps.generations.wait("asmr-crushing-frozen-fruits", task["data"]["id"])
print(result["data"]["result"]["videos"][0]["url"])
Go
task, err := client.Apps.Generations.Create(ctx, "asmr-crushing-frozen-fruits", map[string]any{
"fruit": "Strawberries",
"video_ratio": "16:9",
"video_resolution": "720p",
})
if err != nil {
return err
}
result, err := client.Apps.Generations.Wait(ctx, "asmr-crushing-frozen-fruits", task.Data.ID)
Rust
let mut body = serde_json::Map::new();
body.insert("fruit".to_string(), serde_json::json!("Strawberries"));
body.insert("video_ratio".to_string(), serde_json::json!("16:9"));
body.insert("video_resolution".to_string(), serde_json::json!("720p"));
let task = client.apps().generations().create("asmr-crushing-frozen-fruits", body).await?;
let result = client
.apps()
.generations()
.wait("asmr-crushing-frozen-fruits", &task.data.id, WaitOptions::default())
.await?;
Swift
let task = try await client.apps.generations.create(
"asmr-crushing-frozen-fruits",
body: [
"fruit": "Strawberries",
"video_ratio": "16:9",
"video_resolution": "720p"
]
)
let result = try await client.apps.generations.wait("asmr-crushing-frozen-fruits", task.data.id)
Dart / Flutter
final task = await client.apps.generations.create('asmr-crushing-frozen-fruits', {
'fruit': 'Strawberries',
'video_ratio': '16:9',
'video_resolution': '720p',
});
final result = await client.apps.generations.wait('asmr-crushing-frozen-fruits', task.data.id);
Elixir
{:ok, task} =
Buble.Apps.Generations.create(client, "asmr-crushing-frozen-fruits", %{
fruit: "Strawberries",
video_ratio: "16:9",
video_resolution: "720p"
})
{:ok, result} = Buble.Apps.Generations.wait(client, "asmr-crushing-frozen-fruits", task["data"]["id"])
Java
Envelope<AppGenerationTask> task = client.apps().generations().create(
"asmr-crushing-frozen-fruits",
Map.of(
"fruit", "Strawberries",
"video_ratio", "16:9",
"video_resolution", "720p"));
Envelope<AppGenerationTask> result = client.apps().generations().wait(
"asmr-crushing-frozen-fruits",
task.getData().getId());
.NET
var task = await client.Apps.Generations.CreateAsync(
"asmr-crushing-frozen-fruits",
new Dictionary<string, object?>
{
["fruit"] = "Strawberries",
["video_ratio"] = "16:9",
["video_resolution"] = "720p"
});
var result = await client.Apps.Generations.WaitAsync(
"asmr-crushing-frozen-fruits",
task!.Data!.Id!);
PHP
$task = $client->apps()->generations()->create('asmr-crushing-frozen-fruits', [
'fruit' => 'Strawberries',
'video_ratio' => '16:9',
'video_resolution' => '720p',
]);
$result = $client->apps()->generations()->wait('asmr-crushing-frozen-fruits', $task['data']['id']);
Ruby
task = client.apps.generations.create("asmr-crushing-frozen-fruits", {
"fruit" => "Strawberries",
"video_ratio" => "16:9",
"video_resolution" => "720p"
})
result = client.apps.generations.wait("asmr-crushing-frozen-fruits", task.dig("data", "id"))
puts result.dig("data", "result", "videos", 0, "url")