#ifndef __STABLE_DIFFUSION_H__ #define __STABLE_DIFFUSION_H__ #include #include 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 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 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 img2img( const std::vector& 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 // __STABLE_DIFFUSION_H__