--- license: apache-2.0 library_name: diffusers pipeline_tag: text-to-image tags: - diffusers - remote-sensing - earth-observation - satellite-imagery - text-to-image - flow-matching - diffusion-transformer - geospatial datasets: - lcybuaa/Git-10M inference: true language: - en widget: - text: A parking lot full of cars is located next to some trees. output: url: demo/parking.png - text: Many buildings are located in a commercial area. output: url: demo/commercial.png - text: A roundabout is surrounded by grass. output: url: demo/roundabout.png - text: Two tennis courts are semi-surrounded by several green trees. output: url: demo/tennis.png --- # BiliSakura/GeoCore-9B-diffusers Self-contained [Diffusers](https://github.com/huggingface/diffusers) checkpoint for **GeoCore-9B**: 256×256 optical satellite generation from text, with optional GSD, latitude, and longitude. Converted from [`JeonghyeokDo/GeoCore-9B`](https://huggingface.co/JeonghyeokDo/GeoCore-9B). `DiffusionPipeline.from_pretrained` loads the DiT, Flux.2 VAE, CLIP-L, T5-XXL, and `FlowMatchEulerDiscreteScheduler` from this repo (`trust_remote_code=True`). [Project](https://kaist-viclab.github.io/GeoCore-9B_site/) · [Code](https://github.com/KAIST-VICLab/GeoCore-9B) · [Original weights](https://huggingface.co/JeonghyeokDo/GeoCore-9B) ## Demo 256×256, 50 Euler steps, `guidance_scale=4.0`, seed `42`, `lon=126.97`, `lat=37.56`, `res=0.0` (Seoul). | Parking lot | Commercial | Roundabout | Tennis courts | | --- | --- | --- | --- | | ![parking](demo/parking.png) | ![commercial](demo/commercial.png) | ![roundabout](demo/roundabout.png) | ![tennis](demo/tennis.png) | ## Model details | Field | Value | | --- | --- | | Pipeline | `GeoCorePipeline` (`pipeline.py`) | | Transformer | Flow-matching DiT, 8 double-stream + 24 single-stream blocks, hidden 4096, 32 heads, **9.24B** | | Text encoders | CLIP ViT-L/14 + T5-XXL (bundled) | | VAE | Flux.2 `AutoencoderKLFlux2` (Apache-2.0, bundled) | | Scheduler | `FlowMatchEulerDiscreteScheduler`, `shift=1.0` | | Resolution | 256×256 | | Training data | [Git-10M](https://huggingface.co/datasets/lcybuaa/Git-10M) | | License | Apache-2.0 | ## Load from Hugging Face ```python import torch from diffusers import DiffusionPipeline pipe = DiffusionPipeline.from_pretrained( "BiliSakura/GeoCore-9B-diffusers", trust_remote_code=True, torch_dtype=torch.bfloat16, ).to("cuda") image = pipe( prompt="A parking lot full of cars is located next to some trees.", lon=126.97, lat=37.56, res=0.0, height=256, width=256, num_inference_steps=50, guidance_scale=4.0, generator=torch.Generator(device="cuda").manual_seed(42), ).images[0] image.save("demo.png") ``` The DiT is ~18.5 GB in bf16. A 24 GB GPU is tight; on two GPUs, split only the transformer with Accelerate and keep CLIP, T5, and the VAE on one device. ## Conditioning Captions follow the Git-10M style (short scene descriptions). Geospatial fields are optional. | Argument | Meaning | | --- | --- | | `prompt` | Natural-language description | | `res` | Resolution index `17 - z` for Google XYZ zoom `z`. `0` ≈ 1.2 m/px at the equator; each `+1` doubles GSD | | `lon`, `lat` | Degrees | | `-999.0` | Learned null embedding — any of `res` / `lon` / `lat` may be omitted | ## License DiT weights © 2026 Jeonghyeok Do and Munchurl Kim, Apache-2.0. VAE is an unmodified Apache-2.0 Flux.2 autoencoder from [`black-forest-labs/FLUX.2-klein-base-4B`](https://huggingface.co/black-forest-labs/FLUX.2-klein-base-4B); see [`LICENSE-FLUX2-VAE.md`](LICENSE-FLUX2-VAE.md). [Git-10M](https://huggingface.co/datasets/lcybuaa/Git-10M) is CC BY-NC-ND 4.0 (non-commercial retraining). ## Citation ```bibtex @article{do2026geocore, title = {GeoCore-9B: Towards Geo-Aware Generative Foundation Models in Earth Observation}, author = {Do, Jeonghyeok and Kim, Munchurl}, year = {2026} } ```