File size: 4,011 Bytes
89d4944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
---
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 |
| --- | --- | --- | --- |
| ![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}
}
```