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:99:16 输出视频比例。
video_resolution string 720p 720p1080p4k 输出分辨率。

该 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")