| #ifndef __STABLE_DIFFUSION_H__ |
| #define __STABLE_DIFFUSION_H__ |
|
|
| #include <memory> |
| #include <vector> |
|
|
| enum SDLogLevel { |
| DEBUG, |
| INFO, |
| WARN, |
| ERROR |
| }; |
|
|
| enum RNGType { |
| STD_DEFAULT_RNG, |
| CUDA_RNG |
| }; |
|
|
| enum SampleMethod { |
| EULER_A, |
| EULER, |
| HEUN, |
| DPM2, |
| DPMPP2S_A, |
| DPMPP2M, |
| DPMPP2Mv2, |
| N_SAMPLE_METHODS |
| }; |
|
|
| enum Schedule { |
| DEFAULT, |
| DISCRETE, |
| KARRAS, |
| N_SCHEDULES |
| }; |
|
|
| class StableDiffusionGGML; |
|
|
| class StableDiffusion { |
| private: |
| std::shared_ptr<StableDiffusionGGML> sd; |
|
|
| public: |
| StableDiffusion(int n_threads = -1, |
| bool vae_decode_only = false, |
| bool free_params_immediately = false, |
| RNGType rng_type = STD_DEFAULT_RNG); |
| bool load_from_file(const std::string& file_path, Schedule d = DEFAULT); |
| std::vector<uint8_t> txt2img( |
| const std::string& prompt, |
| const std::string& negative_prompt, |
| float cfg_scale, |
| int width, |
| int height, |
| SampleMethod sample_method, |
| int sample_steps, |
| int64_t seed); |
| std::vector<uint8_t> img2img( |
| const std::vector<uint8_t>& init_img, |
| const std::string& prompt, |
| const std::string& negative_prompt, |
| float cfg_scale, |
| int width, |
| int height, |
| SampleMethod sample_method, |
| int sample_steps, |
| float strength, |
| int64_t seed); |
| }; |
|
|
| void set_sd_log_level(SDLogLevel level); |
| std::string sd_get_system_info(); |
|
|
| #endif |