File size: 3,511 Bytes
617093a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: apache-2.0
library_name: transformers
pipeline_tag: text-to-image
tags:
- image
- text-to-image
- duper
- dit
- rectified-flow
---

# Dupe-R-IMG

The **Supra2-IMG** denoiser, the **flan-t5-base** encoder and the **sd-vae-ft-mse** VAE
packed into one `model.safetensors`

| section | params | source | license |
|---|---|---|---|
| `dit.*` | 104,193,168 | [SupraLabs/Supra2-IMG](https://huggingface.co/SupraLabs/Supra2-IMG) | apache-2.0 |
| `text_encoder.*` | 109,628,544 | [google/flan-t5-base](https://huggingface.co/google/flan-t5-base) | apache-2.0 |
| `vae.*` | 83,653,863 | [stabilityai/sd-vae-ft-mse](https://huggingface.co/stabilityai/sd-vae-ft-mse) | mit |
| **total** | **297,475,575** | | |

## What this is

A **repackaging, not a weight blend**. The DiT was trained against exactly these two
encoders, so averaging anything would break it. Every tensor is copied unmodified and
re-namespaced:

- `dit.*` — SupraDiT denoiser, 14 blocks, d_model 576, patch 2
- `text_encoder.*` — T5 encoder stack, `shared.weight` token embedding included
- `vae.*` — full AutoencoderKL

Not bundled: the T5 `decoder.*` stack (113M) and `lm_head.weight` (24.7M). Text-to-image
never runs the seq2seq half.

## Files

| file | size | what |
|---|---|---|
| `model.safetensors` | ~567 MB | all 297,475,575 params, prefixed `dit.` / `text_encoder.` / `vae.` |
| `supra2img.himg` | supra2img converted to .himg ~417 MB |  `mmap` `PROT_READ`, zero-copy load |
| `model_final_ema.pt` | ~416 MB | untouched upstream checkpoint (bf16) |
| `config.json` | | geometry, per-section param counts, component provenance |
| `vae_config.json` | | native `AutoencoderKL` config (separate name on purpose) |
| `tokenizer.json`, `spiece.model`, … | | flan-t5 tokenizer |

Prefer `.himg` when memory is tight: so a 417 MB model
costs no resident RAM. `model.safetensors` is the portable single-file form.

## Precision

Stored `float16`, **compute `float32`** (upcast on load). Storage-only: a build comparing
the C core against a PyTorch reference from this same file still agrees at 1e-6, since
both read identical bytes. Only parity against the original upstream checkpoint moves
(~1e-3), which is not visible in a pixel. The `.himg` is exact float32 if you need bit
parity.

## Specs

| | |
|---|---|
| resolution | 256x256 |
| latent | 4 x 32 x 32 |
| context | 128 tokens (flan-t5-base) |
| sampler | rectified flow, Euler (Heun supported) |
| default steps / cfg | 50 / 3.0 |
| latent scale | 0.18215 |

## Usage

```python
import json
from huggingface_hub import hf_hub_download
from safetensors import safe_open
from diffusers import AutoencoderKL

repo = "ShimbaLLM/Dupe-R-IMG"
dit_sd, te_sd, vae_sd = {}, {}, {}
with safe_open(hf_hub_download(repo, "model.safetensors"), framework="pt") as f:
    for k in f.keys():
        (dit_sd if k.startswith("dit.") else
         te_sd if k.startswith("text_encoder.") else
         vae_sd)[k.split('.', 1)[1]] = f.get_tensor(k).float()

vae = AutoencoderKL.from_config(
    json.load(open(hf_hub_download(repo, "vae_config.json"))))
vae.load_state_dict(vae_sd)
```

The T5 encoder stack and the SupraDiT module definitions are in `config.json` under
`components`, and in the notebook that produced this release.

## Licenses

Bundled components keep their own licenses and carry independent provenance in
`config.json`: DiT apache-2.0 (SupraLabs), T5 encoder apache-2.0 (Google), VAE mit
(Stability AI). All three permit redistribution, individually and combined.