Skip to content

图像生成服务

支持角色一致性的多提供商图像合成。

概述

ImageGenerationService 提供对多种 AI 图像生成提供商的统一访问,包括 Seedream(MiniMax)、FLUX(Replicate)和 DALL-E(OpenAI)。

导入

typescript
import { imageGenerationService } from '@/core/services';

方法

generateImage()

从文本提示生成单个图像。

typescript
async generateImage(
  prompt: string,
  options?: ImageGenerationOptions
): Promise<ImageResult>

参数:

参数类型描述
promptstring图像描述
options.modelstring使用的模型
options.resolutionstring输出分辨率
options.qualitystring质量:standard/hd
options.characterIdstring用于角色一致性

返回:

typescript
interface ImageResult {
  imageUrl: string;         // 生成的图像 URL
  thumbnailUrl: string;     // 缩略图预览
  prompt: string;           // 原始提示词
  model: string;            // 使用的模型
  generationId: string;      // 提供商的 ID
  metadata?: {
    seed?: number;
    steps?: number;
    guidance?: number;
  };
}

示例:

typescript
const result = await imageGenerationService.generateImage(
  '一位武士站在传统日式寺庙前,日落时分,电影级灯光,4K',
  {
    model: 'seedream-5.0',
    resolution: '16:9',
    quality: 'hd',
  }
);

console.log(result.imageUrl);
// "https://cdn.plotcraft.app/images/abc123.png"

generateCharacterImage()

生成具有角色一致性的图像。

typescript
async generateCharacterImage(
  character: Character,
  prompt: string,
  options?: ImageGenerationOptions
): Promise<ImageResult>

示例:

typescript
import type { Character } from '@/shared/types';

const character: Character = {
  id: 'char_001',
  name: '英雄',
  consistency: {
    seed: 12345,
    referenceImages: ['https://example.com/ref1.png'],
  },
};

const result = await imageGenerationService.generateCharacterImage(
  character,
  '英雄站在森林中',
  { model: 'seedream-5.0' }
);
// 生成的图像保持视觉一致性

generateBatch()

批量生成多个图像。

typescript
async generateBatch(
  prompts: string[],
  options?: ImageGenerationOptions
): Promise<ImageResult[]>

示例:

typescript
const results = await imageGenerationService.generateBatch(
  [
    '场景 1:角色进入房间',
    '场景 2:角色发现线索',
    '场景 3:角色做出反应',
  ],
  { model: 'seedream-5.0' }
);

支持的模型

模型提供商适用场景分辨率
seedream-5.0MiniMax动漫、插画1024×1024
fluxReplicate写实、多样化1024×1024
dalle-3OpenAI创意、艺术1024×1024
sdxlStability稳定、可靠1024×1024
playgroundPlayground鲜艳色彩1024×1024

分辨率预设

预设尺寸宽高比
1:11024×1024正方形
16:91280×720宽屏
9:16720×1280竖屏
4:31024×768标准
3:21152×768照片

角色一致性

为保持角色外观一致:

typescript
// 1. 设置角色一致性种子
character.consistency = {
  seed: Math.floor(Math.random() * 999999),
  referenceImages: [uploadedRefUrl],
};

// 2. 在生成时使用 characterId
imageGenerationService.generateCharacterImage(
  character,
  '角色执行动作',
  { model: 'seedream-5.0' }
);

错误处理

typescript
try {
  const result = await imageGenerationService.generateImage(prompt);
} catch (error) {
  if (error.code === 'PROMPT_TOO_LONG') {
    // 缩短提示词
    return imageGenerationService.generateImage(shortenPrompt(prompt));
  }
  if (error.code === 'NSFW_CONTENT') {
    // 使用安全的提示词
    return imageGenerationService.generateImage(makeSafePrompt(prompt));
  }
  if (error.code === 'MODEL_UNAVAILABLE') {
    // 回退到其他模型
    return imageGenerationService.generateImage(prompt, { model: 'sdxl' });
  }
}

成本估算

模型单张图像成本
seedream-5.0~$0.05
dalle-3~$0.04
flux~$0.02
sdxl免费(本地)

最佳实践

  1. 提示词工程

    • 明确指定风格(动漫、写实)
    • 包含灯光、构图细节
    • 提及情绪/氛围
  2. 角色一致性

    • 始终使用相同的 characterId
    • 提供参考图像
    • 锁定种子数
  3. 性能

    • 多张相似图像使用批量生成
    • 缓存生成的图像
    • 使用较低分辨率进行预览
  4. 质量

    • 最终输出使用 HD 质量
    • 生成多张并选择最佳
    • 使用负面提示词排除不需要的元素

MIT License © 2026 Agions