zhanjun commited on
Commit
0bf1343
·
verified ·
1 Parent(s): 281d161

Add files using upload-large-folder tool

Browse files
Files changed (50) hide show
  1. .gitattributes +4 -31
  2. README.md +136 -0
  3. manifest.json +25 -0
  4. models/dit/manifest.json +46 -0
  5. models/dit/t2av/t2av_recon/bridges/bridge_config.json +9 -0
  6. models/dit/t2av/t2av_recon/metadata.json +29 -0
  7. models/dit/t2av/t2av_recon/resolved_config.json +337 -0
  8. models/dit/t2av/t2av_recon/resolved_config.yaml +290 -0
  9. models/dit/t2av/t2av_recon/scheduler/scheduler_config.json +18 -0
  10. models/dit/t2av/t2av_recon/tokenizer/chat_template.jinja +154 -0
  11. models/dit/t2av/t2av_recon/tokenizer/tokenizer_config.json +31 -0
  12. models/dit/t2av/t2av_recon/transformer_audio/config.json +32 -0
  13. models/dit/t2av/t2av_recon/transformer_video/config.json +32 -0
  14. models/dit/t2av/t2av_recon_avclip/resolved_config.json +337 -0
  15. models/dit/t2av/t2av_recon_avclip/resolved_config.yaml +290 -0
  16. models/dit/t2av/t2av_recon_distill/bridges/bridge_config.json +9 -0
  17. models/dit/t2av/t2av_recon_distill/metadata.json +29 -0
  18. models/dit/t2av/t2av_recon_distill/resolved_config.json +337 -0
  19. models/dit/t2av/t2av_recon_distill/resolved_config.yaml +290 -0
  20. models/dit/t2av/t2av_recon_distill/scheduler/scheduler_config.json +18 -0
  21. models/dit/t2av/t2av_recon_distill/tokenizer/chat_template.jinja +154 -0
  22. models/dit/t2av/t2av_recon_distill/tokenizer/tokenizer_config.json +31 -0
  23. models/dit/t2av/t2av_recon_distill/transformer_audio/config.json +32 -0
  24. models/dit/t2av/t2av_recon_distill/transformer_video/config.json +32 -0
  25. models/dit/t2av/t2av_recon_distill_avclip/bridges/bridge_config.json +9 -0
  26. models/dit/t2av/t2av_recon_distill_avclip/metadata.json +29 -0
  27. models/dit/t2av/t2av_recon_distill_avclip/resolved_config.json +337 -0
  28. models/dit/t2av/t2av_recon_distill_avclip/resolved_config.yaml +290 -0
  29. models/dit/t2av/t2av_recon_distill_avclip/scheduler/scheduler_config.json +18 -0
  30. models/dit/t2av/t2av_recon_distill_avclip/tokenizer/chat_template.jinja +154 -0
  31. models/dit/t2av/t2av_recon_distill_avclip/tokenizer/tokenizer_config.json +31 -0
  32. models/dit/t2av/t2av_recon_distill_avclip/transformer_audio/config.json +32 -0
  33. models/dit/t2av/t2av_recon_distill_avclip/transformer_video/config.json +32 -0
  34. models/vae/audio_only/recon/config.yaml +254 -0
  35. models/vae/audio_only/recon/metadata.json +8 -0
  36. models/vae/audio_only/recon_avclip_ft_decoder/config.yaml +259 -0
  37. models/vae/audio_only/recon_avclip_ft_decoder/metadata.json +8 -0
  38. models/vae/audio_only/recon_distill/config.yaml +259 -0
  39. models/vae/audio_only/recon_distill/metadata.json +8 -0
  40. models/vae/audio_only/recon_distill_avclip_ft_decoder/config.yaml +261 -0
  41. models/vae/audio_only/recon_distill_avclip_ft_decoder/metadata.json +8 -0
  42. models/vae/audio_video/recon_avclip/config.yaml +364 -0
  43. models/vae/audio_video/recon_avclip/metadata.json +8 -0
  44. models/vae/audio_video/recon_distill_avclip/config.yaml +367 -0
  45. models/vae/audio_video/recon_distill_avclip/metadata.json +8 -0
  46. models/vae/manifest.json +66 -0
  47. models/vae/video_only/recon/config.yaml +260 -0
  48. models/vae/video_only/recon/metadata.json +8 -0
  49. models/vae/video_only/recon_distill/config.yaml +262 -0
  50. models/vae/video_only/recon_distill/metadata.json +8 -0
.gitattributes CHANGED
@@ -1,35 +1,8 @@
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
 
 
 
1
  *.bin filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  *.pt filter=lfs diff=lfs merge=lfs -text
3
  *.pth filter=lfs diff=lfs merge=lfs -text
 
4
  *.safetensors filter=lfs diff=lfs merge=lfs -text
5
+ *.onnx filter=lfs diff=lfs merge=lfs -text
6
+ *.model filter=lfs diff=lfs merge=lfs -text
7
+ *.flac filter=lfs diff=lfs merge=lfs -text
8
+ *.wav filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
README.md CHANGED
@@ -1,3 +1,139 @@
1
  ---
2
  license: apache-2.0
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  license: apache-2.0
3
+ library_name: pytorch
4
+ tags:
5
+ - omnivae
6
+ - audio-video
7
+ - vae
8
+ - t2av
9
+ - diffusion
10
+ - synchronization
11
+ - multimodal-generation
12
  ---
