--- language: - en tags: - text-to-image - stable-diffusion - safetensors - stable-diffusion-xl - animagine-xl base_model: cagliostrolab/animagine-xl-3.0 --- # AnimagineXL-v3-openvino This is an *unofficial* [OpenVINO](https://github.com/openvinotoolkit/openvino) variant of [cagliostrolab/animagine-xl-3.0](https://huggingface.co/cagliostrolab/animagine-xl-3.0). The repo is provided for convenience of running the Animagine XL v3 model on Intel CPU/GPU, as loading & converting a SDXL model to openvino can be pretty slow (dozens of minutes). Table of contents: - [Usage](#usage) - [How the conversion was done](#how-the-conversion-was-done) - [Appendix](#appendix) ## Usage Take CPU for example: ```python from optimum.intel.openvino import OVStableDiffusionXLPipeline from diffusers import ( EulerAncestralDiscreteScheduler, DPMSolverMultistepScheduler ) model_id = "CodeChris/AnimagineXL-v3-openvino" pipe = OVStableDiffusionXLPipeline.from_pretrained(model_model) # Fix output image size & batch_size for faster speed img_w, img_h = 832, 1216 # Example pipe.reshape(width=img_w, height=img_h, batch_size=1, num_images_per_prompt=1) ## Change scheduler # AnimagineXL recommand Euler A: # pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config) pipe.scheduler = DPMSolverMultistepScheduler.from_config( pipe.scheduler.config, use_karras_sigmas=True, algorithm_type="dpmsolver++" ) # I prefer DPM++ 2M Karras # Turn off the filter pipe.safety_checker = None # If run on a GPU, you need: # pipe.to('cuda') ``` After the pipe is prepared, a txt2img task can be executed as below: ```python prompt = "1girl, dress, day, masterpiece, best quality" negative_prompt = "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name" images = pipe( prompt, negative_prompt, # If reshaped, image size must equal the reshaped size width=img_w, height=img_h, guidance_scale=7, num_inference_steps=20 ) img = images[0] img.save('sample.png') ``` For convenience, here is the recommended image sizes from the official AnimagineXL doc: ``` # Or their transpose 896 x 1152 832 x 1216 768 x 1344 640 x 1536 1024 x 1024 ``` ## How the conversion was done First, install optimum: ```powershell pip install --upgrade-strategy eager optimum[openvino,nncf] ``` Then, the repo is converted using the following command: ```powershell optimum-cli export openvino --model 'cagliostrolab/animagine-xl-3.0' 'models/openvino/AnimagineXL-v3' --task 'stable-diffusion-xl' ``` ## Appendix Push large files **without** git commit the latest changes: ``` git lfs install huggingface-cli lfs-enable-largefiles . huggingface-cli upload --commit-message 'Upload model files' 'CodeChris/AnimagineXL-v3-openvino' . ``` Other notes: * The conversion was done using `optimum==1.16.1` and `openvino==2023.2.0`. * You may query `optimum-cli export openvino --help` for more usage details.