我想做的事情
在服务器模式下使用 StableDiffusion.cpp。
优点和缺点
首先,让我们总结一下服务器模式的优点和局限性,以便您可以决定是否使用它。
优势
以服务器模式启动时,模型会被缓存,因此从第二次启动开始执行速度会更快。
您可以准备一个 HTML 文件,并在该 HTML 文件中指定提示和其他元素。
无法完成的事
您只能在请求中指定提示信息、图片数量、图片大小、图片格式和压缩比。无法进行更详细的设置。如果您更改了所使用的模型,则需要重启服务器。
环境设置
下载
请从以下页面下载适合您环境的 Zip 文件。
如果你想在 AMD GPU 上运行它,你需要一个名称中带有vulkan或rocm 的程序。
(基本上,Vulkan 应该没问题。ROCM 可能会对可使用的 GPU 有限制。)

这适用于名称中带有CUDA 的英伟达 GPU。
顺便一提,本文所述方法需要较新的软件包。(已在 master-468-885e62e 上测试过,在 master-431-23fce0b (2025/12M) 上无法运行。)
AVX512、AVX2、AVX 和 NOAVX 都是基于 CPU 的指令集。请检查哪个 AVX 版本与您的 CPU 兼容并下载。(我之前弄错了,但 AMD CPU 似乎也可以使用 AVX。最简单的办法是咨询 AI 以确定哪个版本兼容。)
将下载的文件解压到你选择的文件夹后,就可以开始了。
准备 HTML
您可以随意选择位置准备 HTML 文件。
本文使用以下 HTML 代码保存为 index.html。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>sd-cpp Web UI</title>
</head>
<body>
<div>
<h2>sd-cpp</h2>
<textarea id="prompt" placeholder="Prompt...">a cat in space, digital art</textarea>
<div class="controls">
<select id="size">
<option value="512x512">512x512</option>
<option value="768x768">768x768</option>
<option value="1024x1024">1024x1024</option>
</select>
<button id="genBtn" onclick="generate()">Generate</button>
</div>
<div id="status" class="status"></div>
<div id="result"></div>
</div>
<script>
async function generate() {
const prompt = document.getElementById('prompt').value;
const size = document.getElementById('size').value;
const btn = document.getElementById('genBtn');
const status = document.getElementById('status');
const resultDiv = document.getElementById('result');
btn.disabled = true;
status.innerText = "Generating";
resultDiv.innerHTML = "";
try {
const response = await fetch('/v1/images/generations', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: prompt,
n: 1,
size: size,
response_format: "b64_json"
})
});
const jsonResponse = await response.json();
if (jsonResponse.data && jsonResponse.data.length > 0) {
const b64Data = jsonResponse.data[0].b64_json;
const imgSrc = `data:image/png;base64,${b64Data}`;
resultDiv.innerHTML = `
<img src="${imgSrc}" alt="Generated Image">
<br>
<a href="${imgSrc}" download="generated.png" style="display:inline-block; margin-top:10px;">SAVE</a>
`;
status.innerText = "DONE!!";
} else {
throw new Error("Failed to generate image");
}
} catch (err) {
console.error(err);
status.innerText = "Error: " + err.message;
} finally {
btn.disabled = false;
}
}
</script>
</body>
</html>执行
服务器启动
使用以下命令启动服务器。
sd-server.exe --listen-port 8888 --serve-html-path[path to created HTML]-s -1 模型信息
模型信息通过-m modelpath等参数提供。这些参数与 sd-cli.exe 使用的启动参数相同。
-s -1 选项指定使用随机种子。由于无法在 HTML 中指定种子,因此会使用随机种子。
启动后,在您的浏览器中……. http://127.0.0.1:8888/ 访问此页面。
下图出现后,输入提示信息并点击“生成”按钮生成图像。

图像生成后将如下图所示。请注意,图像不会保存到本地。

启动参数示例
sd-cli 中的启动参数
sd-cli -m 模型路径 -p一只可爱的猫-s -1
sd-server 的启动参数
sd-server.exe --listen-port 8888 --serve-html-path[path to the created HTML file]-s -1 -m 模型路径
有关使用 sd-cli 的启动参数,请参阅以下页面。


コメント