Skip to content

javaaiorg/stable-diffusion.java

Repository files navigation

stable-diffusion.java

Java binding project of stable-diffusion.cpp

Support platforms:

Windows: x86_64 Linux: x86_64 OSX: x86_64

Usage

Add Maven depends:

<dependency>
	<groupId>org.javaai.stablediffusion</groupId>
	<artifactId>StableDiffusionApi</artifactId>
	<version>1.0.4</version>
</dependency>

Download models:

Load StableDiffusion dynamic link library:

StableDiffusionLoader.loadShared();

Create StableDiffusion instance:

StableDiffusion stableDiffusion = new StableDiffusion();

Load Model:

sd.loadFromFile(modelPath, null, null, null);

txt2img Example:

StableResult<Txt2ImgParams, BufferedImage> imgs = sd.txt2img("a lovely cat", 
	null, null, null, null, null, 20, 
	(long)(Math.random() * Long.MAX_VALUE), null);

Write output images to disk:

for (int i = 0; i < imgs.getResultImages().size(); i ++) {
	BufferedImage img = imgs.getResultImages().get(i);
	ImageIO.write(img, "jpg", new File(outputDir, "sd-java-txt2img-" + i + ".jpg"));
}

After that, you will got images like this:

img2img Example:

Input previous generated image, and give the prompt:

a lovely cat with blue eyes

Let's see what will happend:

Java Code:

BufferedImage inputImg = ImageIO.read(new File(outputDir, "sd-java-txt2img-0.jpg"));
StableResult<Img2ImgParams, BufferedImage> imgs = sd.img2img(inputImg, 
	"a lovely cat with blue eyes", 
	null, null, null, null, null, 20, null, 
	(long)(Math.random() * Long.MAX_VALUE));
for (int i = 0; i < imgs.getResultImages().size(); i ++) {
	BufferedImage img = imgs.getResultImages().get(i);
	
	ImageIO.write(img, "jpg", new File(outputDir, "sd-java-img2img-" + i + ".jpg"));
}

Twice generated images comparison:

The second cat has blue eyes.

Don't forget close StableDiffution instance manually:

Java Code:

StableDiffusion sd = new StableDiffusion();
         
try {
    // Do something...
} finally {
    sd.close();
}

Example to custom log output:

Util.setSDLogCallback((SDLogLevel, file, line, log) -> {
	System.out.println(SDLogUtil.formatLog(SDLogLevel, file, line, log));
});

About

Java binding project for stable-diffusion.cpp, call Stable Diffusion AI model directly, runs locally, no network required.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages