New: Nano Banana 2.1Try the model
API Stock

API Stock 与 Eachlabs

Eachlabs 替代方案

比较 Eachlabs 与 API Stock 的 API 图片生成:共有模型价格,以及如何将 prediction 改为支持轮询或 webhook 的任务。

API Stock 与 Eachlabs 对比

何时选择 API Stock

如果应用已自行编排工作流,只需要每个步骤的生成 API,而非可视化平台,可选择 API Stock。

何时继续使用 Eachlabs

如果需要单次生成之外的工作流或平台工具,可保留 Eachlabs。多步流程需要重新构建,并逐一核查目录中是否有相应模型。

Eachlabs API 文档

横向滚动以查看表格的所有列。

API 迁移:从 Eachlabs 到 API Stock
集成细节EachlabsAPI Stock
请求POST /v1/prediction/POST /api/v1/generation/create
身份验证Authorization: BearerAuthorization: Bearer
模型标识符bytedance-seedream-v4-5-text-to-image / version: 0.0.1seedream-4-5

这里只比较下方示例模型,并非服务商的全部端点。模型同名不代表参数、审核规则或输出完全一致。

价格对比:Eachlabs 与 API Stock

选取双方共有的模型,按相同计费单位比较。我方价格来自当前目录;对方价格为附有核查日期和来源链接的记录。

价格对比:Eachlabs 与 API Stock
Seedream 4.52K · 每张图片 · 文本生成图片API Stock$0.036Eachlabs$0.04低 10%
Nano Banana每张图片 · 文本生成图片API Stock$0.015Eachlabs$0.04低 62.5%

文本生成单张图片,不含参考图片。此处为公开基础价格;订阅、批量折扣、其他分辨率和编辑可能影响最终费用。

工作量费用示例

Seedream 4.5 · 2K

按上述配置生成 1,000 张图片

API Stock
$36
Eachlabs
$40

Nano Banana

按上述配置生成 1,000 张图片

API Stock
$15
Eachlabs
$40

按上表计算的示例总价,不含批量折扣、订阅或付费附加选项。不代表相同延迟或完全一致的输出。

定价

从 Eachlabs 迁移

将 /v1/prediction 改为 /api/v1/generation/create,把带版本模型 id 和嵌套 input 映射为公开 id 及文档参数。将 webhook_url 改为 webhook,并适配结果解析。

  1. 1

    创建账号、充值预付余额并生成 API 密钥。

  2. 2

    向 /api/v1/generation/create 发送 POST,填写公开模型 id 和文档中的参数。每个任务生成一个结果。

  3. 3

    读取 taskId。轮询 GET /api/v1/task/status/TASK_ID,或创建时设置 webhook。

Eachlabs

bash
curl --fail-with-body 'https://api.eachlabs.ai/v1/prediction/' \
-H "Authorization: Bearer $EACHLABS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "bytedance-seedream-v4-5-text-to-image",
"version": "0.0.1",
"input": {
"prompt": "A ceramic mug on a wooden table, soft morning light",
"image_size": "landscape_16_9",
"num_images": 1,
"max_images": 1
}
}'

API Stock

bash
curl --fail-with-body 'https://api.api-stock.com/api/v1/generation/create' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "seedream-4-5",
"prompt": "A ceramic mug on a wooden table, soft morning light",
"resolution": "2K",
"size": "16:9"
}'
完整示例:创建任务并获取文件

在服务器上使用 Node 22+ 或 Bun,并设置 API_KEY。示例只创建一个付费任务,随后轮询而不重复创建。链接有效期有限,请将文件存入自己的存储。

javascript
import { writeFile } from "node:fs/promises";
const baseURL = "https://api.api-stock.com/api/v1";
const apiKey = process.env.API_KEY;
if (!apiKey) throw new Error("Set API_KEY on the server");
async function request(path, options = {}) {
const response = await fetch(baseURL + path, {
...options,
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
signal: AbortSignal.timeout(30_000),
});
if (!response.ok) throw new Error(await response.text());
return response.json();
}
const { taskId } = await request("/generation/create", {
method: "POST",
body: JSON.stringify({
"model": "seedream-4-5",
"prompt": "A ceramic mug on a wooden table, soft morning light",
"resolution": "2K",
"size": "16:9"
}),
});
if (!taskId) throw new Error("Missing taskId");
const deadline = Date.now() + 10 * 60_000;
let fileUrl;
while (Date.now() < deadline) {
const { data } = await request(`/task/status/${encodeURIComponent(taskId)}`);
if (data.status === "finished") {
fileUrl = data.files?.[0]?.fileUrl;
if (!fileUrl) throw new Error("Task finished without a file");
break;
}
if (data.status === "failed" || data.status === "expired") {
throw new Error(data.errorMessage || data.status);
}
await new Promise((resolve) => setTimeout(resolve, 2000));
}
if (!fileUrl) throw new Error(`Still processing: save taskId ${taskId} and resume polling`);
const file = await fetch(fileUrl, { signal: AbortSignal.timeout(60_000) });
if (!file.ok) throw new Error(`Download failed: ${file.status}`);
const mime = file.headers.get("content-type")?.split(";")[0];
const extension = { "image/png": "png", "image/jpeg": "jpg", "image/webp": "webp" }[mime] || "bin";
await writeFile(`generated-image.${extension}`, new Uint8Array(await file.arrayBuffer()));

将 API 密钥保存在服务器端。迁移生产流量前,先测试一个请求的参数、状态处理和输出。

常见问题

如何从 Eachlabs 迁移?

将 /v1/prediction 改为 /api/v1/generation/create,把带版本模型 id 和嵌套 input 映射为公开 id 及文档参数。将 webhook_url 改为 webhook,并适配结果解析。

API Stock 总比 Eachlabs 便宜吗?

并非如此。请比较表中具体模型、配置和计费单位。价格可能上涨或下降;迁移生产流量前请核查双方目录。

能迁移所有 Eachlabs 工作流吗?

如果需要单次生成之外的工作流或平台工具,可保留 Eachlabs。多步流程需要重新构建,并逐一核查目录中是否有相应模型。

失败或未完成的请求如何处理?

媒体任务按已配置路由重试,有可用备用服务商时才会切换。生成最终失败会退款。正在处理的任务应继续轮询,不要重复创建。文件链接过期不代表生成失败。

如何充值余额?

可用的付款方式、币种和最低充值金额会在付款前显示在您的账户中。无需订阅,模型使用费用从预付余额中扣除。

在 API Stock 尝试第一个请求

选择模型,确认参数和价格,再创建 API 密钥。迁移流量前先测试一个请求。