rAVEUK JonathanColetti commited on
Commit
750076b
·
0 Parent(s):

Duplicate from JonathanColetti/LiveWan

Browse files

Co-authored-by: Jonathan Coletti <JonathanColetti@users.noreply.huggingface.co>

.gitattributes ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ samples/w44_diff_0_to_80.png filter=lfs diff=lfs merge=lfs -text
37
+ samples/w60_diff_0_to_80.png filter=lfs diff=lfs merge=lfs -text
38
+ samples/w60_edge_over_time.png filter=lfs diff=lfs merge=lfs -text
39
+ samples/w60_filmstrip.png filter=lfs diff=lfs merge=lfs -text
40
+ samples/world_p0_woman_16fps.mp4 filter=lfs diff=lfs merge=lfs -text
41
+ samples/world_p44_owl_16fps.mp4 filter=lfs diff=lfs merge=lfs -text
42
+ samples/world_p60_waterfall_16fps.mp4 filter=lfs diff=lfs merge=lfs -text
43
+ samples/world_p82_court_16fps.mp4 filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: Wan-AI/Wan2.1-T2V-1.3B
4
+ pipeline_tag: text-to-video
5
+ library_name: livewan
6
+ tags:
7
+ - text-to-video
8
+ - streaming
9
+ - real-time
10
+ - video-generation
11
+ - distillation
12
+ - dmd
13
+ - wan2.1
14
+ - wanstreamer
15
+ ---
16
+
17
+ # LiveWan: streaming text 2 video, 3000 steps
18
+
19
+ > **Unofficial community project.** Not affiliated with, endorsed by, or produced
20
+ > by Alibaba Group or the Wan-Video team. Built on their Apache-2.0
21
+ > [Wan2.1](https://github.com/Wan-Video/Wan2.1) release.
22
+
23
+ A 1.3 B student distilled from a Wan2.1-14B teacher that generates video
24
+ **continuously** rather than as a fixed clip: 750 ms of 640x368 video per block,
25
+ generated in 428 ms on one A100 80GB, extended block by block for as long as you
26
+ let it run. The text conditioning can be changed mid-stream without clearing the
27
+ K/V cache, so the scene continues instead of cutting.
28
+
29
+ **Code, setup and documentation: [JonathanColetti/LiveWan](https://github.com/JonathanColetti/LiveWan).** This repository holds
30
+ weights and data only. It is not usable on its own.
31
+
32
+ ## Not audio
33
+
34
+ The model is text-to-video and was never trained to articulate speech. There is no
35
+ audio, no lip sync and no speech anywhere in this project. Text steers **the scene**.
36
+ A face that appears to talk is generating plausible mouth motion, not saying your
37
+ sentence.
38
+
39
+ ## Files
40
+
41
+ **To run the model — 6.0 GB.** This is what `setup.sh` fetches.
42
+
43
+ | path | size | what |
44
+ |---|---|---|
45
+ | `checkpoints/t14b_b64/milestones/step002250_noema.pt` | 5.3 GB | **the model** — 825 tensors, bf16, no EMA copy |
46
+ | `checkpoints/t14b_b64/history.json` | 100 KB | the full training history of the run |
47
+ | `data/prompts.pt` | 388 MB | umt5-xxl embeddings for 96 prompts, indices 0–95 |
48
+ | `out/world_p{0,44,60,82}.pt` | 4 × 59 MB | the four cached evaluation worlds — skip base-model generation entirely |
49
+ | `samples/` | 16 MB | reference clips and analysis filmstrips from those worlds |
50
+
51
+ **To continue the run** Not needed for inference. do not
52
+ download these unless you intend to train.
53
+
54
+ | path | size | what |
55
+ |---|---|---|
56
+ | `checkpoints/t14b_b64/latest.pt` | 10.6 GB | step 3000, **carries its EMA copy**. The comparison arm, and the weights a resume starts from |
57
+ | `checkpoints/t14b_b64/opt_rank00{0..7}.pt` | 8 × 2.2 GB | FSDP-sharded AdamW state at step 3000, one shard per rank |
58
+
59
+ Nothing here duplicates a public download. The Wan2.1 base model, its VAE and the
60
+ umt5-xxl encoder are not mirrored in this repository. `setup.sh` pulls
61
+ [Wan-AI/Wan2.1-T2V-1.3B](https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B) (17 GB)
62
+ from its own repo, and the 14B teacher is only needed if you are distilling.
63
+
64
+ The layout mirrors the code repository, so `setup.sh` downloads straight into place.
65
+ To take only part of it:
66
+
67
+ ```bash
68
+ hf download JonathanColetti/LiveWan --local-dir . \
69
+ --exclude "checkpoints/t14b_b64/latest.pt" "checkpoints/t14b_b64/opt_rank*"
70
+ ```
71
+
72
+ ## Use
73
+
74
+ ```bash
75
+ git clone https://github.com/JonathanColetti/LiveWan && cd LiveWan
76
+ pip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128
77
+ ./setup.sh # pulls this repo, checksum-verified
78
+
79
+ python scripts/demo.py \
80
+ --weights checkpoints/t14b_b64/milestones/step002250_noema.pt \
81
+ --world-cache out/world_p60.pt --prompt-idx 60 \
82
+ --latent-norm 1.0 --block 3 --steps 2 --window 6 --units 60 --fps 16 \
83
+ --out out/demo_w60
84
+ ```
85
+
86
+ Needs ~10 GiB of VRAM. `scripts/live_demo.py` serves the same model as a steerable
87
+ browser stream.
88
+
89
+ **`--prompt-idx` must match the world**: `world_p60.pt` goes with `--prompt-idx 60`.
90
+ Indices run 0–95; anything above fails.
91
+
92
+
93
+ ## Training
94
+
95
+ 3000 iterations of SF-DMD distillation from a Wan2.1-T2V-14B teacher into a
96
+ Wan2.1-T2V-1.3B student, effective batch 64 (8×H200, accum 8, FSDP), **41.6 hours**
97
+ at 66.5 s/it, zero interventions. Losses do not decrease in this trainer and should
98
+ not (the critic is retrained every step, so the generator holds position against a
99
+ strengthening opponent).
100
+
101
+ ## Continuing the run
102
+
103
+ The optimizer shards make extending the run a **resume rather than a restart**.
104
+ Put `latest.pt`, all eight `opt_rank*.pt` and `history.json` in the same run
105
+ directory and:
106
+
107
+ ```bash
108
+ ITERS=4000 ./run_b64_resume.sh
109
+ ```
110
+
111
+ Four things decide whether this works:
112
+
113
+ - **Exactly 8 ranks.** These are per-rank FSDP shards, not a consolidated state
114
+ dict. World size 8 is what wrote them and world size 8 is what can read them;
115
+ fewer ranks means *larger* shards, not smaller, so there is no repacking
116
+ shortcut. `run_b64_resume.sh` checks for all eight up front and refuses rather
117
+ than half-starting.
118
+ - **You resume from step 3000, not from the released step 2250.** Optimizer state
119
+ and the EMA copy exist only for step 3000 — 2250 was archived `_noema` and its
120
+ EMA is gone. The released checkpoint is the better *model*; `latest.pt` is the
121
+ only *resumable* one.
122
+ - **`--resume` overwrites the checkpoint it resumed from.** It reads
123
+ `OUT/latest.pt` and writes that same path at the first save.
124
+ `run_b64_resume.sh` preserves it as `step003000.pt` first — if you drive the
125
+ trainer directly instead, copy it aside yourself.
126
+ - **~30 GiB must be free transiently at each save**, because the shards are
127
+ written as `.tmp` and renamed, so old and new coexist. Prune before the save,
128
+ not after; a post-save janitor cannot help, since the save is what runs out of
129
+ space.
130
+
131
+ The resume path is verified rather than assumed: killing a run at step 12 brought
132
+ AdamW's internal counters back as 16/18 rather than reset, and the real 750→3000
133
+ resume held `loss_gen`, `loss_critic`, `dmd_grad_norm` and `gn_gen` within one
134
+ standard deviation of the 60-point pre-crash reference. A subtly broken restore
135
+ shows up as a shifted mean or changed variance; neither appeared.
136
+
137
+ ## Verified
138
+
139
+ - all 825 tensors load, **zero non-finite values**, weight norms 0.018–115.4
140
+ - three correctness gates pass with their deliberately broken controls failing, both
141
+ before and after training
142
+ - 24 streaming cells across every arm and world met the real-time budget
143
+ - same box, same seed → **byte-identical** output
144
+
145
+ ## Limits
146
+
147
+ - **Quality holds for roughly a minute.** By 160 s sharpness has fallen to ~73% of
148
+ the world's.
149
+ - **Maximum 1024 latent frames** (4.3 minutes at block 3), set by `WanModel.freqs`.
150
+ - **The pixel check has not been done.** Checkpoint selection rests on proxy metrics,
151
+ and in this project nine automatic measurements have pointed the wrong way — every
152
+ one caught by looking at pixels at 1:1.
153
+ - **World 82 is unexplained**: every trained checkpoint drifts on it while the
154
+ untrained baseline sits at −0.001.
155
+ - **The batch-64 premise is unsettled** — confounded with having simply trained
156
+ longer.
157
+
158
+
159
+
160
+ ## Licence
161
+
162
+ Apache-2.0. Derived from [Wan2.1](https://github.com/Wan-Video/Wan2.1)
163
+ (Apache-2.0, Alibaba Group).
checkpoints/t14b_b64/history.json ADDED
The diff for this file is too large to render. See raw diff
 
checkpoints/t14b_b64/latest.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c4fe559eeaff4c9e545ca4c5a9fe7e39c1a51cc49e5e992a4697700ec9dc02a5
3
+ size 11352491549
checkpoints/t14b_b64/milestones/step002250_noema.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9f7619d2f96f253c9ef18c6c026e961a82c0da7798f098943325719121bcbb17
3
+ size 5676251781
checkpoints/t14b_b64/opt_rank000.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f0f9e7214e108f0cf63a4ea9039113b2438ac7911f1fc5a640fad8f79d2ec2b4
3
+ size 2379940269
checkpoints/t14b_b64/opt_rank001.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4f6925320fb258359e01eeec107699e3d6742c1141ccc6c1ac35400401721239
3
+ size 2376579565
checkpoints/t14b_b64/opt_rank002.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ef94e9c70f6cd0227f4a9f9437bc242846ab904760cbabbe02b4e2d0a4a1f024
3
+ size 2376579565
checkpoints/t14b_b64/opt_rank003.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d6831bfd1c73f45de07213cba5cb8db89cc3ed5b5e6ac11a7cc8244bc0d16c83
3
+ size 2376579565
checkpoints/t14b_b64/opt_rank004.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7212cb3da6624fc752c3861ff05c53b8d9aad9f515e872e126a49b98067ae80d
3
+ size 2376579565
checkpoints/t14b_b64/opt_rank005.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:13e4ae9ff3479dd8f6937a19a2ce7935fe28fb059661f11541aff520180d2495
3
+ size 2376579565
checkpoints/t14b_b64/opt_rank006.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:936f712c9d14ca762d93f3871c29a9360959cf5fff38ac7f609fbde8f93a5669
3
+ size 2376579565
checkpoints/t14b_b64/opt_rank007.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0e352a437b3881fd5de834d48008e573d906d1279476635bdb978a8e3e45e992
3
+ size 2376579565
checksums.sha256 ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 4256a6d4cedfc38fdbb4ccf9e21307f592737e844e0e05456ac9b6e8e493e43f checkpoints/t14b_b64/history.json
2
+ c4fe559eeaff4c9e545ca4c5a9fe7e39c1a51cc49e5e992a4697700ec9dc02a5 checkpoints/t14b_b64/latest.pt
3
+ 9f7619d2f96f253c9ef18c6c026e961a82c0da7798f098943325719121bcbb17 checkpoints/t14b_b64/milestones/step002250_noema.pt
4
+ f0f9e7214e108f0cf63a4ea9039113b2438ac7911f1fc5a640fad8f79d2ec2b4 checkpoints/t14b_b64/opt_rank000.pt
5
+ 4f6925320fb258359e01eeec107699e3d6742c1141ccc6c1ac35400401721239 checkpoints/t14b_b64/opt_rank001.pt
6
+ ef94e9c70f6cd0227f4a9f9437bc242846ab904760cbabbe02b4e2d0a4a1f024 checkpoints/t14b_b64/opt_rank002.pt
7
+ d6831bfd1c73f45de07213cba5cb8db89cc3ed5b5e6ac11a7cc8244bc0d16c83 checkpoints/t14b_b64/opt_rank003.pt
8
+ 7212cb3da6624fc752c3861ff05c53b8d9aad9f515e872e126a49b98067ae80d checkpoints/t14b_b64/opt_rank004.pt
9
+ 13e4ae9ff3479dd8f6937a19a2ce7935fe28fb059661f11541aff520180d2495 checkpoints/t14b_b64/opt_rank005.pt
10
+ 936f712c9d14ca762d93f3871c29a9360959cf5fff38ac7f609fbde8f93a5669 checkpoints/t14b_b64/opt_rank006.pt
11
+ 0e352a437b3881fd5de834d48008e573d906d1279476635bdb978a8e3e45e992 checkpoints/t14b_b64/opt_rank007.pt
12
+ 79a2a8edfcf34999b3928382e3b891cad0dbcbcf999c20433331cefea76ac631 data/prompts.pt
13
+ 4a0b0067309a143cee3b853b047041412b6e7556d5f668c97434a76cdd6f4b5e out/world_p0.pt
14
+ 26de659980d9441766fd167aa1966e97e529579bd2552d1ac8721a55987f45f8 out/world_p44.pt
15
+ b01ee8e99fccbe899d4363a886ba6e0c224d73d5461bb3648f313ca541a2a08d out/world_p60.pt
16
+ a5a301b04a8feb3a135f6e655da2d4459a0af76898419d3fa16927395cbe35b2 out/world_p82.pt
17
+ cd2c0e30f607c2630b60393d7a56f47ab1697603429adf37f833bdb8e39eef17 samples/w0_bottom_zoom.png
18
+ 01682d0b64714737b5c7b3c94331b9cf0b5855d31ff1f4057725cb072fb746d5 samples/w44_diff_0_to_80.png
19
+ 77efa06356dfc3b9ce9d244ce1a552c41c40286304b35ce59df4afe34e71f2b2 samples/w60_diff_0_to_80.png
20
+ 24fcb4fbe55b868f82c0143fcc5ae4b9aafe20a9bb369cb77d7543999ac69e01 samples/w60_edge_over_time.png
21
+ b1d79ef272d3bb52bc4e49809d1d16a00826ae522b33d2374ec000ad3d748730 samples/w60_edges_zoom.png
22
+ 6ef7c38e2dd0c8433c5580b6bb56a9b6cb93ea2635d6bdc649a7ab57a9910c63 samples/w60_filmstrip.png
23
+ 67db1cdd80db99b0a583d2c874bfe1873476ba3e5876ea97a56e19b330029c4c samples/world_p0_woman_16fps.mp4
24
+ 60eeead771c8b178eab3419d6c17fb9ca9a261cfebd06089f2dab9eb91ab8a49 samples/world_p44_owl_16fps.mp4
25
+ f02cc3ca0ccbd31cb2a07e152365f030ac76de106bb4a4d866c293300b5199f7 samples/world_p60_waterfall_16fps.mp4
26
+ 9d5129dccd0cee17989d0039c3ce96be6370855a6056e727368e35cc8e1e4c61 samples/world_p82_court_16fps.mp4
data/prompts.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:79a2a8edfcf34999b3928382e3b891cad0dbcbcf999c20433331cefea76ac631
3
+ size 406857637
out/world_p0.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4a0b0067309a143cee3b853b047041412b6e7556d5f668c97434a76cdd6f4b5e
3
+ size 62179245
out/world_p44.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:26de659980d9441766fd167aa1966e97e529579bd2552d1ac8721a55987f45f8
3
+ size 62179253
out/world_p60.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b01ee8e99fccbe899d4363a886ba6e0c224d73d5461bb3648f313ca541a2a08d
3
+ size 62179253
out/world_p82.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a5a301b04a8feb3a135f6e655da2d4459a0af76898419d3fa16927395cbe35b2
3
+ size 62179253
samples/w0_bottom_zoom.png ADDED
samples/w44_diff_0_to_80.png ADDED

Git LFS Details

  • SHA256: 01682d0b64714737b5c7b3c94331b9cf0b5855d31ff1f4057725cb072fb746d5
  • Pointer size: 131 Bytes
  • Size of remote file: 334 kB
samples/w60_diff_0_to_80.png ADDED

Git LFS Details

  • SHA256: 77efa06356dfc3b9ce9d244ce1a552c41c40286304b35ce59df4afe34e71f2b2
  • Pointer size: 131 Bytes
  • Size of remote file: 377 kB
samples/w60_edge_over_time.png ADDED

Git LFS Details

  • SHA256: 24fcb4fbe55b868f82c0143fcc5ae4b9aafe20a9bb369cb77d7543999ac69e01
  • Pointer size: 131 Bytes
  • Size of remote file: 442 kB
samples/w60_edges_zoom.png ADDED
samples/w60_filmstrip.png ADDED

Git LFS Details

  • SHA256: 6ef7c38e2dd0c8433c5580b6bb56a9b6cb93ea2635d6bdc649a7ab57a9910c63
  • Pointer size: 132 Bytes
  • Size of remote file: 1.62 MB
samples/world_p0_woman_16fps.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:67db1cdd80db99b0a583d2c874bfe1873476ba3e5876ea97a56e19b330029c4c
3
+ size 2520053
samples/world_p44_owl_16fps.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:60eeead771c8b178eab3419d6c17fb9ca9a261cfebd06089f2dab9eb91ab8a49
3
+ size 2890418
samples/world_p60_waterfall_16fps.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f02cc3ca0ccbd31cb2a07e152365f030ac76de106bb4a4d866c293300b5199f7
3
+ size 4348958
samples/world_p82_court_16fps.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9d5129dccd0cee17989d0039c3ce96be6370855a6056e727368e35cc8e1e4c61
3
+ size 4793435