Views
No views yet

pip (official package)pip install --upgrade diffusers[torch]conda (maintained by the community)conda install -c conda-forge diffuserspippip install --upgrade diffusers[flax]diffusers!pip install --upgrade diffusers transformers acceleratefp16) as it gives almost always the same results as full
precision while being roughly twice as fast and requiring half the amount of GPU RAM.1import torch
2from diffusers import StableDiffusionPipeline
3
4pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
5pipe = pipe.to("cuda")
6
7prompt = "a photo of an astronaut riding a horse on mars"
8image = pipe(prompt).images[0] StableDiffusionPipeline.git lfs install
git clone https://huggingface.co/runwayml/stable-diffusion-v1-5./stable-diffusion-v1-5, you can run stable diffusion
as follows:1pipe = StableDiffusionPipeline.from_pretrained("./stable-diffusion-v1-5")
2pipe = pipe.to("cuda")
3
4prompt = "a photo of an astronaut riding a horse on mars"
5image = pipe(prompt).images[0] fp16.
The following snippet should result in less than 4GB VRAM.1pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
2pipe = pipe.to("cuda")
3
4prompt = "a photo of an astronaut riding a horse on mars"
5pipe.enable_attention_slicing()
6image = pipe(prompt).images[0] from_pretrained.1from diffusers import LMSDiscreteScheduler
2
3pipe.scheduler = LMSDiscreteScheduler.from_config(pipe.scheduler.config)
4
5prompt = "a photo of an astronaut riding a horse on mars"
6image = pipe(prompt).images[0]
7
8image.save("astronaut_rides_horse.png")1from diffusers import StableDiffusionPipeline
2
3pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
4
5# disable the following line if you run on CPU
6pipe = pipe.to("cuda")
7
8prompt = "a photo of an astronaut riding a horse on mars"
9image = pipe(prompt).images[0]
10
11image.save("astronaut_rides_horse.png")1import jax
2import numpy as np
3from flax.jax_utils import replicate
4from flax.training.common_utils import shard
5
6from diffusers import FlaxStableDiffusionPipeline
7
8pipeline, params = FlaxStableDiffusionPipeline.from_pretrained(
9 "runwayml/stable-diffusion-v1-5", revision="flax", dtype=jax.numpy.bfloat16
10)
11
12prompt = "a photo of an astronaut riding a horse on mars"
13
14prng_seed = jax.random.PRNGKey(0)
15num_inference_steps = 50
16
17num_samples = jax.device_count()
18prompt = num_samples * [prompt]
19prompt_ids = pipeline.prepare_inputs(prompt)
20
21# shard inputs and rng
22params = replicate(params)
23prng_seed = jax.random.split(prng_seed, jax.device_count())
24prompt_ids = shard(prompt_ids)
25
26images = pipeline(prompt_ids, params, prng_seed, num_inference_steps, jit=True).images
27images = pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:])))FlaxStableDiffusionPipeline in bfloat16 precision instead of the default float32 precision as done above. You can do so by telling diffusers to load the weights from "bf16" branch.1import jax
2import numpy as np
3from flax.jax_utils import replicate
4from flax.training.common_utils import shard
5
6from diffusers import FlaxStableDiffusionPipeline
7
8pipeline, params = FlaxStableDiffusionPipeline.from_pretrained(
9 "runwayml/stable-diffusion-v1-5", revision="bf16", dtype=jax.numpy.bfloat16
10)
11
12prompt = "a photo of an astronaut riding a horse on mars"
13
14prng_seed = jax.random.PRNGKey(0)
15num_inference_steps = 50
16
17num_samples = jax.device_count()
18prompt = num_samples * [prompt]
19prompt_ids = pipeline.prepare_inputs(prompt)
20
21# shard inputs and rng
22params = replicate(params)
23prng_seed = jax.random.split(prng_seed, jax.device_count())
24prompt_ids = shard(prompt_ids)
25
26images = pipeline(prompt_ids, params, prng_seed, num_inference_steps, jit=True).images
27images = pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:])))1import jax
2import numpy as np
3import jax.numpy as jnp
4from flax.jax_utils import replicate
5from flax.training.common_utils import shard
6import requests
7from io import BytesIO
8from PIL import Image
9from diffusers import FlaxStableDiffusionImg2ImgPipeline
10
11def create_key(seed=0):
12 return jax.random.PRNGKey(seed)
13rng = create_key(0)
14
15url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
16response = requests.get(url)
17init_img = Image.open(BytesIO(response.content)).convert("RGB")
18init_img = init_img.resize((768, 512))
19
20prompts = "A fantasy landscape, trending on artstation"
21
22pipeline, params = FlaxStableDiffusionImg2ImgPipeline.from_pretrained(
23 "CompVis/stable-diffusion-v1-4", revision="flax",
24 dtype=jnp.bfloat16,
25)
26
27num_samples = jax.device_count()
28rng = jax.random.split(rng, jax.device_count())
29prompt_ids, processed_image = pipeline.prepare_inputs(prompt=[prompts]*num_samples, image = [init_img]*num_samples)
30p_params = replicate(params)
31prompt_ids = shard(prompt_ids)
32processed_image = shard(processed_image)
33
34output = pipeline(
35 prompt_ids=prompt_ids,
36 image=processed_image,
37 params=p_params,
38 prng_seed=rng,
39 strength=0.75,
40 num_inference_steps=50,
41 jit=True,
42 height=512,
43 width=768).images
44
45output_images = pipeline.numpy_to_pil(np.asarray(output.reshape((num_samples,) + output.shape[-3:])))1import jax
2import numpy as np
3from flax.jax_utils import replicate
4from flax.training.common_utils import shard
5import PIL
6import requests
7from io import BytesIO
8
9
10from diffusers import FlaxStableDiffusionInpaintPipeline
11
12def download_image(url):
13 response = requests.get(url)
14 return PIL.Image.open(BytesIO(response.content)).convert("RGB")
15img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
16mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
17
18init_image = download_image(img_url).resize((512, 512))
19mask_image = download_image(mask_url).resize((512, 512))
20
21pipeline, params = FlaxStableDiffusionInpaintPipeline.from_pretrained("xvjiarui/stable-diffusion-2-inpainting")
22
23prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
24prng_seed = jax.random.PRNGKey(0)
25num_inference_steps = 50
26
27num_samples = jax.device_count()
28prompt = num_samples * [prompt]
29init_image = num_samples * [init_image]
30mask_image = num_samples * [mask_image]
31prompt_ids, processed_masked_images, processed_masks = pipeline.prepare_inputs(prompt, init_image, mask_image)
32
33
34# shard inputs and rng
35params = replicate(params)
36prng_seed = jax.random.split(prng_seed, jax.device_count())
37prompt_ids = shard(prompt_ids)
38processed_masked_images = shard(processed_masked_images)
39processed_masks = shard(processed_masks)
40
41images = pipeline(prompt_ids, processed_masks, processed_masked_images, params, prng_seed, num_inference_steps, jit=True).images
42images = pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:])))StableDiffusionImg2ImgPipeline lets you pass a text prompt and an initial image to condition the generation of new images.1import requests
2import torch
3from PIL import Image
4from io import BytesIO
5
6from diffusers import StableDiffusionImg2ImgPipeline
7
8# load the pipeline
9device = "cuda"
10model_id_or_path = "runwayml/stable-diffusion-v1-5"
11pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
12
13# or download via git clone https://huggingface.co/runwayml/stable-diffusion-v1-5
14# and pass `model_id_or_path="./stable-diffusion-v1-5"`.
15pipe = pipe.to(device)
16
17# let's download an initial image
18url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
19
20response = requests.get(url)
21init_image = Image.open(BytesIO(response.content)).convert("RGB")
22init_image = init_image.resize((768, 512))
23
24prompt = "A fantasy landscape, trending on artstation"
25
26images = pipe(prompt=prompt, image=init_image, strength=0.75, guidance_scale=7.5).images
27
28images[0].save("fantasy_landscape.png")StableDiffusionInpaintPipeline lets you edit specific parts of an image by providing a mask and a text prompt.1import PIL
2import requests
3import torch
4from io import BytesIO
5
6from diffusers import StableDiffusionInpaintPipeline
7
8def download_image(url):
9 response = requests.get(url)
10 return PIL.Image.open(BytesIO(response.content)).convert("RGB")
11
12img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
13mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
14
15init_image = download_image(img_url).resize((512, 512))
16mask_image = download_image(mask_url).resize((512, 512))
17
18pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting", torch_dtype=torch.float16)
19pipe = pipe.to("cuda")
20
21prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
22image = pipe(prompt=prompt, image=init_image, mask_image=mask_image).images[0]diffusers:DiffusionPipelines and Google Colab) and interactive web-tools.1# !pip install diffusers["torch"] transformers
2from diffusers import DiffusionPipeline
3
4device = "cuda"
5model_id = "CompVis/ldm-text2im-large-256"
6
7# load model and scheduler
8ldm = DiffusionPipeline.from_pretrained(model_id)
9ldm = ldm.to(device)
10
11# run pipeline in inference (sample random noise and denoise)
12prompt = "A painting of a squirrel eating a burger"
13image = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6).images[0]
14
15# save image
16image.save("squirrel.png")1# !pip install diffusers["torch"]
2from diffusers import DDPMPipeline, DDIMPipeline, PNDMPipeline
3
4model_id = "google/ddpm-celebahq-256"
5device = "cuda"
6
7# load model and scheduler
8ddpm = DDPMPipeline.from_pretrained(model_id) # you can replace DDPMPipeline with DDIMPipeline or PNDMPipeline for faster inference
9ddpm.to(device)
10
11# run pipeline in inference (sample random noise and denoise)
12image = ddpm().images[0]
13
14# save image
15image.save("ddpm_generated_image.png")| Model | Hugging Face Spaces |
|---|---|
| Text-to-Image Latent Diffusion | |
| Faces generator | |
| DDPM with different schedulers | |
| Conditional generation from sketch | |
| Composable diffusion |



1@misc{von-platen-etal-2022-diffusers,
2 author = {Patrick von Platen and Suraj Patil and Anton Lozhkov and Pedro Cuenca and Nathan Lambert and Kashif Rasul and Mishig Davaadorj and Thomas Wolf},
3 title = {Diffusers: State-of-the-art diffusion models},
4 year = {2022},
5 publisher = {GitHub},
6 journal = {GitHub repository},
7 howpublished = {\url{https://github.com/huggingface/diffusers}}
8}