Use StableDiffusion.cpp no ​​modo servidor

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

Coisas que eu quero fazer

Use StableDiffusion.cpp no ​​modo servidor.

Vantagens e desvantagens

Primeiramente, vamos resumir as vantagens e limitações do modo servidor para que você possa decidir se deseja ou não utilizá-lo.

vantagem

Quando iniciado no modo servidor, o modelo é armazenado em cache, resultando em uma execução mais rápida a partir da segunda vez.

Você pode preparar um arquivo HTML e especificar prompts e outros elementos dentro desse HTML.

Coisas que não podem ser feitas

As únicas configurações que você pode especificar em uma solicitação são o prompt, o número de imagens, o tamanho da imagem, o formato da imagem e a taxa de compressão. Configurações detalhadas não estão disponíveis. É necessário reiniciar o servidor se você alterar o modelo em uso.

スポンサーリンク

環境構築

download

Faça o download do arquivo Zip apropriado para o seu ambiente na página seguinte.

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

Se você quiser executá-lo em uma GPU AMD, precisará de algo com ‘vulkan’ ou ‘rocm’ no nome.

(Basicamente, o Vulkan deve funcionar bem. O ROCM provavelmente terá limitações quanto às GPUs que podem ser usadas.)

Isso se aplica às GPUs da NVidia que possuem ‘CUDA’ em seu nome.

Aliás, o método descrito neste artigo requer um pacote bastante recente. (Foi testado no master-468-885e62e. Não funciona no master-431-23fce0b (2025/12M).)

AVX512, AVX2, AVX e NOAVX são baseados na CPU. Verifique qual versão do AVX é compatível com sua CPU e faça o download. (Eu estava enganado, mas parece que as CPUs da AMD também podem usar AVX. O mais fácil é perguntar a um especialista em IA qual versão é compatível.)

Depois de extrair o arquivo baixado para uma pasta de sua escolha, você estará pronto para começar.

Prepare o HTML

Prepare o HTML em qualquer local que desejar.

Este artigo foi salvo como index.html usando o seguinte 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>
スポンサーリンク

execução

Inicialização do servidor

Inicie o servidor com o seguinte comando.

sd-server.exe --listen-port 8888 --serve-html-path [caminho para o HTML criado] -s -1 Informações do modelo

As informações do modelo são fornecidas por meio de ‘-m caminhoDoModelo’, etc. Esses são os mesmos argumentos de inicialização usados ​​com o sd-cli.exe.

A opção -s -1 especifica que uma semente aleatória deve ser usada. Como a semente não pode ser especificada a partir do HTML, uma semente aleatória é usada em seu lugar.

Assim que iniciar, no seu navegador… http://127.0.0.1:8888/ Acesse esta página.

Assim que a imagem abaixo aparecer, insira o texto solicitado e clique em Gerar para gerar a imagem.

A imagem será exibida conforme mostrado abaixo assim que for gerada. Observe que ela não será salva localmente.

Exemplo de parâmetro de inicialização

Parâmetros de inicialização no sd-cli

sd-cli -m Caminho do modelo -p 'um gato adorável' -s -1

Parâmetros de inicialização para o servidor SD

sd-server.exe --listen-port 8888 --serve-html-path [caminho para o arquivo HTML criado] -s -1 -m Caminho do modelo

Consulte a página seguinte para obter informações sobre os parâmetros de inicialização usando o sd-cli.

コメント

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