# 图像生成

使用本地或基于云的 Stable Diffusion、FLUX 或 DALL-E API 生成图像。

自动生成图像作为对您消息的回复以获得完全沉浸感, 从魔杖菜单或斜杠命令根据聊天历史和角色信息生成, 或在聊天输入栏中使用 /sd (anything_here) 命令使用您自己的提示生成图像。

最常见的 Stable Diffusion 生成设置可以在 SillyTavern UI 中自定义。

  • 支持多种图像生成源,包括本地和基于云的
  • 各种生成模式用于角色、场景和自定义提示
  • 斜杠命令用于在聊天中轻松生成图像
  • 交互模式根据自然语言请求触发图像生成
  • 可自定义的提示模板和前缀以保持一致的风格和质量
  • 角色特定的提示前缀用于定制角色图像
  • 风格预设以快速切换不同的图像生成设置
  • 灵活的可见性选项用于聊天中生成的图像
  • 高级的ComfyUI 集成用于高度可定制的工作流
  • 能够在角色画廊中查看所有生成的图像
  • 图像滑动功能以在保持相同提示的情况下重新生成图像
  • 生成前编辑提示扩展自由模式提示的选项
  • 与 AI 函数调用集成以自动检测图像生成

# 支持的源

备注
AI.ML API 云端,付费
Black Forest Labs 云端,付费
ComfyUI 本地,开源 (GPL3),免费,参见 ComfyUI 配置
Draw Things 本地,Mac/iOS,免费
FAL.AI 云端,付费
Google AI Studio / Google Vertex AI 云端,付费。Imagen 模型系列。AI Studio 仅支持 Imagen 3.0 002 模型。
HuggingFace Serverless 云端,免费
NanoGPT 云端,付费
NovelAI Diffusion 云端,需要有效订阅
OpenAI 云端,付费
Pollinations 云端,开源 (MIT),免费
SD.Next / vladmandic 本地,开源 (AGPL3),免费
SillyTavern Extras 已弃用,不推荐
Stability AI 云端,付费
Stable Diffusion WebUI / AUTOMATIC1111 本地,开源 (AGPL3),免费
Stable Horde 云端,开源 (AGPL3),免费
TogetherAI 云端
x.AI 云端,付费

# 生成模式

魔杖菜单项目 斜杠命令参数 描述 备注
"你自己" you 当前角色的全身肖像。 -
"你的脸" face 当前角色的特写肖像。 强制肖像纵横比。
"我" me 用户角色的肖像。 -
"整个故事" scene 聊天事件的视觉回顾。 -
"最后一条消息" last 最后一条聊天消息的视觉回顾。 -
"原始最后消息" raw_last 最后一条消息逐字用作提示。 -
"背景" background 基于故事上下文的聊天背景。 强制宽屏风景纵横比。

# 如何生成图像

  1. 使用扩展上下文菜单(魔杖)中的"图像生成"项目。
  2. 键入带有生成模式表中参数的 /sd (参数) 斜杠命令。其他任何内容都会触发"自由模式"来使 SD 生成您提示的任何内容。示例:/sd apple tree 将生成苹果树的图片。
  3. 在聊天消息的上下文操作中寻找画笔图标。这将强制所选消息使用"原始消息"模式。

除了原始消息和自由模式之外的每种生成模式都会触发使用您当前选择的主要生成 API 生成提示,将聊天上下文转换为 SD 提示。 您可以使用扩展面板中的"SD 提示模板"设置抽屉配置每种生成模式的提示指令模板。

# /sd 命令使用的技巧和窍门

# 查看所有生成的图像

要查看角色的所有保存图像(包括其他聊天),请从角色信息面板的"更多..."下拉菜单中打开图库,或使用 /show-gallery 斜杠命令。

# 指定负面提示

在提示之前使用名为 negative 的参数来强制此生成使用特定的负面提示。

stscript
/sd negative="fries" cute tater farmer holding a tayto in a spud-field

# 包含角色特定前缀

在自由提示模式中使用特殊的 {{charPrefix}} 宏来包含当前角色的正面和负面提示前缀(如果已定义)。

stscript
/sd {{charPrefix}}, riding a bike

# 抑制聊天消息

您可以通过传递 quiet=true 命名参数来避免将生成的图像发布到聊天中。图像仍将添加到角色图库中,并且命令将生成可被其他命令使用的图像相对 URL。

下面的示例将使用 Markdown 作为用户角色发送生成的图像。

stscript
/sd quiet=true me | /send Here's a picture of me: ![my portrait]({{pipe}})

# 图像滑动

图像滑动允许在保持相同提示的情况下重新滚动图像生成。如果设置了固定种子,它将为下一次生成随机化。

要循环浏览图像,将鼠标光标悬停在(在移动设备上点击)生成的图像上以显示箭头按钮和滑动计数器。点击最新图像上的右箭头将生成一个新图像。

这里的"滑动"只是一个名称,不要尝试实际的滑动手势,因为这会重新生成消息本身,而不是附加的图像。

# 选项

# 生成前编辑提示

允许在将自动生成的提示发送到 Stable Diffusion API 之前手动编辑它们。

# 使用函数工具

使用函数调用自动检测生成图像的意图。

要求:

  1. 必须配置了使用支持源的图像生成。
  2. 必须使用支持的聊天完成 API 模型并在 AI 响应设置中启用函数工具调用。
  3. 必须在图像生成设置中启用"使用函数工具"选项。
  4. 用户应在聊天消息中表达生成图像的意图,例如"给我发送一张猫的图片"。

# 使用交互模式

允许触发图像生成而不是文本,作为对遵循特殊模式的用户消息的回复:

  1. 包含以下动词之一:send, mail, imagine, generate, make, create, draw, paint, render
  2. 后跟以下名词之一(不超过 10 个字符):pic, picture, image, drawing, painting, photo, photograph
  3. 后跟图像生成的目标主题,可以选择性地以"of a"或"of this"等短语开头。

有效请求和捕获主题的示例:

  • Can you please send me a picture of a cat => cat
  • Generate a picture of the Eiffel tower => Eiffel tower
  • Let's draw a painting of Mona Lisa => Mona Lisa

一些特殊主题会触发预定义的生成模式:

  • 'you, 'yourself' => "Yourself"
  • 'your face', 'your portrait', 'your selfie' => "Your Face"
  • 'me', 'myself' => "Me"
  • 'story', 'scenario', 'whole story' => "The Whole Story"
  • 'last message' => "The Last Message"
  • 'background', 'scene background', 'scene', 'scenery', 'surroundings', 'environment' => "Background"

# 扩展自由模式提示

使用交互模式或斜杠命令时,通过提示您的主要 API 自动扩展自由模式生成主题描述。

# 捕捉自动调整的分辨率

将具有强制纵横比(肖像、背景)的图像生成请求捕捉到最接近的已知分辨率,同时尝试保持绝对像素计数。有关可能选项的列表,请参阅"分辨率"下拉菜单。

推荐用于 SDXL 模型

# 常见提示前缀

在每个生成的或自由模式提示之前添加。通常用于设置图片的整体风格。

示例:best quality, anime lineart

# 负面提示

您不希望在输出中出现的图像特征。

示例:bad quality, watermark

# 角色特定的提示前缀

描述当前选定角色的任何特征。将在常见前缀之后添加。

示例:female, green eyes, brown hair, pink shirt

您也可以为任何不需要的内容指定负面提示前缀。它将与一般负面提示结合。

限制:

  1. 仅在 1 对 1 聊天中工作。不会在群组中使用。
  2. 不会用于背景和自由模式生成。

如果您想与他人共享前缀,请勾选"可共享"复选框。这将它们与角色数据一起保存,而不是您的本地设置。

# 风格

使用此功能快速保存和恢复您喜欢的风格/质量预设,以便以后使用或在模型之间切换时使用。风格预设中包含以下内容:

  1. 常见提示前缀
  2. 负面提示

