Instructions to use BiliSakura/TerraDiT-diffusers with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use BiliSakura/TerraDiT-diffusers with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("BiliSakura/TerraDiT-diffusers", dtype=torch.bfloat16, device_map="cuda") prompt = "The satellite image shows a coastal town where a marina with many small boats meets the dark blue sea, with a sandy beach along the shore and low-rise buildings with red roofs behind it." image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Draw Things
- DiffusionBee
TerraDiT-diffusers
Self-contained Diffusers checkpoints for TerraDiT-α, TerraDiT-Σ, and TerraDiT-Ω (ECCV 2026): satellite image synthesis at 256×256 from text, geolocation, point prompts, and arbitrary geospatial primitives.
Converted from MVRL/TerraDiT with scripts/convert_to_diffusers.py. Each subfolder is a SiT-diffusers-style repo (pipeline.py + family transformer + optional geolocation_encoder/) and loads without installing the training code.
Code · Collection · Data · TerraDiT-Ω paper · TerraDiT paper
| Subfolder | Model | Conditioning | Backbone | Params |
|---|---|---|---|---|
TerraDiT-Alpha-XL |
TerraDiT-α | text | SiT-XL/2 | 828M |
TerraDiT-Sigma-XL |
TerraDiT-Σ | text + geolocation + point prompts | SiT-XL/2 | 1.10B |
TerraDiT-Omega-XL |
TerraDiT-Ω | text + geolocation + polygons / polylines / boxes / points | SiT-XL/2 | 1.18B |
TerraDiT-Omega-B |
TerraDiT-Ω base | same as Ω | SiT-B/2 | 299M |
Shared components in every variant: SDXL VAE (scaling_factor=0.13025), LongCLIP text encoder (zer0int/LongCLIP-KO-LITE-TypoAttack-Attn-ViT-L-14, 144 tokens), FlowMatchEulerDiscreteScheduler (100 Euler steps, no CFG). Σ / Ω also ship RANGE+ under geolocation_encoder/ (SatCLIP location encoder + range_db.npz).
Demo
256×256, 100 Euler steps, guidance_scale=0.0, seed 42. α is text-only; Σ adds St. Louis lat/lon plus point prompts; Ω / Ω-B add Paris lat/lon plus mixed geospatial primitives.
Load a local subfolder
import torch
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"./TerraDiT-Alpha-XL",
trust_remote_code=True,
).to("cuda")
image = pipe(
prompt="The satellite image shows a coastal town with a marina and red-roofed houses.",
height=256,
width=256,
num_inference_steps=100,
guidance_scale=0.0,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
image.save("terradit_alpha.png")
TerraDiT-Σ — text + lat/lon + point prompts
import torch
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"./TerraDiT-Sigma-XL",
trust_remote_code=True,
).to("cuda")
image = pipe(
prompt="The satellite image shows a suburban neighborhood with a school and a pond.",
lat=38.65,
lon=-90.31,
points=[
[40, 40, "building house"],
[90, 170, "amenity school"],
[205, 215, "natural water"],
],
height=256,
width=256,
num_inference_steps=100,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
Coordinates are tile pixels in [0, 256), x right and y down. Tags follow the OSM "<key> <value>" convention.
TerraDiT-Ω — any geospatial primitive
import torch
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"./TerraDiT-Omega-XL", # or ./TerraDiT-Omega-B
trust_remote_code=True,
).to("cuda")
image = pipe(
prompt="A small town crossed by a river and a road bridge.",
lat=48.86,
lon=2.35,
instances=[
{"type": "polygon", "coords": [[20, 20], [110, 15], [120, 90], [30, 100]], "tag": "leisure park"},
{"type": "polyline", "coords": [[0, 30], [60, 110], [140, 170], [255, 235]], "tag": "waterway river"},
{"type": "bbox", "coords": [[20, 170], [70, 215]], "tag": "building house"},
{"type": "point", "coords": [200, 200], "tag": "amenity parking"},
],
condition_type="omega",
height=256,
width=256,
num_inference_steps=100,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
Sources
| Component | Source |
|---|---|
| Transformers | MVRL/TerraDiT (alpha_xl, sigma_xl, omega_xl, omega_base) |
| VAE | stabilityai/sdxl-vae |
| Text encoder / tokenizer | zer0int/LongCLIP-KO-LITE-TypoAttack-Attn-ViT-L-14 |
| Location encoder | MVRL/satclip-loc-enc-vit16-l40 |
| RANGE+ database | mvrl/RANGE-database (range_db_large.npz) |
License
Weights: CC-BY-NC-4.0 (non-commercial research), because the training imagery (Git-10M) is CC-BY-NC-ND-4.0. Code: Apache 2.0. Conditioning data derives from OpenStreetMap (ODbL, © OpenStreetMap contributors). SDXL VAE and LongCLIP are MIT.
@inproceedings{wei2026terraditomega,
title = {TerraDiT-{\Omega}: Unified Spatial Control for Satellite Image Synthesis with Any Geospatial Primitive},
author = {Wei, Brian and Sastry, Srikumar and Cher, Daniel and Xing, Eric and Jacobs, Nathan},
booktitle = {European Conference on Computer Vision},
year = {2026}
}
@article{sastry2026terradit,
title = {TerraDiT: Point-Conditioned Diffusion Transformer for Satellite Image Synthesis},
author = {Sastry, Srikumar and Cher, Daniel and Wei, Brian and Dhakal, Aayush and Khanal, Subash and Gupta, Dev and Jacobs, Nathan},
journal = {arXiv:2603.02172},
year = {2026}
}
- Downloads last month
- -



