--- language: en library_name: diffusers pipeline_tag: text-to-image tags: - satellite - controlnet - diffusers - text-to-image --- # DiffusionSat Custom Pipelines Custom community pipelines for loading DiffusionSat checkpoints directly with `diffusers.DiffusionPipeline.from_pretrained()`. > See [Diffusers Community Pipeline Documentation](https://huggingface.co/docs/diffusers/using-diffusers/custom_pipeline_overview) ## Model Index `model_index.json` is set to the default text-to-image pipeline (`DiffusionSatPipeline`) so `DiffusionPipeline.from_pretrained()` works out of the box. The ControlNet variant is loaded via `custom_pipeline` plus the `controlnet` subfolder, as shown below. ## Available Pipelines This directory contains two custom pipelines: 1. **`pipeline_diffusionsat.py`**: Standard text-to-image pipeline with DiffusionSat metadata support. 2. **`pipeline_diffusionsat_controlnet.py`**: ControlNet pipeline with DiffusionSat metadata and conditional metadata support. ## Setup The checkpoint folder (`ckpt/diffusionsat/`) should contain the standard diffusers components (unet, vae, scheduler, etc.). You can reference these pipeline files directly from this directory or copy them to your checkpoint folder. ## Usage ### 1. Text-to-Image Pipeline Use `pipeline_diffusionsat.py` for standard generation. ```python import torch from diffusers import DiffusionPipeline # Load pipeline pipe = DiffusionPipeline.from_pretrained( "path/to/ckpt/diffusionsat", custom_pipeline="./custom_pipelines/pipeline_diffusionsat.py", # Path to this file torch_dtype=torch.float16, trust_remote_code=True, ) pipe = pipe.to("cuda") # Optional: Metadata (normalized lat, lon, timestamp, GSD, etc.) # metadata = [0.5, -0.3, 0.7, 0.2, 0.1, 0.0, 0.5] # Generate image = pipe( "satellite image of farmland", metadata=None, # Optional num_inference_steps=30, ).images[0] ``` ### 2. ControlNet Pipeline Use `pipeline_diffusionsat_controlnet.py` for ControlNet generation. ```python import torch from diffusers import DiffusionPipeline, ControlNetModel from diffusers.utils import load_image # 1. Load ControlNet controlnet = ControlNetModel.from_pretrained( "path/to/ckpt/diffusionsat/controlnet", torch_dtype=torch.float16 ) # 2. Load Pipeline with ControlNet pipe = DiffusionPipeline.from_pretrained( "path/to/ckpt/diffusionsat", controlnet=controlnet, custom_pipeline="./custom_pipelines/pipeline_diffusionsat_controlnet.py", # Path to this file torch_dtype=torch.float16, trust_remote_code=True, ) pipe = pipe.to("cuda") # 3. Prepare Control Image control_image = load_image("path/to/conditioning_image.png") # 4. Generate # metadata: Target image metadata (optional) # cond_metadata: Conditioning image metadata (optional) image = pipe( "satellite image of farmland", image=control_image, metadata=None, cond_metadata=None, num_inference_steps=30, ).images[0] ```