13
+
14
+ # OmniVAE Release Assets
15
+
16
+ This Hugging Face repository contains the release checkpoints, text encoders,
17
+ evaluation data, and metric weights for the
18
+ [OmniVAE GitHub repository](https://github.com/OpenMOSS/OmniVAE).
19
+
20
+ The public generation weights in this release are T2AV-only. VAE weights are
21
+ included because they are required by the T2AV pipeline.
22
+
23
+ The source code is intentionally kept out of this repository. Use this bundle
24
+ with the GitHub code by setting `OMNIVAE_RELEASE_ROOT` to the local download
25
+ path.
26
+
27
+ ## Download
28
+
29
+ ```bash
30
+ pip install -U huggingface_hub
31
+ huggingface-cli download OpenMOSS-Team/OmniVAE \
32
+ --repo-type model \
33
+ --local-dir /path/to/omnivae_release \
34
+ --local-dir-use-symlinks False
35
+
36
+ git clone https://github.com/OpenMOSS/OmniVAE.git
37
+ cd OmniVAE
38
+ export OMNIVAE_RELEASE_ROOT=/path/to/omnivae_release
39
+ export OPEN_SOURCE_ROOT="${OMNIVAE_RELEASE_ROOT}"
40
+ ```
41
+
42
+ Equivalently:
43
+
44
+ ```bash
45
+ source scripts/setup_release_root.sh /path/to/omnivae_release
46
+ ```
47
+
48
+ ## Layout
49
+
50
+ ```text
51
+ omnivae_release/
52
+ manifest.json
53
+ models/
54
+ text_encoder/ frozen Qwen3.5 text encoder used by T2AV inference
55
+ vae/ OmniVAE checkpoints
56
+ dit/t2av/ T2AV generation checkpoints
57
+ eval/
58
+ data/t2av/ validation manifests and small reference data
59
+ models/t2av/ metric weights for T2AV evaluation
60
+ ```
61
+
62
+ All config and metadata paths are relative to the repository root, so the code
63
+ can load this directory from any local path.
64
+
65
+ ## Text Encoders
66
+
67
+ The release includes the frozen Qwen3.5 text encoder directory used by the
68
+ validated T2AV configs:
69
+
70
+ - `models/text_encoder/Qwen3.5-0.8B-Base`
71
+
72
+ It is a third-party dependency weight, not an additional OmniVAE checkpoint.
73
+ Keeping it preserves the exact inference/evaluation settings used for the
74
+ released results.
75
+
76
+ ## Checkpoints
77
+
78
+ ### VAE
79
+
80
+ - `models/vae/video_only/recon`
81
+ - `models/vae/video_only/recon_distill`
82
+ - `models/vae/audio_only/recon`
83
+ - `models/vae/audio_only/recon_distill`
84
+ - `models/vae/audio_video/recon_avclip`
85
+ - `models/vae/audio_video/recon_distill_avclip`
86
+ - `models/vae/audio_only/recon_avclip_ft_decoder`
87
+ - `models/vae/audio_only/recon_distill_avclip_ft_decoder`
88
+
89
+ For T2AV AVCLIP experiment families, the audio branch uses the
90
+ `*_ft_decoder` checkpoint by default.
91
+
92
+ ### Generation DiT
93
+
94
+ The public bundle contains T2AV generation packages only:
95
+
96
+ ```text
97
+ t2av: t2av_recon, t2av_recon_distill, t2av_recon_avclip, t2av_recon_distill_avclip
98
+ ```
99
+
100
+ Each package is inference-only and excludes optimizer, scheduler, dataloader,
101
+ random state, and trainer state snapshots.
102
+
103
+ ## Evaluation Assets
104
+
105
+ - `eval/data/t2av/versebench_minimal`: VerseBench validation manifest used by
106
+ the release smoke and comparison scripts.
107
+ - `eval/models/t2av`: T2AV metric weights for the bundled `my_eval` pipeline.
108
+
109
+ ### rFVD I3D Weight
110
+
111
+ The rFVD I3D TorchScript weight is not included in this Hugging Face bundle.
112
+ When it is not already present in the installed OmniVAE package, the rFVD
113
+ loader attempts to download it from the upstream Dropbox URL automatically.
114
+ For offline or reproducible evaluation, download the weight separately and
115
+ provide its path explicitly:
116
+
117
+ ```bash
118
+ export I3D_TORCHSCRIPT_PT=/path/to/i3d_torchscript.pt
119
+ bash vae/scripts/eval/run_video_eval_rfvd_only.sh
120
+ ```
121
+
122
+ ## Quick Validation
123
+
124
+ ```bash
125
+ cd /path/to/OmniVAE
126
+ export OMNIVAE_RELEASE_ROOT=/path/to/omnivae_release
127
+
128
+ # T2AV release validation on VerseBench set3-large.
129
+ bash scripts/release_launchers/run_t2av_release_compare_distributed.sh
130
+ ```
131
+
132
+ See the GitHub repository `README.md` and `docs/` for full installation,
133
+ training, inference, and evaluation commands.
134
+
135
+ ## License
136
+
137
+ The OmniVAE release assets are provided under the Apache-2.0 license. Some
138
+ metric packages and third-party components retain their original licenses; see
139
+ the corresponding source-code subdirectories in the GitHub repository.
manifest.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "export_format": "omnivae_t2av_open_source_manifest_v1",
3
+ "exported_at_utc": "2026-06-08T19:02:51+00:00",
4
+ "root": ".",
5
+ "sections": {
6
+ "vae": {
7
+ "path": "models/vae",
8
+ "manifest": "models/vae/manifest.json",
9
+ "description": "VAE checkpoints required by the released T2AV experiments"
10
+ },
11
+ "dit": {
12
+ "path": "models/dit/t2av",
13
+ "manifest": "models/dit/manifest.json",
14
+ "description": "T2AV DiT inference packages only"
15
+ },
16
+ "text_encoder": {
17
+ "path": "models/text_encoder/Qwen3.5-0.8B-Base",
18
+ "description": "Frozen Qwen3.5 text encoder used by the T2AV configs"
19
+ },
20
+ "eval": {
21
+ "path": "eval",
22
+ "description": "T2AV validation manifests and metric weights"
23
+ }
24
+ }
25
+ }
models/dit/manifest.json ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "export_format": "omnivae_t2av_open_source_dit_manifest_v1",
3
+ "package_format": "omnivae_generation_inference_package_v1",
4
+ "inference_only": true,
5
+ "exported_at_utc": "2026-06-08T19:02:51+00:00",
6
+ "output_root": "models/dit/t2av",
7
+ "num_packages": 4,
8
+ "packages": [
9
+ {
10
+ "task": "t2av",
11
+ "name": "t2av_recon",
12
+ "path": "models/dit/t2av/t2av_recon",
13
+ "relative_path": "models/dit/t2av/t2av_recon",
14
+ "source_experiment": "2_t2av_recon_lr2",
15
+ "release_experiment_family": "recon",
16
+ "metadata": "models/dit/t2av/t2av_recon/metadata.json"
17
+ },
18
+ {
19
+ "task": "t2av",
20
+ "name": "t2av_recon_avclip",
21
+ "path": "models/dit/t2av/t2av_recon_avclip",
22
+ "relative_path": "models/dit/t2av/t2av_recon_avclip",
23
+ "source_experiment": "2_t2av_recon_avclip_lr2",
24
+ "release_experiment_family": "recon_avclip",
25
+ "metadata": "models/dit/t2av/t2av_recon_avclip/metadata.json"
26
+ },
27
+ {
28
+ "task": "t2av",
29
+ "name": "t2av_recon_distill",
30
+ "path": "models/dit/t2av/t2av_recon_distill",
31
+ "relative_path": "models/dit/t2av/t2av_recon_distill",
32
+ "source_experiment": "2_t2av_recon_distill_lr2",
33
+ "release_experiment_family": "recon_distill",
34
+ "metadata": "models/dit/t2av/t2av_recon_distill/metadata.json"
35
+ },
36
+ {
37
+ "task": "t2av",
38
+ "name": "t2av_recon_distill_avclip",
39
+ "path": "models/dit/t2av/t2av_recon_distill_avclip",
40
+ "relative_path": "models/dit/t2av/t2av_recon_distill_avclip",
41
+ "source_experiment": "2_t2av_recon_distill_avclip_lr2",
42
+ "release_experiment_family": "recon_distill_avclip",
43
+ "metadata": "models/dit/t2av/t2av_recon_distill_avclip/metadata.json"
44
+ }
45
+ ]
46
+ }
models/dit/t2av/t2av_recon/bridges/bridge_config.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bridge_interval": 1,
3
+ "use_asymmetric_ati": false,
4
+ "a2v_window_size": 1,
5
+ "n_bridges": 18,
6
+ "dim": 1920,
7
+ "n_heads": 15,
8
+ "head_dim": 128
9
+ }
models/dit/t2av/t2av_recon/metadata.json ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "export_format": "omnivae_generation_inference_package_v1",
3
+ "inference_only": true,
4
+ "task": "t2av",
5
+ "name": "t2av_recon",
6
+ "source_experiment": "2_t2av_recon_lr2",
7
+ "exported_at_utc": "2026-06-07T21:30:31+00:00",
8
+ "text_encoder_model_name_or_path": "models/text_encoder/Qwen3.5-0.8B-Base",
9
+ "vae_model_name_or_path": "models/vae/video_only/recon",
10
+ "required_subdirs": [
11
+ "transformer_video",
12
+ "transformer_audio",
13
+ "bridges",
14
+ "tokenizer",
15
+ "scheduler"
16
+ ],
17
+ "video_vae_model_name_or_path": "models/vae/video_only/recon",
18
+ "audio_vae_model_path": "models/vae/audio_only/recon",
19
+ "joint_av": true,
20
+ "release_vae_paths_rewritten": true,
21
+ "release_experiment_family": "recon",
22
+ "release_path_note": "VAE paths are relative to OMNIVAE_RELEASE_ROOT/models/vae. AVCLIP audio branches use ft_decoder checkpoints.",
23
+ "source_step": 200000,
24
+ "release_checkpoint_step": 200000,
25
+ "release_laion_checkpoint_name": "checkpoint-00200000",
26
+ "source_experiment_original_name": "2_t2av_recon_lr2",
27
+ "source_checkpoint_provenance": "internal training checkpoint path omitted; use release_checkpoint_step and this package directory.",
28
+ "release_package_path": "models/dit/t2av/t2av_recon"
29
+ }
models/dit/t2av/t2av_recon/resolved_config.json ADDED
@@ -0,0 +1,337 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "experiment": {
3
+ "name": "t2av_recon",
4
+ "output_dir": "models/dit/t2av/t2av_recon"
5
+ },
6
+ "dataset": {
7
+ "type": "av_paired_jsonl",
8
+ "root": "omitted_public_release_path",
9
+ "meta_path": null,
10
+ "jsonl_index_path": null,
11
+ "jsonl_path_field": "video_path",
12
+ "jsonl_prompt_field": "prompt_v2",
13
+ "jsonl_prompt_index_path": null,
14
+ "slave_path": "",
15
+ "base_image_path": "",
16
+ "split": "train",
17
+ "image_size": 256,
18
+ "frame_size": [
19
+ 256,
20
+ 256
21
+ ],
22
+ "num_frames": 121,
23
+ "target_fps": 24.0,
24
+ "decode_backend": "torchcodec",
25
+ "return_uint8": true,
26
+ "center_crop": true,
27
+ "random_flip": false,
28
+ "num_workers": 6,
29
+ "prefetch_factor": 2,
30
+ "pin_memory": true,
31
+ "drop_last": true,
32
+ "max_samples": null,
33
+ "cache_dir": ".cache/omnivae",
34
+ "repeat": 1,
35
+ "recaption_prob": 0.0,
36
+ "captions_file": null,
37
+ "prompt_templates": [
38
+ "a high-quality photo of {label}"
39
+ ],
40
+ "use_full_label": false,
41
+ "metadata_paths": [],
42
+ "dataset_base_path": "/",
43
+ "sample_rate": 48000,
44
+ "num_audio_samples": 242000,
45
+ "max_num_audio_samples": 1440000,
46
+ "mono": true,
47
+ "append_duration_suffix": false,
48
+ "duration_precision": 1,
49
+ "path_field": "video_path",
50
+ "prompt_field": "av_caption",
51
+ "sources": [
52
+ {
53
+ "name": "nonspeech_1000w_g2",
54
+ "path": "data/train/nonspeech_1000w_group2_9376485.jsonl",
55
+ "weight": 0.5
56
+ },
57
+ {
58
+ "name": "speech_1000w_g2",
59
+ "path": "data/train/youtube_speech_10042814.jsonl",
60
+ "weight": 0.35
61
+ },
62
+ {
63
+ "name": "documentary",
64
+ "path": "data/train/documentary_2627844.jsonl",
65
+ "weight": 0.12
66
+ },
67
+ {
68
+ "name": "movies",
69
+ "path": "data/train/movies_8964574.jsonl",
70
+ "weight": 0.05
71
+ },
72
+ {
73
+ "name": "chinese_drama",
74
+ "path": "data/train/chinese_drama_3264550.jsonl",
75
+ "weight": 0.03
76
+ }
77
+ ],
78
+ "task_prefix_enabled": true,
79
+ "min_clip_duration_ratio": 0.99
80
+ },
81
+ "text_encoder": {
82
+ "model_name_or_path": "models/text_encoder/Qwen3.5-0.8B-Base",
83
+ "trust_remote_code": false,
84
+ "torch_dtype": "bfloat16",
85
+ "attn_implementation": "sdpa",
86
+ "disable_qwen3_5_fast_path": true,
87
+ "cache_enabled": false,
88
+ "compile_model": true,
89
+ "max_sequence_length": 512,
90
+ "local_files_only": true
91
+ },
92
+ "scheduler": {
93
+ "model_name_or_path": "models/dit/t2av/t2av_recon",
94
+ "subfolder": "scheduler",
95
+ "local_files_only": true,
96
+ "use_dynamic_shifting": false
97
+ },
98
+ "transformer": {
99
+ "arch": "zimage",
100
+ "backbone_name_or_path": "Qwen/Qwen3-VL-2B-Instruct",
101
+ "backbone_torch_dtype": "bfloat16",
102
+ "init_from_pretrained_backbone": true,
103
+ "text_config": null,
104
+ "trust_remote_code": false,
105
+ "local_files_only": false,
106
+ "attn_implementation": "flex_attention",
107
+ "max_sequence_length": 512,
108
+ "all_patch_size": [
109
+ 1
110
+ ],
111
+ "all_f_patch_size": [
112
+ 1
113
+ ],
114
+ "in_channels": 16,
115
+ "dim": 2048,
116
+ "n_layers": 18,
117
+ "n_refiner_layers": 2,
118
+ "n_heads": 16,
119
+ "n_kv_heads": 16,
120
+ "norm_eps": 1e-05,
121
+ "qk_norm": true,
122
+ "rope_theta": 256.0,
123
+ "t_scale": 1000.0,
124
+ "use_timestep": true,
125
+ "predict_target": "v",
126
+ "axes_dims": [
127
+ 16,
128
+ 56,
129
+ 56
130
+ ],
131
+ "axes_lens": [
132
+ 1024,
133
+ 512,
134
+ 512
135
+ ],
136
+ "compile_model": true,
137
+ "attention_backend": null,
138
+ "bridge_interval": 1,
139
+ "bridge_enabled": true,
140
+ "use_asymmetric_ati": false,
141
+ "a2v_window_size": 1,
142
+ "compile_bridges": true,
143
+ "compile_mode": "default",
144
+ "compile_fullgraph": false,
145
+ "compile_dynamic": null
146
+ },
147
+ "validation": {
148
+ "modes": [
149
+ "audio_only",
150
+ "video_only",
151
+ "joint_av"
152
+ ],
153
+ "joint_av_prompts": {
154
+ "name": "versebench",
155
+ "jsonl_path": "eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl",
156
+ "text_field": "av_caption",
157
+ "type_field": "type",
158
+ "index_field": "index",
159
+ "task_kind": "t2av",
160
+ "append_duration_suffix": false,
161
+ "max_examples": null
162
+ },
163
+ "video_only_prompts": {
164
+ "name": "t2v_inline",
165
+ "max_examples": null,
166
+ "prompts": [
167
+ "A cinematic documentary shot of a three-dimensional topographical map, clouds drifting over islands, somber historical lighting.",
168
+ "A tense cinematic scene inside a dimly lit historical palace hall, guards rushing through a wooden corridor, dramatic torchlight.",
169
+ "A close-up cinematic drama shot of a young woman lit by cool blue light, anxious expression, soft early 2000s television style.",
170
+ "A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic lighting, gentle camera movement.",
171
+ "A young woman laughing while chatting with a friend at a sunny outdoor cafe.",
172
+ "An old man telling a story to a group of children sitting around him in a park.",
173
+ "A street musician playing guitar and singing on a busy city sidewalk.",
174
+ "A golden retriever running across a grassy field on a bright afternoon.",
175
+ "Cherry blossoms gently falling along a quiet path in spring.",
176
+ "A bowl of steaming noodles on a wooden table in a cozy small restaurant."
177
+ ]
178
+ },
179
+ "audio_only_prompt_sets": [
180
+ {
181
+ "name": "basetts_valid",
182
+ "task_kind": "tts",
183
+ "jsonl_path": "examples/eval/t2a_tts_basetts_sample.jsonl",
184
+ "text_field": "text",
185
+ "type_field": "type",
186
+ "index_field": "index",
187
+ "append_duration_suffix": true,
188
+ "duration_precision": 1,
189
+ "max_examples": 8
190
+ },
191
+ {
192
+ "name": "tta_general_en",
193
+ "task_kind": "tta",
194
+ "jsonl_path": "examples/eval/t2a_tta_general_en.jsonl",
195
+ "text_field": "text",
196
+ "type_field": "type",
197
+ "index_field": "index",
198
+ "append_duration_suffix": true,
199
+ "duration_precision": 1,
200
+ "max_examples": null
201
+ }
202
+ ],
203
+ "num_inference_steps": 50,
204
+ "video_guidance_scale": 4.0,
205
+ "audio_guidance_scale": 4.0,
206
+ "cfg_normalization": false,
207
+ "max_wandb_samples_per_source": 10,
208
+ "cfg_modes": [
209
+ "simple",
210
+ "dual"
211
+ ],
212
+ "video_text_guidance": 4.0,
213
+ "video_modality_guidance": 4.0,
214
+ "audio_text_guidance": 4.0,
215
+ "audio_modality_guidance": 4.0,
216
+ "video_frame_size": [
217
+ 256,
218
+ 256
219
+ ],
220
+ "video_num_frames": 121,
221
+ "video_fps": 24.0,
222
+ "audio_duration_seconds": 5.0417
223
+ },
224
+ "vae": {
225
+ "type": "univae",
226
+ "model_name_or_path": "models/vae/video_only/recon",
227
+ "torch_dtype": "bfloat16",
228
+ "local_files_only": true,
229
+ "wan_chunk_mode": "parallel",
230
+ "compile_encode": true,
231
+ "compile_encode_mode": "reduce-overhead",
232
+ "compile_encode_fullgraph": false,
233
+ "branch": "video",
234
+ "use_ema": false
235
+ },
236
+ "audio_vae": {
237
+ "type": "univae",
238
+ "model_path": "models/vae/audio_only/recon",
239
+ "hop_length": 960,
240
+ "latent_channels": 128,
241
+ "torch_dtype": "float32",
242
+ "compile_encode": true,
243
+ "compile_encode_fullgraph": false,
244
+ "compile_encode_mode": "reduce-overhead",
245
+ "branch": "audio",
246
+ "use_ema": false
247
+ },
248
+ "transformer_video": {
249
+ "arch": "zimage",
250
+ "all_patch_size": [
251
+ 1
252
+ ],
253
+ "all_f_patch_size": [
254
+ 1
255
+ ],
256
+ "in_channels": 48,
257
+ "dim": 1920,
258
+ "n_layers": 18,
259
+ "n_refiner_layers": 2,
260
+ "n_heads": 15,
261
+ "n_kv_heads": 15,
262
+ "norm_eps": 1e-05,
263
+ "qk_norm": true,
264
+ "rope_theta": 256.0,
265
+ "t_scale": 1000.0,
266
+ "use_timestep": true,
267
+ "predict_target": "v",
268
+ "axes_dims": [
269
+ 16,
270
+ 56,
271
+ 56
272
+ ],
273
+ "axes_lens": [
274
+ 1024,
275
+ 512,
276
+ 512
277
+ ],
278
+ "compile_model": true,
279
+ "attention_backend": null
280
+ },
281
+ "transformer_audio": {
282
+ "arch": "zimage",
283
+ "all_patch_size": [
284
+ 1
285
+ ],
286
+ "all_f_patch_size": [
287
+ 1
288
+ ],
289
+ "in_channels": 128,
290
+ "dim": 1920,
291
+ "n_layers": 18,
292
+ "n_refiner_layers": 2,
293
+ "n_heads": 15,
294
+ "n_kv_heads": 15,
295
+ "norm_eps": 1e-05,
296
+ "qk_norm": true,
297
+ "rope_theta": 256.0,
298
+ "t_scale": 1000.0,
299
+ "use_timestep": true,
300
+ "predict_target": "v",
301
+ "axes_dims": [
302
+ 16,
303
+ 56,
304
+ 56
305
+ ],
306
+ "axes_lens": [
307
+ 2048,
308
+ 16,
309
+ 16
310
+ ],
311
+ "compile_model": true,
312
+ "attention_backend": null
313
+ },
314
+ "train": {
315
+ "seed": 42,
316
+ "validation_steps": 5000,
317
+ "validation_prompts": [
318
+ "a high-quality photo of a goldfish",
319
+ "a high-quality photo of a tiger shark",
320
+ "a high-quality photo of an ostrich",
321
+ "a high-quality photo of a tabby cat"
322
+ ],
323
+ "validation_num_inference_steps": 20,
324
+ "validation_guidance_scale": 4.0,
325
+ "validation_cfg_normalization": false,
326
+ "validation_cfg_truncation": 1.0,
327
+ "validation_num_frames": null,
328
+ "validation_frame_size": null,
329
+ "validation_fps": null,
330
+ "validation_negative_prompts": null,
331
+ "shift_v": 5.0,
332
+ "shift_a": 3.0,
333
+ "validation_force_steps": [
334
+ 0
335
+ ]
336
+ }
337
+ }
models/dit/t2av/t2av_recon/resolved_config.yaml ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ experiment:
2
+ name: t2av_recon
3
+ output_dir: models/dit/t2av/t2av_recon
4
+ dataset:
5
+ type: av_paired_jsonl
6
+ root: omitted_public_release_path
7
+ meta_path: null
8
+ jsonl_index_path: null
9
+ jsonl_path_field: video_path
10
+ jsonl_prompt_field: prompt_v2
11
+ jsonl_prompt_index_path: null
12
+ slave_path: ''
13
+ base_image_path: ''
14
+ split: train
15
+ image_size: 256
16
+ frame_size:
17
+ - 256
18
+ - 256
19
+ num_frames: 121
20
+ target_fps: 24.0
21
+ decode_backend: torchcodec
22
+ return_uint8: true
23
+ center_crop: true
24
+ random_flip: false
25
+ num_workers: 6
26
+ prefetch_factor: 2
27
+ pin_memory: true
28
+ drop_last: true
29
+ max_samples: null
30
+ cache_dir: .cache/omnivae
31
+ repeat: 1
32
+ recaption_prob: 0.0
33
+ captions_file: null
34
+ prompt_templates:
35
+ - a high-quality photo of {label}
36
+ use_full_label: false
37
+ metadata_paths: []
38
+ dataset_base_path: /
39
+ sample_rate: 48000
40
+ num_audio_samples: 242000
41
+ max_num_audio_samples: 1440000
42
+ mono: true
43
+ append_duration_suffix: false
44
+ duration_precision: 1
45
+ path_field: video_path
46
+ prompt_field: av_caption
47
+ sources:
48
+ - name: nonspeech_1000w_g2
49
+ path: data/train/nonspeech_1000w_group2_9376485.jsonl
50
+ weight: 0.5
51
+ - name: speech_1000w_g2
52
+ path: data/train/youtube_speech_10042814.jsonl
53
+ weight: 0.35
54
+ - name: documentary
55
+ path: data/train/documentary_2627844.jsonl
56
+ weight: 0.12
57
+ - name: movies
58
+ path: data/train/movies_8964574.jsonl
59
+ weight: 0.05
60
+ - name: chinese_drama
61
+ path: data/train/chinese_drama_3264550.jsonl
62
+ weight: 0.03
63
+ task_prefix_enabled: true
64
+ min_clip_duration_ratio: 0.99
65
+ text_encoder:
66
+ model_name_or_path: models/text_encoder/Qwen3.5-0.8B-Base
67
+ trust_remote_code: false
68
+ torch_dtype: bfloat16
69
+ attn_implementation: sdpa
70
+ disable_qwen3_5_fast_path: true
71
+ cache_enabled: false
72
+ compile_model: true
73
+ max_sequence_length: 512
74
+ local_files_only: true
75
+ scheduler:
76
+ model_name_or_path: models/dit/t2av/t2av_recon
77
+ subfolder: scheduler
78
+ local_files_only: true
79
+ use_dynamic_shifting: false
80
+ transformer:
81
+ arch: zimage
82
+ backbone_name_or_path: Qwen/Qwen3-VL-2B-Instruct
83
+ backbone_torch_dtype: bfloat16
84
+ init_from_pretrained_backbone: true
85
+ text_config: null
86
+ trust_remote_code: false
87
+ local_files_only: false
88
+ attn_implementation: flex_attention
89
+ max_sequence_length: 512
90
+ all_patch_size:
91
+ - 1
92
+ all_f_patch_size:
93
+ - 1
94
+ in_channels: 16
95
+ dim: 2048
96
+ n_layers: 18
97
+ n_refiner_layers: 2
98
+ n_heads: 16
99
+ n_kv_heads: 16
100
+ norm_eps: 1.0e-05
101
+ qk_norm: true
102
+ rope_theta: 256.0
103
+ t_scale: 1000.0
104
+ use_timestep: true
105
+ predict_target: v
106
+ axes_dims:
107
+ - 16
108
+ - 56
109
+ - 56
110
+ axes_lens:
111
+ - 1024
112
+ - 512
113
+ - 512
114
+ compile_model: true
115
+ attention_backend: null
116
+ bridge_interval: 1
117
+ bridge_enabled: true
118
+ use_asymmetric_ati: false
119
+ a2v_window_size: 1
120
+ compile_bridges: true
121
+ compile_mode: default
122
+ compile_fullgraph: false
123
+ compile_dynamic: null
124
+ validation:
125
+ modes:
126
+ - audio_only
127
+ - video_only
128
+ - joint_av
129
+ joint_av_prompts:
130
+ name: versebench
131
+ jsonl_path: eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl
132
+ text_field: av_caption
133
+ type_field: type
134
+ index_field: index
135
+ task_kind: t2av
136
+ append_duration_suffix: false
137
+ max_examples: null
138
+ video_only_prompts:
139
+ name: t2v_inline
140
+ max_examples: null
141
+ prompts:
142
+ - A cinematic documentary shot of a three-dimensional topographical map, clouds
143
+ drifting over islands, somber historical lighting.
144
+ - A tense cinematic scene inside a dimly lit historical palace hall, guards rushing
145
+ through a wooden corridor, dramatic torchlight.
146
+ - A close-up cinematic drama shot of a young woman lit by cool blue light, anxious
147
+ expression, soft early 2000s television style.
148
+ - A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic
149
+ lighting, gentle camera movement.
150
+ - A young woman laughing while chatting with a friend at a sunny outdoor cafe.
151
+ - An old man telling a story to a group of children sitting around him in a park.
152
+ - A street musician playing guitar and singing on a busy city sidewalk.
153
+ - A golden retriever running across a grassy field on a bright afternoon.
154
+ - Cherry blossoms gently falling along a quiet path in spring.
155
+ - A bowl of steaming noodles on a wooden table in a cozy small restaurant.
156
+ audio_only_prompt_sets:
157
+ - name: basetts_valid
158
+ task_kind: tts
159
+ jsonl_path: examples/eval/t2a_tts_basetts_sample.jsonl
160
+ text_field: text
161
+ type_field: type
162
+ index_field: index
163
+ append_duration_suffix: true
164
+ duration_precision: 1
165
+ max_examples: 8
166
+ - name: tta_general_en
167
+ task_kind: tta
168
+ jsonl_path: examples/eval/t2a_tta_general_en.jsonl
169
+ text_field: text
170
+ type_field: type
171
+ index_field: index
172
+ append_duration_suffix: true
173
+ duration_precision: 1
174
+ max_examples: null
175
+ num_inference_steps: 50
176
+ video_guidance_scale: 4.0
177
+ audio_guidance_scale: 4.0
178
+ cfg_normalization: false
179
+ max_wandb_samples_per_source: 10
180
+ cfg_modes:
181
+ - simple
182
+ - dual
183
+ video_text_guidance: 4.0
184
+ video_modality_guidance: 4.0
185
+ audio_text_guidance: 4.0
186
+ audio_modality_guidance: 4.0
187
+ video_frame_size:
188
+ - 256
189
+ - 256
190
+ video_num_frames: 121
191
+ video_fps: 24.0
192
+ audio_duration_seconds: 5.0417
193
+ vae:
194
+ type: univae
195
+ model_name_or_path: models/vae/video_only/recon
196
+ torch_dtype: bfloat16
197
+ local_files_only: true
198
+ wan_chunk_mode: parallel
199
+ compile_encode: true
200
+ compile_encode_mode: reduce-overhead
201
+ compile_encode_fullgraph: false
202
+ branch: video
203
+ use_ema: false
204
+ audio_vae:
205
+ type: univae
206
+ model_path: models/vae/audio_only/recon
207
+ hop_length: 960
208
+ latent_channels: 128
209
+ torch_dtype: float32
210
+ compile_encode: true
211
+ compile_encode_fullgraph: false
212
+ compile_encode_mode: reduce-overhead
213
+ branch: audio
214
+ use_ema: false
215
+ transformer_video:
216
+ arch: zimage
217
+ all_patch_size:
218
+ - 1
219
+ all_f_patch_size:
220
+ - 1
221
+ in_channels: 48
222
+ dim: 1920
223
+ n_layers: 18
224
+ n_refiner_layers: 2
225
+ n_heads: 15
226
+ n_kv_heads: 15
227
+ norm_eps: 1.0e-05
228
+ qk_norm: true
229
+ rope_theta: 256.0
230
+ t_scale: 1000.0
231
+ use_timestep: true
232
+ predict_target: v
233
+ axes_dims:
234
+ - 16
235
+ - 56
236
+ - 56
237
+ axes_lens:
238
+ - 1024
239
+ - 512
240
+ - 512
241
+ compile_model: true
242
+ attention_backend: null
243
+ transformer_audio:
244
+ arch: zimage
245
+ all_patch_size:
246
+ - 1
247
+ all_f_patch_size:
248
+ - 1
249
+ in_channels: 128
250
+ dim: 1920
251
+ n_layers: 18
252
+ n_refiner_layers: 2
253
+ n_heads: 15
254
+ n_kv_heads: 15
255
+ norm_eps: 1.0e-05
256
+ qk_norm: true
257
+ rope_theta: 256.0
258
+ t_scale: 1000.0
259
+ use_timestep: true
260
+ predict_target: v
261
+ axes_dims:
262
+ - 16
263
+ - 56
264
+ - 56
265
+ axes_lens:
266
+ - 2048
267
+ - 16
268
+ - 16
269
+ compile_model: true
270
+ attention_backend: null
271
+ train:
272
+ seed: 42
273
+ validation_steps: 5000
274
+ validation_prompts:
275
+ - a high-quality photo of a goldfish
276
+ - a high-quality photo of a tiger shark
277
+ - a high-quality photo of an ostrich
278
+ - a high-quality photo of a tabby cat
279
+ validation_num_inference_steps: 20
280
+ validation_guidance_scale: 4.0
281
+ validation_cfg_normalization: false
282
+ validation_cfg_truncation: 1.0
283
+ validation_num_frames: null
284
+ validation_frame_size: null
285
+ validation_fps: null
286
+ validation_negative_prompts: null
287
+ shift_v: 5.0
288
+ shift_a: 3.0
289
+ validation_force_steps:
290
+ - 0
models/dit/t2av/t2av_recon/scheduler/scheduler_config.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "FlowMatchEulerDiscreteScheduler",
3
+ "_diffusers_version": "0.37.1",
4
+ "base_image_seq_len": 256,
5
+ "base_shift": 0.5,
6
+ "invert_sigmas": false,
7
+ "max_image_seq_len": 4096,
8
+ "max_shift": 1.15,
9
+ "num_train_timesteps": 1000,
10
+ "shift": 3.0,
11
+ "shift_terminal": null,
12
+ "stochastic_sampling": false,
13
+ "time_shift_type": "exponential",
14
+ "use_beta_sigmas": false,
15
+ "use_dynamic_shifting": false,
16
+ "use_exponential_sigmas": false,
17
+ "use_karras_sigmas": false
18
+ }
models/dit/t2av/t2av_recon/tokenizer/chat_template.jinja ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- macro render_content(content, do_vision_count, is_system_content=false) %}
4
+ {%- if content is string %}
5
+ {{- content }}
6
+ {%- elif content is iterable and content is not mapping %}
7
+ {%- for item in content %}
8
+ {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
9
+ {%- if is_system_content %}
10
+ {{- raise_exception('System message cannot contain images.') }}
11
+ {%- endif %}
12
+ {%- if do_vision_count %}
13
+ {%- set image_count.value = image_count.value + 1 %}
14
+ {%- endif %}
15
+ {%- if add_vision_id %}
16
+ {{- 'Picture ' ~ image_count.value ~ ': ' }}
17
+ {%- endif %}
18
+ {{- '<|vision_start|><|image_pad|><|vision_end|>' }}
19
+ {%- elif 'video' in item or item.type == 'video' %}
20
+ {%- if is_system_content %}
21
+ {{- raise_exception('System message cannot contain videos.') }}
22
+ {%- endif %}
23
+ {%- if do_vision_count %}
24
+ {%- set video_count.value = video_count.value + 1 %}
25
+ {%- endif %}
26
+ {%- if add_vision_id %}
27
+ {{- 'Video ' ~ video_count.value ~ ': ' }}
28
+ {%- endif %}
29
+ {{- '<|vision_start|><|video_pad|><|vision_end|>' }}
30
+ {%- elif 'text' in item %}
31
+ {{- item.text }}
32
+ {%- else %}
33
+ {{- raise_exception('Unexpected item type in content.') }}
34
+ {%- endif %}
35
+ {%- endfor %}
36
+ {%- elif content is none or content is undefined %}
37
+ {{- '' }}
38
+ {%- else %}
39
+ {{- raise_exception('Unexpected content type.') }}
40
+ {%- endif %}
41
+ {%- endmacro %}
42
+ {%- if not messages %}
43
+ {{- raise_exception('No messages provided.') }}
44
+ {%- endif %}
45
+ {%- if tools and tools is iterable and tools is not mapping %}
46
+ {{- '<|im_start|>system\n' }}
47
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
48
+ {%- for tool in tools %}
49
+ {{- "\n" }}
50
+ {{- tool | tojson }}
51
+ {%- endfor %}
52
+ {{- "\n</tools>" }}
53
+ {{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
54
+ {%- if messages[0].role == 'system' %}
55
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
56
+ {%- if content %}
57
+ {{- '\n\n' + content }}
58
+ {%- endif %}
59
+ {%- endif %}
60
+ {{- '<|im_end|>\n' }}
61
+ {%- else %}
62
+ {%- if messages[0].role == 'system' %}
63
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
64
+ {{- '<|im_start|>system\n' + content + '<|im_end|>\n' }}
65
+ {%- endif %}
66
+ {%- endif %}
67
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
68
+ {%- for message in messages[::-1] %}
69
+ {%- set index = (messages|length - 1) - loop.index0 %}
70
+ {%- if ns.multi_step_tool and message.role == "user" %}
71
+ {%- set content = render_content(message.content, false)|trim %}
72
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
73
+ {%- set ns.multi_step_tool = false %}
74
+ {%- set ns.last_query_index = index %}
75
+ {%- endif %}
76
+ {%- endif %}
77
+ {%- endfor %}
78
+ {%- if ns.multi_step_tool %}
79
+ {{- raise_exception('No user query found in messages.') }}
80
+ {%- endif %}
81
+ {%- for message in messages %}
82
+ {%- set content = render_content(message.content, true)|trim %}
83
+ {%- if message.role == "system" %}
84
+ {%- if not loop.first %}
85
+ {{- raise_exception('System message must be at the beginning.') }}
86
+ {%- endif %}
87
+ {%- elif message.role == "user" %}
88
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
89
+ {%- elif message.role == "assistant" %}
90
+ {%- set reasoning_content = '' %}
91
+ {%- if message.reasoning_content is string %}
92
+ {%- set reasoning_content = message.reasoning_content %}
93
+ {%- else %}
94
+ {%- if '</think>' in content %}
95
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
96
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
97
+ {%- endif %}
98
+ {%- endif %}
99
+ {%- set reasoning_content = reasoning_content|trim %}
100
+ {%- if loop.index0 > ns.last_query_index %}
101
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
102
+ {%- else %}
103
+ {{- '<|im_start|>' + message.role + '\n' + content }}
104
+ {%- endif %}
105
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
106
+ {%- for tool_call in message.tool_calls %}
107
+ {%- if tool_call.function is defined %}
108
+ {%- set tool_call = tool_call.function %}
109
+ {%- endif %}
110
+ {%- if loop.first %}
111
+ {%- if content|trim %}
112
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
113
+ {%- else %}
114
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
115
+ {%- endif %}
116
+ {%- else %}
117
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
118
+ {%- endif %}
119
+ {%- if tool_call.arguments is defined %}
120
+ {%- for args_name, args_value in tool_call.arguments|items %}
121
+ {{- '<parameter=' + args_name + '>\n' }}
122
+ {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}
123
+ {{- args_value }}
124
+ {{- '\n</parameter>\n' }}
125
+ {%- endfor %}
126
+ {%- endif %}
127
+ {{- '</function>\n</tool_call>' }}
128
+ {%- endfor %}
129
+ {%- endif %}
130
+ {{- '<|im_end|>\n' }}
131
+ {%- elif message.role == "tool" %}
132
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
133
+ {{- '<|im_start|>user' }}
134
+ {%- endif %}
135
+ {{- '\n<tool_response>\n' }}
136
+ {{- content }}
137
+ {{- '\n</tool_response>' }}
138
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
139
+ {{- '<|im_end|>\n' }}
140
+ {%- elif loop.last %}
141
+ {{- '<|im_end|>\n' }}
142
+ {%- endif %}
143
+ {%- else %}
144
+ {{- raise_exception('Unexpected message role.') }}
145
+ {%- endif %}
146
+ {%- endfor %}
147
+ {%- if add_generation_prompt %}
148
+ {{- '<|im_start|>assistant\n' }}
149
+ {%- if enable_thinking is defined and enable_thinking is true %}
150
+ {{- '<think>\n' }}
151
+ {%- else %}
152
+ {{- '<think>\n\n</think>\n\n' }}
153
+ {%- endif %}
154
+ {%- endif %}
models/dit/t2av/t2av_recon/tokenizer/tokenizer_config.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "audio_bos_token": "<|audio_start|>",
4
+ "audio_eos_token": "<|audio_end|>",
5
+ "audio_token": "<|audio_pad|>",
6
+ "backend": "tokenizers",
7
+ "bos_token": null,
8
+ "clean_up_tokenization_spaces": false,
9
+ "eos_token": "<|endoftext|>",
10
+ "errors": "replace",
11
+ "image_token": "<|image_pad|>",
12
+ "is_local": false,
13
+ "model_max_length": 262144,
14
+ "model_specific_special_tokens": {
15
+ "audio_bos_token": "<|audio_start|>",
16
+ "audio_eos_token": "<|audio_end|>",
17
+ "audio_token": "<|audio_pad|>",
18
+ "image_token": "<|image_pad|>",
19
+ "video_token": "<|video_pad|>",
20
+ "vision_bos_token": "<|vision_start|>",
21
+ "vision_eos_token": "<|vision_end|>"
22
+ },
23
+ "pad_token": "<|endoftext|>",
24
+ "pretokenize_regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?[\\p{L}\\p{M}]+|\\p{N}| ?[^\\s\\p{L}\\p{M}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
25
+ "split_special_tokens": false,
26
+ "tokenizer_class": "TokenizersBackend",
27
+ "unk_token": null,
28
+ "video_token": "<|video_pad|>",
29
+ "vision_bos_token": "<|vision_start|>",
30
+ "vision_eos_token": "<|vision_end|>"
31
+ }
models/dit/t2av/t2av_recon/transformer_audio/config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "ZImageTransformer2DModel",
3
+ "_diffusers_version": "0.37.1",
4
+ "all_f_patch_size": [
5
+ 1
6
+ ],
7
+ "all_patch_size": [
8
+ 1
9
+ ],
10
+ "axes_dims": [
11
+ 16,
12
+ 56,
13
+ 56
14
+ ],
15
+ "axes_lens": [
16
+ 2048,
17
+ 16,
18
+ 16
19
+ ],
20
+ "cap_feat_dim": 1024,
21
+ "dim": 1920,
22
+ "in_channels": 128,
23
+ "n_heads": 15,
24
+ "n_kv_heads": 15,
25
+ "n_layers": 18,
26
+ "n_refiner_layers": 2,
27
+ "norm_eps": 1e-05,
28
+ "qk_norm": true,
29
+ "rope_theta": 256.0,
30
+ "siglip_feat_dim": null,
31
+ "t_scale": 1000.0
32
+ }
models/dit/t2av/t2av_recon/transformer_video/config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "ZImageTransformer2DModel",
3
+ "_diffusers_version": "0.37.1",
4
+ "all_f_patch_size": [
5
+ 1
6
+ ],
7
+ "all_patch_size": [
8
+ 1
9
+ ],
10
+ "axes_dims": [
11
+ 16,
12
+ 56,
13
+ 56
14
+ ],
15
+ "axes_lens": [
16
+ 1024,
17
+ 512,
18
+ 512
19
+ ],
20
+ "cap_feat_dim": 1024,
21
+ "dim": 1920,
22
+ "in_channels": 48,
23
+ "n_heads": 15,
24
+ "n_kv_heads": 15,
25
+ "n_layers": 18,
26
+ "n_refiner_layers": 2,
27
+ "norm_eps": 1e-05,
28
+ "qk_norm": true,
29
+ "rope_theta": 256.0,
30
+ "siglip_feat_dim": null,
31
+ "t_scale": 1000.0
32
+ }
models/dit/t2av/t2av_recon_avclip/resolved_config.json ADDED
@@ -0,0 +1,337 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "experiment": {
3
+ "name": "t2av_recon_avclip",
4
+ "output_dir": "models/dit/t2av/t2av_recon_avclip"
5
+ },
6
+ "dataset": {
7
+ "type": "av_paired_jsonl",
8
+ "root": "omitted_public_release_path",
9
+ "meta_path": null,
10
+ "jsonl_index_path": null,
11
+ "jsonl_path_field": "video_path",
12
+ "jsonl_prompt_field": "prompt_v2",
13
+ "jsonl_prompt_index_path": null,
14
+ "slave_path": "",
15
+ "base_image_path": "",
16
+ "split": "train",
17
+ "image_size": 256,
18
+ "frame_size": [
19
+ 256,
20
+ 256
21
+ ],
22
+ "num_frames": 121,
23
+ "target_fps": 24.0,
24
+ "decode_backend": "torchcodec",
25
+ "return_uint8": true,
26
+ "center_crop": true,
27
+ "random_flip": false,
28
+ "num_workers": 6,
29
+ "prefetch_factor": 2,
30
+ "pin_memory": true,
31
+ "drop_last": true,
32
+ "max_samples": null,
33
+ "cache_dir": ".cache/omnivae",
34
+ "repeat": 1,
35
+ "recaption_prob": 0.0,
36
+ "captions_file": null,
37
+ "prompt_templates": [
38
+ "a high-quality photo of {label}"
39
+ ],
40
+ "use_full_label": false,
41
+ "metadata_paths": [],
42
+ "dataset_base_path": "/",
43
+ "sample_rate": 48000,
44
+ "num_audio_samples": 242000,
45
+ "max_num_audio_samples": 1440000,
46
+ "mono": true,
47
+ "append_duration_suffix": false,
48
+ "duration_precision": 1,
49
+ "path_field": "video_path",
50
+ "prompt_field": "av_caption",
51
+ "sources": [
52
+ {
53
+ "name": "nonspeech_1000w_g2",
54
+ "path": "data/train/nonspeech_1000w_group2_9376485.jsonl",
55
+ "weight": 0.5
56
+ },
57
+ {
58
+ "name": "speech_1000w_g2",
59
+ "path": "data/train/youtube_speech_10042814.jsonl",
60
+ "weight": 0.35
61
+ },
62
+ {
63
+ "name": "documentary",
64
+ "path": "data/train/documentary_2627844.jsonl",
65
+ "weight": 0.12
66
+ },
67
+ {
68
+ "name": "movies",
69
+ "path": "data/train/movies_8964574.jsonl",
70
+ "weight": 0.05
71
+ },
72
+ {
73
+ "name": "chinese_drama",
74
+ "path": "data/train/chinese_drama_3264550.jsonl",
75
+ "weight": 0.03
76
+ }
77
+ ],
78
+ "task_prefix_enabled": true,
79
+ "min_clip_duration_ratio": 0.99
80
+ },
81
+ "text_encoder": {
82
+ "model_name_or_path": "models/text_encoder/Qwen3.5-0.8B-Base",
83
+ "trust_remote_code": false,
84
+ "torch_dtype": "bfloat16",
85
+ "attn_implementation": "sdpa",
86
+ "disable_qwen3_5_fast_path": true,
87
+ "cache_enabled": false,
88
+ "compile_model": true,
89
+ "max_sequence_length": 512,
90
+ "local_files_only": true
91
+ },
92
+ "scheduler": {
93
+ "model_name_or_path": "models/dit/t2av/t2av_recon_avclip",
94
+ "subfolder": "scheduler",
95
+ "local_files_only": true,
96
+ "use_dynamic_shifting": false
97
+ },
98
+ "transformer": {
99
+ "arch": "zimage",
100
+ "backbone_name_or_path": "Qwen/Qwen3-VL-2B-Instruct",
101
+ "backbone_torch_dtype": "bfloat16",
102
+ "init_from_pretrained_backbone": true,
103
+ "text_config": null,
104
+ "trust_remote_code": false,
105
+ "local_files_only": false,
106
+ "attn_implementation": "flex_attention",
107
+ "max_sequence_length": 512,
108
+ "all_patch_size": [
109
+ 1
110
+ ],
111
+ "all_f_patch_size": [
112
+ 1
113
+ ],
114
+ "in_channels": 16,
115
+ "dim": 2048,
116
+ "n_layers": 18,
117
+ "n_refiner_layers": 2,
118
+ "n_heads": 16,
119
+ "n_kv_heads": 16,
120
+ "norm_eps": 1e-05,
121
+ "qk_norm": true,
122
+ "rope_theta": 256.0,
123
+ "t_scale": 1000.0,
124
+ "use_timestep": true,
125
+ "predict_target": "v",
126
+ "axes_dims": [
127
+ 16,
128
+ 56,
129
+ 56
130
+ ],
131
+ "axes_lens": [
132
+ 1024,
133
+ 512,
134
+ 512
135
+ ],
136
+ "compile_model": true,
137
+ "attention_backend": null,
138
+ "bridge_interval": 1,
139
+ "bridge_enabled": true,
140
+ "use_asymmetric_ati": false,
141
+ "a2v_window_size": 1,
142
+ "compile_bridges": true,
143
+ "compile_mode": "default",
144
+ "compile_fullgraph": false,
145
+ "compile_dynamic": null
146
+ },
147
+ "validation": {
148
+ "modes": [
149
+ "audio_only",
150
+ "video_only",
151
+ "joint_av"
152
+ ],
153
+ "joint_av_prompts": {
154
+ "name": "versebench",
155
+ "jsonl_path": "eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl",
156
+ "text_field": "av_caption",
157
+ "type_field": "type",
158
+ "index_field": "index",
159
+ "task_kind": "t2av",
160
+ "append_duration_suffix": false,
161
+ "max_examples": null
162
+ },
163
+ "video_only_prompts": {
164
+ "name": "t2v_inline",
165
+ "max_examples": null,
166
+ "prompts": [
167
+ "A cinematic documentary shot of a three-dimensional topographical map, clouds drifting over islands, somber historical lighting.",
168
+ "A tense cinematic scene inside a dimly lit historical palace hall, guards rushing through a wooden corridor, dramatic torchlight.",
169
+ "A close-up cinematic drama shot of a young woman lit by cool blue light, anxious expression, soft early 2000s television style.",
170
+ "A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic lighting, gentle camera movement.",
171
+ "A young woman laughing while chatting with a friend at a sunny outdoor cafe.",
172
+ "An old man telling a story to a group of children sitting around him in a park.",
173
+ "A street musician playing guitar and singing on a busy city sidewalk.",
174
+ "A golden retriever running across a grassy field on a bright afternoon.",
175
+ "Cherry blossoms gently falling along a quiet path in spring.",
176
+ "A bowl of steaming noodles on a wooden table in a cozy small restaurant."
177
+ ]
178
+ },
179
+ "audio_only_prompt_sets": [
180
+ {
181
+ "name": "basetts_valid",
182
+ "task_kind": "tts",
183
+ "jsonl_path": "examples/eval/t2a_tts_basetts_sample.jsonl",
184
+ "text_field": "text",
185
+ "type_field": "type",
186
+ "index_field": "index",
187
+ "append_duration_suffix": true,
188
+ "duration_precision": 1,
189
+ "max_examples": 8
190
+ },
191
+ {
192
+ "name": "tta_general_en",
193
+ "task_kind": "tta",
194
+ "jsonl_path": "examples/eval/t2a_tta_general_en.jsonl",
195
+ "text_field": "text",
196
+ "type_field": "type",
197
+ "index_field": "index",
198
+ "append_duration_suffix": true,
199
+ "duration_precision": 1,
200
+ "max_examples": null
201
+ }
202
+ ],
203
+ "num_inference_steps": 50,
204
+ "video_guidance_scale": 4.0,
205
+ "audio_guidance_scale": 4.0,
206
+ "cfg_normalization": false,
207
+ "max_wandb_samples_per_source": 10,
208
+ "cfg_modes": [
209
+ "simple",
210
+ "dual"
211
+ ],
212
+ "video_text_guidance": 4.0,
213
+ "video_modality_guidance": 4.0,
214
+ "audio_text_guidance": 4.0,
215
+ "audio_modality_guidance": 4.0,
216
+ "video_frame_size": [
217
+ 256,
218
+ 256
219
+ ],
220
+ "video_num_frames": 121,
221
+ "video_fps": 24.0,
222
+ "audio_duration_seconds": 5.0417
223
+ },
224
+ "vae": {
225
+ "type": "univae",
226
+ "model_name_or_path": "models/vae/audio_video/recon_avclip",
227
+ "torch_dtype": "bfloat16",
228
+ "local_files_only": true,
229
+ "wan_chunk_mode": "parallel",
230
+ "compile_encode": true,
231
+ "compile_encode_mode": "reduce-overhead",
232
+ "compile_encode_fullgraph": false,
233
+ "branch": "video",
234
+ "use_ema": false
235
+ },
236
+ "audio_vae": {
237
+ "type": "univae",
238
+ "model_path": "models/vae/audio_only/recon_avclip_ft_decoder",
239
+ "hop_length": 960,
240
+ "latent_channels": 128,
241
+ "torch_dtype": "float32",
242
+ "compile_encode": true,
243
+ "compile_encode_fullgraph": false,
244
+ "compile_encode_mode": "reduce-overhead",
245
+ "branch": "audio",
246
+ "use_ema": false
247
+ },
248
+ "transformer_video": {
249
+ "arch": "zimage",
250
+ "all_patch_size": [
251
+ 1
252
+ ],
253
+ "all_f_patch_size": [
254
+ 1
255
+ ],
256
+ "in_channels": 48,
257
+ "dim": 1920,
258
+ "n_layers": 18,
259
+ "n_refiner_layers": 2,
260
+ "n_heads": 15,
261
+ "n_kv_heads": 15,
262
+ "norm_eps": 1e-05,
263
+ "qk_norm": true,
264
+ "rope_theta": 256.0,
265
+ "t_scale": 1000.0,
266
+ "use_timestep": true,
267
+ "predict_target": "v",
268
+ "axes_dims": [
269
+ 16,
270
+ 56,
271
+ 56
272
+ ],
273
+ "axes_lens": [
274
+ 1024,
275
+ 512,
276
+ 512
277
+ ],
278
+ "compile_model": true,
279
+ "attention_backend": null
280
+ },
281
+ "transformer_audio": {
282
+ "arch": "zimage",
283
+ "all_patch_size": [
284
+ 1
285
+ ],
286
+ "all_f_patch_size": [
287
+ 1
288
+ ],
289
+ "in_channels": 128,
290
+ "dim": 1920,
291
+ "n_layers": 18,
292
+ "n_refiner_layers": 2,
293
+ "n_heads": 15,
294
+ "n_kv_heads": 15,
295
+ "norm_eps": 1e-05,
296
+ "qk_norm": true,
297
+ "rope_theta": 256.0,
298
+ "t_scale": 1000.0,
299
+ "use_timestep": true,
300
+ "predict_target": "v",
301
+ "axes_dims": [
302
+ 16,
303
+ 56,
304
+ 56
305
+ ],
306
+ "axes_lens": [
307
+ 2048,
308
+ 16,
309
+ 16
310
+ ],
311
+ "compile_model": true,
312
+ "attention_backend": null
313
+ },
314
+ "train": {
315
+ "seed": 42,
316
+ "validation_steps": 5000,
317
+ "validation_prompts": [
318
+ "a high-quality photo of a goldfish",
319
+ "a high-quality photo of a tiger shark",
320
+ "a high-quality photo of an ostrich",
321
+ "a high-quality photo of a tabby cat"
322
+ ],
323
+ "validation_num_inference_steps": 20,
324
+ "validation_guidance_scale": 4.0,
325
+ "validation_cfg_normalization": false,
326
+ "validation_cfg_truncation": 1.0,
327
+ "validation_num_frames": null,
328
+ "validation_frame_size": null,
329
+ "validation_fps": null,
330
+ "validation_negative_prompts": null,
331
+ "shift_v": 5.0,
332
+ "shift_a": 3.0,
333
+ "validation_force_steps": [
334
+ 0
335
+ ]
336
+ }
337
+ }
models/dit/t2av/t2av_recon_avclip/resolved_config.yaml ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ experiment:
2
+ name: t2av_recon_avclip
3
+ output_dir: models/dit/t2av/t2av_recon_avclip
4
+ dataset:
5
+ type: av_paired_jsonl
6
+ root: omitted_public_release_path
7
+ meta_path: null
8
+ jsonl_index_path: null
9
+ jsonl_path_field: video_path
10
+ jsonl_prompt_field: prompt_v2
11
+ jsonl_prompt_index_path: null
12
+ slave_path: ''
13
+ base_image_path: ''
14
+ split: train
15
+ image_size: 256
16
+ frame_size:
17
+ - 256
18
+ - 256
19
+ num_frames: 121
20
+ target_fps: 24.0
21
+ decode_backend: torchcodec
22
+ return_uint8: true
23
+ center_crop: true
24
+ random_flip: false
25
+ num_workers: 6
26
+ prefetch_factor: 2
27
+ pin_memory: true
28
+ drop_last: true
29
+ max_samples: null
30
+ cache_dir: .cache/omnivae
31
+ repeat: 1
32
+ recaption_prob: 0.0
33
+ captions_file: null
34
+ prompt_templates:
35
+ - a high-quality photo of {label}
36
+ use_full_label: false
37
+ metadata_paths: []
38
+ dataset_base_path: /
39
+ sample_rate: 48000
40
+ num_audio_samples: 242000
41
+ max_num_audio_samples: 1440000
42
+ mono: true
43
+ append_duration_suffix: false
44
+ duration_precision: 1
45
+ path_field: video_path
46
+ prompt_field: av_caption
47
+ sources:
48
+ - name: nonspeech_1000w_g2
49
+ path: data/train/nonspeech_1000w_group2_9376485.jsonl
50
+ weight: 0.5
51
+ - name: speech_1000w_g2
52
+ path: data/train/youtube_speech_10042814.jsonl
53
+ weight: 0.35
54
+ - name: documentary
55
+ path: data/train/documentary_2627844.jsonl
56
+ weight: 0.12
57
+ - name: movies
58
+ path: data/train/movies_8964574.jsonl
59
+ weight: 0.05
60
+ - name: chinese_drama
61
+ path: data/train/chinese_drama_3264550.jsonl
62
+ weight: 0.03
63
+ task_prefix_enabled: true
64
+ min_clip_duration_ratio: 0.99
65
+ text_encoder:
66
+ model_name_or_path: models/text_encoder/Qwen3.5-0.8B-Base
67
+ trust_remote_code: false
68
+ torch_dtype: bfloat16
69
+ attn_implementation: sdpa
70
+ disable_qwen3_5_fast_path: true
71
+ cache_enabled: false
72
+ compile_model: true
73
+ max_sequence_length: 512
74
+ local_files_only: true
75
+ scheduler:
76
+ model_name_or_path: models/dit/t2av/t2av_recon_avclip
77
+ subfolder: scheduler
78
+ local_files_only: true
79
+ use_dynamic_shifting: false
80
+ transformer:
81
+ arch: zimage
82
+ backbone_name_or_path: Qwen/Qwen3-VL-2B-Instruct
83
+ backbone_torch_dtype: bfloat16
84
+ init_from_pretrained_backbone: true
85
+ text_config: null
86
+ trust_remote_code: false
87
+ local_files_only: false
88
+ attn_implementation: flex_attention
89
+ max_sequence_length: 512
90
+ all_patch_size:
91
+ - 1
92
+ all_f_patch_size:
93
+ - 1
94
+ in_channels: 16
95
+ dim: 2048
96
+ n_layers: 18
97
+ n_refiner_layers: 2
98
+ n_heads: 16
99
+ n_kv_heads: 16
100
+ norm_eps: 1.0e-05
101
+ qk_norm: true
102
+ rope_theta: 256.0
103
+ t_scale: 1000.0
104
+ use_timestep: true
105
+ predict_target: v
106
+ axes_dims:
107
+ - 16
108
+ - 56
109
+ - 56
110
+ axes_lens:
111
+ - 1024
112
+ - 512
113
+ - 512
114
+ compile_model: true
115
+ attention_backend: null
116
+ bridge_interval: 1
117
+ bridge_enabled: true
118
+ use_asymmetric_ati: false
119
+ a2v_window_size: 1
120
+ compile_bridges: true
121
+ compile_mode: default
122
+ compile_fullgraph: false
123
+ compile_dynamic: null
124
+ validation:
125
+ modes:
126
+ - audio_only
127
+ - video_only
128
+ - joint_av
129
+ joint_av_prompts:
130
+ name: versebench
131
+ jsonl_path: eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl
132
+ text_field: av_caption
133
+ type_field: type
134
+ index_field: index
135
+ task_kind: t2av
136
+ append_duration_suffix: false
137
+ max_examples: null
138
+ video_only_prompts:
139
+ name: t2v_inline
140
+ max_examples: null
141
+ prompts:
142
+ - A cinematic documentary shot of a three-dimensional topographical map, clouds
143
+ drifting over islands, somber historical lighting.
144
+ - A tense cinematic scene inside a dimly lit historical palace hall, guards rushing
145
+ through a wooden corridor, dramatic torchlight.
146
+ - A close-up cinematic drama shot of a young woman lit by cool blue light, anxious
147
+ expression, soft early 2000s television style.
148
+ - A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic
149
+ lighting, gentle camera movement.
150
+ - A young woman laughing while chatting with a friend at a sunny outdoor cafe.
151
+ - An old man telling a story to a group of children sitting around him in a park.
152
+ - A street musician playing guitar and singing on a busy city sidewalk.
153
+ - A golden retriever running across a grassy field on a bright afternoon.
154
+ - Cherry blossoms gently falling along a quiet path in spring.
155
+ - A bowl of steaming noodles on a wooden table in a cozy small restaurant.
156
+ audio_only_prompt_sets:
157
+ - name: basetts_valid
158
+ task_kind: tts
159
+ jsonl_path: examples/eval/t2a_tts_basetts_sample.jsonl
160
+ text_field: text
161
+ type_field: type
162
+ index_field: index
163
+ append_duration_suffix: true
164
+ duration_precision: 1
165
+ max_examples: 8
166
+ - name: tta_general_en
167
+ task_kind: tta
168
+ jsonl_path: examples/eval/t2a_tta_general_en.jsonl
169
+ text_field: text
170
+ type_field: type
171
+ index_field: index
172
+ append_duration_suffix: true
173
+ duration_precision: 1
174
+ max_examples: null
175
+ num_inference_steps: 50
176
+ video_guidance_scale: 4.0
177
+ audio_guidance_scale: 4.0
178
+ cfg_normalization: false
179
+ max_wandb_samples_per_source: 10
180
+ cfg_modes:
181
+ - simple
182
+ - dual
183
+ video_text_guidance: 4.0
184
+ video_modality_guidance: 4.0
185
+ audio_text_guidance: 4.0
186
+ audio_modality_guidance: 4.0
187
+ video_frame_size:
188
+ - 256
189
+ - 256
190
+ video_num_frames: 121
191
+ video_fps: 24.0
192
+ audio_duration_seconds: 5.0417
193
+ vae:
194
+ type: univae
195
+ model_name_or_path: models/vae/audio_video/recon_avclip
196
+ torch_dtype: bfloat16
197
+ local_files_only: true
198
+ wan_chunk_mode: parallel
199
+ compile_encode: true
200
+ compile_encode_mode: reduce-overhead
201
+ compile_encode_fullgraph: false
202
+ branch: video
203
+ use_ema: false
204
+ audio_vae:
205
+ type: univae
206
+ model_path: models/vae/audio_only/recon_avclip_ft_decoder
207
+ hop_length: 960
208
+ latent_channels: 128
209
+ torch_dtype: float32
210
+ compile_encode: true
211
+ compile_encode_fullgraph: false
212
+ compile_encode_mode: reduce-overhead
213
+ branch: audio
214
+ use_ema: false
215
+ transformer_video:
216
+ arch: zimage
217
+ all_patch_size:
218
+ - 1
219
+ all_f_patch_size:
220
+ - 1
221
+ in_channels: 48
222
+ dim: 1920
223
+ n_layers: 18
224
+ n_refiner_layers: 2
225
+ n_heads: 15
226
+ n_kv_heads: 15
227
+ norm_eps: 1.0e-05
228
+ qk_norm: true
229
+ rope_theta: 256.0
230
+ t_scale: 1000.0
231
+ use_timestep: true
232
+ predict_target: v
233
+ axes_dims:
234
+ - 16
235
+ - 56
236
+ - 56
237
+ axes_lens:
238
+ - 1024
239
+ - 512
240
+ - 512
241
+ compile_model: true
242
+ attention_backend: null
243
+ transformer_audio:
244
+ arch: zimage
245
+ all_patch_size:
246
+ - 1
247
+ all_f_patch_size:
248
+ - 1
249
+ in_channels: 128
250
+ dim: 1920
251
+ n_layers: 18
252
+ n_refiner_layers: 2
253
+ n_heads: 15
254
+ n_kv_heads: 15
255
+ norm_eps: 1.0e-05
256
+ qk_norm: true
257
+ rope_theta: 256.0
258
+ t_scale: 1000.0
259
+ use_timestep: true
260
+ predict_target: v
261
+ axes_dims:
262
+ - 16
263
+ - 56
264
+ - 56
265
+ axes_lens:
266
+ - 2048
267
+ - 16
268
+ - 16
269
+ compile_model: true
270
+ attention_backend: null
271
+ train:
272
+ seed: 42
273
+ validation_steps: 5000
274
+ validation_prompts:
275
+ - a high-quality photo of a goldfish
276
+ - a high-quality photo of a tiger shark
277
+ - a high-quality photo of an ostrich
278
+ - a high-quality photo of a tabby cat
279
+ validation_num_inference_steps: 20
280
+ validation_guidance_scale: 4.0
281
+ validation_cfg_normalization: false
282
+ validation_cfg_truncation: 1.0
283
+ validation_num_frames: null
284
+ validation_frame_size: null
285
+ validation_fps: null
286
+ validation_negative_prompts: null
287
+ shift_v: 5.0
288
+ shift_a: 3.0
289
+ validation_force_steps:
290
+ - 0
models/dit/t2av/t2av_recon_distill/bridges/bridge_config.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bridge_interval": 1,
3
+ "use_asymmetric_ati": false,
4
+ "a2v_window_size": 1,
5
+ "n_bridges": 18,
6
+ "dim": 1920,
7
+ "n_heads": 15,
8
+ "head_dim": 128
9
+ }
models/dit/t2av/t2av_recon_distill/metadata.json ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "export_format": "omnivae_generation_inference_package_v1",
3
+ "inference_only": true,
4
+ "task": "t2av",
5
+ "name": "t2av_recon_distill",
6
+ "source_experiment": "2_t2av_recon_distill_lr2",
7
+ "exported_at_utc": "2026-06-07T21:30:31+00:00",
8
+ "text_encoder_model_name_or_path": "models/text_encoder/Qwen3.5-0.8B-Base",
9
+ "vae_model_name_or_path": "models/vae/video_only/recon_distill",
10
+ "required_subdirs": [
11
+ "transformer_video",
12
+ "transformer_audio",
13
+ "bridges",
14
+ "tokenizer",
15
+ "scheduler"
16
+ ],
17
+ "video_vae_model_name_or_path": "models/vae/video_only/recon_distill",
18
+ "audio_vae_model_path": "models/vae/audio_only/recon_distill",
19
+ "joint_av": true,
20
+ "release_vae_paths_rewritten": true,
21
+ "release_experiment_family": "recon_distill",
22
+ "release_path_note": "VAE paths are relative to OMNIVAE_RELEASE_ROOT/models/vae. AVCLIP audio branches use ft_decoder checkpoints.",
23
+ "source_step": 200000,
24
+ "release_checkpoint_step": 200000,
25
+ "release_laion_checkpoint_name": "checkpoint-00200000",
26
+ "source_experiment_original_name": "2_t2av_recon_distill_lr2",
27
+ "source_checkpoint_provenance": "internal training checkpoint path omitted; use release_checkpoint_step and this package directory.",
28
+ "release_package_path": "models/dit/t2av/t2av_recon_distill"
29
+ }
models/dit/t2av/t2av_recon_distill/resolved_config.json ADDED
@@ -0,0 +1,337 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "experiment": {
3
+ "name": "t2av_recon_distill",
4
+ "output_dir": "models/dit/t2av/t2av_recon_distill"
5
+ },
6
+ "dataset": {
7
+ "type": "av_paired_jsonl",
8
+ "root": "omitted_public_release_path",
9
+ "meta_path": null,
10
+ "jsonl_index_path": null,
11
+ "jsonl_path_field": "video_path",
12
+ "jsonl_prompt_field": "prompt_v2",
13
+ "jsonl_prompt_index_path": null,
14
+ "slave_path": "",
15
+ "base_image_path": "",
16
+ "split": "train",
17
+ "image_size": 256,
18
+ "frame_size": [
19
+ 256,
20
+ 256
21
+ ],
22
+ "num_frames": 121,
23
+ "target_fps": 24.0,
24
+ "decode_backend": "torchcodec",
25
+ "return_uint8": true,
26
+ "center_crop": true,
27
+ "random_flip": false,
28
+ "num_workers": 6,
29
+ "prefetch_factor": 2,
30
+ "pin_memory": true,
31
+ "drop_last": true,
32
+ "max_samples": null,
33
+ "cache_dir": ".cache/omnivae",
34
+ "repeat": 1,
35
+ "recaption_prob": 0.0,
36
+ "captions_file": null,
37
+ "prompt_templates": [
38
+ "a high-quality photo of {label}"
39
+ ],
40
+ "use_full_label": false,
41
+ "metadata_paths": [],
42
+ "dataset_base_path": "/",
43
+ "sample_rate": 48000,
44
+ "num_audio_samples": 242000,
45
+ "max_num_audio_samples": 1440000,
46
+ "mono": true,
47
+ "append_duration_suffix": false,
48
+ "duration_precision": 1,
49
+ "path_field": "video_path",
50
+ "prompt_field": "av_caption",
51
+ "sources": [
52
+ {
53
+ "name": "nonspeech_1000w_g2",
54
+ "path": "data/train/nonspeech_1000w_group2_9376485.jsonl",
55
+ "weight": 0.5
56
+ },
57
+ {
58
+ "name": "speech_1000w_g2",
59
+ "path": "data/train/youtube_speech_10042814.jsonl",
60
+ "weight": 0.35
61
+ },
62
+ {
63
+ "name": "documentary",
64
+ "path": "data/train/documentary_2627844.jsonl",
65
+ "weight": 0.12
66
+ },
67
+ {
68
+ "name": "movies",
69
+ "path": "data/train/movies_8964574.jsonl",
70
+ "weight": 0.05
71
+ },
72
+ {
73
+ "name": "chinese_drama",
74
+ "path": "data/train/chinese_drama_3264550.jsonl",
75
+ "weight": 0.03
76
+ }
77
+ ],
78
+ "task_prefix_enabled": true,
79
+ "min_clip_duration_ratio": 0.99
80
+ },
81
+ "text_encoder": {
82
+ "model_name_or_path": "models/text_encoder/Qwen3.5-0.8B-Base",
83
+ "trust_remote_code": false,
84
+ "torch_dtype": "bfloat16",
85
+ "attn_implementation": "sdpa",
86
+ "disable_qwen3_5_fast_path": true,
87
+ "cache_enabled": false,
88
+ "compile_model": true,
89
+ "max_sequence_length": 512,
90
+ "local_files_only": true
91
+ },
92
+ "scheduler": {
93
+ "model_name_or_path": "models/dit/t2av/t2av_recon_distill",
94
+ "subfolder": "scheduler",
95
+ "local_files_only": true,
96
+ "use_dynamic_shifting": false
97
+ },
98
+ "transformer": {
99
+ "arch": "zimage",
100
+ "backbone_name_or_path": "Qwen/Qwen3-VL-2B-Instruct",
101
+ "backbone_torch_dtype": "bfloat16",
102
+ "init_from_pretrained_backbone": true,
103
+ "text_config": null,
104
+ "trust_remote_code": false,
105
+ "local_files_only": false,
106
+ "attn_implementation": "flex_attention",
107
+ "max_sequence_length": 512,
108
+ "all_patch_size": [
109
+ 1
110
+ ],
111
+ "all_f_patch_size": [
112
+ 1
113
+ ],
114
+ "in_channels": 16,
115
+ "dim": 2048,
116
+ "n_layers": 18,
117
+ "n_refiner_layers": 2,
118
+ "n_heads": 16,
119
+ "n_kv_heads": 16,
120
+ "norm_eps": 1e-05,
121
+ "qk_norm": true,
122
+ "rope_theta": 256.0,
123
+ "t_scale": 1000.0,
124
+ "use_timestep": true,
125
+ "predict_target": "v",
126
+ "axes_dims": [
127
+ 16,
128
+ 56,
129
+ 56
130
+ ],
131
+ "axes_lens": [
132
+ 1024,
133
+ 512,
134
+ 512
135
+ ],
136
+ "compile_model": true,
137
+ "attention_backend": null,
138
+ "bridge_interval": 1,
139
+ "bridge_enabled": true,
140
+ "use_asymmetric_ati": false,
141
+ "a2v_window_size": 1,
142
+ "compile_bridges": true,
143
+ "compile_mode": "default",
144
+ "compile_fullgraph": false,
145
+ "compile_dynamic": null
146
+ },
147
+ "validation": {
148
+ "modes": [
149
+ "audio_only",
150
+ "video_only",
151
+ "joint_av"
152
+ ],
153
+ "joint_av_prompts": {
154
+ "name": "versebench",
155
+ "jsonl_path": "eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl",
156
+ "text_field": "av_caption",
157
+ "type_field": "type",
158
+ "index_field": "index",
159
+ "task_kind": "t2av",
160
+ "append_duration_suffix": false,
161
+ "max_examples": null
162
+ },
163
+ "video_only_prompts": {
164
+ "name": "t2v_inline",
165
+ "max_examples": null,
166
+ "prompts": [
167
+ "A cinematic documentary shot of a three-dimensional topographical map, clouds drifting over islands, somber historical lighting.",
168
+ "A tense cinematic scene inside a dimly lit historical palace hall, guards rushing through a wooden corridor, dramatic torchlight.",
169
+ "A close-up cinematic drama shot of a young woman lit by cool blue light, anxious expression, soft early 2000s television style.",
170
+ "A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic lighting, gentle camera movement.",
171
+ "A young woman laughing while chatting with a friend at a sunny outdoor cafe.",
172
+ "An old man telling a story to a group of children sitting around him in a park.",
173
+ "A street musician playing guitar and singing on a busy city sidewalk.",
174
+ "A golden retriever running across a grassy field on a bright afternoon.",
175
+ "Cherry blossoms gently falling along a quiet path in spring.",
176
+ "A bowl of steaming noodles on a wooden table in a cozy small restaurant."
177
+ ]
178
+ },
179
+ "audio_only_prompt_sets": [
180
+ {
181
+ "name": "basetts_valid",
182
+ "task_kind": "tts",
183
+ "jsonl_path": "examples/eval/t2a_tts_basetts_sample.jsonl",
184
+ "text_field": "text",
185
+ "type_field": "type",
186
+ "index_field": "index",
187
+ "append_duration_suffix": true,
188
+ "duration_precision": 1,
189
+ "max_examples": 8
190
+ },
191
+ {
192
+ "name": "tta_general_en",
193
+ "task_kind": "tta",
194
+ "jsonl_path": "examples/eval/t2a_tta_general_en.jsonl",
195
+ "text_field": "text",
196
+ "type_field": "type",
197
+ "index_field": "index",
198
+ "append_duration_suffix": true,
199
+ "duration_precision": 1,
200
+ "max_examples": null
201
+ }
202
+ ],
203
+ "num_inference_steps": 50,
204
+ "video_guidance_scale": 4.0,
205
+ "audio_guidance_scale": 4.0,
206
+ "cfg_normalization": false,
207
+ "max_wandb_samples_per_source": 10,
208
+ "cfg_modes": [
209
+ "simple",
210
+ "dual"
211
+ ],
212
+ "video_text_guidance": 4.0,
213
+ "video_modality_guidance": 4.0,
214
+ "audio_text_guidance": 4.0,
215
+ "audio_modality_guidance": 4.0,
216
+ "video_frame_size": [
217
+ 256,
218
+ 256
219
+ ],
220
+ "video_num_frames": 121,
221
+ "video_fps": 24.0,
222
+ "audio_duration_seconds": 5.0417
223
+ },
224
+ "vae": {
225
+ "type": "univae",
226
+ "model_name_or_path": "models/vae/video_only/recon_distill",
227
+ "torch_dtype": "bfloat16",
228
+ "local_files_only": true,
229
+ "wan_chunk_mode": "parallel",
230
+ "compile_encode": true,
231
+ "compile_encode_mode": "reduce-overhead",
232
+ "compile_encode_fullgraph": false,
233
+ "branch": "video",
234
+ "use_ema": false
235
+ },
236
+ "audio_vae": {
237
+ "type": "univae",
238
+ "model_path": "models/vae/audio_only/recon_distill",
239
+ "hop_length": 960,
240
+ "latent_channels": 128,
241
+ "torch_dtype": "float32",
242
+ "compile_encode": true,
243
+ "compile_encode_fullgraph": false,
244
+ "compile_encode_mode": "reduce-overhead",
245
+ "branch": "audio",
246
+ "use_ema": false
247
+ },
248
+ "transformer_video": {
249
+ "arch": "zimage",
250
+ "all_patch_size": [
251
+ 1
252
+ ],
253
+ "all_f_patch_size": [
254
+ 1
255
+ ],
256
+ "in_channels": 48,
257
+ "dim": 1920,
258
+ "n_layers": 18,
259
+ "n_refiner_layers": 2,
260
+ "n_heads": 15,
261
+ "n_kv_heads": 15,
262
+ "norm_eps": 1e-05,
263
+ "qk_norm": true,
264
+ "rope_theta": 256.0,
265
+ "t_scale": 1000.0,
266
+ "use_timestep": true,
267
+ "predict_target": "v",
268
+ "axes_dims": [
269
+ 16,
270
+ 56,
271
+ 56
272
+ ],
273
+ "axes_lens": [
274
+ 1024,
275
+ 512,
276
+ 512
277
+ ],
278
+ "compile_model": true,
279
+ "attention_backend": null
280
+ },
281
+ "transformer_audio": {
282
+ "arch": "zimage",
283
+ "all_patch_size": [
284
+ 1
285
+ ],
286
+ "all_f_patch_size": [
287
+ 1
288
+ ],
289
+ "in_channels": 128,
290
+ "dim": 1920,
291
+ "n_layers": 18,
292
+ "n_refiner_layers": 2,
293
+ "n_heads": 15,
294
+ "n_kv_heads": 15,
295
+ "norm_eps": 1e-05,
296
+ "qk_norm": true,
297
+ "rope_theta": 256.0,
298
+ "t_scale": 1000.0,
299
+ "use_timestep": true,
300
+ "predict_target": "v",
301
+ "axes_dims": [
302
+ 16,
303
+ 56,
304
+ 56
305
+ ],
306
+ "axes_lens": [
307
+ 2048,
308
+ 16,
309
+ 16
310
+ ],
311
+ "compile_model": true,
312
+ "attention_backend": null
313
+ },
314
+ "train": {
315
+ "seed": 42,
316
+ "validation_steps": 5000,
317
+ "validation_prompts": [
318
+ "a high-quality photo of a goldfish",
319
+ "a high-quality photo of a tiger shark",
320
+ "a high-quality photo of an ostrich",
321
+ "a high-quality photo of a tabby cat"
322
+ ],
323
+ "validation_num_inference_steps": 20,
324
+ "validation_guidance_scale": 4.0,
325
+ "validation_cfg_normalization": false,
326
+ "validation_cfg_truncation": 1.0,
327
+ "validation_num_frames": null,
328
+ "validation_frame_size": null,
329
+ "validation_fps": null,
330
+ "validation_negative_prompts": null,
331
+ "shift_v": 5.0,
332
+ "shift_a": 3.0,
333
+ "validation_force_steps": [
334
+ 0
335
+ ]
336
+ }
337
+ }
models/dit/t2av/t2av_recon_distill/resolved_config.yaml ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ experiment:
2
+ name: t2av_recon_distill
3
+ output_dir: models/dit/t2av/t2av_recon_distill
4
+ dataset:
5
+ type: av_paired_jsonl
6
+ root: omitted_public_release_path
7
+ meta_path: null
8
+ jsonl_index_path: null
9
+ jsonl_path_field: video_path
10
+ jsonl_prompt_field: prompt_v2
11
+ jsonl_prompt_index_path: null
12
+ slave_path: ''
13
+ base_image_path: ''
14
+ split: train
15
+ image_size: 256
16
+ frame_size:
17
+ - 256
18
+ - 256
19
+ num_frames: 121
20
+ target_fps: 24.0
21
+ decode_backend: torchcodec
22
+ return_uint8: true
23
+ center_crop: true
24
+ random_flip: false
25
+ num_workers: 6
26
+ prefetch_factor: 2
27
+ pin_memory: true
28
+ drop_last: true
29
+ max_samples: null
30
+ cache_dir: .cache/omnivae
31
+ repeat: 1
32
+ recaption_prob: 0.0
33
+ captions_file: null
34
+ prompt_templates:
35
+ - a high-quality photo of {label}
36
+ use_full_label: false
37
+ metadata_paths: []
38
+ dataset_base_path: /
39
+ sample_rate: 48000
40
+ num_audio_samples: 242000
41
+ max_num_audio_samples: 1440000
42
+ mono: true
43
+ append_duration_suffix: false
44
+ duration_precision: 1
45
+ path_field: video_path
46
+ prompt_field: av_caption
47
+ sources:
48
+ - name: nonspeech_1000w_g2
49
+ path: data/train/nonspeech_1000w_group2_9376485.jsonl
50
+ weight: 0.5
51
+ - name: speech_1000w_g2
52
+ path: data/train/youtube_speech_10042814.jsonl
53
+ weight: 0.35
54
+ - name: documentary
55
+ path: data/train/documentary_2627844.jsonl
56
+ weight: 0.12
57
+ - name: movies
58
+ path: data/train/movies_8964574.jsonl
59
+ weight: 0.05
60
+ - name: chinese_drama
61
+ path: data/train/chinese_drama_3264550.jsonl
62
+ weight: 0.03
63
+ task_prefix_enabled: true
64
+ min_clip_duration_ratio: 0.99
65
+ text_encoder:
66
+ model_name_or_path: models/text_encoder/Qwen3.5-0.8B-Base
67
+ trust_remote_code: false
68
+ torch_dtype: bfloat16
69
+ attn_implementation: sdpa
70
+ disable_qwen3_5_fast_path: true
71
+ cache_enabled: false
72
+ compile_model: true
73
+ max_sequence_length: 512
74
+ local_files_only: true
75
+ scheduler:
76
+ model_name_or_path: models/dit/t2av/t2av_recon_distill
77
+ subfolder: scheduler
78
+ local_files_only: true
79
+ use_dynamic_shifting: false
80
+ transformer:
81
+ arch: zimage
82
+ backbone_name_or_path: Qwen/Qwen3-VL-2B-Instruct
83
+ backbone_torch_dtype: bfloat16
84
+ init_from_pretrained_backbone: true
85
+ text_config: null
86
+ trust_remote_code: false
87
+ local_files_only: false
88
+ attn_implementation: flex_attention
89
+ max_sequence_length: 512
90
+ all_patch_size:
91
+ - 1
92
+ all_f_patch_size:
93
+ - 1
94
+ in_channels: 16
95
+ dim: 2048
96
+ n_layers: 18
97
+ n_refiner_layers: 2
98
+ n_heads: 16
99
+ n_kv_heads: 16
100
+ norm_eps: 1.0e-05
101
+ qk_norm: true
102
+ rope_theta: 256.0
103
+ t_scale: 1000.0
104
+ use_timestep: true
105
+ predict_target: v
106
+ axes_dims:
107
+ - 16
108
+ - 56
109
+ - 56
110
+ axes_lens:
111
+ - 1024
112
+ - 512
113
+ - 512
114
+ compile_model: true
115
+ attention_backend: null
116
+ bridge_interval: 1
117
+ bridge_enabled: true
118
+ use_asymmetric_ati: false
119
+ a2v_window_size: 1
120
+ compile_bridges: true
121
+ compile_mode: default
122
+ compile_fullgraph: false
123
+ compile_dynamic: null
124
+ validation:
125
+ modes:
126
+ - audio_only
127
+ - video_only
128
+ - joint_av
129
+ joint_av_prompts:
130
+ name: versebench
131
+ jsonl_path: eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl
132
+ text_field: av_caption
133
+ type_field: type
134
+ index_field: index
135
+ task_kind: t2av
136
+ append_duration_suffix: false
137
+ max_examples: null
138
+ video_only_prompts:
139
+ name: t2v_inline
140
+ max_examples: null
141
+ prompts:
142
+ - A cinematic documentary shot of a three-dimensional topographical map, clouds
143
+ drifting over islands, somber historical lighting.
144
+ - A tense cinematic scene inside a dimly lit historical palace hall, guards rushing
145
+ through a wooden corridor, dramatic torchlight.
146
+ - A close-up cinematic drama shot of a young woman lit by cool blue light, anxious
147
+ expression, soft early 2000s television style.
148
+ - A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic
149
+ lighting, gentle camera movement.
150
+ - A young woman laughing while chatting with a friend at a sunny outdoor cafe.
151
+ - An old man telling a story to a group of children sitting around him in a park.
152
+ - A street musician playing guitar and singing on a busy city sidewalk.
153
+ - A golden retriever running across a grassy field on a bright afternoon.
154
+ - Cherry blossoms gently falling along a quiet path in spring.
155
+ - A bowl of steaming noodles on a wooden table in a cozy small restaurant.
156
+ audio_only_prompt_sets:
157
+ - name: basetts_valid
158
+ task_kind: tts
159
+ jsonl_path: examples/eval/t2a_tts_basetts_sample.jsonl
160
+ text_field: text
161
+ type_field: type
162
+ index_field: index
163
+ append_duration_suffix: true
164
+ duration_precision: 1
165
+ max_examples: 8
166
+ - name: tta_general_en
167
+ task_kind: tta
168
+ jsonl_path: examples/eval/t2a_tta_general_en.jsonl
169
+ text_field: text
170
+ type_field: type
171
+ index_field: index
172
+ append_duration_suffix: true
173
+ duration_precision: 1
174
+ max_examples: null
175
+ num_inference_steps: 50
176
+ video_guidance_scale: 4.0
177
+ audio_guidance_scale: 4.0
178
+ cfg_normalization: false
179
+ max_wandb_samples_per_source: 10
180
+ cfg_modes:
181
+ - simple
182
+ - dual
183
+ video_text_guidance: 4.0
184
+ video_modality_guidance: 4.0
185
+ audio_text_guidance: 4.0
186
+ audio_modality_guidance: 4.0
187
+ video_frame_size:
188
+ - 256
189
+ - 256
190
+ video_num_frames: 121
191
+ video_fps: 24.0
192
+ audio_duration_seconds: 5.0417
193
+ vae:
194
+ type: univae
195
+ model_name_or_path: models/vae/video_only/recon_distill
196
+ torch_dtype: bfloat16
197
+ local_files_only: true
198
+ wan_chunk_mode: parallel
199
+ compile_encode: true
200
+ compile_encode_mode: reduce-overhead
201
+ compile_encode_fullgraph: false
202
+ branch: video
203
+ use_ema: false
204
+ audio_vae:
205
+ type: univae
206
+ model_path: models/vae/audio_only/recon_distill
207
+ hop_length: 960
208
+ latent_channels: 128
209
+ torch_dtype: float32
210
+ compile_encode: true
211
+ compile_encode_fullgraph: false
212
+ compile_encode_mode: reduce-overhead
213
+ branch: audio
214
+ use_ema: false
215
+ transformer_video:
216
+ arch: zimage
217
+ all_patch_size:
218
+ - 1
219
+ all_f_patch_size:
220
+ - 1
221
+ in_channels: 48
222
+ dim: 1920
223
+ n_layers: 18
224
+ n_refiner_layers: 2
225
+ n_heads: 15
226
+ n_kv_heads: 15
227
+ norm_eps: 1.0e-05
228
+ qk_norm: true
229
+ rope_theta: 256.0
230
+ t_scale: 1000.0
231
+ use_timestep: true
232
+ predict_target: v
233
+ axes_dims:
234
+ - 16
235
+ - 56
236
+ - 56
237
+ axes_lens:
238
+ - 1024
239
+ - 512
240
+ - 512
241
+ compile_model: true
242
+ attention_backend: null
243
+ transformer_audio:
244
+ arch: zimage
245
+ all_patch_size:
246
+ - 1
247
+ all_f_patch_size:
248
+ - 1
249
+ in_channels: 128
250
+ dim: 1920
251
+ n_layers: 18
252
+ n_refiner_layers: 2
253
+ n_heads: 15
254
+ n_kv_heads: 15
255
+ norm_eps: 1.0e-05
256
+ qk_norm: true
257
+ rope_theta: 256.0
258
+ t_scale: 1000.0
259
+ use_timestep: true
260
+ predict_target: v
261
+ axes_dims:
262
+ - 16
263
+ - 56
264
+ - 56
265
+ axes_lens:
266
+ - 2048
267
+ - 16
268
+ - 16
269
+ compile_model: true
270
+ attention_backend: null
271
+ train:
272
+ seed: 42
273
+ validation_steps: 5000
274
+ validation_prompts:
275
+ - a high-quality photo of a goldfish
276
+ - a high-quality photo of a tiger shark
277
+ - a high-quality photo of an ostrich
278
+ - a high-quality photo of a tabby cat
279
+ validation_num_inference_steps: 20
280
+ validation_guidance_scale: 4.0
281
+ validation_cfg_normalization: false
282
+ validation_cfg_truncation: 1.0
283
+ validation_num_frames: null
284
+ validation_frame_size: null
285
+ validation_fps: null
286
+ validation_negative_prompts: null
287
+ shift_v: 5.0
288
+ shift_a: 3.0
289
+ validation_force_steps:
290
+ - 0
models/dit/t2av/t2av_recon_distill/scheduler/scheduler_config.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "FlowMatchEulerDiscreteScheduler",
3
+ "_diffusers_version": "0.37.1",
4
+ "base_image_seq_len": 256,
5
+ "base_shift": 0.5,
6
+ "invert_sigmas": false,
7
+ "max_image_seq_len": 4096,
8
+ "max_shift": 1.15,
9
+ "num_train_timesteps": 1000,
10
+ "shift": 3.0,
11
+ "shift_terminal": null,
12
+ "stochastic_sampling": false,
13
+ "time_shift_type": "exponential",
14
+ "use_beta_sigmas": false,
15
+ "use_dynamic_shifting": false,
16
+ "use_exponential_sigmas": false,
17
+ "use_karras_sigmas": false
18
+ }
models/dit/t2av/t2av_recon_distill/tokenizer/chat_template.jinja ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- macro render_content(content, do_vision_count, is_system_content=false) %}
4
+ {%- if content is string %}
5
+ {{- content }}
6
+ {%- elif content is iterable and content is not mapping %}
7
+ {%- for item in content %}
8
+ {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
9
+ {%- if is_system_content %}
10
+ {{- raise_exception('System message cannot contain images.') }}
11
+ {%- endif %}
12
+ {%- if do_vision_count %}
13
+ {%- set image_count.value = image_count.value + 1 %}
14
+ {%- endif %}
15
+ {%- if add_vision_id %}
16
+ {{- 'Picture ' ~ image_count.value ~ ': ' }}
17
+ {%- endif %}
18
+ {{- '<|vision_start|><|image_pad|><|vision_end|>' }}
19
+ {%- elif 'video' in item or item.type == 'video' %}
20
+ {%- if is_system_content %}
21
+ {{- raise_exception('System message cannot contain videos.') }}
22
+ {%- endif %}
23
+ {%- if do_vision_count %}
24
+ {%- set video_count.value = video_count.value + 1 %}
25
+ {%- endif %}
26
+ {%- if add_vision_id %}
27
+ {{- 'Video ' ~ video_count.value ~ ': ' }}
28
+ {%- endif %}
29
+ {{- '<|vision_start|><|video_pad|><|vision_end|>' }}
30
+ {%- elif 'text' in item %}
31
+ {{- item.text }}
32
+ {%- else %}
33
+ {{- raise_exception('Unexpected item type in content.') }}
34
+ {%- endif %}
35
+ {%- endfor %}
36
+ {%- elif content is none or content is undefined %}
37
+ {{- '' }}
38
+ {%- else %}
39
+ {{- raise_exception('Unexpected content type.') }}
40
+ {%- endif %}
41
+ {%- endmacro %}
42
+ {%- if not messages %}
43
+ {{- raise_exception('No messages provided.') }}
44
+ {%- endif %}
45
+ {%- if tools and tools is iterable and tools is not mapping %}
46
+ {{- '<|im_start|>system\n' }}
47
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
48
+ {%- for tool in tools %}
49
+ {{- "\n" }}
50
+ {{- tool | tojson }}
51
+ {%- endfor %}
52
+ {{- "\n</tools>" }}
53
+ {{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
54
+ {%- if messages[0].role == 'system' %}
55
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
56
+ {%- if content %}
57
+ {{- '\n\n' + content }}
58
+ {%- endif %}
59
+ {%- endif %}
60
+ {{- '<|im_end|>\n' }}
61
+ {%- else %}
62
+ {%- if messages[0].role == 'system' %}
63
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
64
+ {{- '<|im_start|>system\n' + content + '<|im_end|>\n' }}
65
+ {%- endif %}
66
+ {%- endif %}
67
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
68
+ {%- for message in messages[::-1] %}
69
+ {%- set index = (messages|length - 1) - loop.index0 %}
70
+ {%- if ns.multi_step_tool and message.role == "user" %}
71
+ {%- set content = render_content(message.content, false)|trim %}
72
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
73
+ {%- set ns.multi_step_tool = false %}
74
+ {%- set ns.last_query_index = index %}
75
+ {%- endif %}
76
+ {%- endif %}
77
+ {%- endfor %}
78
+ {%- if ns.multi_step_tool %}
79
+ {{- raise_exception('No user query found in messages.') }}
80
+ {%- endif %}
81
+ {%- for message in messages %}
82
+ {%- set content = render_content(message.content, true)|trim %}
83
+ {%- if message.role == "system" %}
84
+ {%- if not loop.first %}
85
+ {{- raise_exception('System message must be at the beginning.') }}
86
+ {%- endif %}
87
+ {%- elif message.role == "user" %}
88
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
89
+ {%- elif message.role == "assistant" %}
90
+ {%- set reasoning_content = '' %}
91
+ {%- if message.reasoning_content is string %}
92
+ {%- set reasoning_content = message.reasoning_content %}
93
+ {%- else %}
94
+ {%- if '</think>' in content %}
95
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
96
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
97
+ {%- endif %}
98
+ {%- endif %}
99
+ {%- set reasoning_content = reasoning_content|trim %}
100
+ {%- if loop.index0 > ns.last_query_index %}
101
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
102
+ {%- else %}
103
+ {{- '<|im_start|>' + message.role + '\n' + content }}
104
+ {%- endif %}
105
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
106
+ {%- for tool_call in message.tool_calls %}
107
+ {%- if tool_call.function is defined %}
108
+ {%- set tool_call = tool_call.function %}
109
+ {%- endif %}
110
+ {%- if loop.first %}
111
+ {%- if content|trim %}
112
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
113
+ {%- else %}
114
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
115
+ {%- endif %}
116
+ {%- else %}
117
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
118
+ {%- endif %}
119
+ {%- if tool_call.arguments is defined %}
120
+ {%- for args_name, args_value in tool_call.arguments|items %}
121
+ {{- '<parameter=' + args_name + '>\n' }}
122
+ {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}
123
+ {{- args_value }}
124
+ {{- '\n</parameter>\n' }}
125
+ {%- endfor %}
126
+ {%- endif %}
127
+ {{- '</function>\n</tool_call>' }}
128
+ {%- endfor %}
129
+ {%- endif %}
130
+ {{- '<|im_end|>\n' }}
131
+ {%- elif message.role == "tool" %}
132
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
133
+ {{- '<|im_start|>user' }}
134
+ {%- endif %}
135
+ {{- '\n<tool_response>\n' }}
136
+ {{- content }}
137
+ {{- '\n</tool_response>' }}
138
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
139
+ {{- '<|im_end|>\n' }}
140
+ {%- elif loop.last %}
141
+ {{- '<|im_end|>\n' }}
142
+ {%- endif %}
143
+ {%- else %}
144
+ {{- raise_exception('Unexpected message role.') }}
145
+ {%- endif %}
146
+ {%- endfor %}
147
+ {%- if add_generation_prompt %}
148
+ {{- '<|im_start|>assistant\n' }}
149
+ {%- if enable_thinking is defined and enable_thinking is true %}
150
+ {{- '<think>\n' }}
151
+ {%- else %}
152
+ {{- '<think>\n\n</think>\n\n' }}
153
+ {%- endif %}
154
+ {%- endif %}
models/dit/t2av/t2av_recon_distill/tokenizer/tokenizer_config.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "audio_bos_token": "<|audio_start|>",
4
+ "audio_eos_token": "<|audio_end|>",
5
+ "audio_token": "<|audio_pad|>",
6
+ "backend": "tokenizers",
7
+ "bos_token": null,
8
+ "clean_up_tokenization_spaces": false,
9
+ "eos_token": "<|endoftext|>",
10
+ "errors": "replace",
11
+ "image_token": "<|image_pad|>",
12
+ "is_local": false,
13
+ "model_max_length": 262144,
14
+ "model_specific_special_tokens": {
15
+ "audio_bos_token": "<|audio_start|>",
16
+ "audio_eos_token": "<|audio_end|>",
17
+ "audio_token": "<|audio_pad|>",
18
+ "image_token": "<|image_pad|>",
19
+ "video_token": "<|video_pad|>",
20
+ "vision_bos_token": "<|vision_start|>",
21
+ "vision_eos_token": "<|vision_end|>"
22
+ },
23
+ "pad_token": "<|endoftext|>",
24
+ "pretokenize_regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?[\\p{L}\\p{M}]+|\\p{N}| ?[^\\s\\p{L}\\p{M}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
25
+ "split_special_tokens": false,
26
+ "tokenizer_class": "TokenizersBackend",
27
+ "unk_token": null,
28
+ "video_token": "<|video_pad|>",
29
+ "vision_bos_token": "<|vision_start|>",
30
+ "vision_eos_token": "<|vision_end|>"
31
+ }
models/dit/t2av/t2av_recon_distill/transformer_audio/config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "ZImageTransformer2DModel",
3
+ "_diffusers_version": "0.37.1",
4
+ "all_f_patch_size": [
5
+ 1
6
+ ],
7
+ "all_patch_size": [
8
+ 1
9
+ ],
10
+ "axes_dims": [
11
+ 16,
12
+ 56,
13
+ 56
14
+ ],
15
+ "axes_lens": [
16
+ 2048,
17
+ 16,
18
+ 16
19
+ ],
20
+ "cap_feat_dim": 1024,
21
+ "dim": 1920,
22
+ "in_channels": 128,
23
+ "n_heads": 15,
24
+ "n_kv_heads": 15,
25
+ "n_layers": 18,
26
+ "n_refiner_layers": 2,
27
+ "norm_eps": 1e-05,
28
+ "qk_norm": true,
29
+ "rope_theta": 256.0,
30
+ "siglip_feat_dim": null,
31
+ "t_scale": 1000.0
32
+ }
models/dit/t2av/t2av_recon_distill/transformer_video/config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "ZImageTransformer2DModel",
3
+ "_diffusers_version": "0.37.1",
4
+ "all_f_patch_size": [
5
+ 1
6
+ ],
7
+ "all_patch_size": [
8
+ 1
9
+ ],
10
+ "axes_dims": [
11
+ 16,
12
+ 56,
13
+ 56
14
+ ],
15
+ "axes_lens": [
16
+ 1024,
17
+ 512,
18
+ 512
19
+ ],
20
+ "cap_feat_dim": 1024,
21
+ "dim": 1920,
22
+ "in_channels": 48,
23
+ "n_heads": 15,
24
+ "n_kv_heads": 15,
25
+ "n_layers": 18,
26
+ "n_refiner_layers": 2,
27
+ "norm_eps": 1e-05,
28
+ "qk_norm": true,
29
+ "rope_theta": 256.0,
30
+ "siglip_feat_dim": null,
31
+ "t_scale": 1000.0
32
+ }
models/dit/t2av/t2av_recon_distill_avclip/bridges/bridge_config.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bridge_interval": 1,
3
+ "use_asymmetric_ati": false,
4
+ "a2v_window_size": 1,
5
+ "n_bridges": 18,
6
+ "dim": 1920,
7
+ "n_heads": 15,
8
+ "head_dim": 128
9
+ }
models/dit/t2av/t2av_recon_distill_avclip/metadata.json ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "export_format": "omnivae_generation_inference_package_v1",
3
+ "inference_only": true,
4
+ "task": "t2av",
5
+ "name": "t2av_recon_distill_avclip",
6
+ "source_experiment": "2_t2av_recon_distill_avclip_lr2",
7
+ "exported_at_utc": "2026-06-07T21:30:31+00:00",
8
+ "text_encoder_model_name_or_path": "models/text_encoder/Qwen3.5-0.8B-Base",
9
+ "vae_model_name_or_path": "models/vae/audio_video/recon_distill_avclip",
10
+ "required_subdirs": [
11
+ "transformer_video",
12
+ "transformer_audio",
13
+ "bridges",
14
+ "tokenizer",
15
+ "scheduler"
16
+ ],
17
+ "video_vae_model_name_or_path": "models/vae/audio_video/recon_distill_avclip",
18
+ "audio_vae_model_path": "models/vae/audio_only/recon_distill_avclip_ft_decoder",
19
+ "joint_av": true,
20
+ "release_vae_paths_rewritten": true,
21
+ "release_experiment_family": "recon_distill_avclip",
22
+ "release_path_note": "VAE paths are relative to OMNIVAE_RELEASE_ROOT/models/vae. AVCLIP audio branches use ft_decoder checkpoints.",
23
+ "source_step": 200000,
24
+ "release_checkpoint_step": 200000,
25
+ "release_laion_checkpoint_name": "checkpoint-00200000",
26
+ "source_experiment_original_name": "2_t2av_recon_distill_avclip_lr2",
27
+ "source_checkpoint_provenance": "internal training checkpoint path omitted; use release_checkpoint_step and this package directory.",
28
+ "release_package_path": "models/dit/t2av/t2av_recon_distill_avclip"
29
+ }
models/dit/t2av/t2av_recon_distill_avclip/resolved_config.json ADDED
@@ -0,0 +1,337 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "experiment": {
3
+ "name": "t2av_recon_distill_avclip",
4
+ "output_dir": "models/dit/t2av/t2av_recon_distill_avclip"
5
+ },
6
+ "dataset": {
7
+ "type": "av_paired_jsonl",
8
+ "root": "omitted_public_release_path",
9
+ "meta_path": null,
10
+ "jsonl_index_path": null,
11
+ "jsonl_path_field": "video_path",
12
+ "jsonl_prompt_field": "prompt_v2",
13
+ "jsonl_prompt_index_path": null,
14
+ "slave_path": "",
15
+ "base_image_path": "",
16
+ "split": "train",
17
+ "image_size": 256,
18
+ "frame_size": [
19
+ 256,
20
+ 256
21
+ ],
22
+ "num_frames": 121,
23
+ "target_fps": 24.0,
24
+ "decode_backend": "torchcodec",
25
+ "return_uint8": true,
26
+ "center_crop": true,
27
+ "random_flip": false,
28
+ "num_workers": 6,
29
+ "prefetch_factor": 2,
30
+ "pin_memory": true,
31
+ "drop_last": true,
32
+ "max_samples": null,
33
+ "cache_dir": ".cache/omnivae",
34
+ "repeat": 1,
35
+ "recaption_prob": 0.0,
36
+ "captions_file": null,
37
+ "prompt_templates": [
38
+ "a high-quality photo of {label}"
39
+ ],
40
+ "use_full_label": false,
41
+ "metadata_paths": [],
42
+ "dataset_base_path": "/",
43
+ "sample_rate": 48000,
44
+ "num_audio_samples": 242000,
45
+ "max_num_audio_samples": 1440000,
46
+ "mono": true,
47
+ "append_duration_suffix": false,
48
+ "duration_precision": 1,
49
+ "path_field": "video_path",
50
+ "prompt_field": "av_caption",
51
+ "sources": [
52
+ {
53
+ "name": "nonspeech_1000w_g2",
54
+ "path": "data/train/nonspeech_1000w_group2_9376485.jsonl",
55
+ "weight": 0.5
56
+ },
57
+ {
58
+ "name": "speech_1000w_g2",
59
+ "path": "data/train/youtube_speech_10042814.jsonl",
60
+ "weight": 0.35
61
+ },
62
+ {
63
+ "name": "documentary",
64
+ "path": "data/train/documentary_2627844.jsonl",
65
+ "weight": 0.12
66
+ },
67
+ {
68
+ "name": "movies",
69
+ "path": "data/train/movies_8964574.jsonl",
70
+ "weight": 0.05
71
+ },
72
+ {
73
+ "name": "chinese_drama",
74
+ "path": "data/train/chinese_drama_3264550.jsonl",
75
+ "weight": 0.03
76
+ }
77
+ ],
78
+ "task_prefix_enabled": true,
79
+ "min_clip_duration_ratio": 0.99
80
+ },
81
+ "text_encoder": {
82
+ "model_name_or_path": "models/text_encoder/Qwen3.5-0.8B-Base",
83
+ "trust_remote_code": false,
84
+ "torch_dtype": "bfloat16",
85
+ "attn_implementation": "sdpa",
86
+ "disable_qwen3_5_fast_path": true,
87
+ "cache_enabled": false,
88
+ "compile_model": true,
89
+ "max_sequence_length": 512,
90
+ "local_files_only": true
91
+ },
92
+ "scheduler": {
93
+ "model_name_or_path": "models/dit/t2av/t2av_recon_distill_avclip",
94
+ "subfolder": "scheduler",
95
+ "local_files_only": true,
96
+ "use_dynamic_shifting": false
97
+ },
98
+ "transformer": {
99
+ "arch": "zimage",
100
+ "backbone_name_or_path": "Qwen/Qwen3-VL-2B-Instruct",
101
+ "backbone_torch_dtype": "bfloat16",
102
+ "init_from_pretrained_backbone": true,
103
+ "text_config": null,
104
+ "trust_remote_code": false,
105
+ "local_files_only": false,
106
+ "attn_implementation": "flex_attention",
107
+ "max_sequence_length": 512,
108
+ "all_patch_size": [
109
+ 1
110
+ ],
111
+ "all_f_patch_size": [
112
+ 1
113
+ ],
114
+ "in_channels": 16,
115
+ "dim": 2048,
116
+ "n_layers": 18,
117
+ "n_refiner_layers": 2,
118
+ "n_heads": 16,
119
+ "n_kv_heads": 16,
120
+ "norm_eps": 1e-05,
121
+ "qk_norm": true,
122
+ "rope_theta": 256.0,
123
+ "t_scale": 1000.0,
124
+ "use_timestep": true,
125
+ "predict_target": "v",
126
+ "axes_dims": [
127
+ 16,
128
+ 56,
129
+ 56
130
+ ],
131
+ "axes_lens": [
132
+ 1024,
133
+ 512,
134
+ 512
135
+ ],
136
+ "compile_model": true,
137
+ "attention_backend": null,
138
+ "bridge_interval": 1,
139
+ "bridge_enabled": true,
140
+ "use_asymmetric_ati": false,
141
+ "a2v_window_size": 1,
142
+ "compile_bridges": true,
143
+ "compile_mode": "default",
144
+ "compile_fullgraph": false,
145
+ "compile_dynamic": null
146
+ },
147
+ "validation": {
148
+ "modes": [
149
+ "audio_only",
150
+ "video_only",
151
+ "joint_av"
152
+ ],
153
+ "joint_av_prompts": {
154
+ "name": "versebench",
155
+ "jsonl_path": "eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl",
156
+ "text_field": "av_caption",
157
+ "type_field": "type",
158
+ "index_field": "index",
159
+ "task_kind": "t2av",
160
+ "append_duration_suffix": false,
161
+ "max_examples": null
162
+ },
163
+ "video_only_prompts": {
164
+ "name": "t2v_inline",
165
+ "max_examples": null,
166
+ "prompts": [
167
+ "A cinematic documentary shot of a three-dimensional topographical map, clouds drifting over islands, somber historical lighting.",
168
+ "A tense cinematic scene inside a dimly lit historical palace hall, guards rushing through a wooden corridor, dramatic torchlight.",
169
+ "A close-up cinematic drama shot of a young woman lit by cool blue light, anxious expression, soft early 2000s television style.",
170
+ "A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic lighting, gentle camera movement.",
171
+ "A young woman laughing while chatting with a friend at a sunny outdoor cafe.",
172
+ "An old man telling a story to a group of children sitting around him in a park.",
173
+ "A street musician playing guitar and singing on a busy city sidewalk.",
174
+ "A golden retriever running across a grassy field on a bright afternoon.",
175
+ "Cherry blossoms gently falling along a quiet path in spring.",
176
+ "A bowl of steaming noodles on a wooden table in a cozy small restaurant."
177
+ ]
178
+ },
179
+ "audio_only_prompt_sets": [
180
+ {
181
+ "name": "basetts_valid",
182
+ "task_kind": "tts",
183
+ "jsonl_path": "examples/eval/t2a_tts_basetts_sample.jsonl",
184
+ "text_field": "text",
185
+ "type_field": "type",
186
+ "index_field": "index",
187
+ "append_duration_suffix": true,
188
+ "duration_precision": 1,
189
+ "max_examples": 8
190
+ },
191
+ {
192
+ "name": "tta_general_en",
193
+ "task_kind": "tta",
194
+ "jsonl_path": "examples/eval/t2a_tta_general_en.jsonl",
195
+ "text_field": "text",
196
+ "type_field": "type",
197
+ "index_field": "index",
198
+ "append_duration_suffix": true,
199
+ "duration_precision": 1,
200
+ "max_examples": null
201
+ }
202
+ ],
203
+ "num_inference_steps": 50,
204
+ "video_guidance_scale": 4.0,
205
+ "audio_guidance_scale": 4.0,
206
+ "cfg_normalization": false,
207
+ "max_wandb_samples_per_source": 10,
208
+ "cfg_modes": [
209
+ "simple",
210
+ "dual"
211
+ ],
212
+ "video_text_guidance": 4.0,
213
+ "video_modality_guidance": 4.0,
214
+ "audio_text_guidance": 4.0,
215
+ "audio_modality_guidance": 4.0,
216
+ "video_frame_size": [
217
+ 256,
218
+ 256
219
+ ],
220
+ "video_num_frames": 121,
221
+ "video_fps": 24.0,
222
+ "audio_duration_seconds": 5.0417
223
+ },
224
+ "vae": {
225
+ "type": "univae",
226
+ "model_name_or_path": "models/vae/audio_video/recon_distill_avclip",
227
+ "torch_dtype": "bfloat16",
228
+ "local_files_only": true,
229
+ "wan_chunk_mode": "parallel",
230
+ "compile_encode": true,
231
+ "compile_encode_mode": "reduce-overhead",
232
+ "compile_encode_fullgraph": false,
233
+ "branch": "video",
234
+ "use_ema": false
235
+ },
236
+ "audio_vae": {
237
+ "type": "univae",
238
+ "model_path": "models/vae/audio_only/recon_distill_avclip_ft_decoder",
239
+ "hop_length": 960,
240
+ "latent_channels": 128,
241
+ "torch_dtype": "float32",
242
+ "compile_encode": true,
243
+ "compile_encode_fullgraph": false,
244
+ "compile_encode_mode": "reduce-overhead",
245
+ "branch": "audio",
246
+ "use_ema": false
247
+ },
248
+ "transformer_video": {
249
+ "arch": "zimage",
250
+ "all_patch_size": [
251
+ 1
252
+ ],
253
+ "all_f_patch_size": [
254
+ 1
255
+ ],
256
+ "in_channels": 48,
257
+ "dim": 1920,
258
+ "n_layers": 18,
259
+ "n_refiner_layers": 2,
260
+ "n_heads": 15,
261
+ "n_kv_heads": 15,
262
+ "norm_eps": 1e-05,
263
+ "qk_norm": true,
264
+ "rope_theta": 256.0,
265
+ "t_scale": 1000.0,
266
+ "use_timestep": true,
267
+ "predict_target": "v",
268
+ "axes_dims": [
269
+ 16,
270
+ 56,
271
+ 56
272
+ ],
273
+ "axes_lens": [
274
+ 1024,
275
+ 512,
276
+ 512
277
+ ],
278
+ "compile_model": true,
279
+ "attention_backend": null
280
+ },
281
+ "transformer_audio": {
282
+ "arch": "zimage",
283
+ "all_patch_size": [
284
+ 1
285
+ ],
286
+ "all_f_patch_size": [
287
+ 1
288
+ ],
289
+ "in_channels": 128,
290
+ "dim": 1920,
291
+ "n_layers": 18,
292
+ "n_refiner_layers": 2,
293
+ "n_heads": 15,
294
+ "n_kv_heads": 15,
295
+ "norm_eps": 1e-05,
296
+ "qk_norm": true,
297
+ "rope_theta": 256.0,
298
+ "t_scale": 1000.0,
299
+ "use_timestep": true,
300
+ "predict_target": "v",
301
+ "axes_dims": [
302
+ 16,
303
+ 56,
304
+ 56
305
+ ],
306
+ "axes_lens": [
307
+ 2048,
308
+ 16,
309
+ 16
310
+ ],
311
+ "compile_model": true,
312
+ "attention_backend": null
313
+ },
314
+ "train": {
315
+ "seed": 42,
316
+ "validation_steps": 5000,
317
+ "validation_prompts": [
318
+ "a high-quality photo of a goldfish",
319
+ "a high-quality photo of a tiger shark",
320
+ "a high-quality photo of an ostrich",
321
+ "a high-quality photo of a tabby cat"
322
+ ],
323
+ "validation_num_inference_steps": 20,
324
+ "validation_guidance_scale": 4.0,
325
+ "validation_cfg_normalization": false,
326
+ "validation_cfg_truncation": 1.0,
327
+ "validation_num_frames": null,
328
+ "validation_frame_size": null,
329
+ "validation_fps": null,
330
+ "validation_negative_prompts": null,
331
+ "shift_v": 5.0,
332
+ "shift_a": 3.0,
333
+ "validation_force_steps": [
334
+ 0
335
+ ]
336
+ }
337
+ }
models/dit/t2av/t2av_recon_distill_avclip/resolved_config.yaml ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ experiment:
2
+ name: t2av_recon_distill_avclip
3
+ output_dir: models/dit/t2av/t2av_recon_distill_avclip
4
+ dataset:
5
+ type: av_paired_jsonl
6
+ root: omitted_public_release_path
7
+ meta_path: null
8
+ jsonl_index_path: null
9
+ jsonl_path_field: video_path
10
+ jsonl_prompt_field: prompt_v2
11
+ jsonl_prompt_index_path: null
12
+ slave_path: ''
13
+ base_image_path: ''
14
+ split: train
15
+ image_size: 256
16
+ frame_size:
17
+ - 256
18
+ - 256
19
+ num_frames: 121
20
+ target_fps: 24.0
21
+ decode_backend: torchcodec
22
+ return_uint8: true
23
+ center_crop: true
24
+ random_flip: false
25
+ num_workers: 6
26
+ prefetch_factor: 2
27
+ pin_memory: true
28
+ drop_last: true
29
+ max_samples: null
30
+ cache_dir: .cache/omnivae
31
+ repeat: 1
32
+ recaption_prob: 0.0
33
+ captions_file: null
34
+ prompt_templates:
35
+ - a high-quality photo of {label}
36
+ use_full_label: false
37
+ metadata_paths: []
38
+ dataset_base_path: /
39
+ sample_rate: 48000
40
+ num_audio_samples: 242000
41
+ max_num_audio_samples: 1440000
42
+ mono: true
43
+ append_duration_suffix: false
44
+ duration_precision: 1
45
+ path_field: video_path
46
+ prompt_field: av_caption
47
+ sources:
48
+ - name: nonspeech_1000w_g2
49
+ path: data/train/nonspeech_1000w_group2_9376485.jsonl
50
+ weight: 0.5
51
+ - name: speech_1000w_g2
52
+ path: data/train/youtube_speech_10042814.jsonl
53
+ weight: 0.35
54
+ - name: documentary
55
+ path: data/train/documentary_2627844.jsonl
56
+ weight: 0.12
57
+ - name: movies
58
+ path: data/train/movies_8964574.jsonl
59
+ weight: 0.05
60
+ - name: chinese_drama
61
+ path: data/train/chinese_drama_3264550.jsonl
62
+ weight: 0.03
63
+ task_prefix_enabled: true
64
+ min_clip_duration_ratio: 0.99
65
+ text_encoder:
66
+ model_name_or_path: models/text_encoder/Qwen3.5-0.8B-Base
67
+ trust_remote_code: false
68
+ torch_dtype: bfloat16
69
+ attn_implementation: sdpa
70
+ disable_qwen3_5_fast_path: true
71
+ cache_enabled: false
72
+ compile_model: true
73
+ max_sequence_length: 512
74
+ local_files_only: true
75
+ scheduler:
76
+ model_name_or_path: models/dit/t2av/t2av_recon_distill_avclip
77
+ subfolder: scheduler
78
+ local_files_only: true
79
+ use_dynamic_shifting: false
80
+ transformer:
81
+ arch: zimage
82
+ backbone_name_or_path: Qwen/Qwen3-VL-2B-Instruct
83
+ backbone_torch_dtype: bfloat16
84
+ init_from_pretrained_backbone: true
85
+ text_config: null
86
+ trust_remote_code: false
87
+ local_files_only: false
88
+ attn_implementation: flex_attention
89
+ max_sequence_length: 512
90
+ all_patch_size:
91
+ - 1
92
+ all_f_patch_size:
93
+ - 1
94
+ in_channels: 16
95
+ dim: 2048
96
+ n_layers: 18
97
+ n_refiner_layers: 2
98
+ n_heads: 16
99
+ n_kv_heads: 16
100
+ norm_eps: 1.0e-05
101
+ qk_norm: true
102
+ rope_theta: 256.0
103
+ t_scale: 1000.0
104
+ use_timestep: true
105
+ predict_target: v
106
+ axes_dims:
107
+ - 16
108
+ - 56
109
+ - 56
110
+ axes_lens:
111
+ - 1024
112
+ - 512
113
+ - 512
114
+ compile_model: true
115
+ attention_backend: null
116
+ bridge_interval: 1
117
+ bridge_enabled: true
118
+ use_asymmetric_ati: false
119
+ a2v_window_size: 1
120
+ compile_bridges: true
121
+ compile_mode: default
122
+ compile_fullgraph: false
123
+ compile_dynamic: null
124
+ validation:
125
+ modes:
126
+ - audio_only
127
+ - video_only
128
+ - joint_av
129
+ joint_av_prompts:
130
+ name: versebench
131
+ jsonl_path: eval/data/t2av/versebench_minimal/versebench_t2av_infer_minimal.jsonl
132
+ text_field: av_caption
133
+ type_field: type
134
+ index_field: index
135
+ task_kind: t2av
136
+ append_duration_suffix: false
137
+ max_examples: null
138
+ video_only_prompts:
139
+ name: t2v_inline
140
+ max_examples: null
141
+ prompts:
142
+ - A cinematic documentary shot of a three-dimensional topographical map, clouds
143
+ drifting over islands, somber historical lighting.
144
+ - A tense cinematic scene inside a dimly lit historical palace hall, guards rushing
145
+ through a wooden corridor, dramatic torchlight.
146
+ - A close-up cinematic drama shot of a young woman lit by cool blue light, anxious
147
+ expression, soft early 2000s television style.
148
+ - A cinematic wide shot of ocean waves rolling onto a sandy beach at sunset, realistic
149
+ lighting, gentle camera movement.
150
+ - A young woman laughing while chatting with a friend at a sunny outdoor cafe.
151
+ - An old man telling a story to a group of children sitting around him in a park.
152
+ - A street musician playing guitar and singing on a busy city sidewalk.
153
+ - A golden retriever running across a grassy field on a bright afternoon.
154
+ - Cherry blossoms gently falling along a quiet path in spring.
155
+ - A bowl of steaming noodles on a wooden table in a cozy small restaurant.
156
+ audio_only_prompt_sets:
157
+ - name: basetts_valid
158
+ task_kind: tts
159
+ jsonl_path: examples/eval/t2a_tts_basetts_sample.jsonl
160
+ text_field: text
161
+ type_field: type
162
+ index_field: index
163
+ append_duration_suffix: true
164
+ duration_precision: 1
165
+ max_examples: 8
166
+ - name: tta_general_en
167
+ task_kind: tta
168
+ jsonl_path: examples/eval/t2a_tta_general_en.jsonl
169
+ text_field: text
170
+ type_field: type
171
+ index_field: index
172
+ append_duration_suffix: true
173
+ duration_precision: 1
174
+ max_examples: null
175
+ num_inference_steps: 50
176
+ video_guidance_scale: 4.0
177
+ audio_guidance_scale: 4.0
178
+ cfg_normalization: false
179
+ max_wandb_samples_per_source: 10
180
+ cfg_modes:
181
+ - simple
182
+ - dual
183
+ video_text_guidance: 4.0
184
+ video_modality_guidance: 4.0
185
+ audio_text_guidance: 4.0
186
+ audio_modality_guidance: 4.0
187
+ video_frame_size:
188
+ - 256
189
+ - 256
190
+ video_num_frames: 121
191
+ video_fps: 24.0
192
+ audio_duration_seconds: 5.0417
193
+ vae:
194
+ type: univae
195
+ model_name_or_path: models/vae/audio_video/recon_distill_avclip
196
+ torch_dtype: bfloat16
197
+ local_files_only: true
198
+ wan_chunk_mode: parallel
199
+ compile_encode: true
200
+ compile_encode_mode: reduce-overhead
201
+ compile_encode_fullgraph: false
202
+ branch: video
203
+ use_ema: false
204
+ audio_vae:
205
+ type: univae
206
+ model_path: models/vae/audio_only/recon_distill_avclip_ft_decoder
207
+ hop_length: 960
208
+ latent_channels: 128
209
+ torch_dtype: float32
210
+ compile_encode: true
211
+ compile_encode_fullgraph: false
212
+ compile_encode_mode: reduce-overhead
213
+ branch: audio
214
+ use_ema: false
215
+ transformer_video:
216
+ arch: zimage
217
+ all_patch_size:
218
+ - 1
219
+ all_f_patch_size:
220
+ - 1
221
+ in_channels: 48
222
+ dim: 1920
223
+ n_layers: 18
224
+ n_refiner_layers: 2
225
+ n_heads: 15
226
+ n_kv_heads: 15
227
+ norm_eps: 1.0e-05
228
+ qk_norm: true
229
+ rope_theta: 256.0
230
+ t_scale: 1000.0
231
+ use_timestep: true
232
+ predict_target: v
233
+ axes_dims:
234
+ - 16
235
+ - 56
236
+ - 56
237
+ axes_lens:
238
+ - 1024
239
+ - 512
240
+ - 512
241
+ compile_model: true
242
+ attention_backend: null
243
+ transformer_audio:
244
+ arch: zimage
245
+ all_patch_size:
246
+ - 1
247
+ all_f_patch_size:
248
+ - 1
249
+ in_channels: 128
250
+ dim: 1920
251
+ n_layers: 18
252
+ n_refiner_layers: 2
253
+ n_heads: 15
254
+ n_kv_heads: 15
255
+ norm_eps: 1.0e-05
256
+ qk_norm: true
257
+ rope_theta: 256.0
258
+ t_scale: 1000.0
259
+ use_timestep: true
260
+ predict_target: v
261
+ axes_dims:
262
+ - 16
263
+ - 56
264
+ - 56
265
+ axes_lens:
266
+ - 2048
267
+ - 16
268
+ - 16
269
+ compile_model: true
270
+ attention_backend: null
271
+ train:
272
+ seed: 42
273
+ validation_steps: 5000
274
+ validation_prompts:
275
+ - a high-quality photo of a goldfish
276
+ - a high-quality photo of a tiger shark
277
+ - a high-quality photo of an ostrich
278
+ - a high-quality photo of a tabby cat
279
+ validation_num_inference_steps: 20
280
+ validation_guidance_scale: 4.0
281
+ validation_cfg_normalization: false
282
+ validation_cfg_truncation: 1.0
283
+ validation_num_frames: null
284
+ validation_frame_size: null
285
+ validation_fps: null
286
+ validation_negative_prompts: null
287
+ shift_v: 5.0
288
+ shift_a: 3.0
289
+ validation_force_steps:
290
+ - 0
models/dit/t2av/t2av_recon_distill_avclip/scheduler/scheduler_config.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "FlowMatchEulerDiscreteScheduler",
3
+ "_diffusers_version": "0.37.1",
4
+ "base_image_seq_len": 256,
5
+ "base_shift": 0.5,
6
+ "invert_sigmas": false,
7
+ "max_image_seq_len": 4096,
8
+ "max_shift": 1.15,
9
+ "num_train_timesteps": 1000,
10
+ "shift": 3.0,
11
+ "shift_terminal": null,
12
+ "stochastic_sampling": false,
13
+ "time_shift_type": "exponential",
14
+ "use_beta_sigmas": false,
15
+ "use_dynamic_shifting": false,
16
+ "use_exponential_sigmas": false,
17
+ "use_karras_sigmas": false
18
+ }
models/dit/t2av/t2av_recon_distill_avclip/tokenizer/chat_template.jinja ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- macro render_content(content, do_vision_count, is_system_content=false) %}
4
+ {%- if content is string %}
5
+ {{- content }}
6
+ {%- elif content is iterable and content is not mapping %}
7
+ {%- for item in content %}
8
+ {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
9
+ {%- if is_system_content %}
10
+ {{- raise_exception('System message cannot contain images.') }}
11
+ {%- endif %}
12
+ {%- if do_vision_count %}
13
+ {%- set image_count.value = image_count.value + 1 %}
14
+ {%- endif %}
15
+ {%- if add_vision_id %}
16
+ {{- 'Picture ' ~ image_count.value ~ ': ' }}
17
+ {%- endif %}
18
+ {{- '<|vision_start|><|image_pad|><|vision_end|>' }}
19
+ {%- elif 'video' in item or item.type == 'video' %}
20
+ {%- if is_system_content %}
21
+ {{- raise_exception('System message cannot contain videos.') }}
22
+ {%- endif %}
23
+ {%- if do_vision_count %}
24
+ {%- set video_count.value = video_count.value + 1 %}
25
+ {%- endif %}
26
+ {%- if add_vision_id %}
27
+ {{- 'Video ' ~ video_count.value ~ ': ' }}
28
+ {%- endif %}
29
+ {{- '<|vision_start|><|video_pad|><|vision_end|>' }}
30
+ {%- elif 'text' in item %}
31
+ {{- item.text }}
32
+ {%- else %}
33
+ {{- raise_exception('Unexpected item type in content.') }}
34
+ {%- endif %}
35
+ {%- endfor %}
36
+ {%- elif content is none or content is undefined %}
37
+ {{- '' }}
38
+ {%- else %}
39
+ {{- raise_exception('Unexpected content type.') }}
40
+ {%- endif %}
41
+ {%- endmacro %}
42
+ {%- if not messages %}
43
+ {{- raise_exception('No messages provided.') }}
44
+ {%- endif %}
45
+ {%- if tools and tools is iterable and tools is not mapping %}
46
+ {{- '<|im_start|>system\n' }}
47
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
48
+ {%- for tool in tools %}
49
+ {{- "\n" }}
50
+ {{- tool | tojson }}
51
+ {%- endfor %}
52
+ {{- "\n</tools>" }}
53
+ {{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
54
+ {%- if messages[0].role == 'system' %}
55
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
56
+ {%- if content %}
57
+ {{- '\n\n' + content }}
58
+ {%- endif %}
59
+ {%- endif %}
60
+ {{- '<|im_end|>\n' }}
61
+ {%- else %}
62
+ {%- if messages[0].role == 'system' %}
63
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
64
+ {{- '<|im_start|>system\n' + content + '<|im_end|>\n' }}
65
+ {%- endif %}
66
+ {%- endif %}
67
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
68
+ {%- for message in messages[::-1] %}
69
+ {%- set index = (messages|length - 1) - loop.index0 %}
70
+ {%- if ns.multi_step_tool and message.role == "user" %}
71
+ {%- set content = render_content(message.content, false)|trim %}
72
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
73
+ {%- set ns.multi_step_tool = false %}
74
+ {%- set ns.last_query_index = index %}
75
+ {%- endif %}
76
+ {%- endif %}
77
+ {%- endfor %}
78
+ {%- if ns.multi_step_tool %}
79
+ {{- raise_exception('No user query found in messages.') }}
80
+ {%- endif %}
81
+ {%- for message in messages %}
82
+ {%- set content = render_content(message.content, true)|trim %}
83
+ {%- if message.role == "system" %}
84
+ {%- if not loop.first %}
85
+ {{- raise_exception('System message must be at the beginning.') }}
86
+ {%- endif %}
87
+ {%- elif message.role == "user" %}
88
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
89
+ {%- elif message.role == "assistant" %}
90
+ {%- set reasoning_content = '' %}
91
+ {%- if message.reasoning_content is string %}
92
+ {%- set reasoning_content = message.reasoning_content %}
93
+ {%- else %}
94
+ {%- if '</think>' in content %}
95
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
96
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
97
+ {%- endif %}
98
+ {%- endif %}
99
+ {%- set reasoning_content = reasoning_content|trim %}
100
+ {%- if loop.index0 > ns.last_query_index %}
101
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
102
+ {%- else %}
103
+ {{- '<|im_start|>' + message.role + '\n' + content }}
104
+ {%- endif %}
105
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
106
+ {%- for tool_call in message.tool_calls %}
107
+ {%- if tool_call.function is defined %}
108
+ {%- set tool_call = tool_call.function %}
109
+ {%- endif %}
110
+ {%- if loop.first %}
111
+ {%- if content|trim %}
112
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
113
+ {%- else %}
114
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
115
+ {%- endif %}
116
+ {%- else %}
117
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
118
+ {%- endif %}
119
+ {%- if tool_call.arguments is defined %}
120
+ {%- for args_name, args_value in tool_call.arguments|items %}
121
+ {{- '<parameter=' + args_name + '>\n' }}
122
+ {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}
123
+ {{- args_value }}
124
+ {{- '\n</parameter>\n' }}
125
+ {%- endfor %}
126
+ {%- endif %}
127
+ {{- '</function>\n</tool_call>' }}
128
+ {%- endfor %}
129
+ {%- endif %}
130
+ {{- '<|im_end|>\n' }}
131
+ {%- elif message.role == "tool" %}
132
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
133
+ {{- '<|im_start|>user' }}
134
+ {%- endif %}
135
+ {{- '\n<tool_response>\n' }}
136
+ {{- content }}
137
+ {{- '\n</tool_response>' }}
138
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
139
+ {{- '<|im_end|>\n' }}
140
+ {%- elif loop.last %}
141
+ {{- '<|im_end|>\n' }}
142
+ {%- endif %}
143
+ {%- else %}
144
+ {{- raise_exception('Unexpected message role.') }}
145
+ {%- endif %}
146
+ {%- endfor %}
147
+ {%- if add_generation_prompt %}
148
+ {{- '<|im_start|>assistant\n' }}
149
+ {%- if enable_thinking is defined and enable_thinking is true %}
150
+ {{- '<think>\n' }}
151
+ {%- else %}
152
+ {{- '<think>\n\n</think>\n\n' }}
153
+ {%- endif %}
154
+ {%- endif %}
models/dit/t2av/t2av_recon_distill_avclip/tokenizer/tokenizer_config.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "audio_bos_token": "<|audio_start|>",
4
+ "audio_eos_token": "<|audio_end|>",
5
+ "audio_token": "<|audio_pad|>",
6
+ "backend": "tokenizers",
7
+ "bos_token": null,
8
+ "clean_up_tokenization_spaces": false,
9
+ "eos_token": "<|endoftext|>",
10
+ "errors": "replace",
11
+ "image_token": "<|image_pad|>",
12
+ "is_local": false,
13
+ "model_max_length": 262144,
14
+ "model_specific_special_tokens": {
15
+ "audio_bos_token": "<|audio_start|>",
16
+ "audio_eos_token": "<|audio_end|>",
17
+ "audio_token": "<|audio_pad|>",
18
+ "image_token": "<|image_pad|>",
19
+ "video_token": "<|video_pad|>",
20
+ "vision_bos_token": "<|vision_start|>",
21
+ "vision_eos_token": "<|vision_end|>"
22
+ },
23
+ "pad_token": "<|endoftext|>",
24
+ "pretokenize_regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?[\\p{L}\\p{M}]+|\\p{N}| ?[^\\s\\p{L}\\p{M}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
25
+ "split_special_tokens": false,
26
+ "tokenizer_class": "TokenizersBackend",
27
+ "unk_token": null,
28
+ "video_token": "<|video_pad|>",
29
+ "vision_bos_token": "<|vision_start|>",
30
+ "vision_eos_token": "<|vision_end|>"
31
+ }
models/dit/t2av/t2av_recon_distill_avclip/transformer_audio/config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "ZImageTransformer2DModel",
3
+ "_diffusers_version": "0.37.1",
4
+ "all_f_patch_size": [
5
+ 1
6
+ ],
7
+ "all_patch_size": [
8
+ 1
9
+ ],
10
+ "axes_dims": [
11
+ 16,
12
+ 56,
13
+ 56
14
+ ],
15
+ "axes_lens": [
16
+ 2048,
17
+ 16,
18
+ 16
19
+ ],
20
+ "cap_feat_dim": 1024,
21
+ "dim": 1920,
22
+ "in_channels": 128,
23
+ "n_heads": 15,
24
+ "n_kv_heads": 15,
25
+ "n_layers": 18,
26
+ "n_refiner_layers": 2,
27
+ "norm_eps": 1e-05,
28
+ "qk_norm": true,
29
+ "rope_theta": 256.0,
30
+ "siglip_feat_dim": null,
31
+ "t_scale": 1000.0
32
+ }
models/dit/t2av/t2av_recon_distill_avclip/transformer_video/config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "ZImageTransformer2DModel",
3
+ "_diffusers_version": "0.37.1",
4
+ "all_f_patch_size": [
5
+ 1
6
+ ],
7
+ "all_patch_size": [
8
+ 1
9
+ ],
10
+ "axes_dims": [
11
+ 16,
12
+ 56,
13
+ 56
14
+ ],
15
+ "axes_lens": [
16
+ 1024,
17
+ 512,
18
+ 512
19
+ ],
20
+ "cap_feat_dim": 1024,
21
+ "dim": 1920,
22
+ "in_channels": 48,
23
+ "n_heads": 15,
24
+ "n_kv_heads": 15,
25
+ "n_layers": 18,
26
+ "n_refiner_layers": 2,
27
+ "norm_eps": 1e-05,
28
+ "qk_norm": true,
29
+ "rope_theta": 256.0,
30
+ "siglip_feat_dim": null,
31
+ "t_scale": 1000.0
32
+ }
models/vae/audio_only/recon/config.yaml ADDED
@@ -0,0 +1,254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 121
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ audio:
13
+ audio_sample_rate: 48000
14
+ sample_rate: 48000
15
+ encoder_dim: 128
16
+ encoder_rates:
17
+ - 2
18
+ - 3
19
+ - 4
20
+ - 5
21
+ - 8
22
+ latent_dim: 128
23
+ decoder_dim: 2048
24
+ decoder_rates:
25
+ - 8
26
+ - 5
27
+ - 4
28
+ - 3
29
+ - 2
30
+ n_codebooks: 9
31
+ codebook_size: 1024
32
+ codebook_dim: 8
33
+ quantizer_dropout: false
34
+ continuous: true
35
+ pretrained_model_name_or_path: null
36
+ contrastive:
37
+ contrastive_use_mean: true
38
+ embed_dim: 512
39
+ segment_hidden_dim: 1024
40
+ global_hidden_dim: 1024
41
+ segment_count: null
42
+ init_scale: 0.07
43
+ clamp_scale_min: 0.001
44
+ clamp_scale_max: 0.5
45
+ gather_for_loss: true
46
+ num_negatives: 23
47
+ num_negative_videos: 63
48
+ use_sdpa: true
49
+ spatial_pool_mode: mean
50
+ spatial_merge_factor: 4
51
+ transformer_dim: 768
52
+ spatial_transformer_layers: 1
53
+ segment_transformer_layers: 1
54
+ global_transformer_layers: 1
55
+ use_segment_loss: false
56
+ use_global_loss: false
57
+ enabled: false
58
+ distill:
59
+ enabled: false
60
+ video_target_dim: 1152
61
+ image_target_dim: 1152
62
+ audio_target_dim: 1280
63
+ video_spatial_factor: 4
64
+ image_spatial_factor: 4
65
+ temporal_agg_ratio: 3
66
+ audio_distill_type: d_axis
67
+ distill_proj_type: conv
68
+ distill_use_conv3d: false
69
+ distill_proj_layers: 2
70
+ distill_proj_hidden_dim: 256
71
+ distill_proj_before_agg: true
72
+ distill_dim_schedule: fixed
73
+ distill_use_sampled: false
74
+ audio_proj_type: conv
75
+ audio_proj_layers: 2
76
+ audio_proj_hidden_dim: 512
77
+ llm:
78
+ enabled: false
79
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
80
+ freeze_llm: false
81
+ include_first_frame: false
82
+ spatial_merge_factor: 4
83
+ temporal_merge_factor: 1
84
+ patch_embed_dim: 256
85
+ patch_stride: 2
86
+ spatial_merge_size: 2
87
+ audio_ds_hidden: 256
88
+ audio_ds_stride: 2
89
+ audio_inter_dim: 512
90
+ data:
91
+ train:
92
+ metadata_paths:
93
+ train_main: omitted_public_release_path
94
+ metadata_weights:
95
+ train_main: 1.0
96
+ use_file_processor: true
97
+ num_frames: 121
98
+ resolution: 256
99
+ video_frame_sample_rate: 1
100
+ target_fps: 24
101
+ audio_sample_rate: 48000
102
+ num_workers: 4
103
+ prefetch_factor: 2
104
+ val_video:
105
+ video_dir: omitted_public_release_path
106
+ num_frames: 121
107
+ resolution: 256
108
+ video_frame_sample_rate: 1
109
+ target_fps: 24
110
+ max_samples: 1000
111
+ batch_size: 1
112
+ val_audio:
113
+ audio_dir: omitted_public_release_path
114
+ audio_sample_rate: 48000
115
+ max_duration: 5.0
116
+ max_samples: 1000
117
+ batch_size: 1
118
+ val_contrastive:
119
+ jsonl_paths:
120
+ vggsound_valid: data/train/vggsound_valid_filtered.jsonl
121
+ ct_nonspeech: data/train/nonspeech_valid_10000.jsonl
122
+ ct_speech: data/train/speech_valid_10000.jsonl
123
+ num_frames: 121
124
+ resolution: 256
125
+ video_frame_sample_rate: 1
126
+ target_fps: 24
127
+ audio_sample_rate: 48000
128
+ max_samples: 20000
129
+ batch_size: 1
130
+ val_segment_num_negatives:
131
+ - 29
132
+ - 64
133
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
134
+ val_global_num_negatives:
135
+ - 64
136
+ - 256
137
+ training:
138
+ max_steps: 500000
139
+ batch_size: 4
140
+ lr: 1.0e-05
141
+ weight_decay: 0.0001
142
+ betas:
143
+ - 0.9
144
+ - 0.999
145
+ max_grad_norm: 1.0
146
+ gradient_accumulation_steps: 1
147
+ dtype: fp32
148
+ video_vae_dtype: fp32
149
+ audio_vae_dtype: fp32
150
+ contrastive_dtype: bfloat16
151
+ llm_dtype: bfloat16
152
+ gradient_checkpointing: false
153
+ random_start: false
154
+ use_ema: false
155
+ ema_decay: 0.999
156
+ qk_norm: false
157
+ log_steps: 3
158
+ stdout_steps: 10
159
+ eval_steps: 2000
160
+ save_steps: 2000
161
+ max_checkpoints: 5000
162
+ loss:
163
+ use_video_recon: false
164
+ use_audio_recon: true
165
+ use_segment_contrastive: false
166
+ use_global_contrastive: false
167
+ lambda_group_video: 1.0
168
+ lambda_group_audio: 1.0
169
+ lambda_group_contrastive: 1.0
170
+ lambda_video_recon: 1.0
171
+ lambda_video_kl: 0.0165
172
+ lambda_video_lpips: 1.0
173
+ video_loss_reduction: sum
174
+ lambda_audio_mel: 1.0
175
+ lambda_audio_recon: 0.0
176
+ lambda_audio_kl: 0.5
177
+ lambda_segment_contrastive: 1.0
178
+ lambda_global_contrastive: 1.0
179
+ global_contrastive_start_steps: 0
180
+ adaptive_loss_balance: true
181
+ adaptive_balance_audio_ratio: 0.5
182
+ adaptive_balance_contrastive_ratio: 0.5
183
+ adaptive_loss_balance_by_uncertainty: false
184
+ uncertainty_warmup_steps: 100
185
+ use_semantic_distill: false
186
+ encoder_fps: 4
187
+ encoder_resolution: 256
188
+ distill_vision_layer: 18
189
+ distill_audio_layer: 24
190
+ lambda_distill_image_cosine: 1.0
191
+ lambda_distill_image_distance: 1.0
192
+ lambda_distill_video_cosine: 1.0
193
+ lambda_distill_video_distance: 1.0
194
+ lambda_distill_audio_d_axis: 120.0
195
+ lambda_distill_audio_t_axis: 1.0
196
+ distill_w_hyper: 0.1
197
+ distill_audio_type: d_axis
198
+ lambda_group_distill: 1.0
199
+ distill_spatial_norm: true
200
+ distill_spatial_norm_gamma: 0.6
201
+ distill_margin_cosine: 0.0
202
+ distill_margin_distance: 0.25
203
+ distill_use_dist_matrix: false
204
+ adaptive_distill_balance: false
205
+ adaptive_distill_video_ratio: 0.1
206
+ adaptive_distill_audio_ratio: 0.1
207
+ use_llm_caption: false
208
+ lambda_group_llm: 1.0
209
+ lambda_llm_caption: 1.0
210
+ mel_loss_kwargs:
211
+ sample_rate: 48000
212
+ n_mels:
213
+ - 5
214
+ - 10
215
+ - 20
216
+ - 40
217
+ - 80
218
+ - 160
219
+ - 320
220
+ window_lengths:
221
+ - 32
222
+ - 64
223
+ - 128
224
+ - 256
225
+ - 512
226
+ - 1024
227
+ - 2048
228
+ weights:
229
+ - 15
230
+ - 15
231
+ - 15
232
+ - 15
233
+ - 15
234
+ - 15
235
+ - 15
236
+ pow: 1.0
237
+ mel_fmin:
238
+ - 0.0
239
+ - 0.0
240
+ - 0.0
241
+ - 0.0
242
+ - 0.0
243
+ - 0.0
244
+ - 0.0
245
+ mel_fmax:
246
+ - null
247
+ - null
248
+ - null
249
+ - null
250
+ - null
251
+ - null
252
+ - null
253
+ output:
254
+ exp_root: outputs
models/vae/audio_only/recon/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "audio_only",
4
+ "name": "recon",
5
+ "config": "models/vae/audio_only/recon/config.yaml",
6
+ "checkpoint": "models/vae/audio_only/recon/state_dict.pt",
7
+ "notes": "Audio reconstruction VAE checkpoint without training state."
8
+ }
models/vae/audio_only/recon_avclip_ft_decoder/config.yaml ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 121
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ audio:
13
+ audio_sample_rate: 48000
14
+ sample_rate: 48000
15
+ encoder_dim: 128
16
+ encoder_rates:
17
+ - 2
18
+ - 3
19
+ - 4
20
+ - 5
21
+ - 8
22
+ latent_dim: 128
23
+ decoder_dim: 2048
24
+ decoder_rates:
25
+ - 8
26
+ - 5
27
+ - 4
28
+ - 3
29
+ - 2
30
+ n_codebooks: 9
31
+ codebook_size: 1024
32
+ codebook_dim: 8
33
+ quantizer_dropout: false
34
+ continuous: true
35
+ pretrained_model_name_or_path: null
36
+ contrastive:
37
+ contrastive_use_mean: true
38
+ embed_dim: 512
39
+ segment_hidden_dim: 1024
40
+ global_hidden_dim: 1024
41
+ segment_count: null
42
+ init_scale: 0.07
43
+ clamp_scale_min: 0.001
44
+ clamp_scale_max: 0.5
45
+ gather_for_loss: true
46
+ num_negatives: 23
47
+ num_negative_videos: 63
48
+ use_sdpa: true
49
+ spatial_pool_mode: mean
50
+ spatial_merge_factor: 4
51
+ transformer_dim: 768
52
+ spatial_transformer_layers: 1
53
+ segment_transformer_layers: 1
54
+ global_transformer_layers: 1
55
+ use_segment_loss: false
56
+ use_global_loss: false
57
+ enabled: false
58
+ distill:
59
+ enabled: false
60
+ video_target_dim: 1152
61
+ image_target_dim: 1152
62
+ audio_target_dim: 1280
63
+ video_spatial_factor: 4
64
+ image_spatial_factor: 4
65
+ temporal_agg_ratio: 3
66
+ audio_distill_type: d_axis
67
+ distill_proj_type: conv
68
+ distill_use_conv3d: false
69
+ distill_proj_layers: 2
70
+ distill_proj_hidden_dim: 256
71
+ distill_proj_before_agg: true
72
+ distill_dim_schedule: fixed
73
+ distill_use_sampled: false
74
+ audio_proj_type: conv
75
+ audio_proj_layers: 2
76
+ audio_proj_hidden_dim: 512
77
+ llm:
78
+ enabled: false
79
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
80
+ freeze_llm: false
81
+ include_first_frame: false
82
+ spatial_merge_factor: 4
83
+ temporal_merge_factor: 1
84
+ patch_embed_dim: 256
85
+ patch_stride: 2
86
+ spatial_merge_size: 2
87
+ audio_ds_hidden: 256
88
+ audio_ds_stride: 2
89
+ audio_inter_dim: 512
90
+ data:
91
+ train:
92
+ metadata_paths:
93
+ train_main: omitted_public_release_path
94
+ metadata_weights:
95
+ train_main: 1.0
96
+ use_file_processor: true
97
+ num_frames: 121
98
+ resolution: 256
99
+ video_frame_sample_rate: 1
100
+ target_fps: 24
101
+ audio_sample_rate: 48000
102
+ num_workers: 4
103
+ prefetch_factor: 2
104
+ val_video:
105
+ video_dir: omitted_public_release_path
106
+ num_frames: 121
107
+ resolution: 256
108
+ video_frame_sample_rate: 1
109
+ target_fps: 24
110
+ max_samples: 1000
111
+ batch_size: 1
112
+ val_audio:
113
+ audio_dir: omitted_public_release_path
114
+ audio_sample_rate: 48000
115
+ max_duration: 5.0
116
+ max_samples: 1000
117
+ batch_size: 1
118
+ val_contrastive:
119
+ jsonl_paths:
120
+ vggsound_valid: data/train/vggsound_valid_filtered.jsonl
121
+ ct_nonspeech: data/train/nonspeech_valid_10000.jsonl
122
+ ct_speech: data/train/speech_valid_10000.jsonl
123
+ num_frames: 121
124
+ resolution: 256
125
+ video_frame_sample_rate: 1
126
+ target_fps: 24
127
+ audio_sample_rate: 48000
128
+ max_samples: 20000
129
+ batch_size: 1
130
+ val_segment_num_negatives:
131
+ - 29
132
+ - 64
133
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
134
+ val_global_num_negatives:
135
+ - 64
136
+ - 256
137
+ training:
138
+ max_steps: 500000
139
+ batch_size: 4
140
+ lr: 1.0e-05
141
+ weight_decay: 0.0001
142
+ betas:
143
+ - 0.9
144
+ - 0.999
145
+ max_grad_norm: 1.0
146
+ gradient_accumulation_steps: 1
147
+ dtype: fp32
148
+ video_vae_dtype: fp32
149
+ audio_vae_dtype: fp32
150
+ contrastive_dtype: bfloat16
151
+ llm_dtype: bfloat16
152
+ gradient_checkpointing: false
153
+ random_start: false
154
+ use_ema: false
155
+ ema_decay: 0.999
156
+ qk_norm: false
157
+ log_steps: 3
158
+ stdout_steps: 10
159
+ eval_steps: 2000
160
+ save_steps: 2000
161
+ max_checkpoints: 5000
162
+ lr_disc: 0.0005
163
+ loss:
164
+ use_video_recon: false
165
+ use_audio_recon: true
166
+ use_segment_contrastive: false
167
+ use_global_contrastive: false
168
+ lambda_group_video: 1.0
169
+ lambda_group_audio: 1.0
170
+ lambda_group_contrastive: 1.0
171
+ lambda_video_recon: 1.0
172
+ lambda_video_kl: 0.0165
173
+ lambda_video_lpips: 1.0
174
+ video_loss_reduction: sum
175
+ lambda_audio_mel: 1.0
176
+ lambda_audio_recon: 0.0
177
+ lambda_audio_kl: 0.0
178
+ lambda_segment_contrastive: 1.0
179
+ lambda_global_contrastive: 1.0
180
+ global_contrastive_start_steps: 0
181
+ adaptive_loss_balance: true
182
+ adaptive_balance_audio_ratio: 0.5
183
+ adaptive_balance_contrastive_ratio: 0.5
184
+ adaptive_loss_balance_by_uncertainty: false
185
+ uncertainty_warmup_steps: 100
186
+ use_semantic_distill: false
187
+ encoder_fps: 4
188
+ encoder_resolution: 256
189
+ distill_vision_layer: 18
190
+ distill_audio_layer: 24
191
+ lambda_distill_image_cosine: 1.0
192
+ lambda_distill_image_distance: 1.0
193
+ lambda_distill_video_cosine: 1.0
194
+ lambda_distill_video_distance: 1.0
195
+ lambda_distill_audio_d_axis: 120.0
196
+ lambda_distill_audio_t_axis: 1.0
197
+ distill_w_hyper: 0.1
198
+ distill_audio_type: d_axis
199
+ lambda_group_distill: 1.0
200
+ distill_spatial_norm: true
201
+ distill_spatial_norm_gamma: 0.6
202
+ distill_margin_cosine: 0.0
203
+ distill_margin_distance: 0.25
204
+ distill_use_dist_matrix: false
205
+ adaptive_distill_balance: false
206
+ adaptive_distill_video_ratio: 0.1
207
+ adaptive_distill_audio_ratio: 0.1
208
+ use_llm_caption: false
209
+ lambda_group_llm: 1.0
210
+ lambda_llm_caption: 1.0
211
+ mel_loss_kwargs:
212
+ sample_rate: 48000
213
+ n_mels:
214
+ - 5
215
+ - 10
216
+ - 20
217
+ - 40
218
+ - 80
219
+ - 160
220
+ - 320
221
+ window_lengths:
222
+ - 32
223
+ - 64
224
+ - 128
225
+ - 256
226
+ - 512
227
+ - 1024
228
+ - 2048
229
+ weights:
230
+ - 15
231
+ - 15
232
+ - 15
233
+ - 15
234
+ - 15
235
+ - 15
236
+ - 15
237
+ pow: 1.0
238
+ mel_fmin:
239
+ - 0.0
240
+ - 0.0
241
+ - 0.0
242
+ - 0.0
243
+ - 0.0
244
+ - 0.0
245
+ - 0.0
246
+ mel_fmax:
247
+ - null
248
+ - null
249
+ - null
250
+ - null
251
+ - null
252
+ - null
253
+ - null
254
+ freeze_audio_encoder: true
255
+ use_audio_disc: true
256
+ lambda_audio_adv: 1.0
257
+ lambda_audio_feature_matching: 2.0
258
+ output:
259
+ exp_root: outputs
models/vae/audio_only/recon_avclip_ft_decoder/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "audio_only",
4
+ "name": "recon_avclip_ft_decoder",
5
+ "config": "models/vae/audio_only/recon_avclip_ft_decoder/config.yaml",
6
+ "checkpoint": "models/vae/audio_only/recon_avclip_ft_decoder/state_dict.pt",
7
+ "notes": "Audio decoder fine-tuned VAE checkpoint used by T2A/T2AV recon_avclip."
8
+ }
models/vae/audio_only/recon_distill/config.yaml ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 121
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ audio:
13
+ audio_sample_rate: 48000
14
+ sample_rate: 48000
15
+ encoder_dim: 128
16
+ encoder_rates:
17
+ - 2
18
+ - 3
19
+ - 4
20
+ - 5
21
+ - 8
22
+ latent_dim: 128
23
+ decoder_dim: 2048
24
+ decoder_rates:
25
+ - 8
26
+ - 5
27
+ - 4
28
+ - 3
29
+ - 2
30
+ n_codebooks: 9
31
+ codebook_size: 1024
32
+ codebook_dim: 8
33
+ quantizer_dropout: false
34
+ continuous: true
35
+ pretrained_model_name_or_path: null
36
+ contrastive:
37
+ contrastive_use_mean: true
38
+ embed_dim: 512
39
+ segment_hidden_dim: 1024
40
+ global_hidden_dim: 1024
41
+ segment_count: null
42
+ init_scale: 0.07
43
+ clamp_scale_min: 0.001
44
+ clamp_scale_max: 0.5
45
+ gather_for_loss: true
46
+ num_negatives: 23
47
+ num_negative_videos: 63
48
+ use_sdpa: true
49
+ spatial_pool_mode: mean
50
+ spatial_merge_factor: 4
51
+ transformer_dim: 768
52
+ spatial_transformer_layers: 1
53
+ segment_transformer_layers: 1
54
+ global_transformer_layers: 1
55
+ use_segment_loss: false
56
+ use_global_loss: false
57
+ enabled: false
58
+ distill:
59
+ enabled: true
60
+ video_target_dim: 1152
61
+ image_target_dim: 1152
62
+ audio_target_dim: 1280
63
+ video_spatial_factor: 4
64
+ image_spatial_factor: 4
65
+ temporal_agg_ratio: 3
66
+ audio_distill_type: t_axis
67
+ distill_proj_type: conv
68
+ distill_use_conv3d: false
69
+ distill_proj_layers: 2
70
+ distill_proj_hidden_dim: 256
71
+ distill_proj_before_agg: true
72
+ distill_dim_schedule: doubling
73
+ distill_use_sampled: false
74
+ audio_proj_type: conv
75
+ audio_proj_layers: 2
76
+ audio_proj_hidden_dim: 512
77
+ llm:
78
+ enabled: false
79
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
80
+ freeze_llm: false
81
+ include_first_frame: false
82
+ spatial_merge_factor: 4
83
+ temporal_merge_factor: 1
84
+ patch_embed_dim: 256
85
+ patch_stride: 2
86
+ spatial_merge_size: 2
87
+ audio_ds_hidden: 256
88
+ audio_ds_stride: 2
89
+ audio_inter_dim: 512
90
+ data:
91
+ train:
92
+ metadata_paths:
93
+ train_main: omitted_public_release_path
94
+ metadata_weights:
95
+ train_main: 1.0
96
+ use_file_processor: true
97
+ num_frames: 121
98
+ resolution: 256
99
+ video_frame_sample_rate: 1
100
+ target_fps: 24
101
+ audio_sample_rate: 48000
102
+ num_workers: 4
103
+ prefetch_factor: 2
104
+ val_video:
105
+ video_dir: omitted_public_release_path
106
+ num_frames: 121
107
+ resolution: 256
108
+ video_frame_sample_rate: 1
109
+ target_fps: 24
110
+ max_samples: 1000
111
+ batch_size: 1
112
+ val_audio:
113
+ audio_dir: omitted_public_release_path
114
+ audio_sample_rate: 48000
115
+ max_duration: 5.0
116
+ max_samples: 1000
117
+ batch_size: 1
118
+ val_contrastive:
119
+ jsonl_paths:
120
+ vggsound_valid: data/train/vggsound_valid_filtered.jsonl
121
+ ct_nonspeech: data/train/nonspeech_valid_10000.jsonl
122
+ ct_speech: data/train/speech_valid_10000.jsonl
123
+ num_frames: 121
124
+ resolution: 256
125
+ video_frame_sample_rate: 1
126
+ target_fps: 24
127
+ audio_sample_rate: 48000
128
+ max_samples: 20000
129
+ batch_size: 1
130
+ val_segment_num_negatives:
131
+ - 29
132
+ - 64
133
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
134
+ val_global_num_negatives:
135
+ - 64
136
+ - 256
137
+ training:
138
+ max_steps: 500000
139
+ batch_size: 4
140
+ lr: 1.0e-05
141
+ weight_decay: 0.0001
142
+ betas:
143
+ - 0.9
144
+ - 0.999
145
+ max_grad_norm: 1.0
146
+ gradient_accumulation_steps: 1
147
+ dtype: fp32
148
+ video_vae_dtype: fp32
149
+ audio_vae_dtype: fp32
150
+ contrastive_dtype: bfloat16
151
+ llm_dtype: bfloat16
152
+ gradient_checkpointing: false
153
+ random_start: false
154
+ use_ema: false
155
+ ema_decay: 0.999
156
+ qk_norm: false
157
+ log_steps: 3
158
+ stdout_steps: 10
159
+ eval_steps: 2000
160
+ save_steps: 2000
161
+ max_checkpoints: 5000
162
+ lr_disc: 0.0001
163
+ loss:
164
+ use_video_recon: false
165
+ use_audio_recon: true
166
+ use_segment_contrastive: false
167
+ use_global_contrastive: false
168
+ lambda_group_video: 1.0
169
+ lambda_group_audio: 1.0
170
+ lambda_group_contrastive: 1.0
171
+ lambda_video_recon: 1.0
172
+ lambda_video_kl: 0.0165
173
+ lambda_video_lpips: 1.0
174
+ video_loss_reduction: sum
175
+ lambda_audio_mel: 1.0
176
+ lambda_audio_recon: 0.0
177
+ lambda_audio_kl: 0.5
178
+ lambda_segment_contrastive: 1.0
179
+ lambda_global_contrastive: 1.0
180
+ global_contrastive_start_steps: 0
181
+ adaptive_loss_balance: true
182
+ adaptive_balance_audio_ratio: 0.5
183
+ adaptive_balance_contrastive_ratio: 0.5
184
+ adaptive_loss_balance_by_uncertainty: false
185
+ uncertainty_warmup_steps: 100
186
+ use_semantic_distill: true
187
+ encoder_fps: 4
188
+ encoder_resolution: 256
189
+ distill_vision_layer: 18
190
+ distill_audio_layer: 24
191
+ lambda_distill_image_cosine: 1.0
192
+ lambda_distill_image_distance: 1.0
193
+ lambda_distill_video_cosine: 1.0
194
+ lambda_distill_video_distance: 1.0
195
+ lambda_distill_audio_d_axis: 120.0
196
+ lambda_distill_audio_t_axis: 1.0
197
+ distill_w_hyper: 0.1
198
+ distill_audio_type: t_axis
199
+ lambda_group_distill: 1.0
200
+ distill_spatial_norm: true
201
+ distill_spatial_norm_gamma: 0.6
202
+ distill_margin_cosine: 0.0
203
+ distill_margin_distance: 0.25
204
+ distill_use_dist_matrix: false
205
+ adaptive_distill_balance: true
206
+ adaptive_distill_video_ratio: 0.1
207
+ adaptive_distill_audio_ratio: 1.0
208
+ use_llm_caption: false
209
+ lambda_group_llm: 1.0
210
+ lambda_llm_caption: 1.0
211
+ mel_loss_kwargs:
212
+ sample_rate: 48000
213
+ n_mels:
214
+ - 5
215
+ - 10
216
+ - 20
217
+ - 40
218
+ - 80
219
+ - 160
220
+ - 320
221
+ window_lengths:
222
+ - 32
223
+ - 64
224
+ - 128
225
+ - 256
226
+ - 512
227
+ - 1024
228
+ - 2048
229
+ weights:
230
+ - 15
231
+ - 15
232
+ - 15
233
+ - 15
234
+ - 15
235
+ - 15
236
+ - 15
237
+ pow: 1.0
238
+ mel_fmin:
239
+ - 0.0
240
+ - 0.0
241
+ - 0.0
242
+ - 0.0
243
+ - 0.0
244
+ - 0.0
245
+ - 0.0
246
+ mel_fmax:
247
+ - null
248
+ - null
249
+ - null
250
+ - null
251
+ - null
252
+ - null
253
+ - null
254
+ use_audio_disc: true
255
+ lambda_audio_adv: 1.0
256
+ lambda_audio_feature_matching: 1.0
257
+ semantic_model_path: models/text_encoder/Qwen3.5-0.8B-Base
258
+ output:
259
+ exp_root: outputs
models/vae/audio_only/recon_distill/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "audio_only",
4
+ "name": "recon_distill",
5
+ "config": "models/vae/audio_only/recon_distill/config.yaml",
6
+ "checkpoint": "models/vae/audio_only/recon_distill/state_dict.pt",
7
+ "notes": "Distilled audio reconstruction VAE checkpoint without training state."
8
+ }
models/vae/audio_only/recon_distill_avclip_ft_decoder/config.yaml ADDED
@@ -0,0 +1,261 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 121
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ audio:
13
+ audio_sample_rate: 48000
14
+ sample_rate: 48000
15
+ encoder_dim: 128
16
+ encoder_rates:
17
+ - 2
18
+ - 3
19
+ - 4
20
+ - 5
21
+ - 8
22
+ latent_dim: 128
23
+ decoder_dim: 2048
24
+ decoder_rates:
25
+ - 8
26
+ - 5
27
+ - 4
28
+ - 3
29
+ - 2
30
+ n_codebooks: 9
31
+ codebook_size: 1024
32
+ codebook_dim: 8
33
+ quantizer_dropout: false
34
+ continuous: true
35
+ pretrained_model_name_or_path: null
36
+ contrastive:
37
+ contrastive_use_mean: true
38
+ embed_dim: 512
39
+ segment_hidden_dim: 1024
40
+ global_hidden_dim: 1024
41
+ segment_count: null
42
+ init_scale: 0.07
43
+ clamp_scale_min: 0.001
44
+ clamp_scale_max: 0.5
45
+ gather_for_loss: true
46
+ num_negatives: 23
47
+ num_negative_videos: 63
48
+ use_sdpa: true
49
+ spatial_pool_mode: mean
50
+ spatial_merge_factor: 4
51
+ transformer_dim: 768
52
+ spatial_transformer_layers: 1
53
+ segment_transformer_layers: 1
54
+ global_transformer_layers: 1
55
+ use_segment_loss: false
56
+ use_global_loss: false
57
+ enabled: false
58
+ distill:
59
+ enabled: false
60
+ video_target_dim: 1152
61
+ image_target_dim: 1152
62
+ audio_target_dim: 1280
63
+ video_spatial_factor: 4
64
+ image_spatial_factor: 4
65
+ temporal_agg_ratio: 3
66
+ audio_distill_type: d_axis
67
+ distill_proj_type: conv
68
+ distill_use_conv3d: false
69
+ distill_proj_layers: 2
70
+ distill_proj_hidden_dim: 256
71
+ distill_proj_before_agg: true
72
+ distill_dim_schedule: fixed
73
+ distill_use_sampled: false
74
+ audio_proj_type: conv
75
+ audio_proj_layers: 2
76
+ audio_proj_hidden_dim: 512
77
+ llm:
78
+ enabled: false
79
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
80
+ freeze_llm: false
81
+ include_first_frame: false
82
+ spatial_merge_factor: 4
83
+ temporal_merge_factor: 1
84
+ patch_embed_dim: 256
85
+ patch_stride: 2
86
+ spatial_merge_size: 2
87
+ audio_ds_hidden: 256
88
+ audio_ds_stride: 2
89
+ audio_inter_dim: 512
90
+ data:
91
+ train:
92
+ metadata_paths:
93
+ train_main: omitted_public_release_path
94
+ metadata_weights:
95
+ train_main: 1.0
96
+ use_file_processor: true
97
+ num_frames: 121
98
+ resolution: 256
99
+ video_frame_sample_rate: 1
100
+ target_fps: 24
101
+ audio_sample_rate: 48000
102
+ num_workers: 4
103
+ prefetch_factor: 2
104
+ val_video:
105
+ jsonl_paths:
106
+ panda70m_test: data/train/panda70m-test.jsonl
107
+ ucf101_test: data/train/ucf101-test.jsonl
108
+ num_frames: 121
109
+ resolution: 256
110
+ video_frame_sample_rate: 1
111
+ target_fps: 24
112
+ max_samples: 1000
113
+ batch_size: 1
114
+ val_audio:
115
+ audio_dir: omitted_public_release_path
116
+ audio_sample_rate: 48000
117
+ max_duration: 5.0
118
+ max_samples: 1000
119
+ batch_size: 1
120
+ val_contrastive:
121
+ jsonl_paths:
122
+ vggsound_valid: data/train/vggsound_valid_filtered.jsonl
123
+ ct_nonspeech: data/train/nonspeech_valid_10000.jsonl
124
+ ct_speech: data/train/speech_valid_10000.jsonl
125
+ num_frames: 121
126
+ resolution: 256
127
+ video_frame_sample_rate: 1
128
+ target_fps: 24
129
+ audio_sample_rate: 48000
130
+ max_samples: 20000
131
+ batch_size: 1
132
+ val_segment_num_negatives:
133
+ - 29
134
+ - 64
135
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
136
+ val_global_num_negatives:
137
+ - 64
138
+ - 256
139
+ training:
140
+ max_steps: 500000
141
+ batch_size: 4
142
+ lr: 1.0e-05
143
+ weight_decay: 0.0001
144
+ betas:
145
+ - 0.9
146
+ - 0.999
147
+ max_grad_norm: 1.0
148
+ gradient_accumulation_steps: 1
149
+ dtype: fp32
150
+ video_vae_dtype: fp32
151
+ audio_vae_dtype: fp32
152
+ contrastive_dtype: bfloat16
153
+ llm_dtype: bfloat16
154
+ gradient_checkpointing: false
155
+ random_start: false
156
+ use_ema: false
157
+ ema_decay: 0.999
158
+ qk_norm: false
159
+ log_steps: 3
160
+ stdout_steps: 10
161
+ eval_steps: 2000
162
+ save_steps: 2000
163
+ max_checkpoints: 5000
164
+ lr_disc: 0.0005
165
+ loss:
166
+ use_video_recon: false
167
+ use_audio_recon: true
168
+ use_segment_contrastive: false
169
+ use_global_contrastive: false
170
+ lambda_group_video: 1.0
171
+ lambda_group_audio: 1.0
172
+ lambda_group_contrastive: 1.0
173
+ lambda_video_recon: 1.0
174
+ lambda_video_kl: 0.0165
175
+ lambda_video_lpips: 1.0
176
+ video_loss_reduction: sum
177
+ lambda_audio_mel: 1.0
178
+ lambda_audio_recon: 0.0
179
+ lambda_audio_kl: 0.0
180
+ lambda_segment_contrastive: 1.0
181
+ lambda_global_contrastive: 1.0
182
+ global_contrastive_start_steps: 0
183
+ adaptive_loss_balance: true
184
+ adaptive_balance_audio_ratio: 0.5
185
+ adaptive_balance_contrastive_ratio: 0.5
186
+ adaptive_loss_balance_by_uncertainty: false
187
+ uncertainty_warmup_steps: 100
188
+ use_semantic_distill: false
189
+ encoder_fps: 4
190
+ encoder_resolution: 256
191
+ distill_vision_layer: 18
192
+ distill_audio_layer: 24
193
+ lambda_distill_image_cosine: 1.0
194
+ lambda_distill_image_distance: 1.0
195
+ lambda_distill_video_cosine: 1.0
196
+ lambda_distill_video_distance: 1.0
197
+ lambda_distill_audio_d_axis: 120.0
198
+ lambda_distill_audio_t_axis: 1.0
199
+ distill_w_hyper: 0.1
200
+ distill_audio_type: d_axis
201
+ lambda_group_distill: 1.0
202
+ distill_spatial_norm: true
203
+ distill_spatial_norm_gamma: 0.6
204
+ distill_margin_cosine: 0.0
205
+ distill_margin_distance: 0.25
206
+ distill_use_dist_matrix: false
207
+ adaptive_distill_balance: false
208
+ adaptive_distill_video_ratio: 0.1
209
+ adaptive_distill_audio_ratio: 0.1
210
+ use_llm_caption: false
211
+ lambda_group_llm: 1.0
212
+ lambda_llm_caption: 1.0
213
+ mel_loss_kwargs:
214
+ sample_rate: 48000
215
+ n_mels:
216
+ - 5
217
+ - 10
218
+ - 20
219
+ - 40
220
+ - 80
221
+ - 160
222
+ - 320
223
+ window_lengths:
224
+ - 32
225
+ - 64
226
+ - 128
227
+ - 256
228
+ - 512
229
+ - 1024
230
+ - 2048
231
+ weights:
232
+ - 15
233
+ - 15
234
+ - 15
235
+ - 15
236
+ - 15
237
+ - 15
238
+ - 15
239
+ pow: 1.0
240
+ mel_fmin:
241
+ - 0.0
242
+ - 0.0
243
+ - 0.0
244
+ - 0.0
245
+ - 0.0
246
+ - 0.0
247
+ - 0.0
248
+ mel_fmax:
249
+ - null
250
+ - null
251
+ - null
252
+ - null
253
+ - null
254
+ - null
255
+ - null
256
+ freeze_audio_encoder: true
257
+ use_audio_disc: true
258
+ lambda_audio_adv: 1.0
259
+ lambda_audio_feature_matching: 2.0
260
+ output:
261
+ exp_root: outputs
models/vae/audio_only/recon_distill_avclip_ft_decoder/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "audio_only",
4
+ "name": "recon_distill_avclip_ft_decoder",
5
+ "config": "models/vae/audio_only/recon_distill_avclip_ft_decoder/config.yaml",
6
+ "checkpoint": "models/vae/audio_only/recon_distill_avclip_ft_decoder/state_dict.pt",
7
+ "notes": "Audio decoder fine-tuned VAE checkpoint used by T2A/T2AV recon_distill_avclip."
8
+ }
models/vae/audio_video/recon_avclip/config.yaml ADDED
@@ -0,0 +1,364 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 193
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ qk_norm: true
13
+ audio:
14
+ audio_sample_rate: 48000
15
+ sample_rate: 48000
16
+ encoder_dim: 128
17
+ encoder_rates:
18
+ - 2
19
+ - 3
20
+ - 4
21
+ - 5
22
+ - 8
23
+ latent_dim: 128
24
+ decoder_dim: 2048
25
+ decoder_rates:
26
+ - 8
27
+ - 5
28
+ - 4
29
+ - 3
30
+ - 2
31
+ n_codebooks: 9
32
+ codebook_size: 1024
33
+ codebook_dim: 8
34
+ quantizer_dropout: false
35
+ continuous: true
36
+ pretrained_model_name_or_path: null
37
+ contrastive:
38
+ contrastive_type: latent_seg
39
+ contrastive_use_mean: true
40
+ contrastive_grad_scale_video: 1.0
41
+ contrastive_grad_scale_audio: 1.0
42
+ embed_dim: 512
43
+ segment_hidden_dim: 1024
44
+ global_hidden_dim: 1024
45
+ segment_count: null
46
+ init_scale: 0.07
47
+ clamp_scale_min: 0.001
48
+ clamp_scale_max: 0.5
49
+ gather_for_loss: true
50
+ num_negatives: 96
51
+ num_negative_videos: 63
52
+ same_long_video_priority: true
53
+ same_long_video_num_negatives: 48
54
+ num_negatives_with_sibling: null
55
+ use_sdpa: true
56
+ spatial_pool_mode: transformer
57
+ spatial_merge_factor: 2
58
+ transformer_dim: 768
59
+ spatial_transformer_layers: 1
60
+ segment_transformer_layers: 1
61
+ global_transformer_layers: 1
62
+ segment_temporal_pool_mode: conv
63
+ global_temporal_pool_mode: transformer
64
+ spatial_module_size: large
65
+ segment_module_size: large
66
+ global_module_size: large
67
+ num_negatives_no_sibling: 24
68
+ use_segment_loss: true
69
+ use_global_loss: false
70
+ enabled: true
71
+ qk_norm: true
72
+ distill:
73
+ enabled: false
74
+ video_target_dim: 1152
75
+ image_target_dim: 1152
76
+ audio_target_dim: 1280
77
+ video_spatial_factor: 4
78
+ image_spatial_factor: 4
79
+ temporal_agg_ratio: 3
80
+ audio_distill_type: d_axis
81
+ distill_proj_type: conv
82
+ distill_use_conv3d: false
83
+ distill_proj_layers: 2
84
+ distill_proj_hidden_dim: 256
85
+ distill_proj_before_agg: true
86
+ distill_dim_schedule: fixed
87
+ distill_use_sampled: false
88
+ audio_proj_type: conv
89
+ audio_proj_layers: 2
90
+ audio_proj_hidden_dim: 512
91
+ llm:
92
+ enabled: false
93
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
94
+ freeze_llm: false
95
+ include_first_frame: false
96
+ spatial_merge_factor: 4
97
+ temporal_merge_factor: 1
98
+ patch_embed_dim: 256
99
+ patch_stride: 2
100
+ spatial_merge_size: 2
101
+ audio_ds_hidden: 256
102
+ audio_ds_stride: 2
103
+ audio_inter_dim: 512
104
+ data:
105
+ train:
106
+ metadata_paths:
107
+ train_main: omitted_public_release_path
108
+ metadata_weights:
109
+ train_main: 1.0
110
+ use_file_processor: true
111
+ num_frames: 193
112
+ resolution: 256
113
+ video_frame_sample_rate: 1
114
+ target_fps: 24
115
+ audio_sample_rate: 48000
116
+ num_workers: 4
117
+ prefetch_factor: 2
118
+ use_image_video_alter: false
119
+ image_loader: jsonl
120
+ image_data_mixture_yaml: null
121
+ image_dataset_path: null
122
+ image_relaion: null
123
+ image_batch_size: null
124
+ video_batch_size: null
125
+ image_video_weights:
126
+ - 1
127
+ - 1
128
+ val_video:
129
+ video_dir: omitted_public_release_path
130
+ num_frames: 193
131
+ resolution: 256
132
+ video_frame_sample_rate: 1
133
+ target_fps: 24
134
+ max_samples: 1000
135
+ batch_size: 1
136
+ val_audio:
137
+ audio_dir: omitted_public_release_path
138
+ audio_sample_rate: 48000
139
+ max_duration: 5.0
140
+ max_samples: 1000
141
+ batch_size: 1
142
+ val_contrastive:
143
+ jsonl_paths:
144
+ vggsound_valid: data/train/vggsound_valid_filtered_original.jsonl
145
+ ct_nonspeech: data/train/nonspeech_valid_10000_original.jsonl
146
+ ct_speech: data/train/speech_valid_10000_orig.jsonl
147
+ num_frames: 193
148
+ resolution: 256
149
+ video_frame_sample_rate: 1
150
+ target_fps: 24
151
+ audio_sample_rate: 48000
152
+ max_samples: 20000
153
+ batch_size: 1
154
+ val_segment_num_negatives:
155
+ - 29
156
+ - 64
157
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
158
+ val_global_num_negatives:
159
+ - 64
160
+ - 256
161
+ training:
162
+ max_steps: 200000
163
+ batch_size: 1
164
+ lr: 0.0001
165
+ weight_decay: 0.0001
166
+ betas:
167
+ - 0.9
168
+ - 0.999
169
+ lr_video_vae: 2.0e-05
170
+ lr_audio_vae: 1.0e-05
171
+ lr_contrastive_head: null
172
+ lr_llm_caption_head: null
173
+ lr_distill_proj: null
174
+ lr_video_logvar: null
175
+ max_grad_norm: 1.0
176
+ gradient_accumulation_steps: 1
177
+ dtype: fp32
178
+ video_vae_dtype: bf16
179
+ audio_vae_dtype: fp32
180
+ contrastive_dtype: bfloat16
181
+ llm_dtype: bfloat16
182
+ lr_disc: 0.0001
183
+ disc_betas:
184
+ - 0.9
185
+ - 0.99
186
+ disc_weight_decay: 0.0
187
+ disc_max_grad_norm: null
188
+ disc_dtype: fp32
189
+ qk_norm: true
190
+ warmup_steps: 4000
191
+ lr_video_vae_warmup_steps: 6000
192
+ lr_video_vae_total_steps: null
193
+ lr_video_vae_start_step: null
194
+ lr_video_vae_min_ratio: 0.1
195
+ lr_audio_vae_warmup_steps: null
196
+ lr_audio_vae_total_steps: null
197
+ lr_audio_vae_start_step: null
198
+ lr_audio_vae_min_ratio: null
199
+ gradient_checkpointing: true
200
+ random_start: false
201
+ use_ema: false
202
+ ema_decay: 0.999
203
+ log_steps: 3
204
+ stdout_steps: 10
205
+ eval_steps: 2000
206
+ save_steps: 2000
207
+ max_checkpoints: 5000
208
+ reset_scheduler_on_resume: true
209
+ loss:
210
+ use_video_recon: true
211
+ use_audio_recon: true
212
+ use_segment_contrastive: true
213
+ use_global_contrastive: false
214
+ lambda_group_video: 1.0
215
+ lambda_group_audio: 1.0
216
+ lambda_group_contrastive: 1.0
217
+ lambda_video_recon: 1.0
218
+ lambda_video_kl: 0.0001
219
+ lambda_video_lpips: 1.0
220
+ video_loss_reduction: sum
221
+ lambda_audio_mel: 1.0
222
+ lambda_audio_recon: 1.0
223
+ lambda_audio_kl: 0.5
224
+ use_audio_disc: false
225
+ audio_disc_start_step: 0
226
+ lambda_audio_adv: 1.0
227
+ lambda_audio_feature_matching: 1.0
228
+ audio_disc_params:
229
+ mpd: {}
230
+ msd: {}
231
+ mstftd:
232
+ filters: 32
233
+ n_ffts:
234
+ - 1024
235
+ - 2048
236
+ - 512
237
+ - 256
238
+ - 128
239
+ hop_lengths:
240
+ - 256
241
+ - 512
242
+ - 128
243
+ - 64
244
+ - 32
245
+ win_lengths:
246
+ - 1024
247
+ - 2048
248
+ - 512
249
+ - 256
250
+ - 128
251
+ use_video_disc: false
252
+ video_disc_start_step: 0
253
+ lambda_video_adv: 0.5
254
+ video_disc_loss_type: hinge
255
+ video_disc_adaptive_weight: false
256
+ distill_every_steps: false
257
+ video_disc_params:
258
+ input_nc: 3
259
+ ndf: 64
260
+ n_layers: 3
261
+ use_actnorm: false
262
+ lambda_segment_contrastive: 1.0
263
+ lambda_global_contrastive: 1.0
264
+ global_contrastive_start_steps: 0
265
+ video_loss_clamp: false
266
+ video_recon_clamp_max: 8000.0
267
+ video_lpips_clamp_max: 0.25
268
+ video_kl_clamp_max: 6000.0
269
+ adaptive_loss_balance: false
270
+ adaptive_balance_audio_ratio: 0.5
271
+ adaptive_balance_contrastive_ratio: 0.5
272
+ adaptive_loss_balance_by_uncertainty: false
273
+ uncertainty_warmup_steps: 100
274
+ adaptive_loss_balance_v2: true
275
+ adaptive_anchor_source: contrastive
276
+ adaptive_anchor_ema_decay: 0.99
277
+ adaptive_anchor_warmup_steps: 200
278
+ adaptive_scale_clamp_min: 0.001
279
+ adaptive_scale_clamp_max: 100.0
280
+ adaptive_ratio_video: 1.0
281
+ adaptive_ratio_audio: 1.0
282
+ adaptive_ratio_contrastive: 1.5
283
+ adaptive_anchor_source_stage1: contrastive
284
+ adaptive_ratio_video_stage1: 0.0
285
+ adaptive_ratio_audio_stage1: 1.0
286
+ adaptive_ratio_contrastive_stage1: 2.0
287
+ adaptive_v2_stage2_use_gradient: false
288
+ adaptive_v2_stage2_blend_steps: 0
289
+ gradient_ratio_video_stage2: null
290
+ gradient_ratio_audio_stage2: null
291
+ freeze_video_vae: true
292
+ freeze_video_vae_until_step: 20000
293
+ freeze_audio_vae: false
294
+ freeze_audio_vae_until_step: 0
295
+ use_semantic_distill: false
296
+ encoder_fps: 4
297
+ encoder_resolution: 256
298
+ distill_vision_layer: 18
299
+ distill_audio_layer: 24
300
+ lambda_distill_image_cosine: 1.0
301
+ lambda_distill_image_distance: 1.0
302
+ lambda_distill_video_cosine: 1.0
303
+ lambda_distill_video_distance: 1.0
304
+ lambda_distill_audio_d_axis: 120.0
305
+ lambda_distill_audio_t_axis: 1.0
306
+ distill_w_hyper: 0.1
307
+ distill_audio_type: d_axis
308
+ lambda_group_distill: 1.0
309
+ distill_spatial_norm: true
310
+ distill_spatial_norm_gamma: 0.6
311
+ distill_margin_cosine: 0.0
312
+ distill_margin_distance: 0.25
313
+ distill_use_dist_matrix: false
314
+ adaptive_distill_balance: false
315
+ adaptive_distill_video_ratio: 0.1
316
+ adaptive_distill_audio_ratio: 0.1
317
+ use_llm_caption: false
318
+ lambda_group_llm: 1.0
319
+ lambda_llm_caption: 1.0
320
+ mel_loss_kwargs:
321
+ sample_rate: 48000
322
+ n_mels:
323
+ - 5
324
+ - 10
325
+ - 20
326
+ - 40
327
+ - 80
328
+ - 160
329
+ - 320
330
+ window_lengths:
331
+ - 32
332
+ - 64
333
+ - 128
334
+ - 256
335
+ - 512
336
+ - 1024
337
+ - 2048
338
+ weights:
339
+ - 15
340
+ - 15
341
+ - 15
342
+ - 15
343
+ - 15
344
+ - 15
345
+ - 15
346
+ pow: 1.0
347
+ mel_fmin:
348
+ - 0.0
349
+ - 0.0
350
+ - 0.0
351
+ - 0.0
352
+ - 0.0
353
+ - 0.0
354
+ - 0.0
355
+ mel_fmax:
356
+ - null
357
+ - null
358
+ - null
359
+ - null
360
+ - null
361
+ - null
362
+ - null
363
+ output:
364
+ exp_root: outputs
models/vae/audio_video/recon_avclip/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "audio_video",
4
+ "name": "recon_avclip",
5
+ "config": "models/vae/audio_video/recon_avclip/config.yaml",
6
+ "checkpoint": "models/vae/audio_video/recon_avclip/state_dict.pt",
7
+ "notes": "Unified audio-video VAE checkpoint without training state."
8
+ }
models/vae/audio_video/recon_distill_avclip/config.yaml ADDED
@@ -0,0 +1,367 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 193
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ qk_norm: true
13
+ audio:
14
+ audio_sample_rate: 48000
15
+ sample_rate: 48000
16
+ encoder_dim: 128
17
+ encoder_rates:
18
+ - 2
19
+ - 3
20
+ - 4
21
+ - 5
22
+ - 8
23
+ latent_dim: 128
24
+ decoder_dim: 2048
25
+ decoder_rates:
26
+ - 8
27
+ - 5
28
+ - 4
29
+ - 3
30
+ - 2
31
+ n_codebooks: 9
32
+ codebook_size: 1024
33
+ codebook_dim: 8
34
+ quantizer_dropout: false
35
+ continuous: true
36
+ pretrained_model_name_or_path: null
37
+ contrastive:
38
+ contrastive_type: latent_seg
39
+ contrastive_use_mean: true
40
+ contrastive_grad_scale_video: 1.0
41
+ contrastive_grad_scale_audio: 1.0
42
+ embed_dim: 512
43
+ segment_hidden_dim: 1024
44
+ global_hidden_dim: 1024
45
+ segment_count: null
46
+ init_scale: 0.07
47
+ clamp_scale_min: 0.001
48
+ clamp_scale_max: 0.5
49
+ gather_for_loss: true
50
+ num_negatives: 96
51
+ num_negative_videos: 63
52
+ same_long_video_priority: true
53
+ same_long_video_num_negatives: 48
54
+ num_negatives_with_sibling: null
55
+ use_sdpa: true
56
+ spatial_pool_mode: transformer
57
+ spatial_merge_factor: 2
58
+ transformer_dim: 768
59
+ spatial_transformer_layers: 1
60
+ segment_transformer_layers: 1
61
+ global_transformer_layers: 1
62
+ segment_temporal_pool_mode: conv
63
+ global_temporal_pool_mode: transformer
64
+ spatial_module_size: large
65
+ segment_module_size: large
66
+ global_module_size: large
67
+ num_negatives_no_sibling: 24
68
+ use_segment_loss: true
69
+ use_global_loss: false
70
+ enabled: true
71
+ qk_norm: true
72
+ distill:
73
+ enabled: true
74
+ video_target_dim: 1152
75
+ image_target_dim: 1152
76
+ audio_target_dim: 1280
77
+ video_spatial_factor: 4
78
+ image_spatial_factor: 4
79
+ temporal_agg_ratio: 3
80
+ audio_distill_type: t_axis
81
+ distill_proj_type: conv
82
+ distill_use_conv3d: false
83
+ distill_proj_layers: 2
84
+ distill_proj_hidden_dim: 256
85
+ distill_proj_before_agg: true
86
+ distill_dim_schedule: doubling
87
+ distill_use_sampled: false
88
+ audio_proj_type: conv
89
+ audio_proj_layers: 2
90
+ audio_proj_hidden_dim: 512
91
+ llm:
92
+ enabled: false
93
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
94
+ freeze_llm: false
95
+ include_first_frame: false
96
+ spatial_merge_factor: 4
97
+ temporal_merge_factor: 1
98
+ patch_embed_dim: 256
99
+ patch_stride: 2
100
+ spatial_merge_size: 2
101
+ audio_ds_hidden: 256
102
+ audio_ds_stride: 2
103
+ audio_inter_dim: 512
104
+ data:
105
+ train:
106
+ metadata_paths:
107
+ train_main: omitted_public_release_path
108
+ metadata_weights:
109
+ train_main: 1.0
110
+ use_file_processor: true
111
+ num_frames: 193
112
+ resolution: 256
113
+ video_frame_sample_rate: 1
114
+ target_fps: 24
115
+ audio_sample_rate: 48000
116
+ num_workers: 4
117
+ prefetch_factor: 2
118
+ use_image_video_alter: false
119
+ image_loader: jsonl
120
+ image_data_mixture_yaml: null
121
+ image_dataset_path: null
122
+ image_relaion: null
123
+ image_batch_size: null
124
+ video_batch_size: null
125
+ image_video_weights:
126
+ - 1
127
+ - 1
128
+ val_video:
129
+ video_dir: omitted_public_release_path
130
+ num_frames: 193
131
+ resolution: 256
132
+ video_frame_sample_rate: 1
133
+ target_fps: 24
134
+ max_samples: 1000
135
+ batch_size: 1
136
+ val_audio:
137
+ audio_dir: omitted_public_release_path
138
+ audio_sample_rate: 48000
139
+ max_duration: 5.0
140
+ max_samples: 1000
141
+ batch_size: 1
142
+ val_contrastive:
143
+ jsonl_paths:
144
+ vggsound_valid: data/train/vggsound_valid_filtered_original.jsonl
145
+ ct_nonspeech: data/train/nonspeech_valid_10000_original.jsonl
146
+ ct_speech: data/train/speech_valid_10000_orig.jsonl
147
+ num_frames: 193
148
+ resolution: 256
149
+ video_frame_sample_rate: 1
150
+ target_fps: 24
151
+ audio_sample_rate: 48000
152
+ max_samples: 20000
153
+ batch_size: 1
154
+ val_segment_num_negatives:
155
+ - 29
156
+ - 64
157
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
158
+ val_global_num_negatives:
159
+ - 64
160
+ - 256
161
+ training:
162
+ max_steps: 200000
163
+ batch_size: 1
164
+ lr: 0.0001
165
+ weight_decay: 0.0001
166
+ betas:
167
+ - 0.9
168
+ - 0.999
169
+ lr_video_vae: 2.0e-05
170
+ lr_audio_vae: 5.0e-05
171
+ lr_contrastive_head: null
172
+ lr_llm_caption_head: null
173
+ lr_distill_proj: null
174
+ lr_video_logvar: null
175
+ max_grad_norm: 1.0
176
+ gradient_accumulation_steps: 1
177
+ dtype: fp32
178
+ video_vae_dtype: bf16
179
+ audio_vae_dtype: fp32
180
+ contrastive_dtype: bfloat16
181
+ llm_dtype: bfloat16
182
+ lr_disc: 0.0001
183
+ disc_betas:
184
+ - 0.9
185
+ - 0.99
186
+ disc_weight_decay: 0.0
187
+ disc_max_grad_norm: null
188
+ disc_dtype: fp32
189
+ qk_norm: true
190
+ warmup_steps: 4000
191
+ lr_video_vae_warmup_steps: 6000
192
+ lr_video_vae_total_steps: null
193
+ lr_video_vae_start_step: null
194
+ lr_video_vae_min_ratio: 0.1
195
+ lr_audio_vae_warmup_steps: null
196
+ lr_audio_vae_total_steps: null
197
+ lr_audio_vae_start_step: null
198
+ lr_audio_vae_min_ratio: null
199
+ gradient_checkpointing: true
200
+ random_start: false
201
+ use_ema: false
202
+ ema_decay: 0.999
203
+ log_steps: 3
204
+ stdout_steps: 10
205
+ eval_steps: 2000
206
+ save_steps: 2000
207
+ max_checkpoints: 5000
208
+ reset_scheduler_on_resume: true
209
+ loss:
210
+ use_video_recon: true
211
+ use_audio_recon: true
212
+ use_segment_contrastive: true
213
+ use_global_contrastive: false
214
+ lambda_group_video: 1.0
215
+ lambda_group_audio: 1.0
216
+ lambda_group_contrastive: 1.0
217
+ lambda_video_recon: 1.0
218
+ lambda_video_kl: 0.0001
219
+ lambda_video_lpips: 1.0
220
+ video_loss_reduction: sum
221
+ lambda_audio_mel: 1.0
222
+ lambda_audio_recon: 1.0
223
+ lambda_audio_kl: 0.5
224
+ use_audio_disc: false
225
+ audio_disc_start_step: 0
226
+ lambda_audio_adv: 1.0
227
+ lambda_audio_feature_matching: 1.0
228
+ audio_disc_params:
229
+ mpd: {}
230
+ msd: {}
231
+ mstftd:
232
+ filters: 32
233
+ n_ffts:
234
+ - 1024
235
+ - 2048
236
+ - 512
237
+ - 256
238
+ - 128
239
+ hop_lengths:
240
+ - 256
241
+ - 512
242
+ - 128
243
+ - 64
244
+ - 32
245
+ win_lengths:
246
+ - 1024
247
+ - 2048
248
+ - 512
249
+ - 256
250
+ - 128
251
+ use_video_disc: false
252
+ video_disc_start_step: 0
253
+ lambda_video_adv: 0.5
254
+ video_disc_loss_type: hinge
255
+ video_disc_adaptive_weight: false
256
+ distill_every_steps: false
257
+ video_disc_params:
258
+ input_nc: 3
259
+ ndf: 64
260
+ n_layers: 3
261
+ use_actnorm: false
262
+ lambda_segment_contrastive: 1.0
263
+ lambda_global_contrastive: 1.0
264
+ global_contrastive_start_steps: 0
265
+ video_loss_clamp: false
266
+ video_recon_clamp_max: 8000.0
267
+ video_lpips_clamp_max: 0.25
268
+ video_kl_clamp_max: 6000.0
269
+ adaptive_loss_balance: false
270
+ adaptive_balance_audio_ratio: 0.5
271
+ adaptive_balance_contrastive_ratio: 0.5
272
+ adaptive_loss_balance_by_uncertainty: false
273
+ uncertainty_warmup_steps: 100
274
+ adaptive_loss_balance_v2: true
275
+ adaptive_anchor_source: contrastive
276
+ adaptive_anchor_ema_decay: 0.99
277
+ adaptive_anchor_warmup_steps: 200
278
+ adaptive_scale_clamp_min: 0.001
279
+ adaptive_scale_clamp_max: 100.0
280
+ adaptive_ratio_video: 1.0
281
+ adaptive_ratio_audio: 1.0
282
+ adaptive_ratio_contrastive: 1.5
283
+ adaptive_anchor_source_stage1: contrastive
284
+ adaptive_ratio_video_stage1: 0.0
285
+ adaptive_ratio_audio_stage1: 1.0
286
+ adaptive_ratio_contrastive_stage1: 2.0
287
+ adaptive_v2_stage2_use_gradient: false
288
+ adaptive_v2_stage2_blend_steps: 0
289
+ gradient_ratio_video_stage2: null
290
+ gradient_ratio_audio_stage2: null
291
+ freeze_video_vae: true
292
+ freeze_video_vae_until_step: 20000
293
+ freeze_audio_vae: false
294
+ freeze_audio_vae_until_step: 0
295
+ use_semantic_distill: true
296
+ encoder_fps: 4.0
297
+ encoder_resolution: 256
298
+ distill_vision_layer: 18
299
+ distill_audio_layer: 24
300
+ lambda_distill_image_cosine: 1.0
301
+ lambda_distill_image_distance: 1.0
302
+ lambda_distill_video_cosine: 1.0
303
+ lambda_distill_video_distance: 1.0
304
+ lambda_distill_audio_d_axis: 120.0
305
+ lambda_distill_audio_t_axis: 1.0
306
+ distill_w_hyper: 0.1
307
+ distill_audio_type: t_axis
308
+ lambda_group_distill: 1.0
309
+ distill_spatial_norm: true
310
+ distill_spatial_norm_gamma: 0.7
311
+ distill_margin_cosine: 0.0
312
+ distill_margin_distance: 0.25
313
+ distill_use_dist_matrix: false
314
+ adaptive_distill_balance: true
315
+ adaptive_distill_video_ratio: 0.2
316
+ adaptive_distill_audio_ratio: 0.2
317
+ use_llm_caption: false
318
+ lambda_group_llm: 1.0
319
+ lambda_llm_caption: 1.0
320
+ mel_loss_kwargs:
321
+ sample_rate: 48000
322
+ n_mels:
323
+ - 5
324
+ - 10
325
+ - 20
326
+ - 40
327
+ - 80
328
+ - 160
329
+ - 320
330
+ window_lengths:
331
+ - 32
332
+ - 64
333
+ - 128
334
+ - 256
335
+ - 512
336
+ - 1024
337
+ - 2048
338
+ weights:
339
+ - 15
340
+ - 15
341
+ - 15
342
+ - 15
343
+ - 15
344
+ - 15
345
+ - 15
346
+ pow: 1.0
347
+ mel_fmin:
348
+ - 0.0
349
+ - 0.0
350
+ - 0.0
351
+ - 0.0
352
+ - 0.0
353
+ - 0.0
354
+ - 0.0
355
+ mel_fmax:
356
+ - null
357
+ - null
358
+ - null
359
+ - null
360
+ - null
361
+ - null
362
+ - null
363
+ video_distill_start_step: 20000
364
+ audio_distill_start_step: 0
365
+ semantic_model_path: models/text_encoder/Qwen3.5-0.8B-Base
366
+ output:
367
+ exp_root: outputs
models/vae/audio_video/recon_distill_avclip/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "audio_video",
4
+ "name": "recon_distill_avclip",
5
+ "config": "models/vae/audio_video/recon_distill_avclip/config.yaml",
6
+ "checkpoint": "models/vae/audio_video/recon_distill_avclip/state_dict.pt",
7
+ "notes": "Unified distilled audio-video VAE checkpoint without training state."
8
+ }
models/vae/manifest.json ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "modality": "video_only",
4
+ "name": "recon",
5
+ "path": "models/vae/video_only/recon",
6
+ "relative_path": "models/vae/video_only/recon",
7
+ "config": "models/vae/video_only/recon/config.yaml",
8
+ "checkpoint": "models/vae/video_only/recon/state_dict.pt"
9
+ },
10
+ {
11
+ "modality": "video_only",
12
+ "name": "recon_distill",
13
+ "path": "models/vae/video_only/recon_distill",
14
+ "relative_path": "models/vae/video_only/recon_distill",
15
+ "config": "models/vae/video_only/recon_distill/config.yaml",
16
+ "checkpoint": "models/vae/video_only/recon_distill/state_dict.pt"
17
+ },
18
+ {
19
+ "modality": "audio_only",
20
+ "name": "recon",
21
+ "path": "models/vae/audio_only/recon",
22
+ "relative_path": "models/vae/audio_only/recon",
23
+ "config": "models/vae/audio_only/recon/config.yaml",
24
+ "checkpoint": "models/vae/audio_only/recon/state_dict.pt"
25
+ },
26
+ {
27
+ "modality": "audio_only",
28
+ "name": "recon_distill",
29
+ "path": "models/vae/audio_only/recon_distill",
30
+ "relative_path": "models/vae/audio_only/recon_distill",
31
+ "config": "models/vae/audio_only/recon_distill/config.yaml",
32
+ "checkpoint": "models/vae/audio_only/recon_distill/state_dict.pt"
33
+ },
34
+ {
35
+ "modality": "audio_only",
36
+ "name": "recon_avclip_ft_decoder",
37
+ "path": "models/vae/audio_only/recon_avclip_ft_decoder",
38
+ "relative_path": "models/vae/audio_only/recon_avclip_ft_decoder",
39
+ "config": "models/vae/audio_only/recon_avclip_ft_decoder/config.yaml",
40
+ "checkpoint": "models/vae/audio_only/recon_avclip_ft_decoder/state_dict.pt"
41
+ },
42
+ {
43
+ "modality": "audio_only",
44
+ "name": "recon_distill_avclip_ft_decoder",
45
+ "path": "models/vae/audio_only/recon_distill_avclip_ft_decoder",
46
+ "relative_path": "models/vae/audio_only/recon_distill_avclip_ft_decoder",
47
+ "config": "models/vae/audio_only/recon_distill_avclip_ft_decoder/config.yaml",
48
+ "checkpoint": "models/vae/audio_only/recon_distill_avclip_ft_decoder/state_dict.pt"
49
+ },
50
+ {
51
+ "modality": "audio_video",
52
+ "name": "recon_avclip",
53
+ "path": "models/vae/audio_video/recon_avclip",
54
+ "relative_path": "models/vae/audio_video/recon_avclip",
55
+ "config": "models/vae/audio_video/recon_avclip/config.yaml",
56
+ "checkpoint": "models/vae/audio_video/recon_avclip/state_dict.pt"
57
+ },
58
+ {
59
+ "modality": "audio_video",
60
+ "name": "recon_distill_avclip",
61
+ "path": "models/vae/audio_video/recon_distill_avclip",
62
+ "relative_path": "models/vae/audio_video/recon_distill_avclip",
63
+ "config": "models/vae/audio_video/recon_distill_avclip/config.yaml",
64
+ "checkpoint": "models/vae/audio_video/recon_distill_avclip/state_dict.pt"
65
+ }
66
+ ]
models/vae/video_only/recon/config.yaml ADDED
@@ -0,0 +1,260 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 121
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ audio:
13
+ audio_sample_rate: 48000
14
+ sample_rate: 48000
15
+ encoder_dim: 128
16
+ encoder_rates:
17
+ - 2
18
+ - 3
19
+ - 4
20
+ - 5
21
+ - 8
22
+ latent_dim: 128
23
+ decoder_dim: 2048
24
+ decoder_rates:
25
+ - 8
26
+ - 5
27
+ - 4
28
+ - 3
29
+ - 2
30
+ n_codebooks: 9
31
+ codebook_size: 1024
32
+ codebook_dim: 8
33
+ quantizer_dropout: false
34
+ continuous: true
35
+ pretrained_model_name_or_path: null
36
+ contrastive:
37
+ contrastive_use_mean: true
38
+ embed_dim: 512
39
+ segment_hidden_dim: 1024
40
+ global_hidden_dim: 1024
41
+ segment_count: null
42
+ init_scale: 0.07
43
+ clamp_scale_min: 0.001
44
+ clamp_scale_max: 0.5
45
+ gather_for_loss: true
46
+ num_negatives: 23
47
+ num_negative_videos: 63
48
+ use_sdpa: true
49
+ spatial_pool_mode: mean
50
+ spatial_merge_factor: 4
51
+ transformer_dim: 768
52
+ spatial_transformer_layers: 1
53
+ segment_transformer_layers: 1
54
+ global_transformer_layers: 1
55
+ use_segment_loss: false
56
+ use_global_loss: false
57
+ enabled: false
58
+ distill:
59
+ enabled: false
60
+ video_target_dim: 1152
61
+ image_target_dim: 1152
62
+ audio_target_dim: 1280
63
+ video_spatial_factor: 4
64
+ image_spatial_factor: 4
65
+ temporal_agg_ratio: 3
66
+ audio_distill_type: d_axis
67
+ distill_proj_type: conv
68
+ distill_use_conv3d: false
69
+ distill_proj_layers: 2
70
+ distill_proj_hidden_dim: 256
71
+ distill_proj_before_agg: true
72
+ distill_dim_schedule: fixed
73
+ distill_use_sampled: false
74
+ audio_proj_type: conv
75
+ audio_proj_layers: 2
76
+ audio_proj_hidden_dim: 512
77
+ llm:
78
+ enabled: false
79
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
80
+ freeze_llm: false
81
+ include_first_frame: false
82
+ spatial_merge_factor: 4
83
+ temporal_merge_factor: 1
84
+ patch_embed_dim: 256
85
+ patch_stride: 2
86
+ spatial_merge_size: 2
87
+ audio_ds_hidden: 256
88
+ audio_ds_stride: 2
89
+ audio_inter_dim: 512
90
+ data:
91
+ train:
92
+ metadata_paths:
93
+ train_main: omitted_public_release_path
94
+ metadata_weights:
95
+ train_main: 1.0
96
+ use_file_processor: true
97
+ num_frames: 121
98
+ resolution: 256
99
+ video_frame_sample_rate: 1
100
+ target_fps: 24
101
+ audio_sample_rate: 48000
102
+ num_workers: 4
103
+ prefetch_factor: 2
104
+ val_video:
105
+ video_dir: omitted_public_release_path
106
+ num_frames: 121
107
+ resolution: 256
108
+ video_frame_sample_rate: 1
109
+ target_fps: 24
110
+ max_samples: 1000
111
+ batch_size: 1
112
+ val_audio:
113
+ audio_dir: omitted_public_release_path
114
+ audio_sample_rate: 48000
115
+ max_duration: 5.0
116
+ max_samples: 1000
117
+ batch_size: 1
118
+ val_contrastive:
119
+ jsonl_paths:
120
+ vggsound_valid: data/train/vggsound_valid_filtered.jsonl
121
+ ct_nonspeech: data/train/nonspeech_valid_10000.jsonl
122
+ ct_speech: data/train/speech_valid_10000.jsonl
123
+ num_frames: 121
124
+ resolution: 256
125
+ video_frame_sample_rate: 1
126
+ target_fps: 24
127
+ audio_sample_rate: 48000
128
+ max_samples: 20000
129
+ batch_size: 1
130
+ val_segment_num_negatives:
131
+ - 29
132
+ - 64
133
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
134
+ val_global_num_negatives:
135
+ - 64
136
+ - 256
137
+ training:
138
+ max_steps: 500000
139
+ batch_size: 1
140
+ lr: 1.0e-05
141
+ weight_decay: 0.0001
142
+ betas:
143
+ - 0.9
144
+ - 0.999
145
+ max_grad_norm: 1.0
146
+ gradient_accumulation_steps: 1
147
+ dtype: fp32
148
+ video_vae_dtype: bf16
149
+ audio_vae_dtype: fp32
150
+ contrastive_dtype: bfloat16
151
+ llm_dtype: bfloat16
152
+ gradient_checkpointing: true
153
+ random_start: false
154
+ use_ema: false
155
+ ema_decay: 0.999
156
+ qk_norm: false
157
+ log_steps: 3
158
+ stdout_steps: 10
159
+ eval_steps: 2000
160
+ save_steps: 2000
161
+ max_checkpoints: 5000
162
+ lr_disc: 5.0e-06
163
+ loss:
164
+ use_video_recon: true
165
+ use_audio_recon: false
166
+ use_segment_contrastive: false
167
+ use_global_contrastive: false
168
+ lambda_group_video: 1.0
169
+ lambda_group_audio: 1.0
170
+ lambda_group_contrastive: 1.0
171
+ lambda_video_recon: 1.0
172
+ lambda_video_kl: 0.0001
173
+ lambda_video_lpips: 1.0
174
+ video_loss_reduction: sum
175
+ lambda_audio_mel: 1.0
176
+ lambda_audio_recon: 0.0
177
+ lambda_audio_kl: 0.5
178
+ lambda_segment_contrastive: 1.0
179
+ lambda_global_contrastive: 1.0
180
+ global_contrastive_start_steps: 0
181
+ adaptive_loss_balance: true
182
+ adaptive_balance_audio_ratio: 0.5
183
+ adaptive_balance_contrastive_ratio: 0.5
184
+ adaptive_loss_balance_by_uncertainty: false
185
+ uncertainty_warmup_steps: 100
186
+ use_semantic_distill: false
187
+ encoder_fps: 4
188
+ encoder_resolution: 256
189
+ distill_vision_layer: 18
190
+ distill_audio_layer: 24
191
+ lambda_distill_image_cosine: 1.0
192
+ lambda_distill_image_distance: 1.0
193
+ lambda_distill_video_cosine: 1.0
194
+ lambda_distill_video_distance: 1.0
195
+ lambda_distill_audio_d_axis: 120.0
196
+ lambda_distill_audio_t_axis: 1.0
197
+ distill_w_hyper: 0.1
198
+ distill_audio_type: d_axis
199
+ lambda_group_distill: 1.0
200
+ distill_spatial_norm: true
201
+ distill_spatial_norm_gamma: 0.6
202
+ distill_margin_cosine: 0.0
203
+ distill_margin_distance: 0.25
204
+ distill_use_dist_matrix: false
205
+ adaptive_distill_balance: false
206
+ adaptive_distill_video_ratio: 0.1
207
+ adaptive_distill_audio_ratio: 0.1
208
+ use_llm_caption: false
209
+ lambda_group_llm: 1.0
210
+ lambda_llm_caption: 1.0
211
+ mel_loss_kwargs:
212
+ sample_rate: 48000
213
+ n_mels:
214
+ - 5
215
+ - 10
216
+ - 20
217
+ - 40
218
+ - 80
219
+ - 160
220
+ - 320
221
+ window_lengths:
222
+ - 32
223
+ - 64
224
+ - 128
225
+ - 256
226
+ - 512
227
+ - 1024
228
+ - 2048
229
+ weights:
230
+ - 15
231
+ - 15
232
+ - 15
233
+ - 15
234
+ - 15
235
+ - 15
236
+ - 15
237
+ pow: 1.0
238
+ mel_fmin:
239
+ - 0.0
240
+ - 0.0
241
+ - 0.0
242
+ - 0.0
243
+ - 0.0
244
+ - 0.0
245
+ - 0.0
246
+ mel_fmax:
247
+ - null
248
+ - null
249
+ - null
250
+ - null
251
+ - null
252
+ - null
253
+ - null
254
+ use_video_disc: true
255
+ video_disc_start_step: 3000
256
+ lambda_video_adv: 0.1
257
+ video_disc_loss_type: hinge
258
+ video_disc_adaptive_weight: true
259
+ output:
260
+ exp_root: outputs
models/vae/video_only/recon/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "video_only",
4
+ "name": "recon",
5
+ "config": "models/vae/video_only/recon/config.yaml",
6
+ "checkpoint": "models/vae/video_only/recon/state_dict.pt",
7
+ "notes": "Video reconstruction VAE checkpoint without training state."
8
+ }
models/vae/video_only/recon_distill/config.yaml ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 1234
2
+ audio_sample_rate: 48000
3
+ num_frames: 121
4
+ resolution: 256
5
+ target_fps: 24
6
+ video_frame_sample_rate: 1
7
+ model:
8
+ video:
9
+ model_name: WanVAE22
10
+ model_config: scripts/causalvae/wanvae22_48dim.json
11
+ pretrained_model_name_or_path: null
12
+ audio:
13
+ audio_sample_rate: 48000
14
+ sample_rate: 48000
15
+ encoder_dim: 128
16
+ encoder_rates:
17
+ - 2
18
+ - 3
19
+ - 4
20
+ - 5
21
+ - 8
22
+ latent_dim: 128
23
+ decoder_dim: 2048
24
+ decoder_rates:
25
+ - 8
26
+ - 5
27
+ - 4
28
+ - 3
29
+ - 2
30
+ n_codebooks: 9
31
+ codebook_size: 1024
32
+ codebook_dim: 8
33
+ quantizer_dropout: false
34
+ continuous: true
35
+ pretrained_model_name_or_path: null
36
+ contrastive:
37
+ contrastive_use_mean: true
38
+ embed_dim: 512
39
+ segment_hidden_dim: 1024
40
+ global_hidden_dim: 1024
41
+ segment_count: null
42
+ init_scale: 0.07
43
+ clamp_scale_min: 0.001
44
+ clamp_scale_max: 0.5
45
+ gather_for_loss: true
46
+ num_negatives: 23
47
+ num_negative_videos: 63
48
+ use_sdpa: true
49
+ spatial_pool_mode: mean
50
+ spatial_merge_factor: 4
51
+ transformer_dim: 768
52
+ spatial_transformer_layers: 1
53
+ segment_transformer_layers: 1
54
+ global_transformer_layers: 1
55
+ use_segment_loss: false
56
+ use_global_loss: false
57
+ enabled: false
58
+ distill:
59
+ enabled: true
60
+ video_target_dim: 1152
61
+ image_target_dim: 1152
62
+ audio_target_dim: 1280
63
+ video_spatial_factor: 4
64
+ image_spatial_factor: 4
65
+ temporal_agg_ratio: 3
66
+ audio_distill_type: d_axis
67
+ distill_proj_type: conv
68
+ distill_use_conv3d: false
69
+ distill_proj_layers: 2
70
+ distill_proj_hidden_dim: 256
71
+ distill_proj_before_agg: true
72
+ distill_dim_schedule: doubling
73
+ distill_use_sampled: false
74
+ audio_proj_type: conv
75
+ audio_proj_layers: 2
76
+ audio_proj_hidden_dim: 512
77
+ llm:
78
+ enabled: false
79
+ llm_model_path: models/text_encoder/Qwen3.5-0.8B-Base
80
+ freeze_llm: false
81
+ include_first_frame: false
82
+ spatial_merge_factor: 4
83
+ temporal_merge_factor: 1
84
+ patch_embed_dim: 256
85
+ patch_stride: 2
86
+ spatial_merge_size: 2
87
+ audio_ds_hidden: 256
88
+ audio_ds_stride: 2
89
+ audio_inter_dim: 512
90
+ data:
91
+ train:
92
+ metadata_paths:
93
+ train_main: omitted_public_release_path
94
+ metadata_weights:
95
+ train_main: 1.0
96
+ use_file_processor: true
97
+ num_frames: 121
98
+ resolution: 256
99
+ video_frame_sample_rate: 1
100
+ target_fps: 24
101
+ audio_sample_rate: 48000
102
+ num_workers: 4
103
+ prefetch_factor: 2
104
+ val_video:
105
+ video_dir: omitted_public_release_path
106
+ num_frames: 121
107
+ resolution: 256
108
+ video_frame_sample_rate: 1
109
+ target_fps: 24
110
+ max_samples: 1000
111
+ batch_size: 1
112
+ val_audio:
113
+ audio_dir: omitted_public_release_path
114
+ audio_sample_rate: 48000
115
+ max_duration: 5.0
116
+ max_samples: 1000
117
+ batch_size: 1
118
+ val_contrastive:
119
+ jsonl_paths:
120
+ vggsound_valid: data/train/vggsound_valid_filtered.jsonl
121
+ ct_nonspeech: data/train/nonspeech_valid_10000.jsonl
122
+ ct_speech: data/train/speech_valid_10000.jsonl
123
+ num_frames: 121
124
+ resolution: 256
125
+ video_frame_sample_rate: 1
126
+ target_fps: 24
127
+ audio_sample_rate: 48000
128
+ max_samples: 20000
129
+ batch_size: 1
130
+ val_segment_num_negatives:
131
+ - 29
132
+ - 64
133
+ val_segment_num_negative_videos: ${model.contrastive.num_negative_videos}
134
+ val_global_num_negatives:
135
+ - 64
136
+ - 256
137
+ training:
138
+ max_steps: 500000
139
+ batch_size: 1
140
+ lr: 1.0e-05
141
+ weight_decay: 0.0001
142
+ betas:
143
+ - 0.9
144
+ - 0.999
145
+ max_grad_norm: 1.0
146
+ gradient_accumulation_steps: 1
147
+ dtype: fp32
148
+ video_vae_dtype: bf16
149
+ audio_vae_dtype: fp32
150
+ contrastive_dtype: bfloat16
151
+ llm_dtype: bfloat16
152
+ gradient_checkpointing: true
153
+ random_start: false
154
+ use_ema: false
155
+ ema_decay: 0.999
156
+ qk_norm: false
157
+ log_steps: 3
158
+ stdout_steps: 10
159
+ eval_steps: 2000
160
+ save_steps: 2000
161
+ max_checkpoints: 5000
162
+ lr_disc: 5.0e-06
163
+ loss:
164
+ use_video_recon: true
165
+ use_audio_recon: false
166
+ use_segment_contrastive: false
167
+ use_global_contrastive: false
168
+ lambda_group_video: 1.0
169
+ lambda_group_audio: 1.0
170
+ lambda_group_contrastive: 1.0
171
+ lambda_video_recon: 1.0
172
+ lambda_video_kl: 0.0001
173
+ lambda_video_lpips: 1.0
174
+ video_loss_reduction: sum
175
+ lambda_audio_mel: 1.0
176
+ lambda_audio_recon: 0.0
177
+ lambda_audio_kl: 0.5
178
+ lambda_segment_contrastive: 1.0
179
+ lambda_global_contrastive: 1.0
180
+ global_contrastive_start_steps: 0
181
+ adaptive_loss_balance: true
182
+ adaptive_balance_audio_ratio: 0.5
183
+ adaptive_balance_contrastive_ratio: 0.5
184
+ adaptive_loss_balance_by_uncertainty: false
185
+ uncertainty_warmup_steps: 100
186
+ use_semantic_distill: true
187
+ encoder_fps: 4.0
188
+ encoder_resolution: 256
189
+ distill_vision_layer: 18
190
+ distill_audio_layer: 24
191
+ lambda_distill_image_cosine: 1.0
192
+ lambda_distill_image_distance: 1.0
193
+ lambda_distill_video_cosine: 1.0
194
+ lambda_distill_video_distance: 1.0
195
+ lambda_distill_audio_d_axis: 120.0
196
+ lambda_distill_audio_t_axis: 1.0
197
+ distill_w_hyper: 0.1
198
+ distill_audio_type: d_axis
199
+ lambda_group_distill: 1.0
200
+ distill_spatial_norm: true
201
+ distill_spatial_norm_gamma: 0.7
202
+ distill_margin_cosine: 0.0
203
+ distill_margin_distance: 0.25
204
+ distill_use_dist_matrix: false
205
+ adaptive_distill_balance: true
206
+ adaptive_distill_video_ratio: 0.5
207
+ adaptive_distill_audio_ratio: 0.1
208
+ use_llm_caption: false
209
+ lambda_group_llm: 1.0
210
+ lambda_llm_caption: 1.0
211
+ mel_loss_kwargs:
212
+ sample_rate: 48000
213
+ n_mels:
214
+ - 5
215
+ - 10
216
+ - 20
217
+ - 40
218
+ - 80
219
+ - 160
220
+ - 320
221
+ window_lengths:
222
+ - 32
223
+ - 64
224
+ - 128
225
+ - 256
226
+ - 512
227
+ - 1024
228
+ - 2048
229
+ weights:
230
+ - 15
231
+ - 15
232
+ - 15
233
+ - 15
234
+ - 15
235
+ - 15
236
+ - 15
237
+ pow: 1.0
238
+ mel_fmin:
239
+ - 0.0
240
+ - 0.0
241
+ - 0.0
242
+ - 0.0
243
+ - 0.0
244
+ - 0.0
245
+ - 0.0
246
+ mel_fmax:
247
+ - null
248
+ - null
249
+ - null
250
+ - null
251
+ - null
252
+ - null
253
+ - null
254
+ use_video_disc: true
255
+ video_disc_start_step: 3000
256
+ lambda_video_adv: 0.1
257
+ video_disc_loss_type: hinge
258
+ video_disc_adaptive_weight: true
259
+ distill_every_steps: true
260
+ semantic_model_path: models/text_encoder/Qwen3.5-0.8B-Base
261
+ output:
262
+ exp_root: outputs
models/vae/video_only/recon_distill/metadata.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "package_type": "vae",
3
+ "modality": "video_only",
4
+ "name": "recon_distill",
5
+ "config": "models/vae/video_only/recon_distill/config.yaml",
6
+ "checkpoint": "models/vae/video_only/recon_distill/state_dict.pt",
7
+ "notes": "Distilled video reconstruction VAE checkpoint without training state."
8
+ }