AI

Stable Diffusion Webui 页面加上验证

背景


默认启动 的 stable-diffusion-webui 页面 和 api 接口 都没有用户登录安全认证,这样公网上的用户都可以访问到,很不安全。

可以通过下面的方法,加上验证。

webui 页面登录验证


bash webui.sh --listen --gradio-auth userName:password

公网环境加个用户名和密码会比较安全,上面的用户名和密码请更换为你自己的用户名密码

如:bash webui.sh --listen --gradio-auth liangfeng:123456)

访问 http://公网ip:7860 

输入用户名密码就能正常使用了。

api的登录验证


api同样也可以加上验证。

–api –api-auth userName:password

bash webui.sh -f --api --api-auth userName:password --skip-torch-cuda-test --no-half --disable-safe-unpickle --precision full --use-cpu all --listen --enable-insecure-extension-access --gradio-auth userName:password

加完api验证以后,再次访问api的接口页面会出没有通过验证的消息。

那么加完验证以后,程序应该怎么样才能调用api呢?

方法1

axios调用api接口时,带上验证的用户名和密码。

axios.post('http://xxxxxx:7860/sdapi/v1/txt2img', requestData, {
    auth: {
      username: 'liangfeng',
      password: '123456'
    }
  })
    .then(response => {
      // 将Base64字符串转换为缓冲区
      const base64String = response.data.images[0];
      const buffer = Buffer.from(base64String, 'base64');
      fs.writeFile(output_image_path, buffer, (err) => {
        if (err) {
          return console.log('文件写入失败!', err.message);
        }
      });
    })
    .catch(error => {
      console.error('txt2img Error:', error);
    });

方法2

使用 Stable Diffusion Api nodejs sdk

https://github.com/jaschahuisman/sd-api

npm install stable-diffusion-api
const StableDiffusionApi = require("stable-diffusion-api");

const api = new StableDiffusionApi.StableDiffusionApi({
    baseUrl: "http://xxx:7860",
});

api.setAuth("liangfeng", "123456");


async function getProgress() {
    const result = await api.getProgress(true);
    return result.progress;
}

async function txt2img() {
    const result = await api.txt2img({
        prompt: "An AI-powered robot that accidentally starts doing everyone's job, causing chaos in the workplace."
       ...
    })
    result.image.toFile('result.png')
}