A Node.js client for using Automatic1111's Stable Diffusion Web UI.
This project is a work in progress. Current features include:
- txt2img generation
- img2img generation
- pngInfo support
- ControlNet support both txt2img and img2img
- Node.js >= 18
- Automatic1111's Stable Diffusion Web UI
- ControlNet support requires sd-webui-controlnet
In order to use the API, you first need to enable it. You can do so by appending
--api
to the command line arguments when running the webui.
For Linux: [webui-folder]/webui-user.sh
export COMMANDLINE_ARGS="--api"
For Windows: [webui-folder]/webui-user.bat
set COMMANDLINE_ARGS=--api
Add node-sd-webui
to your project.
Using npm:
npm i -S node-sd-webui
Using yarn:
yarn add node-sd-webui
Using pnpm:
pnpm add node-sd-webui
The txt2img
function allows you to generate an image using the txt2img
functionality of the Stable Diffusion WebUI.
Basic Example:
import sdwebui from 'node-sd-webui'
import { writeFileSync } from 'fs'
sdwebui()
.txt2img({
prompt: 'A photo of a mushroom',
})
.then(({ images }) => writeFileSync('path/to/image.png', images[0], 'base64'))
.catch((err) => console.error(err))
Another example with a few more options:
import sdwebui, { SamplingMethod } from 'node-sd-webui'
import { writeFileSync } from 'fs'
const client = sdwebui()
try {
const { images } = await client.txt2img({
prompt: 'A photo of a mushroom, red cap, white spots',
negativePrompt: 'blurry, cartoon, drawing, illustration',
samplingMethod: SamplingMethod.Euler_A,
width: 768,
height: 512,
steps: 20,
batchSize: 5,
})
images.forEach((image, i) =>
writeFileSync(`path/to/image-${i}.png`, images[i], 'base64')
)
} catch (err) {
console.error(err)
}