diff --git a/README.md b/README.md index db10ae2..7babdbf 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,11 @@ Java binding project of [stable-diffusion.cpp](https://github.com/leejet/stable-diffusion.cpp) +## Support platforms: +Windows: x86_64 +Linux: x86_64 +OSX: x86_64 + ## Usage @@ -23,7 +28,7 @@ Java binding project of [stable-diffusion.cpp](https://github.com/leejet/stable- org.javaai.stablediffusion StableDiffusionApi - 1.0.0 + 1.0.4 ``` @@ -74,6 +79,8 @@ for (int i = 0; i < imgs.getResultImages().size(); i ++) {

+ + ### img2img Example: Input previous generated image, and give the prompt: ##### a lovely cat with blue eyes @@ -107,8 +114,24 @@ for (int i = 0; i < imgs.getResultImages().size(); i ++) {

+## Don't forget close StableDiffution instance manually: +### Java Code: +```Java +StableDiffusion sd = new StableDiffusion(); + +try { + // Do something... +} finally { + sd.close(); +} +``` - +### Example to custom log output: +``` Java +Util.setSDLogCallback((SDLogLevel, file, line, log) -> { + System.out.println(SDLogUtil.formatLog(SDLogLevel, file, line, log)); +}); +``` diff --git a/StableDiffusionApi/pom.xml b/StableDiffusionApi/pom.xml index 70ddd02..a1ca617 100644 --- a/StableDiffusionApi/pom.xml +++ b/StableDiffusionApi/pom.xml @@ -6,7 +6,7 @@ org.javaai.stablediffusion StableDiffusionApi - 1.0.0 + 1.0.4 StableDiffusionApi StableDiffusionApi @@ -56,6 +56,14 @@ commons-collections4 4.4 + + + + commons-io + commons-io + 2.7 + + @@ -210,6 +218,9 @@ + + + diff --git a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/SDLogCallback.java b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/SDLogCallback.java new file mode 100644 index 0000000..cf2350d --- /dev/null +++ b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/SDLogCallback.java @@ -0,0 +1,12 @@ +package org.javaai.stablediffusion.api; + +public interface SDLogCallback { + + + + + public void onSDLogCallback(int SDLogLevel, String file, int line, String log); + + + +} diff --git a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/SDLogUtil.java b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/SDLogUtil.java new file mode 100644 index 0000000..7267da0 --- /dev/null +++ b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/SDLogUtil.java @@ -0,0 +1,19 @@ +package org.javaai.stablediffusion.api; + +import org.apache.commons.io.FilenameUtils; +import org.javaai.stablediffusion.api.enums.SDLogLevel; + +public class SDLogUtil { + + + public static String formatLog(int level, String file, int line, String log) { + + String levelStr = SDLogLevel.toReadableString(level); + String format = "[" + levelStr + "] " + FilenameUtils.getName(file) + ":" + String.format("%-4d", line) + " - " + log; + + return format; + } + + + +} diff --git a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/StableDiffusion.java b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/StableDiffusion.java index db173dc..ef4ed26 100644 --- a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/StableDiffusion.java +++ b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/StableDiffusion.java @@ -93,7 +93,7 @@ public StableDiffusion(Integer n_threads, protected static native long newInstance(int n_threads, boolean vae_decode_only, String taesd_path, - String esrgan_path, boolean free_params_immediately, Boolean vae_tiling, String lora_model_dir, int rng_type); + String esrgan_path, boolean free_params_immediately, boolean vae_tiling, String lora_model_dir, int rng_type); @@ -165,7 +165,7 @@ protected static native boolean loadFromFile0( long pointer, String model_path, String vae_path, int ggml_type_value, int schedule); - + /** @@ -180,6 +180,20 @@ public StableResult txt2img(String prompt) { return results; } + + /** + * + * @param prompt NotNull + * @param negative_prompt Nullable, default is empty string. + * @return results already converted to BGR color image. + */ + public StableResult txt2img(String prompt, String negative_prompt) { + StableResult results = txt2img(prompt, negative_prompt, + null, null, null, null, null, null, null); + + return results; + } + /** * * @param prompt NotNull @@ -332,6 +346,24 @@ protected static native List txt2img0( float cfg_scale, int width, int height, int sample_method, int sample_steps, long seed, int batch_count); + + + + /** + * + * @param img NotNull + * @param prompt NotNull + * @param negative_prompt Nullable, default is empty string. + * @return results already converted to BGR color image. + */ + public StableResult img2img( + BufferedImage img, String prompt) { + + StableResult results = img2img(img, + prompt, null, null, null, null, null, null, null, null); + + return results; + } @@ -343,7 +375,8 @@ protected static native List txt2img0( * @param negative_prompt Nullable, default is empty string. * @return results already converted to BGR color image. */ - public StableResult img2img(BufferedImage img, String prompt, String negative_prompt) { + public StableResult img2img( + BufferedImage img, String prompt, String negative_prompt) { StableResult results = img2img(img, prompt, negative_prompt, null, null, null, null, null, null, null); diff --git a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/Util.java b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/Util.java index 541e6de..688a2aa 100644 --- a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/Util.java +++ b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/Util.java @@ -6,6 +6,9 @@ public class Util { + private static SDLogCallback logCallback = null; + + /** * * @param logLevel {@link SDLogLevel} @@ -13,6 +16,42 @@ public class Util { public static native void setSDLogLevel(int logLevel); + protected static native void enableSDLogCallback(); + + + protected static native void disableSDLogCallback(); + + + public static void onSDLogCallback(int SDLogLevel, String file, int line, String log) { + if (logCallback != null) { + logCallback.onSDLogCallback(SDLogLevel, file, line, log); + } + } + + + /** + * + * @param logCallback + */ + public static void setSDLogCallback(SDLogCallback logCallback) { + Util.logCallback = logCallback; + if (Util.logCallback != null) { + enableSDLogCallback(); + } else { + disableSDLogCallback(); + } + } + + + public static void removeSDLogCallback() { + setSDLogCallback(null); + } + + + + + + diff --git a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/enums/SDLogLevel.java b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/enums/SDLogLevel.java index be7f178..de69dd1 100644 --- a/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/enums/SDLogLevel.java +++ b/StableDiffusionApi/src/main/java/org/javaai/stablediffusion/api/enums/SDLogLevel.java @@ -6,5 +6,31 @@ public class SDLogLevel { public static final int INFO = 1; public static final int WARN = 2; public static final int ERROR = 3; + + + + public static String toReadableString(int level) { + + if (level == DEBUG) { + return "DEBUG"; + } + + if (level == INFO) { + return "INFO"; + } + + if (level == WARN) { + return "WARN"; + } + + if (level == ERROR) { + return "ERROR"; + } + + return null; + + } + + } diff --git a/StableDiffusionConsole/pom.xml b/StableDiffusionConsole/pom.xml index 4e086fc..60f7ad3 100644 --- a/StableDiffusionConsole/pom.xml +++ b/StableDiffusionConsole/pom.xml @@ -6,7 +6,7 @@ org.javaai.stablediffusion StableDiffusionConsole - 1.0.0 + 1.0.4 StableDiffusionConsole StableDiffusionConsole @@ -90,7 +90,7 @@ org.javaai.stablediffusion StableDiffusionApi - 1.0.0 + 1.0.4 diff --git a/StableDiffusionConsole/src/main/java/org/javaai/stablediffusion/console/Main.java b/StableDiffusionConsole/src/main/java/org/javaai/stablediffusion/console/Main.java index c080d05..346c1c3 100644 --- a/StableDiffusionConsole/src/main/java/org/javaai/stablediffusion/console/Main.java +++ b/StableDiffusionConsole/src/main/java/org/javaai/stablediffusion/console/Main.java @@ -1,7 +1,9 @@ package org.javaai.stablediffusion.console; +import org.javaai.stablediffusion.api.SDLogCallback; import org.javaai.stablediffusion.api.StableDiffusion; import org.javaai.stablediffusion.api.StableDiffusionLoader; +import org.javaai.stablediffusion.api.Util; public class Main { @@ -11,6 +13,18 @@ public static void main(String[] args) throws Exception { StableDiffusionLoader.loadShared(); StableDiffusion sd = new StableDiffusion(); + Util.setSDLogCallback(new SDLogCallback() { + + @Override + public void onSDLogCallback(int SDLogLevel, String file, int line, String log) { + System.out.println(log); + } + }); + + boolean loadFromFile = sd.loadFromFile("/Users/u/Desktop/models/sd-v1-4.ckpt", null, null, null); + + System.out.println("load:" + loadFromFile); + sd.txt2img("test"); sd.close(); diff --git a/StableDiffusionExamples/pom.xml b/StableDiffusionExamples/pom.xml index 85ffeaa..aa5a90c 100644 --- a/StableDiffusionExamples/pom.xml +++ b/StableDiffusionExamples/pom.xml @@ -6,7 +6,7 @@ org.javaai.stablediffusion StableDiffusionExamples - 1.0.0 + 1.0.4 StableDiffusionExamples StableDiffusionExamples @@ -88,7 +88,7 @@ org.javaai.stablediffusion StableDiffusionApi - 1.0.0 + 1.0.4 diff --git a/StableDiffusionExamples/src/test/java/org/javaai/stablediffusion/examples/StableDiffusionExamples.java b/StableDiffusionExamples/src/test/java/org/javaai/stablediffusion/examples/StableDiffusionExamples.java index 4d373d0..fea9472 100644 --- a/StableDiffusionExamples/src/test/java/org/javaai/stablediffusion/examples/StableDiffusionExamples.java +++ b/StableDiffusionExamples/src/test/java/org/javaai/stablediffusion/examples/StableDiffusionExamples.java @@ -5,6 +5,7 @@ import javax.imageio.ImageIO; +import org.javaai.stablediffusion.api.SDLogUtil; import org.javaai.stablediffusion.api.StableDiffusion; import org.javaai.stablediffusion.api.StableDiffusionLoader; import org.javaai.stablediffusion.api.Util; @@ -175,6 +176,11 @@ void testLoadModelWithLora() throws Exception { @Test void testTxt2Img() throws Exception { + // Example to custom log output: + Util.setSDLogCallback((SDLogLevel, file, line, log) -> { + System.out.println(SDLogUtil.formatLog(SDLogLevel, file, line, log)); + }); + StableDiffusion sd = createStableDifussionInstance(); try { diff --git a/assets/sd-java-img2img-0.jpg b/assets/sd-java-img2img-0.jpg index f543429..488d948 100644 Binary files a/assets/sd-java-img2img-0.jpg and b/assets/sd-java-img2img-0.jpg differ diff --git a/assets/sd-java-txt2img-0.jpg b/assets/sd-java-txt2img-0.jpg index 88e97c7..2a7475c 100644 Binary files a/assets/sd-java-txt2img-0.jpg and b/assets/sd-java-txt2img-0.jpg differ diff --git a/pom.xml b/pom.xml index 71c0a51..a95e29b 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.javaai.stablediffusion stable-diffussion.java - 1.0.0 + 1.0.4 pom stable-diffussion.java stable-diffussion.java