您也可以使用 /imagine-style 命令(或 /sd-style/img-style)在风格之间切换。

# 聊天消息可见性

插入聊天的生成的图像默认在主要 API 提示中隐藏,但可以针对每个生成发起者("魔杖"图标、斜杠命令、交互模式)单独覆盖。这可用于通过让角色"承认"图像来使体验更加沉浸。如果启用了"发送内联图像",聊天完成 API 中的多模态模型也可以"看到"图像。

可以通过更改图像提示模板下的"聊天消息模板"来自定义文本消息。所有常规宏都可以在此模板中使用,加上特殊的 {{prompt}} 宏来指定图像提示将添加的位置。

# ComfyUI 配置

ComfyUI 是图像生成的一个快速且非常灵活的选项。

如果您熟悉 ComfyUI,tl;dr 是:在 ComfyUI 中制作您的工作流,以 API 格式下载它,并将其粘贴到 SillyTavern ComfyUI 工作流编辑器中。ST 将向您的工作流提交到 ComfyUI 的 API,您将在聊天中获得图像。但是能力越大责任越大,主要责任是在您的工作流 JSON 中插入占位符,以便您可以从 SillyTavern 更改设置。

如果您不熟悉 ComfyUI,您仍然可以使用默认工作流在 SillyTavern 中生成图像。以后,当您想要强大的功能时,您可以学习如何使用 ComfyUI...

# 控件

此面板允许您配置和管理您的 ComfyUI 与 SillyTavern 的集成。

ComfyUI URL 输入字段中输入您的 ComfyUI 服务器的 URL。默认值为 http://127.0.0.1:8188。 如果您使用的是 SwarmUI,则 托管 ComfyUI 服务器 的默认端口是 7821, 比 SwarmUI 的默认端口高 20 个端口。

输入 URL 后,选择 连接 以验证并建立连接。ComfyUI 服务器必须可以从 SillyTavern 主机访问。

# 工作流管理

从下拉菜单中选择 ComfyUI 工作流。提供了两个默认工作流:

  • Default_Comfy_Workflow.json:支持最常见的图像生成设置的基本文本到图像工作流。
  • Char_Avatar_Comfy_Workflow.json:使用角色头像加上提示生成图像的示例图像到图像工作流。

使用以下按钮管理工作流:

  • 打开工作流编辑器 以查看和修改所选工作流。
  • 创建新工作流 以创建具有自定义名称的新工作流。
  • 删除工作流 以删除所选工作流。

# 工作流编辑器

ComfyUI 工作流编辑器允许您查看和修改 ComfyUI 工作流以与 SillyTavern 一起使用。

编辑器的主要组件是一个大文本区域,您可以在其中插入或编辑您的 ComfyUI 工作流(JSON 格式)。

要将 ComfyUI 工作流添加到编辑器,请按照以下步骤操作:

  1. 在 ComfyUI 设置中启用"开发模式"。
  2. 使用 ComfyUI 中的"保存(API 格式)"选项下载 JSON 数据。
  3. 在 SillyTavern 中创建新工作流并打开编辑器。
  4. 将下载的 JSON 数据粘贴到文本区域中。
  5. 根据您的用例需要,用占位符替换特定值。

# 占位符

编辑器提供可以在您的工作流 JSON 中使用的预定义占位符列表。这些占位符在工作流在 SillyTavern 中执行时被动态值替换。

标记为 的占位符存在于您的工作流 JSON 中。标记为 的占位符不存在于您的工作流 JSON 中。您可以根据需要将这些占位符添加到您的工作流 JSON 中。您不需要添加所有占位符,只需要添加您的工作流使用并且想要动态替换的占位符。

# 提示

%prompt%%negative_prompt% 占位符用于将图像生成提示插入到工作流中。这些包含由 SillyTavern 生成的最终提示,包括为您选择的 /sd 模式生成的提示、常见提示前缀、负面提示和角色特定提示前缀。

例如,您可能在 ComfyUI 中使用像"forest elf"这样的提示测试了您的工作流。要在 SillyTavern 中使用此工作流,您可以将"forest elf"提示替换为 %prompt% 占位符:

{
    "class_type": "CLIPTextEncode",
    "inputs": {
        "clip": ["4", 1],
        "text": "%prompt%"
    }
}
{
    "class_type": "CLIPTextEncode",
    "inputs": {
        "clip": ["4", 1],
        "text": "forest elf"
    }
}

请注意,占位符用双引号括起来。这对于 JSON 格式很重要,并且是 SillyTavern 占位符替换系统所必需的。即使是数字,您也必须在模板 JSON 中使用双引号。

有时提示(或其他值)不会出现在您期望的位置。如果节点对于工作流在 API 模式下运行不是必需的,ComfyUI 将从工作流的 API 版本中删除节点。

例如,此工作流使用带有提示原语的 LoRA 标签加载器节点,以便工作流在 UI 模式下更清晰:

提示原语和 LoRA 加载器
提示原语和 LoRA 加载器

提示原语节点将从工作流的 API 版本中删除,因此您在 LoraTagLoader 节点中插入占位符。在工作流中找到文本"apple tree"并将其替换为 %prompt% 占位符:

{
    "inputs": {
      "text": "%prompt%",
      "model": ["112", 0],
      "clip": ["112", 1]
    },
    "class_type": "LoraTagLoader",
    "_meta": {"title": "Load LoRA Tag"}
}
{
    "inputs": {
      "text": "apple tree",
      "model": ["112", 0],
      "clip": ["112", 1]
    },
    "class_type": "LoraTagLoader",
    "_meta": {"title": "Load LoRA Tag"}
}

在某些情况下,您可能需要在工作流 JSON 中进行多次替换,即使在 UI 中提示只出现一次。

# 模型

%model% 占位符将插入图像生成设置中所选模型的值。

默认文本到图像工作流中的示例:

{
    "class_type": "CheckpointLoaderSimple",
    "inputs": {
        "ckpt_name": "%model%"
    }
}
{
    "class_type": "CheckpointLoaderSimple",
    "inputs": {
        "ckpt_name": "sd15.safetensors"
    }
}

要加载 GGUF 量化的 UNet,请在您的工作流中使用 UNet Loader (GGUF) 节点, 在 SillyTavern 模型下拉菜单中选择 GGUF 模型,并在节点设置中使用 %model% 占位符,如下所示:

{
    "inputs": {
      "unet_name": "%model%"
    },
    "class_type": "UnetLoaderGGUF",
    "_meta": {
      "title": "Unet Loader (GGUF)"
    }
}
{
    "inputs": {
      "unet_name": "flux1-dev-Q4_0.gguf"
    },
    "class_type": "UnetLoaderGGUF",
    "_meta": {
      "title": "Unet Loader (GGUF)"
    }
}

# 头像图像

使用 %user_avatar%%char_avatar% 占位符将用户和角色头像包含在工作流中。这些占位符在工作流执行时被头像的 PNG 数据替换。图像数据以 base64 格式编码,因此您必须在工作流中解码它。此任务的流行选择是 Load image (Base64) 节点。

在此示例中,角色头像使用 Load Image (Base64) 节点加载。它还使用图像调整大小节点将图像重新缩放到图像生成设置中指定的任何大小:

从 base64 字符串加载图像并调整大小
从 base64 字符串加载图像并调整大小

%char_avatar%%width%%height% 占位符插入到 Load Image (Base64) 和 Image Resize 节点的 JSON 中:

{
    "97": {
        "inputs": {
            "image": "%char_avatar%"
        },
        "class_type": "ETN_LoadImageBase64",
        "_meta": {"title": "Load Image (Base64)"}
    },
    "98": {
        "inputs": {
            "mode": "resize",
            "resize_width": "%width%",
            "resize_height": "%height%",
            "image": ["97", 0]
        },
        "class_type": "Image Resize",
        "_meta": {"title": "Resize image"}
    }
}

