Text-to-Image
Diffusers
Safetensors
English
remote-sensing
earth-observation
satellite-imagery
flow-matching
diffusion-transformer
geospatial
Instructions to use BiliSakura/GeoCore-9B-diffusers with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use BiliSakura/GeoCore-9B-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/GeoCore-9B-diffusers", dtype=torch.bfloat16, device_map="cuda") prompt = "A parking lot full of cars is located next to some trees." image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Draw Things
- DiffusionBee
| 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) | |
| <Gallery /> | |
| ## 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 | | |
| | --- | --- | --- | --- | | |
| |  |  |  |  | | |
| ## 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} | |
| } | |
| ``` | |