在服务器模式下使用 StableDiffusion.cpp

この記事は約8分で読めます。
スポンサーリンク

我想做的事情

在服务器模式下使用 StableDiffusion.cpp。

优点和缺点

首先,让我们总结一下服务器模式的优点和局限性,以便您可以决定是否使用它。

优势

以服务器模式启动时,模型会被缓存,因此从第二次启动开始执行速度会更快。

您可以准备一个 HTML 文件,并在该 HTML 文件中指定提示和其他元素。

无法完成的事

您只能在请求中指定提示信息、图片数量、图片大小、图片格式和压缩比。无法进行更详细的设置。如果您更改了所使用的模型,则需要重启服务器。

スポンサーリンク

环境设置

下载

请从以下页面下载适合您环境的 Zip 文件。

Release master-468-885e62e · leejet/stable-diffusion.cpp
Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ - Release master-468-885e62e · leejet/stable-diffusion.cpp

如果你想在 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 的启动参数,请参阅以下页面。

コメント

タイトルとURLをコピーしました