要在 ComfyUI 中获取 base64 编码的图像字符串以测试您的工作流,请使用任何将图像转换为 base64 字符串的在线工具。 以下是您可以用于初始测试的示例字符串:sd-comfy-base64-test-string.txt

# 其他占位符

大多数其他占位符使用图像生成设置中相应控件的值,或您使用 /sd 命令指定的值:

  • %vae%,但大多数 SD 模型包含 VAE,因此默认工作流不使用此占位符。将其与自定义工作流一起使用以与 UNet 一起加载 VAE,覆盖默认 VAE 等。
  • %sampler%
  • %scheduler%
  • %steps%
  • %scale%
  • %width%
  • %height%
  • %denoise%:对于示例图像到图像工作流,在约 0.5(对源图像几乎不可察觉的变化)和 1.0(完全不同的图像,好像没有使用源图像)之间变化去噪量。默认文本到图像工作流不使用它,因为对于文本到图像使用除 1.0 之外的值没有意义。
  • %clip_skip%:默认工作流不使用,但可用于自定义工作流。

%seed% 占位符将插入控件中的种子值(如果您指定了一个)。如果您将种子设置为 -1,SillyTavern 将为 %seed% 中的每个图像生成新的随机种子。

# 自定义占位符

您可以向工作流添加自定义占位符:

  1. 查找预定义占位符下方的"自定义"部分。
  2. 单击"+"按钮添加新的自定义占位符。
  3. find 字段中输入占位符的名称。
  4. replace 字段中输入您想要替换占位符的值。

自定义占位符将出现在预定义占位符下方的单独列表中。

例如,您可以用自定义占位符替换默认工作流中保存图像文件名的"SillyTavern"前缀。添加一个新的自定义占位符,find 设置为 filename_prefixreplace 设置为 ServiceTesnor。将新的 %filename_prefix% 占位符插入到您的工作流 JSON 中。现在,您可以通过更改自定义占位符的值将文件名前缀从 SillyTavern 更改为 ServiceTesnor。

{
    "class_type": "SaveImage",
    "inputs": {
        "filename_prefix": "%filename_prefix%",
        "images": ["8", 0]
    }
}
{
    "class_type": "SaveImage",
    "inputs": {
        "filename_prefix": "SillyTavern",
        "images": ["8", 0]
    }
}

# Comfy 技巧

阅读此页面上的所有一般信息,以便您熟悉图像生成选项。诸如可切换风格和常见提示前缀之类的选项,当与 ComfyUI 工作流的完全灵活性结合时,允许您创建各种各样的图像生成设置。

# 加载 LoRA

使用 LoRA 标签加载器节点(如 Load LoRA Tag)加载提示中指定的任何 LoRA。 现在您可以在提示中添加任意数量的 LoRA,使用 <lora:CroissantStyle:0.8> 等标签,它们将被加载到您的工作流中。 这也将使在角色特定提示前缀中使用 LoRA 的"专业提示"与 ComfyUI 一起工作。

# 从风格或斜杠命令设置工作流值

您可以在自定义占位符值中使用宏。作为一个实际示例, 假设您有时想要生成没有背景的图像,并且您希望能够通过斜杠命令或图像风格切换它。 您可以这样做:

  1. 制作一个 ComfyUI 工作流,根据输入的值移除图像背景,或者不移除
  2. 使用自定义占位符设置该输入的值,但使用 {{getvar::remove_background}} 作为替换值
  3. 现在您可以在生成图像之前使用 /setvar key=remove_background true/setvar key=remove_background false 设置 remove_background 的值
  4. 工作流将使用您设置的值来确定是否移除背景
  5. 制作一个"No background"的图像风格,常见提示前缀为 {{setvar::remove_background::true}}
  6. 使用风格控件或 /imagine-style No background 在生成图像之前将 remove_background 的值设置为 true