图像生成

学习如何使用 TurboAPI 生成图像。

TurboAPI 提供统一访问领先的图像生成模型,包括 DALL-E 3、Midjourney 和 Stable Diffusion。

生成图像

import { TurboAPIClient } from '@turboapiai/sdk';

const client = new TurboAPIClient({
  apiKey: process.env.TURBOAPI_API_KEY,
});

// 调用图像生成 API
const task = await client.call.createAndWait('api-slug', {
  prompt: '金色阳光下的美丽山脉日落',
});

console.log(task.output);

图像到图像

转换现有图像:

const task = await client.call.createAndWait('api-slug', {
  image: imageBuffer,
  prompt: '将此图像转换为绘画风格',
});

参数

参数类型必需描述
input_paramsobjectAPI 特定的输入参数
webhook_urlstring异步完成通知的回调 URL
idempotency_keystring幂等键,防止重复创建任务

支持的模型

DALL-E 3

最先进的图像生成模型,支持高质量的文本到图像生成。

const task = await client.call.createAndWait('api-slug', {
  prompt: '一只穿着太空服的猫咪在月球上跳跃',
});

特点:

  • 高质量图像生成
  • 理解复杂的文本描述
  • 支持多种艺术风格

Midjourney

专业的艺术图像生成模型,特别适合创作风格独特的作品。

const task = await client.call.createAndWait('api-slug', {
  prompt: 'cyberpunk city at night, neon lights, rainy streets',
});

特点:

  • 艺术风格强烈
  • 适合创意设计
  • 支持多种艺术流派

Stable Diffusion XL

开源的高性能模型,支持自定义训练和微调。

const task = await client.call.createAndWait('api-slug', {
  prompt: 'fantasy landscape with dragons and castles',
  negative_prompt: 'blurry, low quality, distorted',
});

特点:

  • 开源模型
  • 支持负面提示词
  • 可自定义微调

高级功能

负面提示词

告诉模型不要生成什么内容:

const task = await client.call.createAndWait('api-slug', {
  prompt: '美丽的人像',
  negative_prompt: '模糊、低质量、变形、多余的肢体',
});

图像变体

基于现有图像生成变体:

const task = await client.call.createAndWait('api-slug', {
  image: imageBuffer,
});

图像修复

修复或编辑图像的特定区域:

const task = await client.call.createAndWait('api-slug', {
  image: originalImageBuffer,
  mask: maskBuffer, // 透明区域将被重新生成
  prompt: '在天空添加彩虹',
});

最佳实践

提示词技巧

  1. 具体描述
    好:一只毛茸茸的金色拉布拉多犬在公园草地上奔跑,阳光明媚
    坏:狗
    
  2. 风格指定
    好:赛博朋克风格的城市夜景,霓虹灯反射在雨湿的街道上
    差:城市夜景
    
  3. 质量关键词
    好:高质量照片,8K分辨率,专业摄影
    差:随便画个图
    

输入参数

每个 API 都有自己特定的输入参数。请查看具体 API 的文档了解支持的参数。

任务状态

创建任务后,您可以轮询任务状态:

const taskId = task.id;
const status = await client.call.get(taskId);
console.log(status.state); // 'pending' | 'running' | 'completed' | 'failed'

示例代码

批量生成

async function generateMultipleImages(prompts: string[]) {
  const results = await Promise.all(
    prompts.map((prompt) =>
      client.call.createAndWait('api-slug', { prompt })
    )
  );
  return results;
}

const prompts = ['日落时分的海滩', '雪山上的小木屋', '雨中的城市街道'];

const images = await generateMultipleImages(prompts);

图像下载和处理

import { writeFile } from 'fs/promises';

async function downloadOutput(url: string, filename: string) {
  const response = await fetch(url);
  const buffer = await response.arrayBuffer();

  await writeFile(filename, Buffer.from(buffer));
  console.log(`输出已保存到 ${filename}`);
}

// 使用示例
const task = await client.call.createAndWait('api-slug', {
  prompt: '彩色蝴蝶',
});

if (task.output?.url) {
  await downloadOutput(task.output.url, 'butterfly.png');
}
图像生成可能需要一些时间,特别是使用高质量设置时。请耐心等待。