跳到主要内容

Node SDK 调用

通过 @cloudbase/node-sdk 在云函数或云托管中调用混元生图模型,支持自定义尺寸、prompt 改写和 thinking 模式。

说明

图片生成功能仅支持在服务端(云函数/云托管)中调用,小程序和 Web 端不支持直接调用。

前置条件

  • 已开通云开发环境
  • 生图资源:小程序成长计划赠送的生图资源

安装

npm install @cloudbase/node-sdk

创建生图云函数

新建云函数,安装依赖后填入以下代码:

const cloudbase = require('@cloudbase/node-sdk')
const app = cloudbase.init({ env: process.env.ENV_ID })
const ai = app.ai()

exports.main = async (event) => {
const { prompt, size = '1024x1024' } = event

const imageModel = ai.createImageModel('hunyuan-image')
const res = await imageModel.generateImage({
model: 'hunyuan-image-v3.0-v1.0.4',
prompt,
size,
revise: { value: true },
enable_thinking: { value: false },
})

return {
url: res.data[0].url, // 图片 URL,24 小时有效
revisedPrompt: res.data[0].revised_prompt,
}
}
超时时间

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

在 Web 页面中调用

Web 页面通过 @cloudbase/js-sdk 调用云函数:

npm install @cloudbase/js-sdk
import cloudbase from '@cloudbase/js-sdk'

const app = cloudbase.init({ env: 'your-env-id' })
await app.auth().anonymousAuthProvider().signIn()

const res = await app.callFunction({
name: 'generateImage',
data: {
prompt: '一只胖胖的橘猫坐在窗台上打盹,水彩风格,温暖色调',
size: '1024x1024',
},
})

console.log(res.result.url) // 图片 URL
console.log(res.result.revisedPrompt) // 改写后的 prompt

保存图片到云存储

生成的图片 URL 24 小时后失效,建议在云函数中直接将图片上传至云存储:

const https = require('https')
const cloudbase = require('@cloudbase/node-sdk')
const app = cloudbase.init({ env: process.env.ENV_ID })
const ai = app.ai()

exports.main = async (event) => {
const { prompt } = event

// 生成图片
const imageModel = ai.createImageModel('hunyuan-image')
const res = await imageModel.generateImage({
model: 'hunyuan-image-v3.0-v1.0.4',
prompt,
revise: { value: true },
enable_thinking: { value: false },
})

// 下载图片并上传到云存储
const imageBuffer = await downloadImage(res.data[0].url)
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)
})
})
}