跳到主要内容

JS SDK 调用

通过 @cloudbase/js-sdk 直接调用混元生图模型,无需通过云函数中转。

注意

图片生成功能依赖 @cloudbase/js-sdk v3.17.0 或更高版本,且仅限在服务端环境(Node.js)中使用。Web 端浏览器环境不直接支持生图调用,如需在 Web 端生图,请使用 Node SDK 创建云函数中提供服务端接口后,通过 Web 端调用云函数。

前置条件

  • 已开通云开发环境
  • @cloudbase/js-sdk v3.17.0 或更高版本
  • 生图资源:小程序成长计划赠送的生图资源

安装

npm install @cloudbase/js-sdk

如需按需引入,还需注册 AI 模块:

import cloudbase from "@cloudbase/js-sdk/app";
import { registerAi } from "@cloudbase/js-sdk/ai";
registerAi(cloudbase);

使用示例

基本生图

import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({
env: "your-env-id",
});

const ai = app.ai();

const imageModel = ai.createImageModel("hunyuan-image");
imageModel.generateImageSubUrlConfig["hunyuan-image"]["HY-Image-3.0-Plus-4090-Tob-v1.0"] =
"images/ar/generations";

const res = await imageModel.generateImage({
model: "HY-Image-3.0-Plus-4090-Tob-v1.0",
prompt: "一只胖胖的橘猫坐在窗台上打盹,水彩风格,温暖色调",
size: "1024x1024",
revise: { value: true },
});

console.log(res.data[0].url); // 图片 URL,24 小时有效
console.log(res.data[0].revised_prompt); // 改写后的 prompt

自定义参数

支持自定义图片尺寸、prompt 改写和 thinking 模式等参数:

const app = cloudbase.init({ env: "your-env-id" });
const ai = app.ai();

const imageModel = ai.createImageModel("hunyuan-image");
imageModel.generateImageSubUrlConfig["hunyuan-image"]["HY-Image-3.0-Plus-4090-Tob-v1.0"] =
"images/ar/generations";

const res = await imageModel.generateImage({
model: "HY-Image-3.0-Plus-4090-Tob-v1.0",
prompt: "赛博朋克风格的未来城市夜景,霓虹灯光,雨夜",
size: "768x1024", // 自定义尺寸,竖屏
seed: 42, // 固定种子,相同种子可复现相同图片
footnote: "Generated by Cloudbase", // 自定义水印
revise: { value: true }, // 开启 prompt 改写
});

参数说明

ImageModel.generateImage

generateImageSubUrlConfig

在调用 generateImage 前,需要配置子路径映射:

imageModel.generateImageSubUrlConfig["hunyuan-image"]["HY-Image-3.0-Plus-4090-Tob-v1.0"] =
"images/ar/generations";

输入参数

interface HunyuanARGenerateImageInput {
model: "HY-Image-3.0-Plus-4090-Tob-v1.0";
prompt: string; // 生成图片使用的文本,不超过 8192 字符
size?: string; // 图片尺寸,格式 "${宽}x${高}",默认 "1024x1024"
seed?: number; // 生成种子,范围 [1, 4294967295]
footnote?: string; // 自定义水印,限制 16 字符
revise?: { value: boolean }; // 是否对 prompt 改写,默认开启
}

返回值

interface HunyuanARGenerateImageOutput {
id: string;
created: number;
data: Array<{
url: string; // 图片 URL,24 小时有效
revised_prompt?: string; // 改写后的 prompt
}>;
}

完整示例

import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({
env: process.env.ENV_ID,
});

const ai = app.ai();

async function generateImage(prompt, options = {}) {
const imageModel = ai.createImageModel("hunyuan-image");
imageModel.generateImageSubUrlConfig["hunyuan-image"]["HY-Image-3.0-Plus-4090-Tob-v1.0"] =
"images/ar/generations";

const res = await imageModel.generateImage({
model: "HY-Image-3.0-Plus-4090-Tob-v1.0",
prompt,
size: options.size || "1024x1024",
seed: options.seed,
footnote: options.footnote,
revise: { value: options.revise !== false },
});

return {
url: res.data[0].url,
revisedPrompt: res.data[0].revised_prompt,
};
}

// 使用
const { url, revisedPrompt } = await generateImage(
"一幅水墨山水画,远山近水,意境悠远",
{ size: "1024x768" }
);
console.log("图片地址:", url);
console.log("改写后的 prompt:", revisedPrompt);

保存图片到云存储

生成的图片 URL 24 小时后失效,建议将图片下载后保存至云存储:

import https from "https";
import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({ env: process.env.ENV_ID });
const ai = app.ai();

async function generateAndSave(prompt) {
// 1. 生成图片
const imageModel = ai.createImageModel("hunyuan-image");
imageModel.generateImageSubUrlConfig["hunyuan-image"]["HY-Image-3.0-Plus-4090-Tob-v1.0"] =
"images/ar/generations";

const res = await imageModel.generateImage({
model: "HY-Image-3.0-Plus-4090-Tob-v1.0",
prompt,
revise: { value: true },
});

// 2. 下载图片
const imageBuffer = await downloadImage(res.data[0].url);

// 3. 上传到云存储
const uploadRes = await app.uploadFile({
cloudPath: `ai-images/${Date.now()}.jpg`,
fileContent: imageBuffer,
});

return {
fileID: uploadRes.fileID,
revisedPrompt: res.data[0].revised_prompt,
};
}

function downloadImage(url) {
return new Promise((resolve, reject) => {
https.get(url, (response) => {
const chunks = [];
response.on("data", (chunk) => chunks.push(chunk));
response.on("end", () => resolve(Buffer.concat(chunks)));
response.on("error", reject);
});
});
}
超时提示

图片生成耗时较长(开启 revise 改写约增加 30 秒,开启 thinking 模式最长增加 60 秒),在云函数中调用时建议将超时时间设置为 900 秒