| | #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 |