图生图
使用文本提示词转换现有图像,同时保留原始图像的元素。
基本用法
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]);参数说明
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
image | ImageInput | 必填 | 输入图像 |
strength | number | 0.7 | 转换强度 (0.01-0.99) |
noise | number | 0 | 额外噪声 (0-0.99) |
mask | ImageInput | 可选 | 局部重绘蒙版 |
强度参数
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,
},
});提示
匹配尺寸 - 输出将匹配输入图像的尺寸。
从较低强度开始 - 从 0.3-0.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,
},
],
},
});