Skip to content

图生图

使用文本提示词转换现有图像,同时保留原始图像的元素。

基本用法

typescript
import { NovelAI } from 'novelai-sdk-unofficial';
import { readFileSync, writeFileSync } from 'fs';

const client = new NovelAI({ apiKey: 'your-api-key' });

const inputImage = readFileSync('input.png');

const images = await client.image.generate({
  prompt: 'cyberpunk style, neon lights',
  model: 'nai-diffusion-4-5-full',
  i2i: {
    image: inputImage,
    strength: 0.5,
  },
});

writeFileSync('output.png', images[0]);

参数说明

参数类型默认值描述
imageImageInput必填输入图像
strengthnumber0.7转换强度 (0.01-0.99)
noisenumber0额外噪声 (0-0.99)
maskImageInput可选局部重绘蒙版

强度参数

strength 参数控制输出与输入的差异程度:

  • 低 (0.1-0.3):轻微变化,保留大部分原始内容
  • 中 (0.4-0.6):平衡转换
  • 高 (0.7-0.9):大幅变化,保留较少原始内容
typescript
// 轻微增强
i2i: { image: input, strength: 0.2 }

// 适度转换
i2i: { image: input, strength: 0.5 }

// 大幅转换
i2i: { image: input, strength: 0.8 }

噪声参数

添加噪声可以增加创造性,但可能降低连贯性:

typescript
i2i: {
  image: input,
  strength: 0.5,
  noise: 0.1, // 轻微噪声增加变化
}

局部重绘

使用蒙版选择性地转换图像的部分区域:

typescript
const inputImage = readFileSync('input.png');
const maskImage = readFileSync('mask.png'); // 白色 = 转换,黑色 = 保留

const images = await client.image.generate({
  prompt: 'blue hair',
  i2i: {
    image: inputImage,
    strength: 0.7,
    mask: maskImage,
  },
});

蒙版格式

  • 白色区域:将被转换
  • 黑色区域:将被保留
  • 灰色区域:部分转换

示例

风格迁移

typescript
const images = await client.image.generate({
  prompt: 'oil painting style, impressionist',
  i2i: {
    image: photoImage,
    strength: 0.6,
  },
});

颜色校正

typescript
const images = await client.image.generate({
  prompt: 'vibrant colors, high contrast',
  i2i: {
    image: inputImage,
    strength: 0.3,
  },
});

背景更换

typescript
// 使用覆盖背景的蒙版
const images = await client.image.generate({
  prompt: 'beach sunset background',
  i2i: {
    image: inputImage,
    strength: 0.8,
    mask: backgroundMask,
  },
});

角色服装更换

typescript
// 使用覆盖服装的蒙版
const images = await client.image.generate({
  prompt: 'wearing a red dress',
  i2i: {
    image: inputImage,
    strength: 0.7,
    mask: outfitMask,
  },
});

提示

  1. 匹配尺寸 - 输出将匹配输入图像的尺寸。

  2. 从较低强度开始 - 从 0.3-0.5 左右开始,根据需要增加。

  3. 提示词要具体 - 清楚描述你想要改变的内容。

  4. 使用蒙版精确控制 - 局部重绘让你精细控制变化区域。

  5. 考虑原始图像 - 提示词应该与输入图像配合,而非对抗。

与其他功能结合

与 ControlNet 结合

typescript
const images = await client.image.generate({
  prompt: 'enhanced, detailed',
  i2i: {
    image: inputImage,
    strength: 0.4,
  },
  controlnet: {
    images: [
      {
        image: styleReference,
        strength: 0.5,
      },
    ],
  },
});

基于 MIT 许可证发布