CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
huggingface

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: huggingface/notebooks
Path: blob/main/diffusers/sde_drag.ipynb
Views: 2932
Kernel: Unknown Kernel

SDE Drag pipeline

This pipeline provides drag-and-drop image editing using stochastic differential equations. It enables image editing by inputting prompt, image, mask_image, source_points, and target_points.See paper, paper page, original repo for more information. This script was contributed by Fengqi Zhu and NieShen.The notebook contributed by Parag Ekbote.

pip install diffusers torch pillow requests torchvision
Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com Requirement already satisfied: diffusers in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (0.31.0) Requirement already satisfied: torch in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (2.0.1+cu117) Requirement already satisfied: pillow in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (9.0.0) Requirement already satisfied: requests in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (2.32.3) Requirement already satisfied: torchvision in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (0.15.2+cu117) Requirement already satisfied: importlib-metadata in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (8.5.0) Requirement already satisfied: filelock in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (3.16.1) Requirement already satisfied: huggingface-hub>=0.23.2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (0.26.3) Requirement already satisfied: numpy in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (1.26.4) Requirement already satisfied: regex!=2019.12.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (2024.11.6) Requirement already satisfied: safetensors>=0.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (0.4.5) Requirement already satisfied: typing-extensions in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (4.12.2) Requirement already satisfied: sympy in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (1.13.3) Requirement already satisfied: networkx in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (3.4.2) Requirement already satisfied: jinja2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (3.1.4) Requirement already satisfied: triton==2.0.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (2.0.0) Requirement already satisfied: cmake in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from triton==2.0.0->torch) (3.25.0) Requirement already satisfied: lit in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from triton==2.0.0->torch) (15.0.7) Requirement already satisfied: charset-normalizer<4,>=2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests) (3.4.0) Requirement already satisfied: idna<4,>=2.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests) (3.10) Requirement already satisfied: urllib3<3,>=1.21.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests) (2.2.3) Requirement already satisfied: certifi>=2017.4.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests) (2024.8.30) Requirement already satisfied: fsspec>=2023.5.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from huggingface-hub>=0.23.2->diffusers) (2024.9.0) Requirement already satisfied: packaging>=20.9 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from huggingface-hub>=0.23.2->diffusers) (24.1) Requirement already satisfied: pyyaml>=5.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from huggingface-hub>=0.23.2->diffusers) (6.0.2) Requirement already satisfied: tqdm>=4.42.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from huggingface-hub>=0.23.2->diffusers) (4.66.6) Requirement already satisfied: zipp>=3.20 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from importlib-metadata->diffusers) (3.21.0) Requirement already satisfied: MarkupSafe>=2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from jinja2->torch) (3.0.2) Requirement already satisfied: mpmath<1.4,>=1.1.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from sympy->torch) (1.3.0) [notice] A new release of pip is available: 24.3.1 -> 25.0 [notice] To update, run: pip install --upgrade pip Note: you may need to restart the kernel to use updated packages.
import torch from diffusers import DDIMScheduler, DiffusionPipeline from PIL import Image import requests from io import BytesIO import numpy as np # Load the pipeline model_path = "stable-diffusion-v1-5/stable-diffusion-v1-5" scheduler = DDIMScheduler.from_pretrained(model_path, subfolder="scheduler") pipe = DiffusionPipeline.from_pretrained(model_path, scheduler=scheduler, custom_pipeline="sde_drag") # Ensure the model is moved to the GPU device = "cuda" if torch.cuda.is_available() else "cpu" pipe.to(device) # Function to load image from URL def load_image_from_url(url): response = requests.get(url) return Image.open(BytesIO(response.content)).convert("RGB") # Function to prepare mask def prepare_mask(mask_image): # Convert to grayscale mask = mask_image.convert("L") return mask # Function to convert numpy array to PIL Image def array_to_pil(array): # Ensure the array is in uint8 format if array.dtype != np.uint8: if array.max() <= 1.0: array = (array * 255).astype(np.uint8) else: array = array.astype(np.uint8) # Handle different array shapes if len(array.shape) == 3: if array.shape[0] == 3: # If channels first array = array.transpose(1, 2, 0) return Image.fromarray(array) elif len(array.shape) == 4: # If batch dimension array = array[0] if array.shape[0] == 3: # If channels first array = array.transpose(1, 2, 0) return Image.fromarray(array) else: raise ValueError(f"Unexpected array shape: {array.shape}") # Image and mask URLs image_url = 'https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png' mask_url = 'https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png' # Load the images image = load_image_from_url(image_url) mask_image = load_image_from_url(mask_url) # Resize images to a size that's compatible with the model's latent space image = image.resize((512, 512)) mask_image = mask_image.resize((512, 512)) # Prepare the mask (keep as PIL Image) mask = prepare_mask(mask_image) # Provide the prompt and points for drag editing prompt = "A cute dog" source_points = [[32, 32]] # Adjusted for 512x512 image target_points = [[64, 64]] # Adjusted for 512x512 image # Generate the output image output_array = pipe( prompt=prompt, image=image, mask_image=mask, source_points=source_points, target_points=target_points ) # Convert output array to PIL Image and save output_image = array_to_pil(output_array) output_image.save("./output.png") print("Output image saved as './output.png'")
Output image saved as './output.png' Output type: <class 'numpy.ndarray'> Output shape: (512, 512, 3) Output dtype: uint8 Output min/max values: 0, 255