Logo
RavenSaaS Docs

图片生成

RavenSaaS 使用 ai-sdk 作为基础库,结合自定义的 Provider,支持了市面上主流的图片生成模型。

使用 OpenAI 的图片模型

使用 OpenAI 的 dall-e-3 模型生成图片:

需要先在 OpenAI Platform 充值,并创建 API Key。

其他平替平台例如 ChatBox,也是可以的,只需要修改OPENAI_BASE_URL和OPENAI_API_KEY即可。

1. 设置环境变量

.env.development
1OPENAI_BASE_URL = "https://api.openai.com/v1"
2OPENAI_API_KEY = "sk-xxx"

2. 生成图片

providerOptions.openai 支持的参数,参考 OpenAI Image Generation 接口文档

app/api/demo/gen-image/route.ts
1import { experimental_generateImage as generateImage } from "ai";
2import { openai } from "@ai-sdk/openai";
3
4const prompt = "a beautiful girl running with 2 cats";
5const model = "dall-e-3";
6
7const imageModel = openai.image(model);
8const providerOptions = {
9  openai: {
10    quality: "hd",
11    style: "natural",
12  },
13};
14
15const { images, warnings } = await generateImage({
16  model: imageModel,
17  prompt: prompt,
18  n: 1,
19  providerOptions,
20});

3. 预览效果

OpenAI 图片生成效果
OpenAI 图片生成效果

使用 Replicate 上的图片模型

需要先在 Replicate 上绑定信用卡,并创建 API Token。

1. 设置环境变量

.env.development
1REPLICATE_API_TOKEN = "r8_xxx"

2. 生成图片

在 Replicate 模型广场 选择一个图片生成模型,复制模型名称。

providerOptions.replicate 支持的参数,参考选择模型的 API 文档

app/api/demo/gen-image/route.ts
1import { experimental_generateImage as generateImage } from "ai";
2import { replicate } from "@ai-sdk/replicate";
3
4const prompt = "a beautiful girl running with 2 cats";
5const model = "black-forest-labs/flux-1.1-pro";
6
7const imageModel = replicate.image(model);
8const providerOptions = {
9  replicate: {
10    output_quality: 90,
11  },
12};
13
14const { images, warnings } = await generateImage({
15  model: imageModel,
16  prompt: prompt,
17  n: 1,
18  providerOptions,
19});

3. 预览效果

Replicate 图片生成效果
Replicate 图片生成效果

使用 Kling AI 的图片模型

需要先在 Kling AI 充值 Image Generation API,并 创建 API Key。

1. 设置环境变量

.env.development
1KLING_ACCESS_KEY = "xxx"
2KLING_SECRET_KEY = "xxx"

2. 生成图片

注意

这里使用的是 RavenSaaS 自定义的 Provider:import '{ kling }' from "@/aisdk/kling";,跟 @ai-sdk 下的 Provider 导入路径有差异。

providerOptions.kling 支持的参数,参考 Kling Image Generation API 文档

app/api/demo/gen-image/route.ts
1import { experimental_generateImage as generateImage } from "ai";
2import { kling } from "@/aisdk/kling";
3
4const prompt = "a beautiful girl running with 2 cats";
5const model = "kling-v1";
6
7const imageModel = kling.image(model);
8const providerOptions = {
9  kling: {},
10};
11
12const { images, warnings } = await generateImage({
13  model: imageModel,
14  prompt: prompt,
15  n: 1,
16  providerOptions,
17});

保存图片到本地文件

通过 generateImage 生成的图片,是 base64 编码的字符串数组。

你可以参考下面的代码,将图片内容保存到本地文件。

app/api/gen-image/route.ts
1const { images, warnings } = await generateImage({
2  model: imageModel,
3  prompt: prompt,
4  n: 1,
5  providerOptions,
6});
7
8if (warnings.length > 0) {
9  console.log("gen images warnings:", provider, warnings);
10  return respErr("gen images failed");
11}
12
13const batch = getUuid();
14
15const processedImages = await Promise.all(
16  images.map(async (image, index) => {
17    const fileName = `${provider}_image_${batch}_${index}.png`;
18    const filePath = path.join(process.cwd(), ".tmp", fileName);
19
20    const buffer = Buffer.from(image.base64, "base64");
21    await writeFile(filePath, buffer);
22
23    return {
24      provider,
25      fileName,
26      filePath,
27    };
28  })
29);

参考

ai-sdk generateImage

AI SDK 图片生成核心文档

查看文档

OpenAI Image Generation

OpenAI 图片生成 API 文档

查看文档

Kling AI Documentation

Kling AI 官方文档

查看文档

Replicate Docs

Replicate 平台文档

查看文档