Cccccz commited on
Commit
d5e0d8f
·
verified ·
1 Parent(s): 061cbee

Add files using upload-large-folder tool

Browse files
Files changed (50) hide show
  1. __pycache__/inference.cpython-310.pyc +0 -0
  2. __pycache__/train.cpython-310.pyc +0 -0
  3. demo.py +631 -0
  4. model/__init__.py +36 -0
  5. model/__pycache__/__init__.cpython-310.pyc +0 -0
  6. model/__pycache__/base.cpython-310.pyc +0 -0
  7. model/__pycache__/causvid.cpython-310.pyc +0 -0
  8. model/__pycache__/diffusion.cpython-310.pyc +0 -0
  9. model/__pycache__/dmd.cpython-310.pyc +0 -0
  10. model/__pycache__/gan.cpython-310.pyc +0 -0
  11. model/__pycache__/ode_regression.cpython-310.pyc +0 -0
  12. model/__pycache__/predictor_v4.cpython-310.pyc +0 -0
  13. model/__pycache__/sid.cpython-310.pyc +0 -0
  14. model/base.py +222 -0
  15. model/causvid.py +391 -0
  16. model/diffusion.py +125 -0
  17. model/dmd.py +332 -0
  18. model/gan.py +295 -0
  19. model/ode_regression.py +138 -0
  20. model/predictor_v4.py +886 -0
  21. model/sid.py +283 -0
  22. predictor_training/__init__.py +25 -0
  23. predictor_training/__pycache__/__init__.cpython-310.pyc +0 -0
  24. predictor_training/__pycache__/cache.cpython-310.pyc +0 -0
  25. predictor_training/__pycache__/checkpoint.cpython-310.pyc +0 -0
  26. predictor_training/__pycache__/dataset.cpython-310.pyc +0 -0
  27. predictor_training/__pycache__/rollout_cache.cpython-310.pyc +0 -0
  28. predictor_training/__pycache__/sampler.cpython-310.pyc +0 -0
  29. predictor_training/__pycache__/trajectory_dataset.cpython-310.pyc +0 -0
  30. predictor_training/cache.py +22 -0
  31. predictor_training/checkpoint.py +103 -0
  32. predictor_training/dataset.py +364 -0
  33. predictor_training/rollout_cache.py +114 -0
  34. predictor_training/sampler.py +84 -0
  35. predictor_training/trajectory_dataset.py +107 -0
  36. utils/lmdb.py +72 -0
  37. wan_models/Wan2.1-T2V-1.3B/.gitattributes +47 -0
  38. wan_models/Wan2.1-T2V-1.3B/LICENSE.txt +201 -0
  39. wan_models/Wan2.1-T2V-1.3B/README.md +298 -0
  40. wan_models/Wan2.1-T2V-1.3B/assets/.DS_Store +0 -0
  41. wan_models/Wan2.1-T2V-1.3B/assets/logo.png +0 -0
  42. wan_models/Wan2.1-T2V-1.3B/config.json +14 -0
  43. wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/special_tokens_map.json +308 -0
  44. wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/tokenizer_config.json +2748 -0
  45. wan_models/Wan2.1-T2V-14B/LICENSE.txt +201 -0
  46. wan_models/Wan2.1-T2V-14B/README.md +301 -0
  47. wan_models/Wan2.1-T2V-14B/assets/logo.png +0 -0
  48. wan_models/Wan2.1-T2V-14B/diffusion_pytorch_model.safetensors.index.json +1102 -0
  49. wan_models/Wan2.1-T2V-14B/google/umt5-xxl/special_tokens_map.json +308 -0
  50. wan_models/Wan2.1-T2V-14B/google/umt5-xxl/tokenizer_config.json +2748 -0
__pycache__/inference.cpython-310.pyc ADDED
Binary file (9.12 kB). View file
 
__pycache__/train.cpython-310.pyc ADDED
Binary file (2.09 kB). View file
 
demo.py ADDED
@@ -0,0 +1,631 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Demo for Self-Forcing.
3
+ """
4
+
5
+ import os
6
+ import re
7
+ import random
8
+ import time
9
+ import base64
10
+ import argparse
11
+ import hashlib
12
+ import subprocess
13
+ import urllib.request
14
+ from io import BytesIO
15
+ from PIL import Image
16
+ import numpy as np
17
+ import torch
18
+ from omegaconf import OmegaConf
19
+ from flask import Flask, render_template, jsonify
20
+ from flask_socketio import SocketIO, emit
21
+ import queue
22
+ from threading import Thread, Event
23
+
24
+ from pipeline import CausalInferencePipeline
25
+ from demo_utils.constant import ZERO_VAE_CACHE
26
+ from demo_utils.vae_block3 import VAEDecoderWrapper
27
+ from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder
28
+ from demo_utils.utils import generate_timestamp
29
+ from demo_utils.memory import gpu, get_cuda_free_memory_gb, DynamicSwapInstaller, move_model_to_device_with_memory_preservation
30
+
31
+ # Parse arguments
32
+ parser = argparse.ArgumentParser()
33
+ parser.add_argument('--port', type=int, default=5001)
34
+ parser.add_argument('--host', type=str, default='0.0.0.0')
35
+ parser.add_argument("--checkpoint_path", type=str, default='./checkpoints/self_forcing_dmd.pt')
36
+ parser.add_argument("--config_path", type=str, default='./configs/self_forcing_dmd.yaml')
37
+ parser.add_argument('--trt', action='store_true')
38
+ args = parser.parse_args()
39
+
40
+ print(f'Free VRAM {get_cuda_free_memory_gb(gpu)} GB')
41
+ low_memory = get_cuda_free_memory_gb(gpu) < 40
42
+
43
+ # Load models
44
+ config = OmegaConf.load(args.config_path)
45
+ default_config = OmegaConf.load("configs/default_config.yaml")
46
+ config = OmegaConf.merge(default_config, config)
47
+
48
+ text_encoder = WanTextEncoder()
49
+
50
+ # Global variables for dynamic model switching
51
+ current_vae_decoder = None
52
+ current_use_taehv = False
53
+ fp8_applied = False
54
+ torch_compile_applied = False
55
+ global frame_number
56
+ frame_number = 0
57
+ anim_name = ""
58
+ frame_rate = 6
59
+
60
+ def initialize_vae_decoder(use_taehv=False, use_trt=False):
61
+ """Initialize VAE decoder based on the selected option"""
62
+ global current_vae_decoder, current_use_taehv
63
+
64
+ if use_trt:
65
+ from demo_utils.vae import VAETRTWrapper
66
+ current_vae_decoder = VAETRTWrapper()
67
+ return current_vae_decoder
68
+
69
+ if use_taehv:
70
+ from demo_utils.taehv import TAEHV
71
+ # Check if taew2_1.pth exists in checkpoints folder, download if missing
72
+ taehv_checkpoint_path = "checkpoints/taew2_1.pth"
73
+ if not os.path.exists(taehv_checkpoint_path):
74
+ print(f"taew2_1.pth not found in checkpoints folder {taehv_checkpoint_path}. Downloading...")
75
+ os.makedirs("checkpoints", exist_ok=True)
76
+ download_url = "https://github.com/madebyollin/taehv/raw/main/taew2_1.pth"
77
+ try:
78
+ urllib.request.urlretrieve(download_url, taehv_checkpoint_path)
79
+ print(f"Successfully downloaded taew2_1.pth to {taehv_checkpoint_path}")
80
+ except Exception as e:
81
+ print(f"Failed to download taew2_1.pth: {e}")
82
+ raise
83
+
84
+ class DotDict(dict):
85
+ __getattr__ = dict.__getitem__
86
+ __setattr__ = dict.__setitem__
87
+
88
+ class TAEHVDiffusersWrapper(torch.nn.Module):
89
+ def __init__(self):
90
+ super().__init__()
91
+ self.dtype = torch.float16
92
+ self.taehv = TAEHV(checkpoint_path=taehv_checkpoint_path).to(self.dtype)
93
+ self.config = DotDict(scaling_factor=1.0)
94
+
95
+ def decode(self, latents, return_dict=None):
96
+ # n, c, t, h, w = latents.shape
97
+ # low-memory, set parallel=True for faster + higher memory
98
+ return self.taehv.decode_video(latents, parallel=False).mul_(2).sub_(1)
99
+
100
+ current_vae_decoder = TAEHVDiffusersWrapper()
101
+ else:
102
+ current_vae_decoder = VAEDecoderWrapper()
103
+ vae_state_dict = torch.load('wan_models/Wan2.1-T2V-1.3B/Wan2.1_VAE.pth', map_location="cpu")
104
+ decoder_state_dict = {}
105
+ for key, value in vae_state_dict.items():
106
+ if 'decoder.' in key or 'conv2' in key:
107
+ decoder_state_dict[key] = value
108
+ current_vae_decoder.load_state_dict(decoder_state_dict)
109
+
110
+ current_vae_decoder.eval()
111
+ current_vae_decoder.to(dtype=torch.float16)
112
+ current_vae_decoder.requires_grad_(False)
113
+ current_vae_decoder.to(gpu)
114
+ current_use_taehv = use_taehv
115
+
116
+ print(f"✅ VAE decoder initialized with {'TAEHV' if use_taehv else 'default VAE'}")
117
+ return current_vae_decoder
118
+
119
+
120
+ # Initialize with default VAE
121
+ vae_decoder = initialize_vae_decoder(use_taehv=False, use_trt=args.trt)
122
+
123
+ transformer = WanDiffusionWrapper(is_causal=True)
124
+ state_dict = torch.load(args.checkpoint_path, map_location="cpu")
125
+ transformer.load_state_dict(state_dict['generator_ema'])
126
+
127
+ text_encoder.eval()
128
+ transformer.eval()
129
+
130
+ transformer.to(dtype=torch.float16)
131
+ text_encoder.to(dtype=torch.bfloat16)
132
+
133
+ text_encoder.requires_grad_(False)
134
+ transformer.requires_grad_(False)
135
+
136
+ pipeline = CausalInferencePipeline(
137
+ config,
138
+ device=gpu,
139
+ generator=transformer,
140
+ text_encoder=text_encoder,
141
+ vae=vae_decoder
142
+ )
143
+
144
+ if low_memory:
145
+ DynamicSwapInstaller.install_model(text_encoder, device=gpu)
146
+ else:
147
+ text_encoder.to(gpu)
148
+ transformer.to(gpu)
149
+
150
+ # Flask and SocketIO setup
151
+ app = Flask(__name__)
152
+ app.config['SECRET_KEY'] = 'frontend_buffered_demo'
153
+ socketio = SocketIO(app, cors_allowed_origins="*")
154
+
155
+ generation_active = False
156
+ stop_event = Event()
157
+ frame_send_queue = queue.Queue()
158
+ sender_thread = None
159
+ models_compiled = False
160
+
161
+
162
+ def tensor_to_base64_frame(frame_tensor):
163
+ """Convert a single frame tensor to base64 image string."""
164
+ global frame_number, anim_name
165
+ # Clamp and normalize to 0-255
166
+ frame = torch.clamp(frame_tensor.float(), -1., 1.) * 127.5 + 127.5
167
+ frame = frame.to(torch.uint8).cpu().numpy()
168
+
169
+ # CHW -> HWC
170
+ if len(frame.shape) == 3:
171
+ frame = np.transpose(frame, (1, 2, 0))
172
+
173
+ # Convert to PIL Image
174
+ if frame.shape[2] == 3: # RGB
175
+ image = Image.fromarray(frame, 'RGB')
176
+ else: # Handle other formats
177
+ image = Image.fromarray(frame)
178
+
179
+ # Convert to base64
180
+ buffer = BytesIO()
181
+ image.save(buffer, format='JPEG', quality=100)
182
+ if not os.path.exists("./images/%s" % anim_name):
183
+ os.makedirs("./images/%s" % anim_name)
184
+ frame_number += 1
185
+ image.save("./images/%s/%s_%03d.jpg" % (anim_name, anim_name, frame_number))
186
+ img_str = base64.b64encode(buffer.getvalue()).decode()
187
+ return f"data:image/jpeg;base64,{img_str}"
188
+
189
+
190
+ def frame_sender_worker():
191
+ """Background thread that processes frame send queue non-blocking."""
192
+ global frame_send_queue, generation_active, stop_event
193
+
194
+ print("📡 Frame sender thread started")
195
+
196
+ while True:
197
+ frame_data = None
198
+ try:
199
+ # Get frame data from queue
200
+ frame_data = frame_send_queue.get(timeout=1.0)
201
+
202
+ if frame_data is None: # Shutdown signal
203
+ frame_send_queue.task_done() # Mark shutdown signal as done
204
+ break
205
+
206
+ frame_tensor, frame_index, block_index, job_id = frame_data
207
+
208
+ # Convert tensor to base64
209
+ base64_frame = tensor_to_base64_frame(frame_tensor)
210
+
211
+ # Send via SocketIO
212
+ try:
213
+ socketio.emit('frame_ready', {
214
+ 'data': base64_frame,
215
+ 'frame_index': frame_index,
216
+ 'block_index': block_index,
217
+ 'job_id': job_id
218
+ })
219
+ except Exception as e:
220
+ print(f"⚠️ Failed to send frame {frame_index}: {e}")
221
+
222
+ frame_send_queue.task_done()
223
+
224
+ except queue.Empty:
225
+ # Check if we should continue running
226
+ if not generation_active and frame_send_queue.empty():
227
+ break
228
+ except Exception as e:
229
+ print(f"❌ Frame sender error: {e}")
230
+ # Make sure to mark task as done even if there's an error
231
+ if frame_data is not None:
232
+ try:
233
+ frame_send_queue.task_done()
234
+ except Exception as e:
235
+ print(f"❌ Failed to mark frame task as done: {e}")
236
+ break
237
+
238
+ print("📡 Frame sender thread stopped")
239
+
240
+
241
+ @torch.no_grad()
242
+ def generate_video_stream(prompt, seed, enable_torch_compile=False, enable_fp8=False, use_taehv=False):
243
+ """Generate video and push frames immediately to frontend."""
244
+ global generation_active, stop_event, frame_send_queue, sender_thread, models_compiled, torch_compile_applied, fp8_applied, current_vae_decoder, current_use_taehv, frame_rate, anim_name
245
+
246
+ try:
247
+ generation_active = True
248
+ stop_event.clear()
249
+ job_id = generate_timestamp()
250
+
251
+ # Start frame sender thread if not already running
252
+ if sender_thread is None or not sender_thread.is_alive():
253
+ sender_thread = Thread(target=frame_sender_worker, daemon=True)
254
+ sender_thread.start()
255
+
256
+ # Emit progress updates
257
+ def emit_progress(message, progress):
258
+ try:
259
+ socketio.emit('progress', {
260
+ 'message': message,
261
+ 'progress': progress,
262
+ 'job_id': job_id
263
+ })
264
+ except Exception as e:
265
+ print(f"❌ Failed to emit progress: {e}")
266
+
267
+ emit_progress('Starting generation...', 0)
268
+
269
+ # Handle VAE decoder switching
270
+ if use_taehv != current_use_taehv:
271
+ emit_progress('Switching VAE decoder...', 2)
272
+ print(f"🔄 Switching VAE decoder to {'TAEHV' if use_taehv else 'default VAE'}")
273
+ current_vae_decoder = initialize_vae_decoder(use_taehv=use_taehv)
274
+ # Update pipeline with new VAE decoder
275
+ pipeline.vae = current_vae_decoder
276
+
277
+ # Handle FP8 quantization
278
+ if enable_fp8 and not fp8_applied:
279
+ emit_progress('Applying FP8 quantization...', 3)
280
+ print("🔧 Applying FP8 quantization to transformer")
281
+ from torchao.quantization.quant_api import quantize_, Float8DynamicActivationFloat8WeightConfig, PerTensor
282
+ quantize_(transformer, Float8DynamicActivationFloat8WeightConfig(granularity=PerTensor()))
283
+ fp8_applied = True
284
+
285
+ # Text encoding
286
+ emit_progress('Encoding text prompt...', 8)
287
+ conditional_dict = text_encoder(text_prompts=[prompt])
288
+ for key, value in conditional_dict.items():
289
+ conditional_dict[key] = value.to(dtype=torch.float16)
290
+ if low_memory:
291
+ gpu_memory_preservation = get_cuda_free_memory_gb(gpu) + 5
292
+ move_model_to_device_with_memory_preservation(
293
+ text_encoder,target_device=gpu, preserved_memory_gb=gpu_memory_preservation)
294
+
295
+ # Handle torch.compile if enabled
296
+ torch_compile_applied = enable_torch_compile
297
+ if enable_torch_compile and not models_compiled:
298
+ # Compile transformer and decoder
299
+ transformer.compile(mode="max-autotune-no-cudagraphs")
300
+ if not current_use_taehv and not low_memory and not args.trt:
301
+ current_vae_decoder.compile(mode="max-autotune-no-cudagraphs")
302
+
303
+ # Initialize generation
304
+ emit_progress('Initializing generation...', 12)
305
+
306
+ rnd = torch.Generator(gpu).manual_seed(seed)
307
+ # all_latents = torch.zeros([1, 21, 16, 60, 104], device=gpu, dtype=torch.bfloat16)
308
+
309
+ pipeline._initialize_kv_cache(batch_size=1, dtype=torch.float16, device=gpu)
310
+ pipeline._initialize_crossattn_cache(batch_size=1, dtype=torch.float16, device=gpu)
311
+
312
+ noise = torch.randn([1, 21, 16, 60, 104], device=gpu, dtype=torch.float16, generator=rnd)
313
+
314
+ # Generation parameters
315
+ num_blocks = 7
316
+ current_start_frame = 0
317
+ num_input_frames = 0
318
+ all_num_frames = [pipeline.num_frame_per_block] * num_blocks
319
+ if current_use_taehv:
320
+ vae_cache = None
321
+ else:
322
+ vae_cache = ZERO_VAE_CACHE
323
+ for i in range(len(vae_cache)):
324
+ vae_cache[i] = vae_cache[i].to(device=gpu, dtype=torch.float16)
325
+
326
+ total_frames_sent = 0
327
+ generation_start_time = time.time()
328
+
329
+ emit_progress('Generating frames... (frontend handles timing)', 15)
330
+
331
+ for idx, current_num_frames in enumerate(all_num_frames):
332
+ if not generation_active or stop_event.is_set():
333
+ break
334
+
335
+ progress = int(((idx + 1) / len(all_num_frames)) * 80) + 15
336
+
337
+ # Special message for first block with torch.compile
338
+ if idx == 0 and torch_compile_applied and not models_compiled:
339
+ emit_progress(
340
+ f'Processing block 1/{len(all_num_frames)} - Compiling models (may take 5-10 minutes)...', progress)
341
+ print(f"🔥 Processing block {idx+1}/{len(all_num_frames)}")
342
+ models_compiled = True
343
+ else:
344
+ emit_progress(f'Processing block {idx+1}/{len(all_num_frames)}...', progress)
345
+ print(f"🔄 Processing block {idx+1}/{len(all_num_frames)}")
346
+
347
+ block_start_time = time.time()
348
+
349
+ noisy_input = noise[:, current_start_frame -
350
+ num_input_frames:current_start_frame + current_num_frames - num_input_frames]
351
+
352
+ # Denoising loop
353
+ denoising_start = time.time()
354
+ for index, current_timestep in enumerate(pipeline.denoising_step_list):
355
+ if not generation_active or stop_event.is_set():
356
+ break
357
+
358
+ timestep = torch.ones([1, current_num_frames], device=noise.device,
359
+ dtype=torch.int64) * current_timestep
360
+
361
+ if index < len(pipeline.denoising_step_list) - 1:
362
+ _, denoised_pred = transformer(
363
+ noisy_image_or_video=noisy_input,
364
+ conditional_dict=conditional_dict,
365
+ timestep=timestep,
366
+ kv_cache=pipeline.kv_cache1,
367
+ crossattn_cache=pipeline.crossattn_cache,
368
+ current_start=current_start_frame * pipeline.frame_seq_length
369
+ )
370
+ next_timestep = pipeline.denoising_step_list[index + 1]
371
+ noisy_input = pipeline.scheduler.add_noise(
372
+ denoised_pred.flatten(0, 1),
373
+ torch.randn_like(denoised_pred.flatten(0, 1)),
374
+ next_timestep * torch.ones([1 * current_num_frames], device=noise.device, dtype=torch.long)
375
+ ).unflatten(0, denoised_pred.shape[:2])
376
+ else:
377
+ _, denoised_pred = transformer(
378
+ noisy_image_or_video=noisy_input,
379
+ conditional_dict=conditional_dict,
380
+ timestep=timestep,
381
+ kv_cache=pipeline.kv_cache1,
382
+ crossattn_cache=pipeline.crossattn_cache,
383
+ current_start=current_start_frame * pipeline.frame_seq_length
384
+ )
385
+
386
+ if not generation_active or stop_event.is_set():
387
+ break
388
+
389
+ denoising_time = time.time() - denoising_start
390
+ print(f"⚡ Block {idx+1} denoising completed in {denoising_time:.2f}s")
391
+
392
+ # Record output
393
+ # all_latents[:, current_start_frame:current_start_frame + current_num_frames] = denoised_pred
394
+
395
+ # Update KV cache for next block
396
+ if idx != len(all_num_frames) - 1:
397
+ transformer(
398
+ noisy_image_or_video=denoised_pred,
399
+ conditional_dict=conditional_dict,
400
+ timestep=torch.zeros_like(timestep),
401
+ kv_cache=pipeline.kv_cache1,
402
+ crossattn_cache=pipeline.crossattn_cache,
403
+ current_start=current_start_frame * pipeline.frame_seq_length,
404
+ )
405
+
406
+ # Decode to pixels and send frames immediately
407
+ print(f"🎨 Decoding block {idx+1} to pixels...")
408
+ decode_start = time.time()
409
+ if args.trt:
410
+ all_current_pixels = []
411
+ for i in range(denoised_pred.shape[1]):
412
+ is_first_frame = torch.tensor(1.0).cuda().half() if idx == 0 and i == 0 else \
413
+ torch.tensor(0.0).cuda().half()
414
+ outputs = vae_decoder.forward(denoised_pred[:, i:i + 1, :, :, :].half(), is_first_frame, *vae_cache)
415
+ # outputs = vae_decoder.forward(denoised_pred.float(), *vae_cache)
416
+ current_pixels, vae_cache = outputs[0], outputs[1:]
417
+ print(current_pixels.max(), current_pixels.min())
418
+ all_current_pixels.append(current_pixels.clone())
419
+ pixels = torch.cat(all_current_pixels, dim=1)
420
+ if idx == 0:
421
+ pixels = pixels[:, 3:, :, :, :] # Skip first 3 frames of first block
422
+ else:
423
+ if current_use_taehv:
424
+ if vae_cache is None:
425
+ vae_cache = denoised_pred
426
+ else:
427
+ denoised_pred = torch.cat([vae_cache, denoised_pred], dim=1)
428
+ vae_cache = denoised_pred[:, -3:, :, :, :]
429
+ pixels = current_vae_decoder.decode(denoised_pred)
430
+ print(f"denoised_pred shape: {denoised_pred.shape}")
431
+ print(f"pixels shape: {pixels.shape}")
432
+ if idx == 0:
433
+ pixels = pixels[:, 3:, :, :, :] # Skip first 3 frames of first block
434
+ else:
435
+ pixels = pixels[:, 12:, :, :, :]
436
+
437
+ else:
438
+ pixels, vae_cache = current_vae_decoder(denoised_pred.half(), *vae_cache)
439
+ if idx == 0:
440
+ pixels = pixels[:, 3:, :, :, :] # Skip first 3 frames of first block
441
+
442
+ decode_time = time.time() - decode_start
443
+ print(f"🎨 Block {idx+1} VAE decoding completed in {decode_time:.2f}s")
444
+
445
+ # Queue frames for non-blocking sending
446
+ block_frames = pixels.shape[1]
447
+ print(f"📡 Queueing {block_frames} frames from block {idx+1} for sending...")
448
+ queue_start = time.time()
449
+
450
+ for frame_idx in range(block_frames):
451
+ if not generation_active or stop_event.is_set():
452
+ break
453
+
454
+ frame_tensor = pixels[0, frame_idx].cpu()
455
+
456
+ # Queue frame data in non-blocking way
457
+ frame_send_queue.put((frame_tensor, total_frames_sent, idx, job_id))
458
+ total_frames_sent += 1
459
+
460
+ queue_time = time.time() - queue_start
461
+ block_time = time.time() - block_start_time
462
+ print(f"✅ Block {idx+1} completed in {block_time:.2f}s ({block_frames} frames queued in {queue_time:.3f}s)")
463
+
464
+ current_start_frame += current_num_frames
465
+
466
+ generation_time = time.time() - generation_start_time
467
+ print(f"🎉 Generation completed in {generation_time:.2f}s! {total_frames_sent} frames queued for sending")
468
+
469
+ # Wait for all frames to be sent before completing
470
+ emit_progress('Waiting for all frames to be sent...', 97)
471
+ print("⏳ Waiting for all frames to be sent...")
472
+ frame_send_queue.join() # Wait for all queued frames to be processed
473
+ print("✅ All frames sent successfully!")
474
+
475
+ generate_mp4_from_images("./images","./videos/"+anim_name+".mp4", frame_rate )
476
+ # Final progress update
477
+ emit_progress('Generation complete!', 100)
478
+
479
+ try:
480
+ socketio.emit('generation_complete', {
481
+ 'message': 'Video generation completed!',
482
+ 'total_frames': total_frames_sent,
483
+ 'generation_time': f"{generation_time:.2f}s",
484
+ 'job_id': job_id
485
+ })
486
+ except Exception as e:
487
+ print(f"❌ Failed to emit generation complete: {e}")
488
+
489
+ except Exception as e:
490
+ print(f"❌ Generation failed: {e}")
491
+ try:
492
+ socketio.emit('error', {
493
+ 'message': f'Generation failed: {str(e)}',
494
+ 'job_id': job_id
495
+ })
496
+ except Exception as e:
497
+ print(f"❌ Failed to emit error: {e}")
498
+ finally:
499
+ generation_active = False
500
+ stop_event.set()
501
+
502
+ # Clean up sender thread
503
+ try:
504
+ frame_send_queue.put(None)
505
+ except Exception as e:
506
+ print(f"❌ Failed to put None in frame_send_queue: {e}")
507
+
508
+
509
+ def generate_mp4_from_images(image_directory, output_video_path, fps=24):
510
+ """
511
+ Generate an MP4 video from a directory of images ordered alphabetically.
512
+
513
+ :param image_directory: Path to the directory containing images.
514
+ :param output_video_path: Path where the output MP4 will be saved.
515
+ :param fps: Frames per second for the output video.
516
+ """
517
+ global anim_name
518
+ # Construct the ffmpeg command
519
+ cmd = [
520
+ 'ffmpeg',
521
+ '-framerate', str(fps),
522
+ '-i', os.path.join(image_directory, anim_name+'/'+anim_name+'_%03d.jpg'), # Adjust the pattern if necessary
523
+ '-c:v', 'libx264',
524
+ '-pix_fmt', 'yuv420p',
525
+ output_video_path
526
+ ]
527
+ try:
528
+ subprocess.run(cmd, check=True)
529
+ print(f"Video saved to {output_video_path}")
530
+ except subprocess.CalledProcessError as e:
531
+ print(f"An error occurred: {e}")
532
+
533
+ def calculate_sha256(data):
534
+ # Convert data to bytes if it's not already
535
+ if isinstance(data, str):
536
+ data = data.encode()
537
+ # Calculate SHA-256 hash
538
+ sha256_hash = hashlib.sha256(data).hexdigest()
539
+ return sha256_hash
540
+
541
+ # Socket.IO event handlers
542
+ @socketio.on('connect')
543
+ def handle_connect():
544
+ print('Client connected')
545
+ emit('status', {'message': 'Connected to frontend-buffered demo server'})
546
+
547
+
548
+ @socketio.on('disconnect')
549
+ def handle_disconnect():
550
+ print('Client disconnected')
551
+
552
+
553
+ @socketio.on('start_generation')
554
+ def handle_start_generation(data):
555
+ global generation_active, frame_number, anim_name, frame_rate
556
+
557
+ frame_number = 0
558
+ if generation_active:
559
+ emit('error', {'message': 'Generation already in progress'})
560
+ return
561
+
562
+ prompt = data.get('prompt', '')
563
+
564
+ seed = data.get('seed', -1)
565
+ if seed==-1:
566
+ seed = random.randint(0, 2**32)
567
+
568
+ # Extract words up to the first punctuation or newline
569
+ words_up_to_punctuation = re.split(r'[^\w\s]', prompt)[0].strip() if prompt else ''
570
+ if not words_up_to_punctuation:
571
+ words_up_to_punctuation = re.split(r'[\n\r]', prompt)[0].strip()
572
+
573
+ # Calculate SHA-256 hash of the entire prompt
574
+ sha256_hash = calculate_sha256(prompt)
575
+
576
+ # Create anim_name with the extracted words and first 10 characters of the hash
577
+ anim_name = f"{words_up_to_punctuation[:20]}_{str(seed)}_{sha256_hash[:10]}"
578
+
579
+ generation_active = True
580
+ generation_start_time = time.time()
581
+ enable_torch_compile = data.get('enable_torch_compile', False)
582
+ enable_fp8 = data.get('enable_fp8', False)
583
+ use_taehv = data.get('use_taehv', False)
584
+ frame_rate = data.get('fps', 6)
585
+
586
+ if not prompt:
587
+ emit('error', {'message': 'Prompt is required'})
588
+ return
589
+
590
+ # Start generation in background thread
591
+ socketio.start_background_task(generate_video_stream, prompt, seed,
592
+ enable_torch_compile, enable_fp8, use_taehv)
593
+ emit('status', {'message': 'Generation started - frames will be sent immediately'})
594
+
595
+
596
+ @socketio.on('stop_generation')
597
+ def handle_stop_generation():
598
+ global generation_active, stop_event, frame_send_queue
599
+ generation_active = False
600
+ stop_event.set()
601
+
602
+ # Signal sender thread to stop (will be processed after current frames)
603
+ try:
604
+ frame_send_queue.put(None)
605
+ except Exception as e:
606
+ print(f"❌ Failed to put None in frame_send_queue: {e}")
607
+
608
+ emit('status', {'message': 'Generation stopped'})
609
+
610
+ # Web routes
611
+
612
+
613
+ @app.route('/')
614
+ def index():
615
+ return render_template('demo.html')
616
+
617
+
618
+ @app.route('/api/status')
619
+ def api_status():
620
+ return jsonify({
621
+ 'generation_active': generation_active,
622
+ 'free_vram_gb': get_cuda_free_memory_gb(gpu),
623
+ 'fp8_applied': fp8_applied,
624
+ 'torch_compile_applied': torch_compile_applied,
625
+ 'current_use_taehv': current_use_taehv
626
+ })
627
+
628
+
629
+ if __name__ == '__main__':
630
+ print(f"🚀 Starting demo on http://{args.host}:{args.port}")
631
+ socketio.run(app, host=args.host, port=args.port, debug=False)
model/__init__.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Public model exports loaded on demand.
2
+
3
+ Lazy imports preserve the existing ``from model import DMD`` API while avoiding
4
+ the model/pipeline cycle introduced by the standalone Predictor module.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from importlib import import_module
10
+
11
+
12
+ _EXPORTS = {
13
+ "CausalDiffusion": ("model.diffusion", "CausalDiffusion"),
14
+ "CausVid": ("model.causvid", "CausVid"),
15
+ "DMD": ("model.dmd", "DMD"),
16
+ "GAN": ("model.gan", "GAN"),
17
+ "SiD": ("model.sid", "SiD"),
18
+ "ODERegression": ("model.ode_regression", "ODERegression"),
19
+ "SelfForcingPredictorV4": (
20
+ "model.predictor_v4",
21
+ "SelfForcingPredictorV4",
22
+ ),
23
+ "TripleFeatureFusion": ("model.predictor_v4", "TripleFeatureFusion"),
24
+ "WanPredictorV4Config": ("model.predictor_v4", "WanPredictorV4Config"),
25
+ }
26
+
27
+ __all__ = list(_EXPORTS)
28
+
29
+
30
+ def __getattr__(name: str):
31
+ if name not in _EXPORTS:
32
+ raise AttributeError(name)
33
+ module_name, attribute = _EXPORTS[name]
34
+ value = getattr(import_module(module_name), attribute)
35
+ globals()[name] = value
36
+ return value
model/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (1.13 kB). View file
 
model/__pycache__/base.cpython-310.pyc ADDED
Binary file (7.81 kB). View file
 
model/__pycache__/causvid.cpython-310.pyc ADDED
Binary file (11.1 kB). View file
 
model/__pycache__/diffusion.cpython-310.pyc ADDED
Binary file (4.09 kB). View file
 
model/__pycache__/dmd.cpython-310.pyc ADDED
Binary file (9.76 kB). View file
 
model/__pycache__/gan.cpython-310.pyc ADDED
Binary file (8.26 kB). View file
 
model/__pycache__/ode_regression.cpython-310.pyc ADDED
Binary file (4.66 kB). View file
 
model/__pycache__/predictor_v4.cpython-310.pyc ADDED
Binary file (26.1 kB). View file
 
model/__pycache__/sid.cpython-310.pyc ADDED
Binary file (7.93 kB). View file
 
model/base.py ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Tuple
2
+ from einops import rearrange
3
+ from torch import nn
4
+ import torch.distributed as dist
5
+ import torch
6
+
7
+ from pipeline import SelfForcingTrainingPipeline
8
+ from utils.loss import get_denoising_loss
9
+ from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder, WanVAEWrapper
10
+
11
+
12
+ class BaseModel(nn.Module):
13
+ def __init__(self, args, device):
14
+ super().__init__()
15
+ self._initialize_models(args, device)
16
+
17
+ self.device = device
18
+ self.args = args
19
+ self.dtype = torch.bfloat16 if args.mixed_precision else torch.float32
20
+ if hasattr(args, "denoising_step_list"):
21
+ self.denoising_step_list = torch.tensor(args.denoising_step_list, dtype=torch.long)
22
+ if args.warp_denoising_step:
23
+ timesteps = torch.cat((self.scheduler.timesteps.cpu(), torch.tensor([0], dtype=torch.float32)))
24
+ self.denoising_step_list = timesteps[1000 - self.denoising_step_list]
25
+
26
+ def _initialize_models(self, args, device):
27
+ self.real_model_name = getattr(args, "real_name", "Wan2.1-T2V-1.3B")
28
+ self.fake_model_name = getattr(args, "fake_name", "Wan2.1-T2V-1.3B")
29
+
30
+ self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
31
+ self.generator.model.requires_grad_(True)
32
+
33
+ self.real_score = WanDiffusionWrapper(model_name=self.real_model_name, is_causal=False)
34
+ self.real_score.model.requires_grad_(False)
35
+
36
+ self.fake_score = WanDiffusionWrapper(model_name=self.fake_model_name, is_causal=False)
37
+ self.fake_score.model.requires_grad_(True)
38
+
39
+ self.text_encoder = WanTextEncoder()
40
+ self.text_encoder.requires_grad_(False)
41
+
42
+ self.vae = WanVAEWrapper()
43
+ self.vae.requires_grad_(False)
44
+
45
+ self.scheduler = self.generator.get_scheduler()
46
+ self.scheduler.timesteps = self.scheduler.timesteps.to(device)
47
+
48
+ def _get_timestep(
49
+ self,
50
+ min_timestep: int,
51
+ max_timestep: int,
52
+ batch_size: int,
53
+ num_frame: int,
54
+ num_frame_per_block: int,
55
+ uniform_timestep: bool = False
56
+ ) -> torch.Tensor:
57
+ """
58
+ Randomly generate a timestep tensor based on the generator's task type. It uniformly samples a timestep
59
+ from the range [min_timestep, max_timestep], and returns a tensor of shape [batch_size, num_frame].
60
+ - If uniform_timestep, it will use the same timestep for all frames.
61
+ - If not uniform_timestep, it will use a different timestep for each block.
62
+ """
63
+ if uniform_timestep:
64
+ timestep = torch.randint(
65
+ min_timestep,
66
+ max_timestep,
67
+ [batch_size, 1],
68
+ device=self.device,
69
+ dtype=torch.long
70
+ ).repeat(1, num_frame)
71
+ return timestep
72
+ else:
73
+ timestep = torch.randint(
74
+ min_timestep,
75
+ max_timestep,
76
+ [batch_size, num_frame],
77
+ device=self.device,
78
+ dtype=torch.long
79
+ )
80
+ # make the noise level the same within every block
81
+ if self.independent_first_frame:
82
+ # the first frame is always kept the same
83
+ timestep_from_second = timestep[:, 1:]
84
+ timestep_from_second = timestep_from_second.reshape(
85
+ timestep_from_second.shape[0], -1, num_frame_per_block)
86
+ timestep_from_second[:, :, 1:] = timestep_from_second[:, :, 0:1]
87
+ timestep_from_second = timestep_from_second.reshape(
88
+ timestep_from_second.shape[0], -1)
89
+ timestep = torch.cat([timestep[:, 0:1], timestep_from_second], dim=1)
90
+ else:
91
+ timestep = timestep.reshape(
92
+ timestep.shape[0], -1, num_frame_per_block)
93
+ timestep[:, :, 1:] = timestep[:, :, 0:1]
94
+ timestep = timestep.reshape(timestep.shape[0], -1)
95
+ return timestep
96
+
97
+
98
+ class SelfForcingModel(BaseModel):
99
+ def __init__(self, args, device):
100
+ super().__init__(args, device)
101
+ self.denoising_loss_func = get_denoising_loss(args.denoising_loss_type)()
102
+
103
+ def _run_generator(
104
+ self,
105
+ image_or_video_shape,
106
+ conditional_dict: dict,
107
+ initial_latent: torch.tensor = None
108
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
109
+ """
110
+ Optionally simulate the generator's input from noise using backward simulation
111
+ and then run the generator for one-step.
112
+ Input:
113
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
114
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
115
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
116
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
117
+ - initial_latent: a tensor containing the initial latents [B, F, C, H, W].
118
+ Output:
119
+ - pred_image: a tensor with shape [B, F, C, H, W].
120
+ - denoised_timestep: an integer
121
+ """
122
+ # Step 1: Sample noise and backward simulate the generator's input
123
+ assert getattr(self.args, "backward_simulation", True), "Backward simulation needs to be enabled"
124
+ if initial_latent is not None:
125
+ conditional_dict["initial_latent"] = initial_latent
126
+ if self.args.i2v:
127
+ noise_shape = [image_or_video_shape[0], image_or_video_shape[1] - 1, *image_or_video_shape[2:]]
128
+ else:
129
+ noise_shape = image_or_video_shape.copy()
130
+
131
+ # During training, the number of generated frames should be uniformly sampled from
132
+ # [21, self.num_training_frames], but still being a multiple of self.num_frame_per_block
133
+ min_num_frames = 20 if self.args.independent_first_frame else 21
134
+ max_num_frames = self.num_training_frames - 1 if self.args.independent_first_frame else self.num_training_frames
135
+ assert max_num_frames % self.num_frame_per_block == 0
136
+ assert min_num_frames % self.num_frame_per_block == 0
137
+ max_num_blocks = max_num_frames // self.num_frame_per_block
138
+ min_num_blocks = min_num_frames // self.num_frame_per_block
139
+ num_generated_blocks = torch.randint(min_num_blocks, max_num_blocks + 1, (1,), device=self.device)
140
+ dist.broadcast(num_generated_blocks, src=0)
141
+ num_generated_blocks = num_generated_blocks.item()
142
+ num_generated_frames = num_generated_blocks * self.num_frame_per_block
143
+ if self.args.independent_first_frame and initial_latent is None:
144
+ num_generated_frames += 1
145
+ min_num_frames += 1
146
+ # Sync num_generated_frames across all processes
147
+ noise_shape[1] = num_generated_frames
148
+
149
+ pred_image_or_video, denoised_timestep_from, denoised_timestep_to = self._consistency_backward_simulation(
150
+ noise=torch.randn(noise_shape,
151
+ device=self.device, dtype=self.dtype),
152
+ **conditional_dict,
153
+ )
154
+ # Slice last 21 frames
155
+ if pred_image_or_video.shape[1] > 21:
156
+ with torch.no_grad():
157
+ # Reencode to get image latent
158
+ latent_to_decode = pred_image_or_video[:, :-20, ...]
159
+ # Deccode to video
160
+ pixels = self.vae.decode_to_pixel(latent_to_decode)
161
+ frame = pixels[:, -1:, ...].to(self.dtype)
162
+ frame = rearrange(frame, "b t c h w -> b c t h w")
163
+ # Encode frame to get image latent
164
+ image_latent = self.vae.encode_to_latent(frame).to(self.dtype)
165
+ pred_image_or_video_last_21 = torch.cat([image_latent, pred_image_or_video[:, -20:, ...]], dim=1)
166
+ else:
167
+ pred_image_or_video_last_21 = pred_image_or_video
168
+
169
+ if num_generated_frames != min_num_frames:
170
+ # Currently, we do not use gradient for the first chunk, since it contains image latents
171
+ gradient_mask = torch.ones_like(pred_image_or_video_last_21, dtype=torch.bool)
172
+ if self.args.independent_first_frame:
173
+ gradient_mask[:, :1] = False
174
+ else:
175
+ gradient_mask[:, :self.num_frame_per_block] = False
176
+ else:
177
+ gradient_mask = None
178
+
179
+ pred_image_or_video_last_21 = pred_image_or_video_last_21.to(self.dtype)
180
+ return pred_image_or_video_last_21, gradient_mask, denoised_timestep_from, denoised_timestep_to
181
+
182
+ def _consistency_backward_simulation(
183
+ self,
184
+ noise: torch.Tensor,
185
+ **conditional_dict: dict
186
+ ) -> torch.Tensor:
187
+ """
188
+ Simulate the generator's input from noise to avoid training/inference mismatch.
189
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
190
+ Here we use the consistency sampler (https://arxiv.org/abs/2303.01469)
191
+ Input:
192
+ - noise: a tensor sampled from N(0, 1) with shape [B, F, C, H, W] where the number of frame is 1 for images.
193
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
194
+ Output:
195
+ - output: a tensor with shape [B, T, F, C, H, W].
196
+ T is the total number of timesteps. output[0] is a pure noise and output[i] and i>0
197
+ represents the x0 prediction at each timestep.
198
+ """
199
+ if self.inference_pipeline is None:
200
+ self._initialize_inference_pipeline()
201
+
202
+ return self.inference_pipeline.inference_with_trajectory(
203
+ noise=noise, **conditional_dict
204
+ )
205
+
206
+ def _initialize_inference_pipeline(self):
207
+ """
208
+ Lazy initialize the inference pipeline during the first backward simulation run.
209
+ Here we encapsulate the inference code with a model-dependent outside function.
210
+ We pass our FSDP-wrapped modules into the pipeline to save memory.
211
+ """
212
+ self.inference_pipeline = SelfForcingTrainingPipeline(
213
+ denoising_step_list=self.denoising_step_list,
214
+ scheduler=self.scheduler,
215
+ generator=self.generator,
216
+ num_frame_per_block=self.num_frame_per_block,
217
+ independent_first_frame=self.args.independent_first_frame,
218
+ same_step_across_blocks=self.args.same_step_across_blocks,
219
+ last_step_only=self.args.last_step_only,
220
+ num_max_frames=self.num_training_frames,
221
+ context_noise=self.args.context_noise
222
+ )
model/causvid.py ADDED
@@ -0,0 +1,391 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn.functional as F
2
+ from typing import Tuple
3
+ import torch
4
+
5
+ from model.base import BaseModel
6
+
7
+
8
+ class CausVid(BaseModel):
9
+ def __init__(self, args, device):
10
+ """
11
+ Initialize the DMD (Distribution Matching Distillation) module.
12
+ This class is self-contained and compute generator and fake score losses
13
+ in the forward pass.
14
+ """
15
+ super().__init__(args, device)
16
+ self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
17
+ self.num_training_frames = getattr(args, "num_training_frames", 21)
18
+
19
+ if self.num_frame_per_block > 1:
20
+ self.generator.model.num_frame_per_block = self.num_frame_per_block
21
+
22
+ self.independent_first_frame = getattr(args, "independent_first_frame", False)
23
+ if self.independent_first_frame:
24
+ self.generator.model.independent_first_frame = True
25
+ if args.gradient_checkpointing:
26
+ self.generator.enable_gradient_checkpointing()
27
+ self.fake_score.enable_gradient_checkpointing()
28
+
29
+ # Step 2: Initialize all dmd hyperparameters
30
+ self.num_train_timestep = args.num_train_timestep
31
+ self.min_step = int(0.02 * self.num_train_timestep)
32
+ self.max_step = int(0.98 * self.num_train_timestep)
33
+ if hasattr(args, "real_guidance_scale"):
34
+ self.real_guidance_scale = args.real_guidance_scale
35
+ self.fake_guidance_scale = args.fake_guidance_scale
36
+ else:
37
+ self.real_guidance_scale = args.guidance_scale
38
+ self.fake_guidance_scale = 0.0
39
+ self.timestep_shift = getattr(args, "timestep_shift", 1.0)
40
+ self.teacher_forcing = getattr(args, "teacher_forcing", False)
41
+
42
+ if getattr(self.scheduler, "alphas_cumprod", None) is not None:
43
+ self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
44
+ else:
45
+ self.scheduler.alphas_cumprod = None
46
+
47
+ def _compute_kl_grad(
48
+ self, noisy_image_or_video: torch.Tensor,
49
+ estimated_clean_image_or_video: torch.Tensor,
50
+ timestep: torch.Tensor,
51
+ conditional_dict: dict, unconditional_dict: dict,
52
+ normalization: bool = True
53
+ ) -> Tuple[torch.Tensor, dict]:
54
+ """
55
+ Compute the KL grad (eq 7 in https://arxiv.org/abs/2311.18828).
56
+ Input:
57
+ - noisy_image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
58
+ - estimated_clean_image_or_video: a tensor with shape [B, F, C, H, W] representing the estimated clean image or video.
59
+ - timestep: a tensor with shape [B, F] containing the randomly generated timestep.
60
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
61
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
62
+ - normalization: a boolean indicating whether to normalize the gradient.
63
+ Output:
64
+ - kl_grad: a tensor representing the KL grad.
65
+ - kl_log_dict: a dictionary containing the intermediate tensors for logging.
66
+ """
67
+ # Step 1: Compute the fake score
68
+ _, pred_fake_image_cond = self.fake_score(
69
+ noisy_image_or_video=noisy_image_or_video,
70
+ conditional_dict=conditional_dict,
71
+ timestep=timestep
72
+ )
73
+
74
+ if self.fake_guidance_scale != 0.0:
75
+ _, pred_fake_image_uncond = self.fake_score(
76
+ noisy_image_or_video=noisy_image_or_video,
77
+ conditional_dict=unconditional_dict,
78
+ timestep=timestep
79
+ )
80
+ pred_fake_image = pred_fake_image_cond + (
81
+ pred_fake_image_cond - pred_fake_image_uncond
82
+ ) * self.fake_guidance_scale
83
+ else:
84
+ pred_fake_image = pred_fake_image_cond
85
+
86
+ # Step 2: Compute the real score
87
+ # We compute the conditional and unconditional prediction
88
+ # and add them together to achieve cfg (https://arxiv.org/abs/2207.12598)
89
+ _, pred_real_image_cond = self.real_score(
90
+ noisy_image_or_video=noisy_image_or_video,
91
+ conditional_dict=conditional_dict,
92
+ timestep=timestep
93
+ )
94
+
95
+ _, pred_real_image_uncond = self.real_score(
96
+ noisy_image_or_video=noisy_image_or_video,
97
+ conditional_dict=unconditional_dict,
98
+ timestep=timestep
99
+ )
100
+
101
+ pred_real_image = pred_real_image_cond + (
102
+ pred_real_image_cond - pred_real_image_uncond
103
+ ) * self.real_guidance_scale
104
+
105
+ # Step 3: Compute the DMD gradient (DMD paper eq. 7).
106
+ grad = (pred_fake_image - pred_real_image)
107
+
108
+ # TODO: Change the normalizer for causal teacher
109
+ if normalization:
110
+ # Step 4: Gradient normalization (DMD paper eq. 8).
111
+ p_real = (estimated_clean_image_or_video - pred_real_image)
112
+ normalizer = torch.abs(p_real).mean(dim=[1, 2, 3, 4], keepdim=True)
113
+ grad = grad / normalizer
114
+ grad = torch.nan_to_num(grad)
115
+
116
+ return grad, {
117
+ "dmdtrain_gradient_norm": torch.mean(torch.abs(grad)).detach(),
118
+ "timestep": timestep.detach()
119
+ }
120
+
121
+ def compute_distribution_matching_loss(
122
+ self,
123
+ image_or_video: torch.Tensor,
124
+ conditional_dict: dict,
125
+ unconditional_dict: dict,
126
+ gradient_mask: torch.Tensor = None,
127
+ ) -> Tuple[torch.Tensor, dict]:
128
+ """
129
+ Compute the DMD loss (eq 7 in https://arxiv.org/abs/2311.18828).
130
+ Input:
131
+ - image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
132
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
133
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
134
+ - gradient_mask: a boolean tensor with the same shape as image_or_video indicating which pixels to compute loss .
135
+ Output:
136
+ - dmd_loss: a scalar tensor representing the DMD loss.
137
+ - dmd_log_dict: a dictionary containing the intermediate tensors for logging.
138
+ """
139
+ original_latent = image_or_video
140
+
141
+ batch_size, num_frame = image_or_video.shape[:2]
142
+
143
+ with torch.no_grad():
144
+ # Step 1: Randomly sample timestep based on the given schedule and corresponding noise
145
+ timestep = self._get_timestep(
146
+ 0,
147
+ self.num_train_timestep,
148
+ batch_size,
149
+ num_frame,
150
+ self.num_frame_per_block,
151
+ uniform_timestep=True
152
+ )
153
+
154
+ if self.timestep_shift > 1:
155
+ timestep = self.timestep_shift * \
156
+ (timestep / 1000) / \
157
+ (1 + (self.timestep_shift - 1) * (timestep / 1000)) * 1000
158
+ timestep = timestep.clamp(self.min_step, self.max_step)
159
+
160
+ noise = torch.randn_like(image_or_video)
161
+ noisy_latent = self.scheduler.add_noise(
162
+ image_or_video.flatten(0, 1),
163
+ noise.flatten(0, 1),
164
+ timestep.flatten(0, 1)
165
+ ).detach().unflatten(0, (batch_size, num_frame))
166
+
167
+ # Step 2: Compute the KL grad
168
+ grad, dmd_log_dict = self._compute_kl_grad(
169
+ noisy_image_or_video=noisy_latent,
170
+ estimated_clean_image_or_video=original_latent,
171
+ timestep=timestep,
172
+ conditional_dict=conditional_dict,
173
+ unconditional_dict=unconditional_dict
174
+ )
175
+
176
+ if gradient_mask is not None:
177
+ dmd_loss = 0.5 * F.mse_loss(original_latent.double(
178
+ )[gradient_mask], (original_latent.double() - grad.double()).detach()[gradient_mask], reduction="mean")
179
+ else:
180
+ dmd_loss = 0.5 * F.mse_loss(original_latent.double(
181
+ ), (original_latent.double() - grad.double()).detach(), reduction="mean")
182
+ return dmd_loss, dmd_log_dict
183
+
184
+ def _run_generator(
185
+ self,
186
+ image_or_video_shape,
187
+ conditional_dict: dict,
188
+ clean_latent: torch.tensor
189
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
190
+ """
191
+ Optionally simulate the generator's input from noise using backward simulation
192
+ and then run the generator for one-step.
193
+ Input:
194
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
195
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
196
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
197
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
198
+ - initial_latent: a tensor containing the initial latents [B, F, C, H, W].
199
+ Output:
200
+ - pred_image: a tensor with shape [B, F, C, H, W].
201
+ """
202
+ simulated_noisy_input = []
203
+ for timestep in self.denoising_step_list:
204
+ noise = torch.randn(
205
+ image_or_video_shape, device=self.device, dtype=self.dtype)
206
+
207
+ noisy_timestep = timestep * torch.ones(
208
+ image_or_video_shape[:2], device=self.device, dtype=torch.long)
209
+
210
+ if timestep != 0:
211
+ noisy_image = self.scheduler.add_noise(
212
+ clean_latent.flatten(0, 1),
213
+ noise.flatten(0, 1),
214
+ noisy_timestep.flatten(0, 1)
215
+ ).unflatten(0, image_or_video_shape[:2])
216
+ else:
217
+ noisy_image = clean_latent
218
+
219
+ simulated_noisy_input.append(noisy_image)
220
+
221
+ simulated_noisy_input = torch.stack(simulated_noisy_input, dim=1)
222
+
223
+ # Step 2: Randomly sample a timestep and pick the corresponding input
224
+ index = self._get_timestep(
225
+ 0,
226
+ len(self.denoising_step_list),
227
+ image_or_video_shape[0],
228
+ image_or_video_shape[1],
229
+ self.num_frame_per_block,
230
+ uniform_timestep=False
231
+ )
232
+
233
+ # select the corresponding timestep's noisy input from the stacked tensor [B, T, F, C, H, W]
234
+ noisy_input = torch.gather(
235
+ simulated_noisy_input, dim=1,
236
+ index=index.reshape(index.shape[0], 1, index.shape[1], 1, 1, 1).expand(
237
+ -1, -1, -1, *image_or_video_shape[2:]).to(self.device)
238
+ ).squeeze(1)
239
+
240
+ timestep = self.denoising_step_list[index].to(self.device)
241
+
242
+ _, pred_image_or_video = self.generator(
243
+ noisy_image_or_video=noisy_input,
244
+ conditional_dict=conditional_dict,
245
+ timestep=timestep,
246
+ clean_x=clean_latent if self.teacher_forcing else None,
247
+ )
248
+
249
+ gradient_mask = None # timestep != 0
250
+
251
+ pred_image_or_video = pred_image_or_video.type_as(noisy_input)
252
+
253
+ return pred_image_or_video, gradient_mask
254
+
255
+ def generator_loss(
256
+ self,
257
+ image_or_video_shape,
258
+ conditional_dict: dict,
259
+ unconditional_dict: dict,
260
+ clean_latent: torch.Tensor,
261
+ initial_latent: torch.Tensor = None
262
+ ) -> Tuple[torch.Tensor, dict]:
263
+ """
264
+ Generate image/videos from noise and compute the DMD loss.
265
+ The noisy input to the generator is backward simulated.
266
+ This removes the need of any datasets during distillation.
267
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
268
+ Input:
269
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
270
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
271
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
272
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
273
+ Output:
274
+ - loss: a scalar tensor representing the generator loss.
275
+ - generator_log_dict: a dictionary containing the intermediate tensors for logging.
276
+ """
277
+ # Step 1: Run generator on backward simulated noisy input
278
+ pred_image, gradient_mask = self._run_generator(
279
+ image_or_video_shape=image_or_video_shape,
280
+ conditional_dict=conditional_dict,
281
+ clean_latent=clean_latent
282
+ )
283
+
284
+ # Step 2: Compute the DMD loss
285
+ dmd_loss, dmd_log_dict = self.compute_distribution_matching_loss(
286
+ image_or_video=pred_image,
287
+ conditional_dict=conditional_dict,
288
+ unconditional_dict=unconditional_dict,
289
+ gradient_mask=gradient_mask
290
+ )
291
+
292
+ # Step 3: TODO: Implement the GAN loss
293
+
294
+ return dmd_loss, dmd_log_dict
295
+
296
+ def critic_loss(
297
+ self,
298
+ image_or_video_shape,
299
+ conditional_dict: dict,
300
+ unconditional_dict: dict,
301
+ clean_latent: torch.Tensor,
302
+ initial_latent: torch.Tensor = None
303
+ ) -> Tuple[torch.Tensor, dict]:
304
+ """
305
+ Generate image/videos from noise and train the critic with generated samples.
306
+ The noisy input to the generator is backward simulated.
307
+ This removes the need of any datasets during distillation.
308
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
309
+ Input:
310
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
311
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
312
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
313
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
314
+ Output:
315
+ - loss: a scalar tensor representing the generator loss.
316
+ - critic_log_dict: a dictionary containing the intermediate tensors for logging.
317
+ """
318
+
319
+ # Step 1: Run generator on backward simulated noisy input
320
+ with torch.no_grad():
321
+ generated_image, _ = self._run_generator(
322
+ image_or_video_shape=image_or_video_shape,
323
+ conditional_dict=conditional_dict,
324
+ clean_latent=clean_latent
325
+ )
326
+
327
+ # Step 2: Compute the fake prediction
328
+ critic_timestep = self._get_timestep(
329
+ 0,
330
+ self.num_train_timestep,
331
+ image_or_video_shape[0],
332
+ image_or_video_shape[1],
333
+ self.num_frame_per_block,
334
+ uniform_timestep=True
335
+ )
336
+
337
+ if self.timestep_shift > 1:
338
+ critic_timestep = self.timestep_shift * \
339
+ (critic_timestep / 1000) / (1 + (self.timestep_shift - 1) * (critic_timestep / 1000)) * 1000
340
+
341
+ critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
342
+
343
+ critic_noise = torch.randn_like(generated_image)
344
+ noisy_generated_image = self.scheduler.add_noise(
345
+ generated_image.flatten(0, 1),
346
+ critic_noise.flatten(0, 1),
347
+ critic_timestep.flatten(0, 1)
348
+ ).unflatten(0, image_or_video_shape[:2])
349
+
350
+ _, pred_fake_image = self.fake_score(
351
+ noisy_image_or_video=noisy_generated_image,
352
+ conditional_dict=conditional_dict,
353
+ timestep=critic_timestep
354
+ )
355
+
356
+ # Step 3: Compute the denoising loss for the fake critic
357
+ if self.args.denoising_loss_type == "flow":
358
+ from utils.wan_wrapper import WanDiffusionWrapper
359
+ flow_pred = WanDiffusionWrapper._convert_x0_to_flow_pred(
360
+ scheduler=self.scheduler,
361
+ x0_pred=pred_fake_image.flatten(0, 1),
362
+ xt=noisy_generated_image.flatten(0, 1),
363
+ timestep=critic_timestep.flatten(0, 1)
364
+ )
365
+ pred_fake_noise = None
366
+ else:
367
+ flow_pred = None
368
+ pred_fake_noise = self.scheduler.convert_x0_to_noise(
369
+ x0=pred_fake_image.flatten(0, 1),
370
+ xt=noisy_generated_image.flatten(0, 1),
371
+ timestep=critic_timestep.flatten(0, 1)
372
+ ).unflatten(0, image_or_video_shape[:2])
373
+
374
+ denoising_loss = self.denoising_loss_func(
375
+ x=generated_image.flatten(0, 1),
376
+ x_pred=pred_fake_image.flatten(0, 1),
377
+ noise=critic_noise.flatten(0, 1),
378
+ noise_pred=pred_fake_noise,
379
+ alphas_cumprod=self.scheduler.alphas_cumprod,
380
+ timestep=critic_timestep.flatten(0, 1),
381
+ flow_pred=flow_pred
382
+ )
383
+
384
+ # Step 4: TODO: Compute the GAN loss
385
+
386
+ # Step 5: Debugging Log
387
+ critic_log_dict = {
388
+ "critic_timestep": critic_timestep.detach()
389
+ }
390
+
391
+ return denoising_loss, critic_log_dict
model/diffusion.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Tuple
2
+ import torch
3
+
4
+ from model.base import BaseModel
5
+ from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder, WanVAEWrapper
6
+
7
+
8
+ class CausalDiffusion(BaseModel):
9
+ def __init__(self, args, device):
10
+ """
11
+ Initialize the Diffusion loss module.
12
+ """
13
+ super().__init__(args, device)
14
+ self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
15
+ if self.num_frame_per_block > 1:
16
+ self.generator.model.num_frame_per_block = self.num_frame_per_block
17
+ self.independent_first_frame = getattr(args, "independent_first_frame", False)
18
+ if self.independent_first_frame:
19
+ self.generator.model.independent_first_frame = True
20
+
21
+ if args.gradient_checkpointing:
22
+ self.generator.enable_gradient_checkpointing()
23
+
24
+ # Step 2: Initialize all hyperparameters
25
+ self.num_train_timestep = args.num_train_timestep
26
+ self.min_step = int(0.02 * self.num_train_timestep)
27
+ self.max_step = int(0.98 * self.num_train_timestep)
28
+ self.guidance_scale = args.guidance_scale
29
+ self.timestep_shift = getattr(args, "timestep_shift", 1.0)
30
+ self.teacher_forcing = getattr(args, "teacher_forcing", False)
31
+ # Noise augmentation in teacher forcing, we add small noise to clean context latents
32
+ self.noise_augmentation_max_timestep = getattr(args, "noise_augmentation_max_timestep", 0)
33
+
34
+ def _initialize_models(self, args):
35
+ self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
36
+ self.generator.model.requires_grad_(True)
37
+
38
+ self.text_encoder = WanTextEncoder()
39
+ self.text_encoder.requires_grad_(False)
40
+
41
+ self.vae = WanVAEWrapper()
42
+ self.vae.requires_grad_(False)
43
+
44
+ def generator_loss(
45
+ self,
46
+ image_or_video_shape,
47
+ conditional_dict: dict,
48
+ unconditional_dict: dict,
49
+ clean_latent: torch.Tensor,
50
+ initial_latent: torch.Tensor = None
51
+ ) -> Tuple[torch.Tensor, dict]:
52
+ """
53
+ Generate image/videos from noise and compute the DMD loss.
54
+ The noisy input to the generator is backward simulated.
55
+ This removes the need of any datasets during distillation.
56
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
57
+ Input:
58
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
59
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
60
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
61
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
62
+ Output:
63
+ - loss: a scalar tensor representing the generator loss.
64
+ - generator_log_dict: a dictionary containing the intermediate tensors for logging.
65
+ """
66
+ noise = torch.randn_like(clean_latent)
67
+ batch_size, num_frame = image_or_video_shape[:2]
68
+
69
+ # Step 2: Randomly sample a timestep and add noise to denoiser inputs
70
+ index = self._get_timestep(
71
+ 0,
72
+ self.scheduler.num_train_timesteps,
73
+ image_or_video_shape[0],
74
+ image_or_video_shape[1],
75
+ self.num_frame_per_block,
76
+ uniform_timestep=False
77
+ )
78
+ timestep = self.scheduler.timesteps[index].to(dtype=self.dtype, device=self.device)
79
+ noisy_latents = self.scheduler.add_noise(
80
+ clean_latent.flatten(0, 1),
81
+ noise.flatten(0, 1),
82
+ timestep.flatten(0, 1)
83
+ ).unflatten(0, (batch_size, num_frame))
84
+ training_target = self.scheduler.training_target(clean_latent, noise, timestep)
85
+
86
+ # Step 3: Noise augmentation, also add small noise to clean context latents
87
+ if self.noise_augmentation_max_timestep > 0:
88
+ index_clean_aug = self._get_timestep(
89
+ 0,
90
+ self.noise_augmentation_max_timestep,
91
+ image_or_video_shape[0],
92
+ image_or_video_shape[1],
93
+ self.num_frame_per_block,
94
+ uniform_timestep=False
95
+ )
96
+ timestep_clean_aug = self.scheduler.timesteps[index_clean_aug].to(dtype=self.dtype, device=self.device)
97
+ clean_latent_aug = self.scheduler.add_noise(
98
+ clean_latent.flatten(0, 1),
99
+ noise.flatten(0, 1),
100
+ timestep_clean_aug.flatten(0, 1)
101
+ ).unflatten(0, (batch_size, num_frame))
102
+ else:
103
+ clean_latent_aug = clean_latent
104
+ timestep_clean_aug = None
105
+
106
+ # Compute loss
107
+ flow_pred, x0_pred = self.generator(
108
+ noisy_image_or_video=noisy_latents,
109
+ conditional_dict=conditional_dict,
110
+ timestep=timestep,
111
+ clean_x=clean_latent_aug if self.teacher_forcing else None,
112
+ aug_t=timestep_clean_aug if self.teacher_forcing else None
113
+ )
114
+ # loss = torch.nn.functional.mse_loss(flow_pred.float(), training_target.float())
115
+ loss = torch.nn.functional.mse_loss(
116
+ flow_pred.float(), training_target.float(), reduction='none'
117
+ ).mean(dim=(2, 3, 4))
118
+ loss = loss * self.scheduler.training_weight(timestep).unflatten(0, (batch_size, num_frame))
119
+ loss = loss.mean()
120
+
121
+ log_dict = {
122
+ "x0": clean_latent.detach(),
123
+ "x0_pred": x0_pred.detach()
124
+ }
125
+ return loss, log_dict
model/dmd.py ADDED
@@ -0,0 +1,332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pipeline import SelfForcingTrainingPipeline
2
+ import torch.nn.functional as F
3
+ from typing import Optional, Tuple
4
+ import torch
5
+
6
+ from model.base import SelfForcingModel
7
+
8
+
9
+ class DMD(SelfForcingModel):
10
+ def __init__(self, args, device):
11
+ """
12
+ Initialize the DMD (Distribution Matching Distillation) module.
13
+ This class is self-contained and compute generator and fake score losses
14
+ in the forward pass.
15
+ """
16
+ super().__init__(args, device)
17
+ self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
18
+ self.same_step_across_blocks = getattr(args, "same_step_across_blocks", True)
19
+ self.num_training_frames = getattr(args, "num_training_frames", 21)
20
+
21
+ if self.num_frame_per_block > 1:
22
+ self.generator.model.num_frame_per_block = self.num_frame_per_block
23
+
24
+ self.independent_first_frame = getattr(args, "independent_first_frame", False)
25
+ if self.independent_first_frame:
26
+ self.generator.model.independent_first_frame = True
27
+ if args.gradient_checkpointing:
28
+ self.generator.enable_gradient_checkpointing()
29
+ self.fake_score.enable_gradient_checkpointing()
30
+
31
+ # this will be init later with fsdp-wrapped modules
32
+ self.inference_pipeline: SelfForcingTrainingPipeline = None
33
+
34
+ # Step 2: Initialize all dmd hyperparameters
35
+ self.num_train_timestep = args.num_train_timestep
36
+ self.min_step = int(0.02 * self.num_train_timestep)
37
+ self.max_step = int(0.98 * self.num_train_timestep)
38
+ if hasattr(args, "real_guidance_scale"):
39
+ self.real_guidance_scale = args.real_guidance_scale
40
+ self.fake_guidance_scale = args.fake_guidance_scale
41
+ else:
42
+ self.real_guidance_scale = args.guidance_scale
43
+ self.fake_guidance_scale = 0.0
44
+ self.timestep_shift = getattr(args, "timestep_shift", 1.0)
45
+ self.ts_schedule = getattr(args, "ts_schedule", True)
46
+ self.ts_schedule_max = getattr(args, "ts_schedule_max", False)
47
+ self.min_score_timestep = getattr(args, "min_score_timestep", 0)
48
+
49
+ if getattr(self.scheduler, "alphas_cumprod", None) is not None:
50
+ self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
51
+ else:
52
+ self.scheduler.alphas_cumprod = None
53
+
54
+ def _compute_kl_grad(
55
+ self, noisy_image_or_video: torch.Tensor,
56
+ estimated_clean_image_or_video: torch.Tensor,
57
+ timestep: torch.Tensor,
58
+ conditional_dict: dict, unconditional_dict: dict,
59
+ normalization: bool = True
60
+ ) -> Tuple[torch.Tensor, dict]:
61
+ """
62
+ Compute the KL grad (eq 7 in https://arxiv.org/abs/2311.18828).
63
+ Input:
64
+ - noisy_image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
65
+ - estimated_clean_image_or_video: a tensor with shape [B, F, C, H, W] representing the estimated clean image or video.
66
+ - timestep: a tensor with shape [B, F] containing the randomly generated timestep.
67
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
68
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
69
+ - normalization: a boolean indicating whether to normalize the gradient.
70
+ Output:
71
+ - kl_grad: a tensor representing the KL grad.
72
+ - kl_log_dict: a dictionary containing the intermediate tensors for logging.
73
+ """
74
+ # Step 1: Compute the fake score
75
+ _, pred_fake_image_cond = self.fake_score(
76
+ noisy_image_or_video=noisy_image_or_video,
77
+ conditional_dict=conditional_dict,
78
+ timestep=timestep
79
+ )
80
+
81
+ if self.fake_guidance_scale != 0.0:
82
+ _, pred_fake_image_uncond = self.fake_score(
83
+ noisy_image_or_video=noisy_image_or_video,
84
+ conditional_dict=unconditional_dict,
85
+ timestep=timestep
86
+ )
87
+ pred_fake_image = pred_fake_image_cond + (
88
+ pred_fake_image_cond - pred_fake_image_uncond
89
+ ) * self.fake_guidance_scale
90
+ else:
91
+ pred_fake_image = pred_fake_image_cond
92
+
93
+ # Step 2: Compute the real score
94
+ # We compute the conditional and unconditional prediction
95
+ # and add them together to achieve cfg (https://arxiv.org/abs/2207.12598)
96
+ _, pred_real_image_cond = self.real_score(
97
+ noisy_image_or_video=noisy_image_or_video,
98
+ conditional_dict=conditional_dict,
99
+ timestep=timestep
100
+ )
101
+
102
+ _, pred_real_image_uncond = self.real_score(
103
+ noisy_image_or_video=noisy_image_or_video,
104
+ conditional_dict=unconditional_dict,
105
+ timestep=timestep
106
+ )
107
+
108
+ pred_real_image = pred_real_image_cond + (
109
+ pred_real_image_cond - pred_real_image_uncond
110
+ ) * self.real_guidance_scale
111
+
112
+ # Step 3: Compute the DMD gradient (DMD paper eq. 7).
113
+ grad = (pred_fake_image - pred_real_image)
114
+
115
+ # TODO: Change the normalizer for causal teacher
116
+ if normalization:
117
+ # Step 4: Gradient normalization (DMD paper eq. 8).
118
+ p_real = (estimated_clean_image_or_video - pred_real_image)
119
+ normalizer = torch.abs(p_real).mean(dim=[1, 2, 3, 4], keepdim=True)
120
+ grad = grad / normalizer
121
+ grad = torch.nan_to_num(grad)
122
+
123
+ return grad, {
124
+ "dmdtrain_gradient_norm": torch.mean(torch.abs(grad)).detach(),
125
+ "timestep": timestep.detach()
126
+ }
127
+
128
+ def compute_distribution_matching_loss(
129
+ self,
130
+ image_or_video: torch.Tensor,
131
+ conditional_dict: dict,
132
+ unconditional_dict: dict,
133
+ gradient_mask: Optional[torch.Tensor] = None,
134
+ denoised_timestep_from: int = 0,
135
+ denoised_timestep_to: int = 0
136
+ ) -> Tuple[torch.Tensor, dict]:
137
+ """
138
+ Compute the DMD loss (eq 7 in https://arxiv.org/abs/2311.18828).
139
+ Input:
140
+ - image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
141
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
142
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
143
+ - gradient_mask: a boolean tensor with the same shape as image_or_video indicating which pixels to compute loss .
144
+ Output:
145
+ - dmd_loss: a scalar tensor representing the DMD loss.
146
+ - dmd_log_dict: a dictionary containing the intermediate tensors for logging.
147
+ """
148
+ original_latent = image_or_video
149
+
150
+ batch_size, num_frame = image_or_video.shape[:2]
151
+
152
+ with torch.no_grad():
153
+ # Step 1: Randomly sample timestep based on the given schedule and corresponding noise
154
+ min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
155
+ max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
156
+ timestep = self._get_timestep(
157
+ min_timestep,
158
+ max_timestep,
159
+ batch_size,
160
+ num_frame,
161
+ self.num_frame_per_block,
162
+ uniform_timestep=True
163
+ )
164
+
165
+ # TODO:should we change it to `timestep = self.scheduler.timesteps[timestep]`?
166
+ if self.timestep_shift > 1:
167
+ timestep = self.timestep_shift * \
168
+ (timestep / 1000) / \
169
+ (1 + (self.timestep_shift - 1) * (timestep / 1000)) * 1000
170
+ timestep = timestep.clamp(self.min_step, self.max_step)
171
+
172
+ noise = torch.randn_like(image_or_video)
173
+ noisy_latent = self.scheduler.add_noise(
174
+ image_or_video.flatten(0, 1),
175
+ noise.flatten(0, 1),
176
+ timestep.flatten(0, 1)
177
+ ).detach().unflatten(0, (batch_size, num_frame))
178
+
179
+ # Step 2: Compute the KL grad
180
+ grad, dmd_log_dict = self._compute_kl_grad(
181
+ noisy_image_or_video=noisy_latent,
182
+ estimated_clean_image_or_video=original_latent,
183
+ timestep=timestep,
184
+ conditional_dict=conditional_dict,
185
+ unconditional_dict=unconditional_dict
186
+ )
187
+
188
+ if gradient_mask is not None:
189
+ dmd_loss = 0.5 * F.mse_loss(original_latent.double(
190
+ )[gradient_mask], (original_latent.double() - grad.double()).detach()[gradient_mask], reduction="mean")
191
+ else:
192
+ dmd_loss = 0.5 * F.mse_loss(original_latent.double(
193
+ ), (original_latent.double() - grad.double()).detach(), reduction="mean")
194
+ return dmd_loss, dmd_log_dict
195
+
196
+ def generator_loss(
197
+ self,
198
+ image_or_video_shape,
199
+ conditional_dict: dict,
200
+ unconditional_dict: dict,
201
+ clean_latent: torch.Tensor,
202
+ initial_latent: torch.Tensor = None
203
+ ) -> Tuple[torch.Tensor, dict]:
204
+ """
205
+ Generate image/videos from noise and compute the DMD loss.
206
+ The noisy input to the generator is backward simulated.
207
+ This removes the need of any datasets during distillation.
208
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
209
+ Input:
210
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
211
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
212
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
213
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
214
+ Output:
215
+ - loss: a scalar tensor representing the generator loss.
216
+ - generator_log_dict: a dictionary containing the intermediate tensors for logging.
217
+ """
218
+ # Step 1: Unroll generator to obtain fake videos
219
+ pred_image, gradient_mask, denoised_timestep_from, denoised_timestep_to = self._run_generator(
220
+ image_or_video_shape=image_or_video_shape,
221
+ conditional_dict=conditional_dict,
222
+ initial_latent=initial_latent
223
+ )
224
+
225
+ # Step 2: Compute the DMD loss
226
+ dmd_loss, dmd_log_dict = self.compute_distribution_matching_loss(
227
+ image_or_video=pred_image,
228
+ conditional_dict=conditional_dict,
229
+ unconditional_dict=unconditional_dict,
230
+ gradient_mask=gradient_mask,
231
+ denoised_timestep_from=denoised_timestep_from,
232
+ denoised_timestep_to=denoised_timestep_to
233
+ )
234
+
235
+ return dmd_loss, dmd_log_dict
236
+
237
+ def critic_loss(
238
+ self,
239
+ image_or_video_shape,
240
+ conditional_dict: dict,
241
+ unconditional_dict: dict,
242
+ clean_latent: torch.Tensor,
243
+ initial_latent: torch.Tensor = None
244
+ ) -> Tuple[torch.Tensor, dict]:
245
+ """
246
+ Generate image/videos from noise and train the critic with generated samples.
247
+ The noisy input to the generator is backward simulated.
248
+ This removes the need of any datasets during distillation.
249
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
250
+ Input:
251
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
252
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
253
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
254
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
255
+ Output:
256
+ - loss: a scalar tensor representing the generator loss.
257
+ - critic_log_dict: a dictionary containing the intermediate tensors for logging.
258
+ """
259
+
260
+ # Step 1: Run generator on backward simulated noisy input
261
+ with torch.no_grad():
262
+ generated_image, _, denoised_timestep_from, denoised_timestep_to = self._run_generator(
263
+ image_or_video_shape=image_or_video_shape,
264
+ conditional_dict=conditional_dict,
265
+ initial_latent=initial_latent
266
+ )
267
+
268
+ # Step 2: Compute the fake prediction
269
+ min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
270
+ max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
271
+ critic_timestep = self._get_timestep(
272
+ min_timestep,
273
+ max_timestep,
274
+ image_or_video_shape[0],
275
+ image_or_video_shape[1],
276
+ self.num_frame_per_block,
277
+ uniform_timestep=True
278
+ )
279
+
280
+ if self.timestep_shift > 1:
281
+ critic_timestep = self.timestep_shift * \
282
+ (critic_timestep / 1000) / (1 + (self.timestep_shift - 1) * (critic_timestep / 1000)) * 1000
283
+
284
+ critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
285
+
286
+ critic_noise = torch.randn_like(generated_image)
287
+ noisy_generated_image = self.scheduler.add_noise(
288
+ generated_image.flatten(0, 1),
289
+ critic_noise.flatten(0, 1),
290
+ critic_timestep.flatten(0, 1)
291
+ ).unflatten(0, image_or_video_shape[:2])
292
+
293
+ _, pred_fake_image = self.fake_score(
294
+ noisy_image_or_video=noisy_generated_image,
295
+ conditional_dict=conditional_dict,
296
+ timestep=critic_timestep
297
+ )
298
+
299
+ # Step 3: Compute the denoising loss for the fake critic
300
+ if self.args.denoising_loss_type == "flow":
301
+ from utils.wan_wrapper import WanDiffusionWrapper
302
+ flow_pred = WanDiffusionWrapper._convert_x0_to_flow_pred(
303
+ scheduler=self.scheduler,
304
+ x0_pred=pred_fake_image.flatten(0, 1),
305
+ xt=noisy_generated_image.flatten(0, 1),
306
+ timestep=critic_timestep.flatten(0, 1)
307
+ )
308
+ pred_fake_noise = None
309
+ else:
310
+ flow_pred = None
311
+ pred_fake_noise = self.scheduler.convert_x0_to_noise(
312
+ x0=pred_fake_image.flatten(0, 1),
313
+ xt=noisy_generated_image.flatten(0, 1),
314
+ timestep=critic_timestep.flatten(0, 1)
315
+ ).unflatten(0, image_or_video_shape[:2])
316
+
317
+ denoising_loss = self.denoising_loss_func(
318
+ x=generated_image.flatten(0, 1),
319
+ x_pred=pred_fake_image.flatten(0, 1),
320
+ noise=critic_noise.flatten(0, 1),
321
+ noise_pred=pred_fake_noise,
322
+ alphas_cumprod=self.scheduler.alphas_cumprod,
323
+ timestep=critic_timestep.flatten(0, 1),
324
+ flow_pred=flow_pred
325
+ )
326
+
327
+ # Step 5: Debugging Log
328
+ critic_log_dict = {
329
+ "critic_timestep": critic_timestep.detach()
330
+ }
331
+
332
+ return denoising_loss, critic_log_dict
model/gan.py ADDED
@@ -0,0 +1,295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import copy
2
+ from pipeline import SelfForcingTrainingPipeline
3
+ import torch.nn.functional as F
4
+ from typing import Tuple
5
+ import torch
6
+
7
+ from model.base import SelfForcingModel
8
+
9
+
10
+ class GAN(SelfForcingModel):
11
+ def __init__(self, args, device):
12
+ """
13
+ Initialize the GAN module.
14
+ This class is self-contained and compute generator and fake score losses
15
+ in the forward pass.
16
+ """
17
+ super().__init__(args, device)
18
+ self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
19
+ self.same_step_across_blocks = getattr(args, "same_step_across_blocks", True)
20
+ self.concat_time_embeddings = getattr(args, "concat_time_embeddings", False)
21
+ self.num_class = args.num_class
22
+ self.relativistic_discriminator = getattr(args, "relativistic_discriminator", False)
23
+
24
+ if self.num_frame_per_block > 1:
25
+ self.generator.model.num_frame_per_block = self.num_frame_per_block
26
+
27
+ self.fake_score.adding_cls_branch(
28
+ atten_dim=1536, num_class=args.num_class, time_embed_dim=1536 if self.concat_time_embeddings else 0)
29
+ self.fake_score.model.requires_grad_(True)
30
+
31
+ self.independent_first_frame = getattr(args, "independent_first_frame", False)
32
+ if self.independent_first_frame:
33
+ self.generator.model.independent_first_frame = True
34
+ if args.gradient_checkpointing:
35
+ self.generator.enable_gradient_checkpointing()
36
+ self.fake_score.enable_gradient_checkpointing()
37
+
38
+ # this will be init later with fsdp-wrapped modules
39
+ self.inference_pipeline: SelfForcingTrainingPipeline = None
40
+
41
+ # Step 2: Initialize all dmd hyperparameters
42
+ self.num_train_timestep = args.num_train_timestep
43
+ self.min_step = int(0.02 * self.num_train_timestep)
44
+ self.max_step = int(0.98 * self.num_train_timestep)
45
+ if hasattr(args, "real_guidance_scale"):
46
+ self.real_guidance_scale = args.real_guidance_scale
47
+ self.fake_guidance_scale = args.fake_guidance_scale
48
+ else:
49
+ self.real_guidance_scale = args.guidance_scale
50
+ self.fake_guidance_scale = 0.0
51
+ self.timestep_shift = getattr(args, "timestep_shift", 1.0)
52
+ self.critic_timestep_shift = getattr(args, "critic_timestep_shift", self.timestep_shift)
53
+ self.ts_schedule = getattr(args, "ts_schedule", True)
54
+ self.ts_schedule_max = getattr(args, "ts_schedule_max", False)
55
+ self.min_score_timestep = getattr(args, "min_score_timestep", 0)
56
+
57
+ self.gan_g_weight = getattr(args, "gan_g_weight", 1e-2)
58
+ self.gan_d_weight = getattr(args, "gan_d_weight", 1e-2)
59
+ self.r1_weight = getattr(args, "r1_weight", 0.0)
60
+ self.r2_weight = getattr(args, "r2_weight", 0.0)
61
+ self.r1_sigma = getattr(args, "r1_sigma", 0.01)
62
+ self.r2_sigma = getattr(args, "r2_sigma", 0.01)
63
+
64
+ if getattr(self.scheduler, "alphas_cumprod", None) is not None:
65
+ self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
66
+ else:
67
+ self.scheduler.alphas_cumprod = None
68
+
69
+ def _run_cls_pred_branch(self,
70
+ noisy_image_or_video: torch.Tensor,
71
+ conditional_dict: dict,
72
+ timestep: torch.Tensor) -> torch.Tensor:
73
+ """
74
+ Run the classifier prediction branch on the generated image or video.
75
+ Input:
76
+ - image_or_video: a tensor with shape [B, F, C, H, W].
77
+ Output:
78
+ - cls_pred: a tensor with shape [B, 1, 1, 1, 1] representing the feature map for classification.
79
+ """
80
+ _, _, noisy_logit = self.fake_score(
81
+ noisy_image_or_video=noisy_image_or_video,
82
+ conditional_dict=conditional_dict,
83
+ timestep=timestep,
84
+ classify_mode=True,
85
+ concat_time_embeddings=self.concat_time_embeddings
86
+ )
87
+
88
+ return noisy_logit
89
+
90
+ def generator_loss(
91
+ self,
92
+ image_or_video_shape,
93
+ conditional_dict: dict,
94
+ unconditional_dict: dict,
95
+ clean_latent: torch.Tensor,
96
+ initial_latent: torch.Tensor = None
97
+ ) -> Tuple[torch.Tensor, dict]:
98
+ """
99
+ Generate image/videos from noise and compute the DMD loss.
100
+ The noisy input to the generator is backward simulated.
101
+ This removes the need of any datasets during distillation.
102
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
103
+ Input:
104
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
105
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
106
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
107
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
108
+ Output:
109
+ - loss: a scalar tensor representing the generator loss.
110
+ - generator_log_dict: a dictionary containing the intermediate tensors for logging.
111
+ """
112
+ # Step 1: Unroll generator to obtain fake videos
113
+ pred_image, gradient_mask, denoised_timestep_from, denoised_timestep_to = self._run_generator(
114
+ image_or_video_shape=image_or_video_shape,
115
+ conditional_dict=conditional_dict,
116
+ initial_latent=initial_latent
117
+ )
118
+
119
+ # Step 2: Get timestep and add noise to generated/real latents
120
+ min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
121
+ max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
122
+ critic_timestep = self._get_timestep(
123
+ min_timestep,
124
+ max_timestep,
125
+ image_or_video_shape[0],
126
+ image_or_video_shape[1],
127
+ self.num_frame_per_block,
128
+ uniform_timestep=True
129
+ )
130
+
131
+ if self.critic_timestep_shift > 1:
132
+ critic_timestep = self.critic_timestep_shift * \
133
+ (critic_timestep / 1000) / (1 + (self.critic_timestep_shift - 1) * (critic_timestep / 1000)) * 1000
134
+
135
+ critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
136
+
137
+ critic_noise = torch.randn_like(pred_image)
138
+ noisy_fake_latent = self.scheduler.add_noise(
139
+ pred_image.flatten(0, 1),
140
+ critic_noise.flatten(0, 1),
141
+ critic_timestep.flatten(0, 1)
142
+ ).unflatten(0, image_or_video_shape[:2])
143
+
144
+ # Step 4: Compute the real GAN discriminator loss
145
+ real_image_or_video = clean_latent.clone()
146
+ critic_noise = torch.randn_like(real_image_or_video)
147
+ noisy_real_latent = self.scheduler.add_noise(
148
+ real_image_or_video.flatten(0, 1),
149
+ critic_noise.flatten(0, 1),
150
+ critic_timestep.flatten(0, 1)
151
+ ).unflatten(0, image_or_video_shape[:2])
152
+
153
+ conditional_dict["prompt_embeds"] = torch.concatenate(
154
+ (conditional_dict["prompt_embeds"], conditional_dict["prompt_embeds"]), dim=0)
155
+ critic_timestep = torch.concatenate((critic_timestep, critic_timestep), dim=0)
156
+ noisy_latent = torch.concatenate((noisy_fake_latent, noisy_real_latent), dim=0)
157
+ _, _, noisy_logit = self.fake_score(
158
+ noisy_image_or_video=noisy_latent,
159
+ conditional_dict=conditional_dict,
160
+ timestep=critic_timestep,
161
+ classify_mode=True,
162
+ concat_time_embeddings=self.concat_time_embeddings
163
+ )
164
+ noisy_fake_logit, noisy_real_logit = noisy_logit.chunk(2, dim=0)
165
+
166
+ if not self.relativistic_discriminator:
167
+ gan_G_loss = F.softplus(-noisy_fake_logit.float()).mean() * self.gan_g_weight
168
+ else:
169
+ relative_fake_logit = noisy_fake_logit - noisy_real_logit
170
+ gan_G_loss = F.softplus(-relative_fake_logit.float()).mean() * self.gan_g_weight
171
+
172
+ return gan_G_loss
173
+
174
+ def critic_loss(
175
+ self,
176
+ image_or_video_shape,
177
+ conditional_dict: dict,
178
+ unconditional_dict: dict,
179
+ clean_latent: torch.Tensor,
180
+ real_image_or_video: torch.Tensor,
181
+ initial_latent: torch.Tensor = None
182
+ ) -> Tuple[torch.Tensor, dict]:
183
+ """
184
+ Generate image/videos from noise and train the critic with generated samples.
185
+ The noisy input to the generator is backward simulated.
186
+ This removes the need of any datasets during distillation.
187
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
188
+ Input:
189
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
190
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
191
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
192
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
193
+ Output:
194
+ - loss: a scalar tensor representing the generator loss.
195
+ - critic_log_dict: a dictionary containing the intermediate tensors for logging.
196
+ """
197
+
198
+ # Step 1: Run generator on backward simulated noisy input
199
+ with torch.no_grad():
200
+ generated_image, _, denoised_timestep_from, denoised_timestep_to, num_sim_steps = self._run_generator(
201
+ image_or_video_shape=image_or_video_shape,
202
+ conditional_dict=conditional_dict,
203
+ initial_latent=initial_latent
204
+ )
205
+
206
+ # Step 2: Get timestep and add noise to generated/real latents
207
+ min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
208
+ max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
209
+ critic_timestep = self._get_timestep(
210
+ min_timestep,
211
+ max_timestep,
212
+ image_or_video_shape[0],
213
+ image_or_video_shape[1],
214
+ self.num_frame_per_block,
215
+ uniform_timestep=True
216
+ )
217
+
218
+ if self.critic_timestep_shift > 1:
219
+ critic_timestep = self.critic_timestep_shift * \
220
+ (critic_timestep / 1000) / (1 + (self.critic_timestep_shift - 1) * (critic_timestep / 1000)) * 1000
221
+
222
+ critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
223
+
224
+ critic_noise = torch.randn_like(generated_image)
225
+ noisy_fake_latent = self.scheduler.add_noise(
226
+ generated_image.flatten(0, 1),
227
+ critic_noise.flatten(0, 1),
228
+ critic_timestep.flatten(0, 1)
229
+ ).unflatten(0, image_or_video_shape[:2])
230
+
231
+ # Step 4: Compute the real GAN discriminator loss
232
+ noisy_real_latent = self.scheduler.add_noise(
233
+ real_image_or_video.flatten(0, 1),
234
+ critic_noise.flatten(0, 1),
235
+ critic_timestep.flatten(0, 1)
236
+ ).unflatten(0, image_or_video_shape[:2])
237
+
238
+ conditional_dict_cloned = copy.deepcopy(conditional_dict)
239
+ conditional_dict_cloned["prompt_embeds"] = torch.concatenate(
240
+ (conditional_dict_cloned["prompt_embeds"], conditional_dict_cloned["prompt_embeds"]), dim=0)
241
+ _, _, noisy_logit = self.fake_score(
242
+ noisy_image_or_video=torch.concatenate((noisy_fake_latent, noisy_real_latent), dim=0),
243
+ conditional_dict=conditional_dict_cloned,
244
+ timestep=torch.concatenate((critic_timestep, critic_timestep), dim=0),
245
+ classify_mode=True,
246
+ concat_time_embeddings=self.concat_time_embeddings
247
+ )
248
+ noisy_fake_logit, noisy_real_logit = noisy_logit.chunk(2, dim=0)
249
+
250
+ if not self.relativistic_discriminator:
251
+ gan_D_loss = F.softplus(-noisy_real_logit.float()).mean() + F.softplus(noisy_fake_logit.float()).mean()
252
+ else:
253
+ relative_real_logit = noisy_real_logit - noisy_fake_logit
254
+ gan_D_loss = F.softplus(-relative_real_logit.float()).mean()
255
+ gan_D_loss = gan_D_loss * self.gan_d_weight
256
+
257
+ # R1 regularization
258
+ if self.r1_weight > 0.:
259
+ noisy_real_latent_perturbed = noisy_real_latent.clone()
260
+ epison_real = self.r1_sigma * torch.randn_like(noisy_real_latent_perturbed)
261
+ noisy_real_latent_perturbed = noisy_real_latent_perturbed + epison_real
262
+ noisy_real_logit_perturbed = self._run_cls_pred_branch(
263
+ noisy_image_or_video=noisy_real_latent_perturbed,
264
+ conditional_dict=conditional_dict,
265
+ timestep=critic_timestep
266
+ )
267
+
268
+ r1_grad = (noisy_real_logit_perturbed - noisy_real_logit) / self.r1_sigma
269
+ r1_loss = self.r1_weight * torch.mean((r1_grad)**2)
270
+ else:
271
+ r1_loss = torch.zeros_like(gan_D_loss)
272
+
273
+ # R2 regularization
274
+ if self.r2_weight > 0.:
275
+ noisy_fake_latent_perturbed = noisy_fake_latent.clone()
276
+ epison_generated = self.r2_sigma * torch.randn_like(noisy_fake_latent_perturbed)
277
+ noisy_fake_latent_perturbed = noisy_fake_latent_perturbed + epison_generated
278
+ noisy_fake_logit_perturbed = self._run_cls_pred_branch(
279
+ noisy_image_or_video=noisy_fake_latent_perturbed,
280
+ conditional_dict=conditional_dict,
281
+ timestep=critic_timestep
282
+ )
283
+
284
+ r2_grad = (noisy_fake_logit_perturbed - noisy_fake_logit) / self.r2_sigma
285
+ r2_loss = self.r2_weight * torch.mean((r2_grad)**2)
286
+ else:
287
+ r2_loss = torch.zeros_like(r2_loss)
288
+
289
+ critic_log_dict = {
290
+ "critic_timestep": critic_timestep.detach(),
291
+ 'noisy_real_logit': noisy_real_logit.detach(),
292
+ 'noisy_fake_logit': noisy_fake_logit.detach(),
293
+ }
294
+
295
+ return (gan_D_loss, r1_loss, r2_loss), critic_log_dict
model/ode_regression.py ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn.functional as F
2
+ from typing import Tuple
3
+ import torch
4
+
5
+ from model.base import BaseModel
6
+ from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder, WanVAEWrapper
7
+
8
+
9
+ class ODERegression(BaseModel):
10
+ def __init__(self, args, device):
11
+ """
12
+ Initialize the ODERegression module.
13
+ This class is self-contained and compute generator losses
14
+ in the forward pass given precomputed ode solution pairs.
15
+ This class supports the ode regression loss for both causal and bidirectional models.
16
+ See Sec 4.3 of CausVid https://arxiv.org/abs/2412.07772 for details
17
+ """
18
+ super().__init__(args, device)
19
+
20
+ # Step 1: Initialize all models
21
+
22
+ self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
23
+ self.generator.model.requires_grad_(True)
24
+ if getattr(args, "generator_ckpt", False):
25
+ print(f"Loading pretrained generator from {args.generator_ckpt}")
26
+ state_dict = torch.load(args.generator_ckpt, map_location="cpu")[
27
+ 'generator']
28
+ self.generator.load_state_dict(
29
+ state_dict, strict=True
30
+ )
31
+
32
+ self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
33
+
34
+ if self.num_frame_per_block > 1:
35
+ self.generator.model.num_frame_per_block = self.num_frame_per_block
36
+
37
+ self.independent_first_frame = getattr(args, "independent_first_frame", False)
38
+ if self.independent_first_frame:
39
+ self.generator.model.independent_first_frame = True
40
+ if args.gradient_checkpointing:
41
+ self.generator.enable_gradient_checkpointing()
42
+
43
+ # Step 2: Initialize all hyperparameters
44
+ self.timestep_shift = getattr(args, "timestep_shift", 1.0)
45
+
46
+ def _initialize_models(self, args):
47
+ self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
48
+ self.generator.model.requires_grad_(True)
49
+
50
+ self.text_encoder = WanTextEncoder()
51
+ self.text_encoder.requires_grad_(False)
52
+
53
+ self.vae = WanVAEWrapper()
54
+ self.vae.requires_grad_(False)
55
+
56
+ @torch.no_grad()
57
+ def _prepare_generator_input(self, ode_latent: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:
58
+ """
59
+ Given a tensor containing the whole ODE sampling trajectories,
60
+ randomly choose an intermediate timestep and return the latent as well as the corresponding timestep.
61
+ Input:
62
+ - ode_latent: a tensor containing the whole ODE sampling trajectories [batch_size, num_denoising_steps, num_frames, num_channels, height, width].
63
+ Output:
64
+ - noisy_input: a tensor containing the selected latent [batch_size, num_frames, num_channels, height, width].
65
+ - timestep: a tensor containing the corresponding timestep [batch_size].
66
+ """
67
+ batch_size, num_denoising_steps, num_frames, num_channels, height, width = ode_latent.shape
68
+
69
+ # Step 1: Randomly choose a timestep for each frame
70
+ index = self._get_timestep(
71
+ 0,
72
+ len(self.denoising_step_list),
73
+ batch_size,
74
+ num_frames,
75
+ self.num_frame_per_block,
76
+ uniform_timestep=False
77
+ )
78
+ if self.args.i2v:
79
+ index[:, 0] = len(self.denoising_step_list) - 1
80
+
81
+ noisy_input = torch.gather(
82
+ ode_latent, dim=1,
83
+ index=index.reshape(batch_size, 1, num_frames, 1, 1, 1).expand(
84
+ -1, -1, -1, num_channels, height, width).to(self.device)
85
+ ).squeeze(1)
86
+
87
+ timestep = self.denoising_step_list[index].to(self.device)
88
+
89
+ # if self.extra_noise_step > 0:
90
+ # random_timestep = torch.randint(0, self.extra_noise_step, [
91
+ # batch_size, num_frames], device=self.device, dtype=torch.long)
92
+ # perturbed_noisy_input = self.scheduler.add_noise(
93
+ # noisy_input.flatten(0, 1),
94
+ # torch.randn_like(noisy_input.flatten(0, 1)),
95
+ # random_timestep.flatten(0, 1)
96
+ # ).detach().unflatten(0, (batch_size, num_frames)).type_as(noisy_input)
97
+
98
+ # noisy_input[timestep == 0] = perturbed_noisy_input[timestep == 0]
99
+
100
+ return noisy_input, timestep
101
+
102
+ def generator_loss(self, ode_latent: torch.Tensor, conditional_dict: dict) -> Tuple[torch.Tensor, dict]:
103
+ """
104
+ Generate image/videos from noisy latents and compute the ODE regression loss.
105
+ Input:
106
+ - ode_latent: a tensor containing the ODE latents [batch_size, num_denoising_steps, num_frames, num_channels, height, width].
107
+ They are ordered from most noisy to clean latents.
108
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
109
+ Output:
110
+ - loss: a scalar tensor representing the generator loss.
111
+ - log_dict: a dictionary containing additional information for loss timestep breakdown.
112
+ """
113
+ # Step 1: Run generator on noisy latents
114
+ target_latent = ode_latent[:, -1]
115
+
116
+ noisy_input, timestep = self._prepare_generator_input(
117
+ ode_latent=ode_latent)
118
+
119
+ _, pred_image_or_video = self.generator(
120
+ noisy_image_or_video=noisy_input,
121
+ conditional_dict=conditional_dict,
122
+ timestep=timestep
123
+ )
124
+
125
+ # Step 2: Compute the regression loss
126
+ mask = timestep != 0
127
+
128
+ loss = F.mse_loss(
129
+ pred_image_or_video[mask], target_latent[mask], reduction="mean")
130
+
131
+ log_dict = {
132
+ "unnormalized_loss": F.mse_loss(pred_image_or_video, target_latent, reduction='none').mean(dim=[1, 2, 3, 4]).detach(),
133
+ "timestep": timestep.float().mean(dim=1).detach(),
134
+ "input": noisy_input.detach(),
135
+ "output": pred_image_or_video.detach(),
136
+ }
137
+
138
+ return loss, log_dict
model/predictor_v4.py ADDED
@@ -0,0 +1,886 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Wan Predictor-v4 for skipped Self-Forcing denoising steps.
2
+
3
+ The Predictor is initialized from an already-loaded ``CausalWanModel``. It
4
+ keeps the Teacher patch/time/head modules frozen, trains two copied causal Wan
5
+ blocks, and predicts a residual over the same-chunk anchor hidden state.
6
+
7
+ Two history paths are supported:
8
+
9
+ * online F-P-P-F inference can pass the generator's existing KV caches;
10
+ * offline training can rebuild selected-layer history KV from clean-pass
11
+ self-attention prefeatures with :meth:`build_history_kv_cache`.
12
+
13
+ The ordinary ``state_dict`` API is intentionally unchanged. Use
14
+ ``trainable_state_dict``/``checkpoint_dict`` for compact Predictor checkpoints
15
+ that omit frozen Teacher weights.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import copy
21
+ import math
22
+ from collections import OrderedDict
23
+ from collections.abc import Mapping, Sequence
24
+ from dataclasses import asdict, dataclass
25
+ from typing import Any
26
+
27
+ import torch
28
+ from torch import nn
29
+
30
+ from wan.modules.causal_model import (
31
+ CausalWanAttentionBlock,
32
+ CausalWanModel,
33
+ causal_rope_apply,
34
+ )
35
+ from wan.modules.model import sinusoidal_embedding_1d
36
+
37
+
38
+ @dataclass(frozen=True)
39
+ class WanPredictorV4Config:
40
+ """Serializable architecture metadata derived from the loaded Teacher."""
41
+
42
+ format_version: int
43
+ model_type: str
44
+ patch_size: tuple[int, int, int]
45
+ in_dim: int
46
+ dim: int
47
+ ffn_dim: int
48
+ freq_dim: int
49
+ out_dim: int
50
+ num_heads: int
51
+ num_layers: int
52
+ local_attn_size: int
53
+ sink_size: int
54
+ qk_norm: bool
55
+ cross_attn_norm: bool
56
+ eps: float
57
+ source_block_ids: tuple[int, int]
58
+ spatial_grid: tuple[int, int]
59
+
60
+ @property
61
+ def tokens_per_frame(self) -> int:
62
+ return math.prod(self.spatial_grid)
63
+
64
+ def to_dict(self) -> dict[str, Any]:
65
+ return asdict(self)
66
+
67
+
68
+ class TripleFeatureFusion(nn.Module):
69
+ """Fuse target-latent, same-chunk anchor, and previous-chunk features."""
70
+
71
+ def __init__(self, dim: int, eps: float = 1e-6) -> None:
72
+ super().__init__()
73
+ self.current_norm = nn.LayerNorm(dim, eps=eps)
74
+ self.anchor_norm = nn.LayerNorm(dim, eps=eps)
75
+ self.previous_norm = nn.LayerNorm(dim, eps=eps)
76
+ self.mlp = nn.Sequential(
77
+ nn.Linear(3 * dim, 2 * dim),
78
+ nn.SiLU(),
79
+ nn.Linear(2 * dim, dim),
80
+ )
81
+
82
+ def forward(
83
+ self,
84
+ current: torch.Tensor,
85
+ anchor: torch.Tensor,
86
+ previous: torch.Tensor,
87
+ ) -> torch.Tensor:
88
+ if current.shape != anchor.shape or current.shape != previous.shape:
89
+ raise ValueError(
90
+ "TripleFeatureFusion requires identical [B, L, D] shapes, got "
91
+ f"current={tuple(current.shape)}, anchor={tuple(anchor.shape)}, "
92
+ f"previous={tuple(previous.shape)}"
93
+ )
94
+ return self.mlp(
95
+ torch.cat(
96
+ (
97
+ self.current_norm(current),
98
+ self.anchor_norm(anchor),
99
+ self.previous_norm(previous),
100
+ ),
101
+ dim=-1,
102
+ )
103
+ )
104
+
105
+
106
+ class _FrozenHistoryProjector(nn.Module):
107
+ """Frozen copy of one Teacher self-attention K/V projection path."""
108
+
109
+ def __init__(self, teacher_block: CausalWanAttentionBlock) -> None:
110
+ super().__init__()
111
+ self.k = copy.deepcopy(teacher_block.self_attn.k)
112
+ self.v = copy.deepcopy(teacher_block.self_attn.v)
113
+ self.norm_k = copy.deepcopy(teacher_block.self_attn.norm_k)
114
+ self.requires_grad_(False)
115
+
116
+ def forward(
117
+ self,
118
+ self_attn_input: torch.Tensor,
119
+ *,
120
+ num_heads: int,
121
+ ) -> tuple[torch.Tensor, torch.Tensor]:
122
+ batch, tokens, dim = self_attn_input.shape
123
+ if dim % num_heads:
124
+ raise ValueError(f"Hidden dim {dim} is not divisible by {num_heads} heads")
125
+ head_dim = dim // num_heads
126
+ key = self.norm_k(self.k(self_attn_input)).view(
127
+ batch, tokens, num_heads, head_dim
128
+ )
129
+ value = self.v(self_attn_input).view(
130
+ batch, tokens, num_heads, head_dim
131
+ )
132
+ return key, value
133
+
134
+
135
+ class SelfForcingPredictorV4(nn.Module):
136
+ """Two-block Wan Predictor used for the middle denoising steps of F-P-P-F."""
137
+
138
+ requires_previous_chunk_hidden = True
139
+ uses_history_kv = True
140
+ uses_clean_prefeature = True
141
+ checkpoint_format_version = 1
142
+
143
+ def __init__(
144
+ self,
145
+ teacher_model: CausalWanModel,
146
+ *,
147
+ source_block_ids: tuple[int, int] = (1, 28),
148
+ spatial_grid: tuple[int, int] = (30, 52),
149
+ ) -> None:
150
+ super().__init__()
151
+ teacher_model = self._unwrap_teacher(teacher_model)
152
+ if teacher_model.model_type != "t2v":
153
+ raise NotImplementedError("SelfForcingPredictorV4 currently supports Wan T2V")
154
+ if len(source_block_ids) != 2 or len(set(source_block_ids)) != 2:
155
+ raise ValueError("Predictor-v4 requires exactly two distinct source blocks")
156
+ if any(index < 0 or index >= len(teacher_model.blocks) for index in source_block_ids):
157
+ raise ValueError(
158
+ f"Invalid source blocks {source_block_ids} for "
159
+ f"{len(teacher_model.blocks)} Teacher blocks"
160
+ )
161
+ if len(spatial_grid) != 2 or any(int(size) <= 0 for size in spatial_grid):
162
+ raise ValueError(f"Invalid Predictor token spatial grid: {spatial_grid}")
163
+
164
+ first_self_attn = teacher_model.blocks[0].self_attn
165
+ self.predictor_config = WanPredictorV4Config(
166
+ format_version=self.checkpoint_format_version,
167
+ model_type=str(teacher_model.model_type),
168
+ patch_size=tuple(int(item) for item in teacher_model.patch_size),
169
+ in_dim=int(teacher_model.in_dim),
170
+ dim=int(teacher_model.dim),
171
+ ffn_dim=int(teacher_model.ffn_dim),
172
+ freq_dim=int(teacher_model.freq_dim),
173
+ out_dim=int(teacher_model.out_dim),
174
+ num_heads=int(teacher_model.num_heads),
175
+ num_layers=len(teacher_model.blocks),
176
+ local_attn_size=int(teacher_model.local_attn_size),
177
+ sink_size=int(first_self_attn.sink_size),
178
+ qk_norm=bool(teacher_model.qk_norm),
179
+ cross_attn_norm=bool(teacher_model.cross_attn_norm),
180
+ eps=float(teacher_model.eps),
181
+ source_block_ids=tuple(int(item) for item in source_block_ids),
182
+ spatial_grid=tuple(int(item) for item in spatial_grid),
183
+ )
184
+ cfg = self.predictor_config
185
+
186
+ # Frozen modules are copied rather than referenced so that calling
187
+ # Predictor.train()/to() cannot alter the loaded generator.
188
+ self.patch_embedding = copy.deepcopy(teacher_model.patch_embedding)
189
+ self.time_embedding = copy.deepcopy(teacher_model.time_embedding)
190
+ self.time_projection = copy.deepcopy(teacher_model.time_projection)
191
+ self.head = copy.deepcopy(teacher_model.head)
192
+ self.predictor_blocks = nn.ModuleList(
193
+ [copy.deepcopy(teacher_model.blocks[index]) for index in source_block_ids]
194
+ )
195
+ self.history_projectors = nn.ModuleDict(
196
+ {
197
+ str(index): _FrozenHistoryProjector(teacher_model.blocks[index])
198
+ for index in source_block_ids
199
+ }
200
+ )
201
+
202
+ self.feature_fusion = TripleFeatureFusion(cfg.dim, cfg.eps)
203
+ self.residual_out = nn.Linear(cfg.dim, cfg.dim)
204
+
205
+ self._freeze_teacher_modules()
206
+ self.predictor_blocks.requires_grad_(True)
207
+ # Text K/V come from the Teacher cross-attention cache. Predictor only
208
+ # executes the query/output side, so keep unused cache-building weights
209
+ # frozen and out of the optimizer/checkpoint.
210
+ for block in self.predictor_blocks:
211
+ block.cross_attn.k.requires_grad_(False)
212
+ block.cross_attn.v.requires_grad_(False)
213
+ block.cross_attn.norm_k.requires_grad_(False)
214
+
215
+ reference = teacher_model.patch_embedding.weight
216
+ self.feature_fusion.to(device=reference.device, dtype=reference.dtype)
217
+ self.residual_out.to(device=reference.device, dtype=reference.dtype)
218
+ nn.init.zeros_(self.residual_out.weight)
219
+ nn.init.zeros_(self.residual_out.bias)
220
+
221
+ # Match CausalWanModel: RoPE frequencies are runtime state rather than a
222
+ # persistent buffer, so compact checkpoints contain no derived table.
223
+ self._freqs = teacher_model.freqs.detach().clone()
224
+
225
+ @staticmethod
226
+ def _unwrap_teacher(model: Any) -> CausalWanModel:
227
+ current = model
228
+ visited: set[int] = set()
229
+ while id(current) not in visited:
230
+ visited.add(id(current))
231
+ if isinstance(current, CausalWanModel):
232
+ return current
233
+ wrapped = getattr(current, "module", None)
234
+ if wrapped is not None:
235
+ current = wrapped
236
+ continue
237
+ nested = getattr(current, "model", None)
238
+ if nested is not None:
239
+ current = nested
240
+ continue
241
+ break
242
+ raise TypeError(
243
+ "teacher_model must be CausalWanModel (normally generator.model), "
244
+ f"got {type(model)!r}"
245
+ )
246
+
247
+ @classmethod
248
+ def from_teacher(
249
+ cls,
250
+ teacher_model: CausalWanModel,
251
+ *,
252
+ source_block_ids: tuple[int, int] = (1, 28),
253
+ spatial_grid: tuple[int, int] = (30, 52),
254
+ ) -> "SelfForcingPredictorV4":
255
+ """Initialize all copied/frozen/trainable weights from a loaded Teacher."""
256
+
257
+ return cls(
258
+ teacher_model,
259
+ source_block_ids=source_block_ids,
260
+ spatial_grid=spatial_grid,
261
+ )
262
+
263
+ @property
264
+ def config_dict(self) -> dict[str, Any]:
265
+ return self.predictor_config.to_dict()
266
+
267
+ @property
268
+ def source_block_ids(self) -> tuple[int, int]:
269
+ return self.predictor_config.source_block_ids
270
+
271
+ def _freeze_teacher_modules(self) -> None:
272
+ for module in (
273
+ self.patch_embedding,
274
+ self.time_embedding,
275
+ self.time_projection,
276
+ self.head,
277
+ self.history_projectors,
278
+ ):
279
+ module.requires_grad_(False)
280
+ module.eval()
281
+
282
+ @torch.no_grad()
283
+ def sync_frozen_from_teacher(
284
+ self,
285
+ teacher_model: CausalWanModel,
286
+ ) -> None:
287
+ """Refresh only the frozen Teacher-derived Predictor parameters.
288
+
289
+ Joint DMD changes the Full Generator after Predictor construction. A
290
+ compact Predictor checkpoint is reconstructed from that updated Full
291
+ model at inference time, so the frozen training-time copies must track
292
+ it as well. Predictor-owned trainable blocks/fusion are never
293
+ overwritten here.
294
+ """
295
+
296
+ teacher_model = self._unwrap_teacher(teacher_model)
297
+ for destination, source in (
298
+ (self.patch_embedding, teacher_model.patch_embedding),
299
+ (self.time_embedding, teacher_model.time_embedding),
300
+ (self.time_projection, teacher_model.time_projection),
301
+ (self.head, teacher_model.head),
302
+ ):
303
+ destination.load_state_dict(source.state_dict(), strict=True)
304
+
305
+ for position, source_id in enumerate(self.source_block_ids):
306
+ teacher_block = teacher_model.blocks[source_id]
307
+ while hasattr(teacher_block, "module"):
308
+ teacher_block = teacher_block.module
309
+ history = self.history_projectors[str(source_id)]
310
+ history.k.load_state_dict(
311
+ teacher_block.self_attn.k.state_dict(), strict=True
312
+ )
313
+ history.v.load_state_dict(
314
+ teacher_block.self_attn.v.state_dict(), strict=True
315
+ )
316
+ history.norm_k.load_state_dict(
317
+ teacher_block.self_attn.norm_k.state_dict(), strict=True
318
+ )
319
+
320
+ predictor_cross = self.predictor_blocks[position].cross_attn
321
+ teacher_cross = teacher_block.cross_attn
322
+ predictor_cross.k.load_state_dict(
323
+ teacher_cross.k.state_dict(), strict=True
324
+ )
325
+ predictor_cross.v.load_state_dict(
326
+ teacher_cross.v.state_dict(), strict=True
327
+ )
328
+ predictor_cross.norm_k.load_state_dict(
329
+ teacher_cross.norm_k.state_dict(), strict=True
330
+ )
331
+
332
+ self._freeze_teacher_modules()
333
+ for block in self.predictor_blocks:
334
+ block.cross_attn.k.requires_grad_(False)
335
+ block.cross_attn.v.requires_grad_(False)
336
+ block.cross_attn.norm_k.requires_grad_(False)
337
+
338
+ def train(self, mode: bool = True) -> "SelfForcingPredictorV4":
339
+ super().train(mode)
340
+ # Frozen layers have no stochastic operations today, but pinning their
341
+ # mode makes the intended boundary robust to future Wan changes.
342
+ for module in (
343
+ self.patch_embedding,
344
+ self.time_embedding,
345
+ self.time_projection,
346
+ self.head,
347
+ self.history_projectors,
348
+ ):
349
+ module.eval()
350
+ return self
351
+
352
+ def _runtime_freqs(self, device: torch.device) -> torch.Tensor:
353
+ if self._freqs.device != device:
354
+ self._freqs = self._freqs.to(device)
355
+ return self._freqs
356
+
357
+ @staticmethod
358
+ def _scalar_int(value: int | torch.Tensor, name: str) -> int:
359
+ if torch.is_tensor(value):
360
+ if value.numel() != 1:
361
+ raise ValueError(f"{name} must be scalar, got shape {tuple(value.shape)}")
362
+ value = value.detach().item()
363
+ result = int(value)
364
+ if result < 0:
365
+ raise ValueError(f"{name} must be non-negative, got {result}")
366
+ return result
367
+
368
+ @staticmethod
369
+ def _start_values(
370
+ value: int | torch.Tensor,
371
+ *,
372
+ batch: int,
373
+ name: str,
374
+ ) -> list[int]:
375
+ if torch.is_tensor(value):
376
+ values = [int(item) for item in value.detach().reshape(-1).cpu().tolist()]
377
+ else:
378
+ values = [int(value)]
379
+ if len(values) == 1:
380
+ values *= batch
381
+ if len(values) != batch:
382
+ raise ValueError(f"{name} has {len(values)} values for batch {batch}")
383
+ if any(item < 0 for item in values):
384
+ raise ValueError(f"{name} must contain non-negative frame indices")
385
+ return values
386
+
387
+ def _rope_history_key(
388
+ self,
389
+ key: torch.Tensor,
390
+ *,
391
+ start_frames: int | torch.Tensor,
392
+ ) -> torch.Tensor:
393
+ cfg = self.predictor_config
394
+ batch, tokens = key.shape[:2]
395
+ if tokens % cfg.tokens_per_frame:
396
+ raise ValueError(
397
+ f"History tokens {tokens} are not divisible by "
398
+ f"{cfg.tokens_per_frame} tokens/frame"
399
+ )
400
+ frames = tokens // cfg.tokens_per_frame
401
+ starts = self._start_values(start_frames, batch=batch, name="start_frames")
402
+ freqs = self._runtime_freqs(key.device)
403
+ grid = torch.tensor(
404
+ [[frames, *cfg.spatial_grid]],
405
+ dtype=torch.long,
406
+ device=key.device,
407
+ )
408
+ if len(set(starts)) == 1:
409
+ return causal_rope_apply(
410
+ key,
411
+ grid.expand(batch, -1),
412
+ freqs,
413
+ start_frame=starts[0],
414
+ )
415
+ return torch.cat(
416
+ [
417
+ causal_rope_apply(
418
+ key[index : index + 1],
419
+ grid,
420
+ freqs,
421
+ start_frame=start,
422
+ )
423
+ for index, start in enumerate(starts)
424
+ ],
425
+ dim=0,
426
+ )
427
+
428
+ def _project_history_part(
429
+ self,
430
+ block_id: int,
431
+ prefeature: torch.Tensor,
432
+ *,
433
+ start_frames: int | torch.Tensor,
434
+ ) -> tuple[torch.Tensor, torch.Tensor]:
435
+ cfg = self.predictor_config
436
+ if prefeature.ndim != 3 or prefeature.shape[-1] != cfg.dim:
437
+ raise ValueError(
438
+ f"Block {block_id} prefeature must be [B, S, {cfg.dim}], got "
439
+ f"{tuple(prefeature.shape)}"
440
+ )
441
+ projector = self.history_projectors[str(block_id)]
442
+ projector_device = projector.k.weight.device
443
+ if prefeature.device != projector_device:
444
+ raise ValueError(
445
+ f"Block {block_id} prefeature is on {prefeature.device}, "
446
+ f"projector is on {projector_device}"
447
+ )
448
+ prefeature = prefeature.to(dtype=projector.k.weight.dtype)
449
+ # Clean-history tensors are fixed offline Teacher data. Avoid retaining
450
+ # a graph through several GiB of reconstructed cache.
451
+ with torch.no_grad():
452
+ key, value = projector(prefeature, num_heads=cfg.num_heads)
453
+ key = self._rope_history_key(key, start_frames=start_frames)
454
+ return key, value
455
+
456
+ def build_history_kv_cache(
457
+ self,
458
+ clean_prefeature_by_block: Mapping[
459
+ int | str, torch.Tensor | Sequence[torch.Tensor]
460
+ ],
461
+ *,
462
+ current_start: int | torch.Tensor,
463
+ current_tokens: int | torch.Tensor,
464
+ start_frames: int | torch.Tensor | Sequence[int | torch.Tensor] = 0,
465
+ cache_capacity: int | None = None,
466
+ ) -> dict[int, dict[str, torch.Tensor]]:
467
+ """Rebuild selected-layer clean-history caches for Predictor training.
468
+
469
+ ``clean_prefeature_by_block`` may contain one already-concatenated
470
+ ``[B, S, D]`` tensor per block, or a sequence of chunk tensors. For a
471
+ sequence, ``start_frames`` can be the matching sequence ``0, 3, ...``.
472
+ ``current_start`` is the global token offset used by Wan inference and
473
+ ``current_tokens`` reserves the writable current-chunk cache region.
474
+ """
475
+
476
+ current_start_int = self._scalar_int(current_start, "current_start")
477
+ current_tokens_int = self._scalar_int(current_tokens, "current_tokens")
478
+ if current_tokens_int == 0:
479
+ raise ValueError("current_tokens must be positive")
480
+
481
+ cfg = self.predictor_config
482
+ result: dict[int, dict[str, torch.Tensor]] = {}
483
+ expected_batch: int | None = None
484
+ expected_history_tokens: int | None = None
485
+ for block_id in self.source_block_ids:
486
+ value = clean_prefeature_by_block.get(block_id)
487
+ if value is None:
488
+ value = clean_prefeature_by_block.get(str(block_id))
489
+ if value is None:
490
+ raise ValueError(f"Missing clean prefeature for block {block_id}")
491
+
492
+ if torch.is_tensor(value):
493
+ if isinstance(start_frames, Sequence) and not torch.is_tensor(start_frames):
494
+ if len(start_frames) != 1:
495
+ raise ValueError(
496
+ "Already-concatenated prefeatures require one start_frames value"
497
+ )
498
+ part_start = start_frames[0]
499
+ else:
500
+ part_start = start_frames
501
+ keys, values = self._project_history_part(
502
+ block_id, value, start_frames=part_start
503
+ )
504
+ else:
505
+ parts = list(value)
506
+ if not parts:
507
+ raise ValueError(f"Block {block_id} has no history prefeatures")
508
+ if isinstance(start_frames, Sequence) and not torch.is_tensor(start_frames):
509
+ starts = list(start_frames)
510
+ if len(starts) != len(parts):
511
+ raise ValueError(
512
+ f"start_frames has {len(starts)} entries for "
513
+ f"{len(parts)} history chunks"
514
+ )
515
+ else:
516
+ starts = []
517
+ next_start: int | torch.Tensor = start_frames
518
+ for part in parts:
519
+ starts.append(next_start)
520
+ if torch.is_tensor(next_start) and next_start.numel() > 1:
521
+ next_start = next_start + (
522
+ part.shape[1] // self.predictor_config.tokens_per_frame
523
+ )
524
+ else:
525
+ next_start = self._scalar_int(next_start, "start_frames") + (
526
+ part.shape[1] // self.predictor_config.tokens_per_frame
527
+ )
528
+ projected = [
529
+ self._project_history_part(
530
+ block_id, part, start_frames=part_start
531
+ )
532
+ for part, part_start in zip(parts, starts)
533
+ ]
534
+ keys = torch.cat([item[0] for item in projected], dim=1)
535
+ values = torch.cat([item[1] for item in projected], dim=1)
536
+
537
+ batch, history_tokens = keys.shape[:2]
538
+ if expected_batch is None:
539
+ expected_batch = batch
540
+ expected_history_tokens = history_tokens
541
+ elif batch != expected_batch or history_tokens != expected_history_tokens:
542
+ raise ValueError(
543
+ "Selected blocks must have the same history shape, got "
544
+ f"block {block_id}: batch={batch}, tokens={history_tokens}; "
545
+ f"expected batch={expected_batch}, tokens={expected_history_tokens}"
546
+ )
547
+ if history_tokens > current_start_int:
548
+ raise ValueError(
549
+ f"History has {history_tokens} tokens but current_start is "
550
+ f"{current_start_int}"
551
+ )
552
+
553
+ required_capacity = history_tokens + current_tokens_int
554
+ capacity = required_capacity if cache_capacity is None else int(cache_capacity)
555
+ if capacity < required_capacity:
556
+ raise ValueError(
557
+ f"cache_capacity {capacity} is smaller than required "
558
+ f"{required_capacity}"
559
+ )
560
+ cache_k = keys.new_zeros(
561
+ batch, capacity, cfg.num_heads, cfg.dim // cfg.num_heads
562
+ )
563
+ cache_v = values.new_zeros(
564
+ batch, capacity, cfg.num_heads, cfg.dim // cfg.num_heads
565
+ )
566
+ cache_k[:, :history_tokens].copy_(keys)
567
+ cache_v[:, :history_tokens].copy_(values)
568
+ result[block_id] = {
569
+ "k": cache_k,
570
+ "v": cache_v,
571
+ "global_end_index": torch.tensor(
572
+ [current_start_int], dtype=torch.long, device=keys.device
573
+ ),
574
+ "local_end_index": torch.tensor(
575
+ [history_tokens], dtype=torch.long, device=keys.device
576
+ ),
577
+ }
578
+ return result
579
+
580
+ def _select_cache(
581
+ self,
582
+ caches: Mapping[Any, Any] | Sequence[Any],
583
+ *,
584
+ source_id: int,
585
+ source_position: int,
586
+ name: str,
587
+ ) -> Mapping[str, Any]:
588
+ if isinstance(caches, Mapping):
589
+ selected = caches.get(source_id)
590
+ if selected is None:
591
+ selected = caches.get(str(source_id))
592
+ else:
593
+ if len(caches) == self.predictor_config.num_layers:
594
+ selected = caches[source_id]
595
+ elif len(caches) == len(self.source_block_ids):
596
+ selected = caches[source_position]
597
+ else:
598
+ selected = None
599
+ if selected is None:
600
+ raise ValueError(f"{name} is missing source block {source_id}")
601
+ if not isinstance(selected, Mapping):
602
+ raise TypeError(f"{name}[{source_id}] must be a mapping")
603
+ return selected
604
+
605
+ def _selected_crossattn_cache(
606
+ self,
607
+ caches: Mapping[Any, Any] | Sequence[Any],
608
+ *,
609
+ source_id: int,
610
+ source_position: int,
611
+ ) -> dict[str, Any]:
612
+ selected = self._select_cache(
613
+ caches,
614
+ source_id=source_id,
615
+ source_position=source_position,
616
+ name="crossattn_cache",
617
+ )
618
+ missing = {"k", "v"}.difference(selected)
619
+ if missing:
620
+ raise ValueError(
621
+ f"crossattn_cache block {source_id} is missing {sorted(missing)}"
622
+ )
623
+ if selected["k"].shape != selected["v"].shape:
624
+ raise ValueError(f"crossattn_cache block {source_id} K/V shape mismatch")
625
+ # Offline files contain K/V but need not serialize the runtime flag.
626
+ # A shallow wrapper avoids mutating the generator-owned dictionary.
627
+ return {**selected, "is_init": True}
628
+
629
+ def _time_condition(
630
+ self,
631
+ target_timestep: torch.Tensor,
632
+ reference: torch.Tensor,
633
+ ) -> tuple[torch.Tensor, torch.Tensor]:
634
+ cfg = self.predictor_config
635
+ time_embedding = self.time_embedding(
636
+ sinusoidal_embedding_1d(
637
+ cfg.freq_dim, target_timestep.flatten()
638
+ ).type_as(reference)
639
+ )
640
+ block_condition = self.time_projection(time_embedding).unflatten(
641
+ 1, (6, cfg.dim)
642
+ ).unflatten(0, target_timestep.shape)
643
+ head_condition = time_embedding.unflatten(
644
+ 0, target_timestep.shape
645
+ ).unsqueeze(2)
646
+ return block_condition, head_condition
647
+
648
+ def _unpatchify(
649
+ self,
650
+ tokens: torch.Tensor,
651
+ grid_sizes: torch.Tensor,
652
+ ) -> torch.Tensor:
653
+ cfg = self.predictor_config
654
+ outputs = []
655
+ for sample, grid in zip(tokens, grid_sizes.tolist()):
656
+ sample = sample[: math.prod(grid)].view(
657
+ *grid, *cfg.patch_size, cfg.out_dim
658
+ )
659
+ # [f, h, w, p, q, r, c] -> [f, p, c, h, q, w, r] so the
660
+ # following reshape merges each grid axis with its patch axis.
661
+ sample = torch.einsum("fhwpqrc->fpchqwr", sample)
662
+ outputs.append(
663
+ sample.reshape(
664
+ grid[0] * cfg.patch_size[0],
665
+ cfg.out_dim,
666
+ grid[1] * cfg.patch_size[1],
667
+ grid[2] * cfg.patch_size[2],
668
+ )
669
+ )
670
+ return torch.stack(outputs)
671
+
672
+ def forward(
673
+ self,
674
+ *,
675
+ target_latent: torch.Tensor,
676
+ target_timestep: torch.Tensor,
677
+ anchor_hidden: torch.Tensor,
678
+ previous_chunk_hidden: torch.Tensor,
679
+ kv_cache: Mapping[Any, Any] | Sequence[Any],
680
+ crossattn_cache: Mapping[Any, Any] | Sequence[Any],
681
+ current_start: int | torch.Tensor,
682
+ ) -> dict[str, torch.Tensor]:
683
+ """Predict one skipped denoising step.
684
+
685
+ Args:
686
+ target_latent: Noisy target chunk in ``[B, F, C, H, W]`` layout.
687
+ target_timestep: Per-frame timestep tensor ``[B, F]``.
688
+ anchor_hidden: Same-chunk preceding-step final hidden ``[B, L, D]``.
689
+ previous_chunk_hidden: Previous-chunk same-step hidden ``[B, L, D]``.
690
+ kv_cache: Full 30-layer list or selected-layer mapping/list.
691
+ crossattn_cache: Full list or selected cached text K/V.
692
+ current_start: Current chunk's global token offset.
693
+ """
694
+
695
+ cfg = self.predictor_config
696
+ if target_latent.ndim != 5:
697
+ raise ValueError(
698
+ f"target_latent must be [B, F, C, H, W], got {tuple(target_latent.shape)}"
699
+ )
700
+ batch, frames, channels, height, width = target_latent.shape
701
+ if channels != cfg.in_dim:
702
+ raise ValueError(f"target_latent channels {channels} != {cfg.in_dim}")
703
+ expected_timestep = (batch, frames // cfg.patch_size[0])
704
+ if tuple(target_timestep.shape) != expected_timestep:
705
+ raise ValueError(
706
+ f"target_timestep shape {tuple(target_timestep.shape)} != "
707
+ f"{expected_timestep}"
708
+ )
709
+ if target_timestep.device != target_latent.device:
710
+ raise ValueError("target_timestep and target_latent must share a device")
711
+ if target_latent.device != self.patch_embedding.weight.device:
712
+ raise ValueError(
713
+ f"target_latent is on {target_latent.device}, Predictor is on "
714
+ f"{self.patch_embedding.weight.device}"
715
+ )
716
+
717
+ latent_cf = target_latent.permute(0, 2, 1, 3, 4).to(
718
+ dtype=self.patch_embedding.weight.dtype
719
+ )
720
+ # Do not wrap frozen patch/time/head modules in no_grad: recursive
721
+ # rollout losses must still backpropagate to an earlier target latent.
722
+ current = self.patch_embedding(latent_cf)
723
+ grid_sizes = torch.tensor(
724
+ [current.shape[2:]] * batch,
725
+ dtype=torch.long,
726
+ device=current.device,
727
+ )
728
+ current = current.flatten(2).transpose(1, 2)
729
+ expected_hidden = (batch, current.shape[1], cfg.dim)
730
+ if tuple(anchor_hidden.shape) != expected_hidden:
731
+ raise ValueError(
732
+ f"anchor_hidden shape {tuple(anchor_hidden.shape)} != {expected_hidden}"
733
+ )
734
+ if tuple(previous_chunk_hidden.shape) != expected_hidden:
735
+ raise ValueError(
736
+ "previous_chunk_hidden shape "
737
+ f"{tuple(previous_chunk_hidden.shape)} != {expected_hidden}"
738
+ )
739
+ current = current.to(dtype=anchor_hidden.dtype)
740
+ hidden = self.feature_fusion(
741
+ current, anchor_hidden, previous_chunk_hidden
742
+ )
743
+ block_condition, head_condition = self._time_condition(
744
+ target_timestep, current
745
+ )
746
+ seq_lens = torch.full(
747
+ (batch,), current.shape[1], dtype=torch.long, device=current.device
748
+ )
749
+ current_start_int = self._scalar_int(current_start, "current_start")
750
+ freqs = self._runtime_freqs(current.device)
751
+
752
+ for position, (source_id, block) in enumerate(
753
+ zip(self.source_block_ids, self.predictor_blocks)
754
+ ):
755
+ selected_kv = self._select_cache(
756
+ kv_cache,
757
+ source_id=source_id,
758
+ source_position=position,
759
+ name="kv_cache",
760
+ )
761
+ selected_cross = self._selected_crossattn_cache(
762
+ crossattn_cache,
763
+ source_id=source_id,
764
+ source_position=position,
765
+ )
766
+ hidden = block(
767
+ hidden,
768
+ e=block_condition,
769
+ seq_lens=seq_lens,
770
+ grid_sizes=grid_sizes,
771
+ freqs=freqs,
772
+ context=None,
773
+ context_lens=None,
774
+ block_mask=None,
775
+ kv_cache=selected_kv,
776
+ crossattn_cache=selected_cross,
777
+ current_start=current_start_int,
778
+ cache_start=current_start_int,
779
+ )
780
+
781
+ delta_hidden = self.residual_out(hidden)
782
+ pred_hidden = anchor_hidden + delta_hidden
783
+ pred_tokens = self.head(pred_hidden, head_condition)
784
+ pred_flow = self._unpatchify(pred_tokens, grid_sizes)
785
+ return {
786
+ "pred_hidden": pred_hidden,
787
+ "pred_flow": pred_flow,
788
+ "delta_hidden": delta_hidden,
789
+ }
790
+
791
+ def trainable_parameter_count(self) -> int:
792
+ return sum(
793
+ parameter.numel()
794
+ for parameter in self.parameters()
795
+ if parameter.requires_grad
796
+ )
797
+
798
+ def trainable_parameter_breakdown(self) -> dict[str, int]:
799
+ modules = {
800
+ "feature_fusion": self.feature_fusion,
801
+ "predictor_blocks": self.predictor_blocks,
802
+ "residual_out": self.residual_out,
803
+ }
804
+ return {
805
+ name: sum(
806
+ parameter.numel()
807
+ for parameter in module.parameters()
808
+ if parameter.requires_grad
809
+ )
810
+ for name, module in modules.items()
811
+ }
812
+
813
+ def trainable_state_dict(
814
+ self,
815
+ *,
816
+ keep_vars: bool = False,
817
+ ) -> OrderedDict[str, torch.Tensor]:
818
+ """Return only optimizer-owned parameters, suitable for safetensors."""
819
+
820
+ trainable = {
821
+ name for name, parameter in self.named_parameters()
822
+ if parameter.requires_grad
823
+ }
824
+ state = super().state_dict(keep_vars=keep_vars)
825
+ return OrderedDict(
826
+ (name, value) for name, value in state.items() if name in trainable
827
+ )
828
+
829
+ def load_trainable_state_dict(
830
+ self,
831
+ state_dict: Mapping[str, torch.Tensor],
832
+ *,
833
+ strict: bool = True,
834
+ ) -> None:
835
+ """Load a compact state into a fresh Predictor initialized from Teacher."""
836
+
837
+ expected = set(self.trainable_state_dict())
838
+ received = set(state_dict)
839
+ if strict:
840
+ missing = sorted(expected.difference(received))
841
+ unexpected = sorted(received.difference(expected))
842
+ if missing or unexpected:
843
+ raise RuntimeError(
844
+ "Predictor trainable checkpoint mismatch: "
845
+ f"missing={missing}, unexpected={unexpected}"
846
+ )
847
+ filtered = {
848
+ name: tensor for name, tensor in state_dict.items() if name in expected
849
+ }
850
+ self.load_state_dict(filtered, strict=False)
851
+
852
+ def checkpoint_dict(self) -> dict[str, Any]:
853
+ """Build a compact torch-save payload with architecture metadata."""
854
+
855
+ return {
856
+ "format": "self_forcing_wan_predictor_v4",
857
+ "format_version": self.checkpoint_format_version,
858
+ "config": self.config_dict,
859
+ "trainable_state_dict": self.trainable_state_dict(),
860
+ }
861
+
862
+ def load_checkpoint_dict(
863
+ self,
864
+ checkpoint: Mapping[str, Any],
865
+ *,
866
+ strict: bool = True,
867
+ ) -> None:
868
+ if checkpoint.get("format") != "self_forcing_wan_predictor_v4":
869
+ raise ValueError(f"Unsupported Predictor checkpoint: {checkpoint.get('format')}")
870
+ saved_config = dict(checkpoint.get("config", {}))
871
+ if strict and saved_config != self.config_dict:
872
+ raise ValueError(
873
+ "Predictor checkpoint config does not match the Teacher/config "
874
+ f"used for reconstruction: saved={saved_config}, current={self.config_dict}"
875
+ )
876
+ state = checkpoint.get("trainable_state_dict")
877
+ if not isinstance(state, Mapping):
878
+ raise ValueError("Predictor checkpoint has no trainable_state_dict")
879
+ self.load_trainable_state_dict(state, strict=strict)
880
+
881
+
882
+ __all__ = [
883
+ "SelfForcingPredictorV4",
884
+ "TripleFeatureFusion",
885
+ "WanPredictorV4Config",
886
+ ]
model/sid.py ADDED
@@ -0,0 +1,283 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pipeline import SelfForcingTrainingPipeline
2
+ from typing import Optional, Tuple
3
+ import torch
4
+
5
+ from model.base import SelfForcingModel
6
+
7
+
8
+ class SiD(SelfForcingModel):
9
+ def __init__(self, args, device):
10
+ """
11
+ Initialize the DMD (Distribution Matching Distillation) module.
12
+ This class is self-contained and compute generator and fake score losses
13
+ in the forward pass.
14
+ """
15
+ super().__init__(args, device)
16
+ self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
17
+
18
+ if self.num_frame_per_block > 1:
19
+ self.generator.model.num_frame_per_block = self.num_frame_per_block
20
+
21
+ if args.gradient_checkpointing:
22
+ self.generator.enable_gradient_checkpointing()
23
+ self.fake_score.enable_gradient_checkpointing()
24
+ self.real_score.enable_gradient_checkpointing()
25
+
26
+ # this will be init later with fsdp-wrapped modules
27
+ self.inference_pipeline: SelfForcingTrainingPipeline = None
28
+
29
+ # Step 2: Initialize all dmd hyperparameters
30
+ self.num_train_timestep = args.num_train_timestep
31
+ self.min_step = int(0.02 * self.num_train_timestep)
32
+ self.max_step = int(0.98 * self.num_train_timestep)
33
+ if hasattr(args, "real_guidance_scale"):
34
+ self.real_guidance_scale = args.real_guidance_scale
35
+ else:
36
+ self.real_guidance_scale = args.guidance_scale
37
+ self.timestep_shift = getattr(args, "timestep_shift", 1.0)
38
+ self.sid_alpha = getattr(args, "sid_alpha", 1.0)
39
+ self.ts_schedule = getattr(args, "ts_schedule", True)
40
+ self.ts_schedule_max = getattr(args, "ts_schedule_max", False)
41
+
42
+ if getattr(self.scheduler, "alphas_cumprod", None) is not None:
43
+ self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
44
+ else:
45
+ self.scheduler.alphas_cumprod = None
46
+
47
+ def compute_distribution_matching_loss(
48
+ self,
49
+ image_or_video: torch.Tensor,
50
+ conditional_dict: dict,
51
+ unconditional_dict: dict,
52
+ gradient_mask: Optional[torch.Tensor] = None,
53
+ denoised_timestep_from: int = 0,
54
+ denoised_timestep_to: int = 0
55
+ ) -> Tuple[torch.Tensor, dict]:
56
+ """
57
+ Compute the DMD loss (eq 7 in https://arxiv.org/abs/2311.18828).
58
+ Input:
59
+ - image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
60
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
61
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
62
+ - gradient_mask: a boolean tensor with the same shape as image_or_video indicating which pixels to compute loss .
63
+ Output:
64
+ - dmd_loss: a scalar tensor representing the DMD loss.
65
+ - dmd_log_dict: a dictionary containing the intermediate tensors for logging.
66
+ """
67
+ original_latent = image_or_video
68
+
69
+ batch_size, num_frame = image_or_video.shape[:2]
70
+
71
+ # Step 1: Randomly sample timestep based on the given schedule and corresponding noise
72
+ min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
73
+ max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
74
+ timestep = self._get_timestep(
75
+ min_timestep,
76
+ max_timestep,
77
+ batch_size,
78
+ num_frame,
79
+ self.num_frame_per_block,
80
+ uniform_timestep=True
81
+ )
82
+
83
+ if self.timestep_shift > 1:
84
+ timestep = self.timestep_shift * \
85
+ (timestep / 1000) / \
86
+ (1 + (self.timestep_shift - 1) * (timestep / 1000)) * 1000
87
+ timestep = timestep.clamp(self.min_step, self.max_step)
88
+
89
+ noise = torch.randn_like(image_or_video)
90
+ noisy_latent = self.scheduler.add_noise(
91
+ image_or_video.flatten(0, 1),
92
+ noise.flatten(0, 1),
93
+ timestep.flatten(0, 1)
94
+ ).unflatten(0, (batch_size, num_frame))
95
+
96
+ # Step 2: SiD (May be wrap it?)
97
+ noisy_image_or_video = noisy_latent
98
+ # Step 2.1: Compute the fake score
99
+ _, pred_fake_image = self.fake_score(
100
+ noisy_image_or_video=noisy_image_or_video,
101
+ conditional_dict=conditional_dict,
102
+ timestep=timestep
103
+ )
104
+ # Step 2.2: Compute the real score
105
+ # We compute the conditional and unconditional prediction
106
+ # and add them together to achieve cfg (https://arxiv.org/abs/2207.12598)
107
+ # NOTE: This step may cause OOM issue, which can be addressed by the CFG-free technique
108
+
109
+ _, pred_real_image_cond = self.real_score(
110
+ noisy_image_or_video=noisy_image_or_video,
111
+ conditional_dict=conditional_dict,
112
+ timestep=timestep
113
+ )
114
+
115
+ _, pred_real_image_uncond = self.real_score(
116
+ noisy_image_or_video=noisy_image_or_video,
117
+ conditional_dict=unconditional_dict,
118
+ timestep=timestep
119
+ )
120
+
121
+ pred_real_image = pred_real_image_cond + (
122
+ pred_real_image_cond - pred_real_image_uncond
123
+ ) * self.real_guidance_scale
124
+
125
+ # Step 2.3: SiD Loss
126
+ # TODO: Add alpha
127
+ # TODO: Double?
128
+ sid_loss = (pred_real_image.double() - pred_fake_image.double()) * ((pred_real_image.double() - original_latent.double()) - self.sid_alpha * (pred_real_image.double() - pred_fake_image.double()))
129
+
130
+ # Step 2.4: Loss normalizer
131
+ with torch.no_grad():
132
+ p_real = (original_latent - pred_real_image)
133
+ normalizer = torch.abs(p_real).mean(dim=[1, 2, 3, 4], keepdim=True)
134
+ sid_loss = sid_loss / normalizer
135
+
136
+ sid_loss = torch.nan_to_num(sid_loss)
137
+ num_frame = sid_loss.shape[1]
138
+ sid_loss = sid_loss.mean()
139
+
140
+ sid_log_dict = {
141
+ "dmdtrain_gradient_norm": torch.zeros_like(sid_loss),
142
+ "timestep": timestep.detach()
143
+ }
144
+
145
+ return sid_loss, sid_log_dict
146
+
147
+ def generator_loss(
148
+ self,
149
+ image_or_video_shape,
150
+ conditional_dict: dict,
151
+ unconditional_dict: dict,
152
+ clean_latent: torch.Tensor,
153
+ initial_latent: torch.Tensor = None
154
+ ) -> Tuple[torch.Tensor, dict]:
155
+ """
156
+ Generate image/videos from noise and compute the DMD loss.
157
+ The noisy input to the generator is backward simulated.
158
+ This removes the need of any datasets during distillation.
159
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
160
+ Input:
161
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
162
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
163
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
164
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
165
+ Output:
166
+ - loss: a scalar tensor representing the generator loss.
167
+ - generator_log_dict: a dictionary containing the intermediate tensors for logging.
168
+ """
169
+ # Step 1: Unroll generator to obtain fake videos
170
+ pred_image, gradient_mask, denoised_timestep_from, denoised_timestep_to = self._run_generator(
171
+ image_or_video_shape=image_or_video_shape,
172
+ conditional_dict=conditional_dict,
173
+ initial_latent=initial_latent
174
+ )
175
+
176
+ # Step 2: Compute the DMD loss
177
+ dmd_loss, dmd_log_dict = self.compute_distribution_matching_loss(
178
+ image_or_video=pred_image,
179
+ conditional_dict=conditional_dict,
180
+ unconditional_dict=unconditional_dict,
181
+ gradient_mask=gradient_mask,
182
+ denoised_timestep_from=denoised_timestep_from,
183
+ denoised_timestep_to=denoised_timestep_to
184
+ )
185
+
186
+ return dmd_loss, dmd_log_dict
187
+
188
+ def critic_loss(
189
+ self,
190
+ image_or_video_shape,
191
+ conditional_dict: dict,
192
+ unconditional_dict: dict,
193
+ clean_latent: torch.Tensor,
194
+ initial_latent: torch.Tensor = None
195
+ ) -> Tuple[torch.Tensor, dict]:
196
+ """
197
+ Generate image/videos from noise and train the critic with generated samples.
198
+ The noisy input to the generator is backward simulated.
199
+ This removes the need of any datasets during distillation.
200
+ See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
201
+ Input:
202
+ - image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
203
+ - conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
204
+ - unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
205
+ - clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
206
+ Output:
207
+ - loss: a scalar tensor representing the generator loss.
208
+ - critic_log_dict: a dictionary containing the intermediate tensors for logging.
209
+ """
210
+
211
+ # Step 1: Run generator on backward simulated noisy input
212
+ with torch.no_grad():
213
+ generated_image, _, denoised_timestep_from, denoised_timestep_to = self._run_generator(
214
+ image_or_video_shape=image_or_video_shape,
215
+ conditional_dict=conditional_dict,
216
+ initial_latent=initial_latent
217
+ )
218
+
219
+ # Step 2: Compute the fake prediction
220
+ min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
221
+ max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
222
+ critic_timestep = self._get_timestep(
223
+ min_timestep,
224
+ max_timestep,
225
+ image_or_video_shape[0],
226
+ image_or_video_shape[1],
227
+ self.num_frame_per_block,
228
+ uniform_timestep=True
229
+ )
230
+
231
+ if self.timestep_shift > 1:
232
+ critic_timestep = self.timestep_shift * \
233
+ (critic_timestep / 1000) / (1 + (self.timestep_shift - 1) * (critic_timestep / 1000)) * 1000
234
+
235
+ critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
236
+
237
+ critic_noise = torch.randn_like(generated_image)
238
+ noisy_generated_image = self.scheduler.add_noise(
239
+ generated_image.flatten(0, 1),
240
+ critic_noise.flatten(0, 1),
241
+ critic_timestep.flatten(0, 1)
242
+ ).unflatten(0, image_or_video_shape[:2])
243
+
244
+ _, pred_fake_image = self.fake_score(
245
+ noisy_image_or_video=noisy_generated_image,
246
+ conditional_dict=conditional_dict,
247
+ timestep=critic_timestep
248
+ )
249
+
250
+ # Step 3: Compute the denoising loss for the fake critic
251
+ if self.args.denoising_loss_type == "flow":
252
+ from utils.wan_wrapper import WanDiffusionWrapper
253
+ flow_pred = WanDiffusionWrapper._convert_x0_to_flow_pred(
254
+ scheduler=self.scheduler,
255
+ x0_pred=pred_fake_image.flatten(0, 1),
256
+ xt=noisy_generated_image.flatten(0, 1),
257
+ timestep=critic_timestep.flatten(0, 1)
258
+ )
259
+ pred_fake_noise = None
260
+ else:
261
+ flow_pred = None
262
+ pred_fake_noise = self.scheduler.convert_x0_to_noise(
263
+ x0=pred_fake_image.flatten(0, 1),
264
+ xt=noisy_generated_image.flatten(0, 1),
265
+ timestep=critic_timestep.flatten(0, 1)
266
+ ).unflatten(0, image_or_video_shape[:2])
267
+
268
+ denoising_loss = self.denoising_loss_func(
269
+ x=generated_image.flatten(0, 1),
270
+ x_pred=pred_fake_image.flatten(0, 1),
271
+ noise=critic_noise.flatten(0, 1),
272
+ noise_pred=pred_fake_noise,
273
+ alphas_cumprod=self.scheduler.alphas_cumprod,
274
+ timestep=critic_timestep.flatten(0, 1),
275
+ flow_pred=flow_pred
276
+ )
277
+
278
+ # Step 5: Debugging Log
279
+ critic_log_dict = {
280
+ "critic_timestep": critic_timestep.detach()
281
+ }
282
+
283
+ return denoising_loss, critic_log_dict
predictor_training/__init__.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Offline Predictor-v4 training utilities."""
2
+
3
+ from .dataset import (
4
+ SUPERVISION_PAIRS,
5
+ PredictorV4PairDataset,
6
+ move_batch_to_device,
7
+ predictor_v4_collate,
8
+ )
9
+ from .sampler import DistributedContextBucketBatchSampler
10
+ from .trajectory_dataset import (
11
+ PredictorV4TrajectoryDataset,
12
+ load_offline_ffff_target,
13
+ trajectory_collate,
14
+ )
15
+
16
+ __all__ = [
17
+ "SUPERVISION_PAIRS",
18
+ "PredictorV4PairDataset",
19
+ "DistributedContextBucketBatchSampler",
20
+ "move_batch_to_device",
21
+ "predictor_v4_collate",
22
+ "PredictorV4TrajectoryDataset",
23
+ "load_offline_ffff_target",
24
+ "trajectory_collate",
25
+ ]
predictor_training/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (653 Bytes). View file
 
predictor_training/__pycache__/cache.cpython-310.pyc ADDED
Binary file (917 Bytes). View file
 
predictor_training/__pycache__/checkpoint.cpython-310.pyc ADDED
Binary file (3.54 kB). View file
 
predictor_training/__pycache__/dataset.cpython-310.pyc ADDED
Binary file (12.8 kB). View file
 
predictor_training/__pycache__/rollout_cache.cpython-310.pyc ADDED
Binary file (3.04 kB). View file
 
predictor_training/__pycache__/sampler.cpython-310.pyc ADDED
Binary file (3.39 kB). View file
 
predictor_training/__pycache__/trajectory_dataset.cpython-310.pyc ADDED
Binary file (4.28 kB). View file
 
predictor_training/cache.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Small cache adapters for offline Predictor-v4 training."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Mapping
6
+
7
+ import torch
8
+
9
+
10
+ def build_cross_attention_cache(
11
+ text_kv: Mapping[int, Mapping[str, torch.Tensor]],
12
+ source_block_ids: tuple[int, ...],
13
+ ) -> dict[int, dict[str, torch.Tensor | bool]]:
14
+ """Wrap saved Teacher text K/V in Wan's initialized-cache structure."""
15
+ return {
16
+ int(block_id): {
17
+ "k": text_kv[int(block_id)]["k"],
18
+ "v": text_kv[int(block_id)]["v"],
19
+ "is_init": True,
20
+ }
21
+ for block_id in source_block_ids
22
+ }
predictor_training/checkpoint.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Atomic Predictor-v4 inference and resumable training checkpoints."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import os
7
+ import random
8
+ from pathlib import Path
9
+ from typing import Any
10
+
11
+ import torch
12
+ from safetensors.torch import load_file, save_file
13
+
14
+
15
+ def unwrap_model(model: torch.nn.Module) -> torch.nn.Module:
16
+ return model.module if hasattr(model, "module") else model
17
+
18
+
19
+ def trainable_state_dict(
20
+ model: torch.nn.Module,
21
+ *,
22
+ floating_dtype: torch.dtype | None = None,
23
+ ) -> dict[str, torch.Tensor]:
24
+ model = unwrap_model(model)
25
+ trainable_names = {
26
+ name for name, parameter in model.named_parameters() if parameter.requires_grad
27
+ }
28
+ return {
29
+ name: tensor.detach()
30
+ .to(
31
+ device="cpu",
32
+ dtype=(
33
+ floating_dtype
34
+ if floating_dtype is not None and tensor.is_floating_point()
35
+ else tensor.dtype
36
+ ),
37
+ )
38
+ .contiguous()
39
+ for name, tensor in model.state_dict().items()
40
+ if name in trainable_names
41
+ }
42
+
43
+
44
+ def save_predictor_weights(
45
+ model: torch.nn.Module,
46
+ path: str | Path,
47
+ *,
48
+ metadata: dict[str, Any],
49
+ floating_dtype: torch.dtype = torch.bfloat16,
50
+ ) -> Path:
51
+ path = Path(path)
52
+ path.parent.mkdir(parents=True, exist_ok=True)
53
+ temporary = path.with_suffix(path.suffix + f".tmp.{os.getpid()}")
54
+ save_file(
55
+ trainable_state_dict(model, floating_dtype=floating_dtype),
56
+ str(temporary),
57
+ metadata={
58
+ "format": "self_forcing_predictor_v4",
59
+ "config": json.dumps(metadata, ensure_ascii=False, sort_keys=True),
60
+ },
61
+ )
62
+ os.replace(temporary, path)
63
+ return path
64
+
65
+
66
+ def load_predictor_weights(model: torch.nn.Module, path: str | Path) -> None:
67
+ state = load_file(str(path), device="cpu")
68
+ result = unwrap_model(model).load_state_dict(state, strict=False)
69
+ trainable = {
70
+ name
71
+ for name, parameter in unwrap_model(model).named_parameters()
72
+ if parameter.requires_grad
73
+ }
74
+ missing_trainable = sorted(trainable.intersection(result.missing_keys))
75
+ if result.unexpected_keys or missing_trainable:
76
+ raise RuntimeError(
77
+ "Predictor weight mismatch: "
78
+ f"unexpected={result.unexpected_keys}, "
79
+ f"missing_trainable={missing_trainable}"
80
+ )
81
+
82
+
83
+ def atomic_torch_save(payload: dict[str, Any], path: str | Path) -> Path:
84
+ path = Path(path)
85
+ path.parent.mkdir(parents=True, exist_ok=True)
86
+ temporary = path.with_suffix(path.suffix + f".tmp.{os.getpid()}")
87
+ torch.save(payload, temporary)
88
+ os.replace(temporary, path)
89
+ return path
90
+
91
+
92
+ def capture_rng_state() -> dict[str, Any]:
93
+ return {
94
+ "python": random.getstate(),
95
+ "torch_cpu": torch.get_rng_state(),
96
+ "torch_cuda": torch.cuda.get_rng_state(),
97
+ }
98
+
99
+
100
+ def restore_rng_state(state: dict[str, Any]) -> None:
101
+ random.setstate(state["python"])
102
+ torch.set_rng_state(state["torch_cpu"])
103
+ torch.cuda.set_rng_state(state["torch_cuda"])
predictor_training/dataset.py ADDED
@@ -0,0 +1,364 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Manifest-backed offline dataset for the three Predictor-v4 transitions.
2
+
3
+ One manifest record represents one temporal chunk. This dataset expands every
4
+ usable record into the adjacent denoising pairs 0->1, 1->2 and 2->3. Chunk
5
+ zero is intentionally excluded because v4 conditions on the preceding chunk.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import json
11
+ from functools import lru_cache
12
+ from pathlib import Path
13
+ from typing import Any, Iterable, Mapping
14
+
15
+ import torch
16
+ from safetensors import safe_open
17
+ from torch.utils.data import Dataset
18
+
19
+
20
+ SUPERVISION_PAIRS = ((0, 1), (1, 2), (2, 3))
21
+ SCHEMA_VERSION = "self_forcing_predictor_v4_bf16_v1"
22
+ FRAMES_PER_CHUNK = 3
23
+
24
+
25
+ def _resolve(root: Path, value: str | Path) -> Path:
26
+ path = Path(value)
27
+ return path if path.is_absolute() else root / path
28
+
29
+
30
+ def _load_selected(path: Path, names: Iterable[str]) -> dict[str, torch.Tensor]:
31
+ if not path.is_file():
32
+ raise FileNotFoundError(path)
33
+ with safe_open(str(path), framework="pt", device="cpu") as handle:
34
+ available = set(handle.keys())
35
+ missing = set(names).difference(available)
36
+ if missing:
37
+ raise KeyError(f"{path} is missing tensors {sorted(missing)}")
38
+ return {name: handle.get_tensor(name) for name in names}
39
+
40
+
41
+ def _load_clean_prefeature(
42
+ path: Path,
43
+ candidates: Iterable[str],
44
+ *,
45
+ expected_start_frame: int,
46
+ ) -> torch.Tensor:
47
+ with safe_open(str(path), framework="pt", device="cpu") as handle:
48
+ available = set(handle.keys())
49
+ for name in candidates:
50
+ if name in available:
51
+ feature = handle.get_tensor(name)
52
+ break
53
+ else:
54
+ raise KeyError(
55
+ f"{path} has none of the expected tensors {tuple(candidates)}"
56
+ )
57
+ if "start_frame" in available:
58
+ actual_start = int(handle.get_tensor("start_frame").item())
59
+ if actual_start != expected_start_frame:
60
+ raise ValueError(
61
+ f"{path} starts at frame {actual_start}, expected "
62
+ f"{expected_start_frame}; history files are not ordered"
63
+ )
64
+ if "num_frames" in available:
65
+ actual_frames = int(handle.get_tensor("num_frames").item())
66
+ if actual_frames != FRAMES_PER_CHUNK:
67
+ raise ValueError(
68
+ f"{path} contains {actual_frames} frames, expected "
69
+ f"{FRAMES_PER_CHUNK}"
70
+ )
71
+ return feature
72
+
73
+
74
+ def _block_entry(mapping: Mapping[Any, Any], block_id: int) -> Any:
75
+ for key in (str(block_id), block_id, f"block_{block_id}", f"block_{block_id:02d}"):
76
+ if key in mapping:
77
+ return mapping[key]
78
+ raise KeyError(f"No prefeature entry for block {block_id}")
79
+
80
+
81
+ def _as_path_list(entry: Any) -> list[str]:
82
+ if isinstance(entry, (str, Path)):
83
+ return [str(entry)]
84
+ if isinstance(entry, Mapping):
85
+ # Builders may use {"files": [...]} or {"file": "..."}.
86
+ for key in ("files", "paths", "history", "file", "path"):
87
+ if key in entry:
88
+ return _as_path_list(entry[key])
89
+ if isinstance(entry, (list, tuple)):
90
+ return [str(value) for value in entry]
91
+ raise TypeError(f"Unsupported prefeature file entry: {entry!r}")
92
+
93
+
94
+ def _prefeature_names(block_id: int) -> tuple[str, ...]:
95
+ return (
96
+ "self_attn_input",
97
+ "clean_prefeature",
98
+ "prefeature",
99
+ "img_modulated",
100
+ f"block_{block_id}_self_attn_input",
101
+ f"block_{block_id:02d}_self_attn_input",
102
+ )
103
+
104
+
105
+ class PredictorV4PairDataset(Dataset):
106
+ """Read safetensors records and expose adjacent-step supervision pairs."""
107
+
108
+ PAIRS = SUPERVISION_PAIRS
109
+
110
+ def __init__(
111
+ self,
112
+ manifest_path: str | Path,
113
+ *,
114
+ source_block_ids: tuple[int, ...] = (1, 28),
115
+ max_records: int | None = None,
116
+ require_previous_chunk: bool = True,
117
+ ) -> None:
118
+ self.manifest_path = Path(manifest_path).resolve()
119
+ self.root = self.manifest_path.parent
120
+ self.source_block_ids = tuple(int(value) for value in source_block_ids)
121
+ with self.manifest_path.open("r", encoding="utf-8") as handle:
122
+ records = [json.loads(line) for line in handle if line.strip()]
123
+ if require_previous_chunk:
124
+ records = [record for record in records if int(record["chunk_id"]) > 0]
125
+ if max_records is not None:
126
+ records = records[: int(max_records)]
127
+ if not records:
128
+ raise ValueError(f"No usable records in {self.manifest_path}")
129
+ for record in records:
130
+ required = {
131
+ "step_tensor_file",
132
+ "previous_step_tensor_file",
133
+ "case_tensor_file",
134
+ "chunk_id",
135
+ }
136
+ missing = required.difference(record)
137
+ if missing:
138
+ raise ValueError(f"Manifest record lacks fields {sorted(missing)}")
139
+ if record.get("schema_version", SCHEMA_VERSION) != SCHEMA_VERSION:
140
+ raise ValueError(
141
+ f"Unsupported Predictor schema {record.get('schema_version')!r}"
142
+ )
143
+ chunk_id = int(record["chunk_id"])
144
+ expected_context_frames = chunk_id * FRAMES_PER_CHUNK
145
+ context_frames = int(
146
+ record.get("context_frames", expected_context_frames)
147
+ )
148
+ if context_frames != expected_context_frames:
149
+ raise ValueError(
150
+ f"chunk {chunk_id} context_frames={context_frames}, expected "
151
+ f"{expected_context_frames}"
152
+ )
153
+ history = record.get("history_clean_prefeature_files")
154
+ if history is None:
155
+ raise ValueError(
156
+ "Manifest record lacks history_clean_prefeature_files; "
157
+ "clean_prefeature_files contains only the current chunk"
158
+ )
159
+ for block_id in self.source_block_ids:
160
+ paths = _as_path_list(_block_entry(history, block_id))
161
+ if len(paths) != int(record["chunk_id"]):
162
+ raise ValueError(
163
+ f"chunk {record['chunk_id']} block {block_id} has "
164
+ f"{len(paths)} history files, expected {record['chunk_id']}"
165
+ )
166
+ self.records = records
167
+
168
+ def __len__(self) -> int:
169
+ return len(self.records) * len(self.PAIRS)
170
+
171
+ @lru_cache(maxsize=8)
172
+ def _load_case(self, relative_path: str) -> dict[str, torch.Tensor]:
173
+ path = _resolve(self.root, relative_path)
174
+ names: list[str] = []
175
+ with safe_open(str(path), framework="pt", device="cpu") as handle:
176
+ keys = set(handle.keys())
177
+ for block_id in self.source_block_ids:
178
+ for kind in ("k", "v"):
179
+ candidates = (
180
+ f"block_{block_id:02d}_cross_{kind}",
181
+ f"block_{block_id}_cross_{kind}",
182
+ f"block_{block_id}_text_{kind}",
183
+ f"block_{block_id:02d}_text_{kind}",
184
+ f"block_{block_id}_{kind}_txt",
185
+ f"text_{kind}_block_{block_id}",
186
+ )
187
+ found = next((name for name in candidates if name in keys), None)
188
+ if found is None:
189
+ raise KeyError(
190
+ f"{path} has no text {kind.upper()} for block {block_id}"
191
+ )
192
+ names.append(found)
193
+ return {name: handle.get_tensor(name) for name in names}
194
+
195
+ def _case_text_kv(
196
+ self,
197
+ relative_path: str,
198
+ ) -> dict[int, dict[str, torch.Tensor]]:
199
+ tensors = self._load_case(relative_path)
200
+ result: dict[int, dict[str, torch.Tensor]] = {}
201
+ for block_id in self.source_block_ids:
202
+ result[block_id] = {}
203
+ for kind in ("k", "v"):
204
+ candidates = (
205
+ f"block_{block_id:02d}_cross_{kind}",
206
+ f"block_{block_id}_cross_{kind}",
207
+ f"block_{block_id}_text_{kind}",
208
+ f"block_{block_id:02d}_text_{kind}",
209
+ f"block_{block_id}_{kind}_txt",
210
+ f"text_{kind}_block_{block_id}",
211
+ )
212
+ name = next(name for name in candidates if name in tensors)
213
+ result[block_id][kind] = tensors[name]
214
+ return result
215
+
216
+ def _history_prefeature(
217
+ self,
218
+ record: Mapping[str, Any],
219
+ ) -> dict[int, torch.Tensor]:
220
+ history = record["history_clean_prefeature_files"]
221
+ result = {}
222
+ for block_id in self.source_block_ids:
223
+ paths = _as_path_list(_block_entry(history, block_id))
224
+ chunks = [
225
+ _load_clean_prefeature(
226
+ _resolve(self.root, path),
227
+ _prefeature_names(block_id),
228
+ expected_start_frame=chunk_index * FRAMES_PER_CHUNK,
229
+ )
230
+ for chunk_index, path in enumerate(paths)
231
+ ]
232
+ # Files are [1, chunk_tokens, dim]. Concatenate temporal chunks.
233
+ result[block_id] = torch.cat(chunks, dim=1)
234
+ return result
235
+
236
+ def __getitem__(self, index: int) -> dict[str, Any]:
237
+ record_index, pair_index = divmod(index, len(self.PAIRS))
238
+ record = self.records[record_index]
239
+ anchor_step, target_step = self.PAIRS[pair_index]
240
+ step_path = _resolve(self.root, record["step_tensor_file"])
241
+ step_names = (
242
+ f"step_{anchor_step}_final_hidden",
243
+ f"step_{target_step}_noisy_latent",
244
+ f"step_{target_step}_timestep",
245
+ f"step_{target_step}_final_hidden",
246
+ f"step_{target_step}_flow",
247
+ )
248
+ step_tensors = _load_selected(step_path, step_names)
249
+ previous_name = f"step_{target_step}_final_hidden"
250
+ previous = _load_selected(
251
+ _resolve(self.root, record["previous_step_tensor_file"]),
252
+ (previous_name,),
253
+ )
254
+ context_frames = int(
255
+ record.get(
256
+ "context_frames",
257
+ int(record["chunk_id"]) * FRAMES_PER_CHUNK,
258
+ )
259
+ )
260
+ return {
261
+ "target_latent": step_tensors[f"step_{target_step}_noisy_latent"],
262
+ "target_timestep": step_tensors[f"step_{target_step}_timestep"],
263
+ "anchor_hidden": step_tensors[f"step_{anchor_step}_final_hidden"],
264
+ "previous_chunk_hidden": previous[previous_name],
265
+ "target_hidden": step_tensors[f"step_{target_step}_final_hidden"],
266
+ "target_flow": step_tensors[f"step_{target_step}_flow"],
267
+ "clean_prefeature": self._history_prefeature(record),
268
+ "text_kv": self._case_text_kv(str(record["case_tensor_file"])),
269
+ "case_id": record.get("case_id"),
270
+ "chunk_id": int(record["chunk_id"]),
271
+ "context_frames": context_frames,
272
+ "anchor_step": anchor_step,
273
+ "target_step": target_step,
274
+ }
275
+
276
+
277
+ def predictor_v4_collate(items: list[dict[str, Any]]) -> dict[str, Any]:
278
+ """Collate a context-length bucket into one batch."""
279
+ if not items:
280
+ raise ValueError("Cannot collate an empty batch")
281
+ context_frames = {item["context_frames"] for item in items}
282
+ if len(context_frames) != 1:
283
+ raise ValueError(
284
+ "A batch must have one history length; enable bucket_by_context"
285
+ )
286
+ tensor_keys = (
287
+ "target_latent",
288
+ "target_timestep",
289
+ "anchor_hidden",
290
+ "previous_chunk_hidden",
291
+ "target_hidden",
292
+ "target_flow",
293
+ )
294
+ batch: dict[str, Any] = {
295
+ key: torch.cat([item[key] for item in items], dim=0) for key in tensor_keys
296
+ }
297
+ block_ids = tuple(items[0]["clean_prefeature"])
298
+ batch["clean_prefeature"] = {
299
+ block_id: torch.cat(
300
+ [item["clean_prefeature"][block_id] for item in items], dim=0
301
+ )
302
+ for block_id in block_ids
303
+ }
304
+ batch["text_kv"] = {
305
+ block_id: {
306
+ kind: torch.cat(
307
+ [item["text_kv"][block_id][kind] for item in items], dim=0
308
+ )
309
+ for kind in ("k", "v")
310
+ }
311
+ for block_id in block_ids
312
+ }
313
+ for key in (
314
+ "case_id",
315
+ "chunk_id",
316
+ "context_frames",
317
+ "anchor_step",
318
+ "target_step",
319
+ ):
320
+ batch[key] = [item[key] for item in items]
321
+ return batch
322
+
323
+
324
+ def _move(
325
+ tensor: torch.Tensor,
326
+ *,
327
+ device: torch.device,
328
+ dtype: torch.dtype,
329
+ ) -> torch.Tensor:
330
+ target_dtype = dtype if tensor.is_floating_point() else tensor.dtype
331
+ return tensor.to(device=device, dtype=target_dtype, non_blocking=True)
332
+
333
+
334
+ def move_batch_to_device(
335
+ batch: dict[str, Any],
336
+ *,
337
+ device: torch.device,
338
+ dtype: torch.dtype,
339
+ ) -> dict[str, Any]:
340
+ result = {
341
+ key: _move(batch[key], device=device, dtype=dtype)
342
+ for key in (
343
+ "target_latent",
344
+ "target_timestep",
345
+ "anchor_hidden",
346
+ "previous_chunk_hidden",
347
+ "target_hidden",
348
+ "target_flow",
349
+ )
350
+ }
351
+ result["clean_prefeature"] = {
352
+ int(block_id): _move(value, device=device, dtype=dtype)
353
+ for block_id, value in batch["clean_prefeature"].items()
354
+ }
355
+ result["text_kv"] = {
356
+ int(block_id): {
357
+ kind: _move(value, device=device, dtype=dtype)
358
+ for kind, value in values.items()
359
+ }
360
+ for block_id, values in batch["text_kv"].items()
361
+ }
362
+ for key in ("case_id", "chunk_id", "context_frames", "anchor_step", "target_step"):
363
+ result[key] = batch[key]
364
+ return result
predictor_training/rollout_cache.py ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Cache workspaces for detached Predictor-v4 trajectory rollout."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence
6
+
7
+ import torch
8
+
9
+
10
+ def reset_main_caches(
11
+ kv_cache: Sequence[dict],
12
+ crossattn_cache: Sequence[dict],
13
+ ) -> None:
14
+ """Reset logical cache extents without clearing unused storage."""
15
+
16
+ for cache in kv_cache:
17
+ cache["global_end_index"].zero_()
18
+ cache["local_end_index"].zero_()
19
+ for cache in crossattn_cache:
20
+ cache["is_init"] = False
21
+
22
+
23
+ def build_predictor_workspace(
24
+ main_cache: Sequence[dict],
25
+ *,
26
+ source_block_ids: tuple[int, int],
27
+ history_tokens: int,
28
+ current_tokens: int,
29
+ ) -> dict[int, dict[str, torch.Tensor]]:
30
+ """Copy committed clean history into a temporary selected-layer workspace.
31
+
32
+ The current-chunk region is intentionally empty. Predictor P1/P2/P3
33
+ overwrite that region, and the entire workspace is discarded after the
34
+ chunk. Only the final Full timestep-zero pass updates persistent history.
35
+ """
36
+
37
+ history_tokens = int(history_tokens)
38
+ current_tokens = int(current_tokens)
39
+ if history_tokens < 0 or current_tokens <= 0:
40
+ raise ValueError("Invalid history/current token count")
41
+ capacity = history_tokens + current_tokens
42
+ result: dict[int, dict[str, torch.Tensor]] = {}
43
+ for block_id in source_block_ids:
44
+ source = main_cache[int(block_id)]
45
+ if int(source["global_end_index"].item()) < history_tokens:
46
+ raise RuntimeError(
47
+ f"Teacher cache block {block_id} ends before committed history: "
48
+ f"{int(source['global_end_index'].item())} < {history_tokens}"
49
+ )
50
+ key = source["k"].new_zeros(
51
+ source["k"].shape[0], capacity, *source["k"].shape[2:]
52
+ )
53
+ value = source["v"].new_zeros(
54
+ source["v"].shape[0], capacity, *source["v"].shape[2:]
55
+ )
56
+ if history_tokens:
57
+ key[:, :history_tokens].copy_(source["k"][:, :history_tokens])
58
+ value[:, :history_tokens].copy_(source["v"][:, :history_tokens])
59
+ result[int(block_id)] = {
60
+ "k": key,
61
+ "v": value,
62
+ "global_end_index": torch.tensor(
63
+ [history_tokens], dtype=torch.long, device=key.device
64
+ ),
65
+ "local_end_index": torch.tensor(
66
+ [history_tokens], dtype=torch.long, device=key.device
67
+ ),
68
+ }
69
+ return result
70
+
71
+
72
+ def reset_predictor_workspace(
73
+ workspace: dict[int, dict[str, torch.Tensor]],
74
+ *,
75
+ history_tokens: int,
76
+ ) -> None:
77
+ """Discard the previous timestep's differentiable current-cache region."""
78
+
79
+ history_tokens = int(history_tokens)
80
+ for cache in workspace.values():
81
+ # Slice assignment from Predictor K/V can attach CopySlices autograd
82
+ # history to the workspace tensor. Replace it with a detached tensor
83
+ # before the next timestep so P2/P3 cannot backpropagate through cache.
84
+ cache["k"] = cache["k"].detach()
85
+ cache["v"] = cache["v"].detach()
86
+ if history_tokens < cache["k"].shape[1]:
87
+ cache["k"][:, history_tokens:].zero_()
88
+ cache["v"][:, history_tokens:].zero_()
89
+ cache["global_end_index"].fill_(history_tokens)
90
+ cache["local_end_index"].fill_(history_tokens)
91
+
92
+
93
+ def assert_clean_history_extent(
94
+ kv_cache: Sequence[dict],
95
+ *,
96
+ expected_tokens: int,
97
+ ) -> None:
98
+ expected_tokens = int(expected_tokens)
99
+ for block_id, cache in enumerate(kv_cache):
100
+ global_end = int(cache["global_end_index"].item())
101
+ local_end = int(cache["local_end_index"].item())
102
+ if global_end != expected_tokens or local_end != expected_tokens:
103
+ raise RuntimeError(
104
+ f"Cache block {block_id} extent is ({global_end}, {local_end}), "
105
+ f"expected committed clean history {expected_tokens}"
106
+ )
107
+
108
+
109
+ __all__ = [
110
+ "assert_clean_history_extent",
111
+ "build_predictor_workspace",
112
+ "reset_main_caches",
113
+ "reset_predictor_workspace",
114
+ ]
predictor_training/sampler.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Deterministic DDP batches grouped by clean-history length."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import math
6
+ import random
7
+ from collections import defaultdict
8
+ from typing import Iterator
9
+
10
+ from torch.utils.data import Sampler
11
+
12
+ from .dataset import FRAMES_PER_CHUNK
13
+
14
+
15
+ class DistributedContextBucketBatchSampler(Sampler[list[int]]):
16
+ def __init__(
17
+ self,
18
+ dataset,
19
+ *,
20
+ batch_size: int,
21
+ rank: int,
22
+ world_size: int,
23
+ seed: int = 0,
24
+ drop_last: bool = True,
25
+ ) -> None:
26
+ self.dataset = dataset
27
+ self.batch_size = int(batch_size)
28
+ self.rank = int(rank)
29
+ self.world_size = int(world_size)
30
+ self.seed = int(seed)
31
+ self.drop_last = bool(drop_last)
32
+ self.epoch = 0
33
+ if self.batch_size <= 0 or not 0 <= self.rank < self.world_size:
34
+ raise ValueError("Invalid distributed bucket sampler configuration")
35
+ self._buckets: dict[int, list[int]] = defaultdict(list)
36
+ for record_index, record in enumerate(dataset.records):
37
+ context_frames = int(
38
+ record.get(
39
+ "context_frames",
40
+ int(record["chunk_id"]) * FRAMES_PER_CHUNK,
41
+ )
42
+ )
43
+ for pair_index in range(len(dataset.PAIRS)):
44
+ self._buckets[context_frames].append(
45
+ record_index * len(dataset.PAIRS) + pair_index
46
+ )
47
+
48
+ def set_epoch(self, epoch: int) -> None:
49
+ self.epoch = int(epoch)
50
+
51
+ def _global_batches(self) -> list[list[int]]:
52
+ rng = random.Random(self.seed + self.epoch)
53
+ global_batch_size = self.batch_size * self.world_size
54
+ batches: list[list[int]] = []
55
+ for bucket in self._buckets.values():
56
+ indices = list(bucket)
57
+ rng.shuffle(indices)
58
+ if not self.drop_last and len(indices) % global_batch_size:
59
+ needed = global_batch_size - len(indices) % global_batch_size
60
+ indices.extend((indices * math.ceil(needed / len(indices)))[:needed])
61
+ usable = len(indices) - len(indices) % global_batch_size
62
+ batches.extend(
63
+ indices[start : start + global_batch_size]
64
+ for start in range(0, usable, global_batch_size)
65
+ )
66
+ rng.shuffle(batches)
67
+ return batches
68
+
69
+ def __iter__(self) -> Iterator[list[int]]:
70
+ start = self.rank * self.batch_size
71
+ end = start + self.batch_size
72
+ for global_batch in self._global_batches():
73
+ yield global_batch[start:end]
74
+
75
+ def __len__(self) -> int:
76
+ global_batch_size = self.batch_size * self.world_size
77
+ if self.drop_last:
78
+ return sum(
79
+ len(values) // global_batch_size for values in self._buckets.values()
80
+ )
81
+ return sum(
82
+ math.ceil(len(values) / global_batch_size)
83
+ for values in self._buckets.values()
84
+ )
predictor_training/trajectory_dataset.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Prompt trajectories and fixed FFFF targets for Predictor-v4 Stage 2."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from pathlib import Path
7
+ from typing import Any
8
+
9
+ import torch
10
+ from safetensors import safe_open
11
+ from torch.utils.data import Dataset
12
+
13
+
14
+ class PredictorV4TrajectoryDataset(Dataset):
15
+ """One deterministic seven-chunk trajectory per training prompt."""
16
+
17
+ def __init__(
18
+ self,
19
+ cases_path: str | Path,
20
+ *,
21
+ data_root: str | Path,
22
+ max_cases: int | None = None,
23
+ ) -> None:
24
+ self.cases_path = Path(cases_path).resolve()
25
+ self.data_root = Path(data_root).resolve()
26
+ with self.cases_path.open("r", encoding="utf-8") as handle:
27
+ cases = [json.loads(line) for line in handle if line.strip()]
28
+ if max_cases is not None:
29
+ cases = cases[: int(max_cases)]
30
+ if not cases:
31
+ raise ValueError(f"No trajectory cases in {self.cases_path}")
32
+ for position, case in enumerate(cases):
33
+ if int(case["case_id"]) != position:
34
+ raise ValueError("Stage-2 case_id values must be dense and ordered")
35
+ if int(case.get("seed", -1)) != 0:
36
+ raise ValueError(f"case {position} does not use latent seed 0")
37
+ if not str(case.get("prompt", "")).strip():
38
+ raise ValueError(f"case {position} has an empty prompt")
39
+ self.cases = cases
40
+
41
+ def __len__(self) -> int:
42
+ return len(self.cases)
43
+
44
+ def __getitem__(self, index: int) -> dict[str, Any]:
45
+ case = self.cases[index]
46
+ return {
47
+ "case_id": int(case["case_id"]),
48
+ "prompt": str(case["prompt"]),
49
+ "seed": int(case["seed"]),
50
+ }
51
+
52
+ def offline_step_path(self, case_id: int, chunk_id: int) -> Path:
53
+ path = (
54
+ self.data_root
55
+ / "steps"
56
+ / f"case_{int(case_id):06d}"
57
+ / f"chunk_{int(chunk_id):02d}.safetensors"
58
+ )
59
+ if not path.is_file():
60
+ raise FileNotFoundError(path)
61
+ return path
62
+
63
+
64
+ def trajectory_collate(items: list[dict[str, Any]]) -> dict[str, Any]:
65
+ if len(items) != 1:
66
+ raise ValueError(
67
+ "Stage-2 rollout currently requires one trajectory per rank"
68
+ )
69
+ return items[0]
70
+
71
+
72
+ def load_offline_ffff_target(
73
+ path: str | Path,
74
+ *,
75
+ step_id: int,
76
+ device: torch.device,
77
+ ) -> dict[str, torch.Tensor]:
78
+ """Load one immutable Full-trajectory hidden/flow target."""
79
+
80
+ path = Path(path)
81
+ names = {
82
+ "hidden": f"step_{int(step_id)}_final_hidden",
83
+ "flow": f"step_{int(step_id)}_flow",
84
+ "timestep": f"step_{int(step_id)}_timestep",
85
+ }
86
+ with safe_open(str(path), framework="pt", device="cpu") as handle:
87
+ missing = set(names.values()).difference(handle.keys())
88
+ if missing:
89
+ raise KeyError(f"{path} lacks fixed FFFF tensors {sorted(missing)}")
90
+ result = {key: handle.get_tensor(name) for key, name in names.items()}
91
+ if result["hidden"].dtype != torch.bfloat16:
92
+ raise TypeError(f"{path}: target hidden must be BF16")
93
+ if result["flow"].dtype != torch.bfloat16:
94
+ raise TypeError(f"{path}: target flow must be BF16")
95
+ if result["timestep"].dtype != torch.int64:
96
+ raise TypeError(f"{path}: legacy offline timestep must be INT64")
97
+ return {
98
+ key: value.to(device=device, non_blocking=True)
99
+ for key, value in result.items()
100
+ }
101
+
102
+
103
+ __all__ = [
104
+ "PredictorV4TrajectoryDataset",
105
+ "load_offline_ffff_target",
106
+ "trajectory_collate",
107
+ ]
utils/lmdb.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+
3
+
4
+ def get_array_shape_from_lmdb(env, array_name):
5
+ with env.begin() as txn:
6
+ image_shape = txn.get(f"{array_name}_shape".encode()).decode()
7
+ image_shape = tuple(map(int, image_shape.split()))
8
+ return image_shape
9
+
10
+
11
+ def store_arrays_to_lmdb(env, arrays_dict, start_index=0):
12
+ """
13
+ Store rows of multiple numpy arrays in a single LMDB.
14
+ Each row is stored separately with a naming convention.
15
+ """
16
+ with env.begin(write=True) as txn:
17
+ for array_name, array in arrays_dict.items():
18
+ for i, row in enumerate(array):
19
+ # Convert row to bytes
20
+ if isinstance(row, str):
21
+ row_bytes = row.encode()
22
+ else:
23
+ row_bytes = row.tobytes()
24
+
25
+ data_key = f'{array_name}_{start_index + i}_data'.encode()
26
+
27
+ txn.put(data_key, row_bytes)
28
+
29
+
30
+ def process_data_dict(data_dict, seen_prompts):
31
+ output_dict = {}
32
+
33
+ all_videos = []
34
+ all_prompts = []
35
+ for prompt, video in data_dict.items():
36
+ if prompt in seen_prompts:
37
+ continue
38
+ else:
39
+ seen_prompts.add(prompt)
40
+
41
+ video = video.half().numpy()
42
+ all_videos.append(video)
43
+ all_prompts.append(prompt)
44
+
45
+ if len(all_videos) == 0:
46
+ return {"latents": np.array([]), "prompts": np.array([])}
47
+
48
+ all_videos = np.concatenate(all_videos, axis=0)
49
+
50
+ output_dict['latents'] = all_videos
51
+ output_dict['prompts'] = np.array(all_prompts)
52
+
53
+ return output_dict
54
+
55
+
56
+ def retrieve_row_from_lmdb(lmdb_env, array_name, dtype, row_index, shape=None):
57
+ """
58
+ Retrieve a specific row from a specific array in the LMDB.
59
+ """
60
+ data_key = f'{array_name}_{row_index}_data'.encode()
61
+
62
+ with lmdb_env.begin() as txn:
63
+ row_bytes = txn.get(data_key)
64
+
65
+ if dtype == str:
66
+ array = row_bytes.decode()
67
+ else:
68
+ array = np.frombuffer(row_bytes, dtype=dtype)
69
+
70
+ if shape is not None and len(shape) > 0:
71
+ array = array.reshape(shape)
72
+ return array
wan_models/Wan2.1-T2V-1.3B/.gitattributes ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ google/umt5-xxl/tokenizer.json filter=lfs diff=lfs merge=lfs -text
37
+ assets/comp_effic.png filter=lfs diff=lfs merge=lfs -text
38
+ assets/data_for_diff_stage.jpg filter=lfs diff=lfs merge=lfs -text
39
+ assets/i2v_res.png filter=lfs diff=lfs merge=lfs -text
40
+ assets/logo.png filter=lfs diff=lfs merge=lfs -text
41
+ assets/t2v_res.jpg filter=lfs diff=lfs merge=lfs -text
42
+ assets/vben_vs_sota.png filter=lfs diff=lfs merge=lfs -text
43
+ assets/vben_vs_sota_t2i.jpg filter=lfs diff=lfs merge=lfs -text
44
+ assets/video_dit_arch.jpg filter=lfs diff=lfs merge=lfs -text
45
+ assets/video_vae_res.jpg filter=lfs diff=lfs merge=lfs -text
46
+ examples/i2v_input.JPG filter=lfs diff=lfs merge=lfs -text
47
+ assets/.DS_Store filter=lfs diff=lfs merge=lfs -text
wan_models/Wan2.1-T2V-1.3B/LICENSE.txt ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
wan_models/Wan2.1-T2V-1.3B/README.md ADDED
@@ -0,0 +1,298 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ - zh
6
+ pipeline_tag: text-to-video
7
+ library_name: diffusers
8
+ tags:
9
+ - video
10
+ - video-generation
11
+ ---
12
+ # Wan2.1
13
+
14
+ <p align="center">
15
+ <img src="assets/logo.png" width="400"/>
16
+ <p>
17
+
18
+ <p align="center">
19
+ 💜 <a href=""><b>Wan</b></a> &nbsp&nbsp | &nbsp&nbsp 🖥️ <a href="https://github.com/Wan-Video/Wan2.1">GitHub</a> &nbsp&nbsp | &nbsp&nbsp🤗 <a href="https://huggingface.co/Wan-AI/">Hugging Face</a>&nbsp&nbsp | &nbsp&nbsp🤖 <a href="https://modelscope.cn/organization/Wan-AI">ModelScope</a>&nbsp&nbsp | &nbsp&nbsp 📑 <a href="">Paper (Coming soon)</a> &nbsp&nbsp | &nbsp&nbsp 📑 <a href="https://wanxai.com">Blog</a> &nbsp&nbsp | &nbsp&nbsp💬 <a href="https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg">WeChat Group</a>&nbsp&nbsp | &nbsp&nbsp 📖 <a href="https://discord.gg/p5XbdQV7">Discord</a>&nbsp&nbsp
20
+ <br>
21
+
22
+ -----
23
+
24
+ [**Wan: Open and Advanced Large-Scale Video Generative Models**]("#") <be>
25
+
26
+ In this repository, we present **Wan2.1**, a comprehensive and open suite of video foundation models that pushes the boundaries of video generation. **Wan2.1** offers these key features:
27
+ - 👍 **SOTA Performance**: **Wan2.1** consistently outperforms existing open-source models and state-of-the-art commercial solutions across multiple benchmarks.
28
+ - 👍 **Supports Consumer-grade GPUs**: The T2V-1.3B model requires only 8.19 GB VRAM, making it compatible with almost all consumer-grade GPUs. It can generate a 5-second 480P video on an RTX 4090 in about 4 minutes (without optimization techniques like quantization). Its performance is even comparable to some closed-source models.
29
+ - 👍 **Multiple Tasks**: **Wan2.1** excels in Text-to-Video, Image-to-Video, Video Editing, Text-to-Image, and Video-to-Audio, advancing the field of video generation.
30
+ - 👍 **Visual Text Generation**: **Wan2.1** is the first video model capable of generating both Chinese and English text, featuring robust text generation that enhances its practical applications.
31
+ - 👍 **Powerful Video VAE**: **Wan-VAE** delivers exceptional efficiency and performance, encoding and decoding 1080P videos of any length while preserving temporal information, making it an ideal foundation for video and image generation.
32
+
33
+
34
+ This repository hosts our T2V-1.3B model, a versatile solution for video generation that is compatible with nearly all consumer-grade GPUs. In this way, we hope that **Wan2.1** can serve as an easy-to-use tool for more creative teams in video creation, providing a high-quality foundational model for academic teams with limited computing resources. This will facilitate both the rapid development of the video creation community and the swift advancement of video technology.
35
+
36
+
37
+ ## Video Demos
38
+
39
+ <div align="center">
40
+ <video width="80%" controls>
41
+ <source src="https://cloud.video.taobao.com/vod/Jth64Y7wNoPcJki_Bo1ZJTDBvNjsgjlVKsNs05Fqfps.mp4" type="video/mp4">
42
+ Your browser does not support the video tag.
43
+ </video>
44
+ </div>
45
+
46
+
47
+ ## 🔥 Latest News!!
48
+
49
+ * Feb 25, 2025: 👋 We've released the inference code and weights of Wan2.1.
50
+
51
+
52
+ ## 📑 Todo List
53
+ - Wan2.1 Text-to-Video
54
+ - [x] Multi-GPU Inference code of the 14B and 1.3B models
55
+ - [x] Checkpoints of the 14B and 1.3B models
56
+ - [x] Gradio demo
57
+ - [ ] Diffusers integration
58
+ - [ ] ComfyUI integration
59
+ - Wan2.1 Image-to-Video
60
+ - [x] Multi-GPU Inference code of the 14B model
61
+ - [x] Checkpoints of the 14B model
62
+ - [x] Gradio demo
63
+ - [ ] Diffusers integration
64
+ - [ ] ComfyUI integration
65
+
66
+
67
+ ## Quickstart
68
+
69
+ #### Installation
70
+ Clone the repo:
71
+ ```
72
+ git clone https://github.com/Wan-Video/Wan2.1.git
73
+ cd Wan2.1
74
+ ```
75
+
76
+ Install dependencies:
77
+ ```
78
+ # Ensure torch >= 2.4.0
79
+ pip install -r requirements.txt
80
+ ```
81
+
82
+
83
+ #### Model Download
84
+
85
+ | Models | Download Link | Notes |
86
+ | --------------|-------------------------------------------------------------------------------|-------------------------------|
87
+ | T2V-14B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-14B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | Supports both 480P and 720P
88
+ | I2V-14B-720P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | Supports 720P
89
+ | I2V-14B-480P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | Supports 480P
90
+ | T2V-1.3B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | Supports 480P
91
+
92
+
93
+ > 💡Note: The 1.3B model is capable of generating videos at 720P resolution. However, due to limited training at this resolution, the results are generally less stable compared to 480P. For optimal performance, we recommend using 480P resolution.
94
+
95
+
96
+ Download models using 🤗 huggingface-cli:
97
+ ```
98
+ pip install "huggingface_hub[cli]"
99
+ huggingface-cli download Wan-AI/Wan2.1-T2V-1.3B --local-dir ./Wan2.1-T2V-1.3B
100
+ ```
101
+
102
+ Download models using 🤖 modelscope-cli:
103
+ ```
104
+ pip install modelscope
105
+ modelscope download Wan-AI/Wan2.1-T2V-1.3B --local_dir ./Wan2.1-T2V-1.3B
106
+ ```
107
+
108
+ #### Run Text-to-Video Generation
109
+
110
+ This repository supports two Text-to-Video models (1.3B and 14B) and two resolutions (480P and 720P). The parameters and configurations for these models are as follows:
111
+
112
+ <table>
113
+ <thead>
114
+ <tr>
115
+ <th rowspan="2">Task</th>
116
+ <th colspan="2">Resolution</th>
117
+ <th rowspan="2">Model</th>
118
+ </tr>
119
+ <tr>
120
+ <th>480P</th>
121
+ <th>720P</th>
122
+ </tr>
123
+ </thead>
124
+ <tbody>
125
+ <tr>
126
+ <td>t2v-14B</td>
127
+ <td style="color: green;">✔️</td>
128
+ <td style="color: green;">✔️</td>
129
+ <td>Wan2.1-T2V-14B</td>
130
+ </tr>
131
+ <tr>
132
+ <td>t2v-1.3B</td>
133
+ <td style="color: green;">✔️</td>
134
+ <td style="color: red;">❌</td>
135
+ <td>Wan2.1-T2V-1.3B</td>
136
+ </tr>
137
+ </tbody>
138
+ </table>
139
+
140
+
141
+ ##### (1) Without Prompt Extention
142
+
143
+ To facilitate implementation, we will start with a basic version of the inference process that skips the [prompt extension](#2-using-prompt-extention) step.
144
+
145
+ - Single-GPU inference
146
+
147
+ ```
148
+ python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
149
+ ```
150
+
151
+ If you encounter OOM (Out-of-Memory) issues, you can use the `--offload_model True` and `--t5_cpu` options to reduce GPU memory usage. For example, on an RTX 4090 GPU:
152
+
153
+ ```
154
+ python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --offload_model True --t5_cpu --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
155
+ ```
156
+
157
+ > 💡Note: If you are using the `T2V-1.3B` model, we recommend setting the parameter `--sample_guide_scale 6`. The `--sample_shift parameter` can be adjusted within the range of 8 to 12 based on the performance.
158
+
159
+ - Multi-GPU inference using FSDP + xDiT USP
160
+
161
+ ```
162
+ pip install "xfuser>=0.4.1"
163
+ torchrun --nproc_per_node=8 generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --dit_fsdp --t5_fsdp --ulysses_size 8 --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
164
+ ```
165
+
166
+
167
+ ##### (2) Using Prompt Extention
168
+
169
+ Extending the prompts can effectively enrich the details in the generated videos, further enhancing the video quality. Therefore, we recommend enabling prompt extension. We provide the following two methods for prompt extension:
170
+
171
+ - Use the Dashscope API for extension.
172
+ - Apply for a `dashscope.api_key` in advance ([EN](https://www.alibabacloud.com/help/en/model-studio/getting-started/first-api-call-to-qwen) | [CN](https://help.aliyun.com/zh/model-studio/getting-started/first-api-call-to-qwen)).
173
+ - Configure the environment variable `DASH_API_KEY` to specify the Dashscope API key. For users of Alibaba Cloud's international site, you also need to set the environment variable `DASH_API_URL` to 'https://dashscope-intl.aliyuncs.com/api/v1'. For more detailed instructions, please refer to the [dashscope document](https://www.alibabacloud.com/help/en/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c63.p38356.0.i1).
174
+ - Use the `qwen-plus` model for text-to-video tasks and `qwen-vl-max` for image-to-video tasks.
175
+ - You can modify the model used for extension with the parameter `--prompt_extend_model`. For example:
176
+ ```
177
+ DASH_API_KEY=your_key python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'dashscope' --prompt_extend_target_lang 'ch'
178
+ ```
179
+
180
+ - Using a local model for extension.
181
+
182
+ - By default, the Qwen model on HuggingFace is used for this extension. Users can choose based on the available GPU memory size.
183
+ - For text-to-video tasks, you can use models like `Qwen/Qwen2.5-14B-Instruct`, `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen2.5-3B-Instruct`
184
+ - For image-to-video tasks, you can use models like `Qwen/Qwen2.5-VL-7B-Instruct` and `Qwen/Qwen2.5-VL-3B-Instruct`.
185
+ - Larger models generally provide better extension results but require more GPU memory.
186
+ - You can modify the model used for extension with the parameter `--prompt_extend_model` , allowing you to specify either a local model path or a Hugging Face model. For example:
187
+
188
+ ```
189
+ python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'local_qwen' --prompt_extend_target_lang 'ch'
190
+ ```
191
+
192
+ ##### (3) Runing local gradio
193
+
194
+ ```
195
+ cd gradio
196
+ # if one uses dashscope’s API for prompt extension
197
+ DASH_API_KEY=your_key python t2v_1.3B_singleGPU.py --prompt_extend_method 'dashscope' --ckpt_dir ./Wan2.1-T2V-1.3B
198
+
199
+ # if one uses a local model for prompt extension
200
+ python t2v_1.3B_singleGPU.py --prompt_extend_method 'local_qwen' --ckpt_dir ./Wan2.1-T2V-1.3B
201
+ ```
202
+
203
+
204
+
205
+ ## Evaluation
206
+
207
+ We employ our **Wan-Bench** framework to evaluate the performance of the T2V-1.3B model, with the results displayed in the table below. The results indicate that our smaller 1.3B model surpasses the overall metrics of larger open-source models, demonstrating the effectiveness of **WanX2.1**'s architecture and the data construction pipeline.
208
+
209
+ <div align="center">
210
+ <img src="assets/vben_1.3b_vs_sota.png" alt="" style="width: 80%;" />
211
+ </div>
212
+
213
+
214
+
215
+ ## Computational Efficiency on Different GPUs
216
+
217
+ We test the computational efficiency of different **Wan2.1** models on different GPUs in the following table. The results are presented in the format: **Total time (s) / peak GPU memory (GB)**.
218
+
219
+
220
+ <div align="center">
221
+ <img src="assets/comp_effic.png" alt="" style="width: 80%;" />
222
+ </div>
223
+
224
+ > The parameter settings for the tests presented in this table are as follows:
225
+ > (1) For the 1.3B model on 8 GPUs, set `--ring_size 8` and `--ulysses_size 1`;
226
+ > (2) For the 14B model on 1 GPU, use `--offload_model True`;
227
+ > (3) For the 1.3B model on a single 4090 GPU, set `--offload_model True --t5_cpu`;
228
+ > (4) For all testings, no prompt extension was applied, meaning `--use_prompt_extend` was not enabled.
229
+
230
+ -------
231
+
232
+ ## Introduction of Wan2.1
233
+
234
+ **Wan2.1** is designed on the mainstream diffusion transformer paradigm, achieving significant advancements in generative capabilities through a series of innovations. These include our novel spatio-temporal variational autoencoder (VAE), scalable training strategies, large-scale data construction, and automated evaluation metrics. Collectively, these contributions enhance the model’s performance and versatility.
235
+
236
+
237
+ ##### (1) 3D Variational Autoencoders
238
+ We propose a novel 3D causal VAE architecture, termed **Wan-VAE** specifically designed for video generation. By combining multiple strategies, we improve spatio-temporal compression, reduce memory usage, and ensure temporal causality. **Wan-VAE** demonstrates significant advantages in performance efficiency compared to other open-source VAEs. Furthermore, our **Wan-VAE** can encode and decode unlimited-length 1080P videos without losing historical temporal information, making it particularly well-suited for video generation tasks.
239
+
240
+
241
+ <div align="center">
242
+ <img src="assets/video_vae_res.jpg" alt="" style="width: 80%;" />
243
+ </div>
244
+
245
+
246
+ ##### (2) Video Diffusion DiT
247
+
248
+ **Wan2.1** is designed using the Flow Matching framework within the paradigm of mainstream Diffusion Transformers. Our model's architecture uses the T5 Encoder to encode multilingual text input, with cross-attention in each transformer block embedding the text into the model structure. Additionally, we employ an MLP with a Linear layer and a SiLU layer to process the input time embeddings and predict six modulation parameters individually. This MLP is shared across all transformer blocks, with each block learning a distinct set of biases. Our experimental findings reveal a significant performance improvement with this approach at the same parameter scale.
249
+
250
+ <div align="center">
251
+ <img src="assets/video_dit_arch.jpg" alt="" style="width: 80%;" />
252
+ </div>
253
+
254
+
255
+ | Model | Dimension | Input Dimension | Output Dimension | Feedforward Dimension | Frequency Dimension | Number of Heads | Number of Layers |
256
+ |--------|-----------|-----------------|------------------|-----------------------|---------------------|-----------------|------------------|
257
+ | 1.3B | 1536 | 16 | 16 | 8960 | 256 | 12 | 30 |
258
+ | 14B | 5120 | 16 | 16 | 13824 | 256 | 40 | 40 |
259
+
260
+
261
+
262
+ ##### Data
263
+
264
+ We curated and deduplicated a candidate dataset comprising a vast amount of image and video data. During the data curation process, we designed a four-step data cleaning process, focusing on fundamental dimensions, visual quality and motion quality. Through the robust data processing pipeline, we can easily obtain high-quality, diverse, and large-scale training sets of images and videos.
265
+
266
+ ![figure1](assets/data_for_diff_stage.jpg "figure1")
267
+
268
+
269
+ ##### Comparisons to SOTA
270
+ We compared **Wan2.1** with leading open-source and closed-source models to evaluate the performace. Using our carefully designed set of 1,035 internal prompts, we tested across 14 major dimensions and 26 sub-dimensions. Then we calculated the total score through a weighted average based on the importance of each dimension. The detailed results are shown in the table below. These results demonstrate our model's superior performance compared to both open-source and closed-source models.
271
+
272
+ ![figure1](assets/vben_vs_sota.png "figure1")
273
+
274
+
275
+ ## Citation
276
+ If you find our work helpful, please cite us.
277
+
278
+ ```
279
+ @article{wan2.1,
280
+ title = {Wan: Open and Advanced Large-Scale Video Generative Models},
281
+ author = {Wan Team},
282
+ journal = {},
283
+ year = {2025}
284
+ }
285
+ ```
286
+
287
+ ## License Agreement
288
+ The models in this repository are licensed under the Apache 2.0 License. We claim no rights over the your generate contents, granting you the freedom to use them while ensuring that your usage complies with the provisions of this license. You are fully accountable for your use of the models, which must not involve sharing any content that violates applicable laws, causes harm to individuals or groups, disseminates personal information intended for harm, spreads misinformation, or targets vulnerable populations. For a complete list of restrictions and details regarding your rights, please refer to the full text of the [license](LICENSE.txt).
289
+
290
+
291
+ ## Acknowledgements
292
+
293
+ We would like to thank the contributors to the [SD3](https://huggingface.co/stabilityai/stable-diffusion-3-medium), [Qwen](https://huggingface.co/Qwen), [umt5-xxl](https://huggingface.co/google/umt5-xxl), [diffusers](https://github.com/huggingface/diffusers) and [HuggingFace](https://huggingface.co) repositories, for their open research.
294
+
295
+
296
+
297
+ ## Contact Us
298
+ If you would like to leave a message to our research or product teams, feel free to join our [Discord](https://discord.gg/p5XbdQV7) or [WeChat groups](https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg)!
wan_models/Wan2.1-T2V-1.3B/assets/.DS_Store ADDED
Binary file (6.15 kB). View file
 
wan_models/Wan2.1-T2V-1.3B/assets/logo.png ADDED
wan_models/Wan2.1-T2V-1.3B/config.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "WanModel",
3
+ "_diffusers_version": "0.30.0",
4
+ "dim": 1536,
5
+ "eps": 1e-06,
6
+ "ffn_dim": 8960,
7
+ "freq_dim": 256,
8
+ "in_dim": 16,
9
+ "model_type": "t2v",
10
+ "num_heads": 12,
11
+ "num_layers": 30,
12
+ "out_dim": 16,
13
+ "text_len": 512
14
+ }
wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/special_tokens_map.json ADDED
@@ -0,0 +1,308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<extra_id_0>",
4
+ "<extra_id_1>",
5
+ "<extra_id_2>",
6
+ "<extra_id_3>",
7
+ "<extra_id_4>",
8
+ "<extra_id_5>",
9
+ "<extra_id_6>",
10
+ "<extra_id_7>",
11
+ "<extra_id_8>",
12
+ "<extra_id_9>",
13
+ "<extra_id_10>",
14
+ "<extra_id_11>",
15
+ "<extra_id_12>",
16
+ "<extra_id_13>",
17
+ "<extra_id_14>",
18
+ "<extra_id_15>",
19
+ "<extra_id_16>",
20
+ "<extra_id_17>",
21
+ "<extra_id_18>",
22
+ "<extra_id_19>",
23
+ "<extra_id_20>",
24
+ "<extra_id_21>",
25
+ "<extra_id_22>",
26
+ "<extra_id_23>",
27
+ "<extra_id_24>",
28
+ "<extra_id_25>",
29
+ "<extra_id_26>",
30
+ "<extra_id_27>",
31
+ "<extra_id_28>",
32
+ "<extra_id_29>",
33
+ "<extra_id_30>",
34
+ "<extra_id_31>",
35
+ "<extra_id_32>",
36
+ "<extra_id_33>",
37
+ "<extra_id_34>",
38
+ "<extra_id_35>",
39
+ "<extra_id_36>",
40
+ "<extra_id_37>",
41
+ "<extra_id_38>",
42
+ "<extra_id_39>",
43
+ "<extra_id_40>",
44
+ "<extra_id_41>",
45
+ "<extra_id_42>",
46
+ "<extra_id_43>",
47
+ "<extra_id_44>",
48
+ "<extra_id_45>",
49
+ "<extra_id_46>",
50
+ "<extra_id_47>",
51
+ "<extra_id_48>",
52
+ "<extra_id_49>",
53
+ "<extra_id_50>",
54
+ "<extra_id_51>",
55
+ "<extra_id_52>",
56
+ "<extra_id_53>",
57
+ "<extra_id_54>",
58
+ "<extra_id_55>",
59
+ "<extra_id_56>",
60
+ "<extra_id_57>",
61
+ "<extra_id_58>",
62
+ "<extra_id_59>",
63
+ "<extra_id_60>",
64
+ "<extra_id_61>",
65
+ "<extra_id_62>",
66
+ "<extra_id_63>",
67
+ "<extra_id_64>",
68
+ "<extra_id_65>",
69
+ "<extra_id_66>",
70
+ "<extra_id_67>",
71
+ "<extra_id_68>",
72
+ "<extra_id_69>",
73
+ "<extra_id_70>",
74
+ "<extra_id_71>",
75
+ "<extra_id_72>",
76
+ "<extra_id_73>",
77
+ "<extra_id_74>",
78
+ "<extra_id_75>",
79
+ "<extra_id_76>",
80
+ "<extra_id_77>",
81
+ "<extra_id_78>",
82
+ "<extra_id_79>",
83
+ "<extra_id_80>",
84
+ "<extra_id_81>",
85
+ "<extra_id_82>",
86
+ "<extra_id_83>",
87
+ "<extra_id_84>",
88
+ "<extra_id_85>",
89
+ "<extra_id_86>",
90
+ "<extra_id_87>",
91
+ "<extra_id_88>",
92
+ "<extra_id_89>",
93
+ "<extra_id_90>",
94
+ "<extra_id_91>",
95
+ "<extra_id_92>",
96
+ "<extra_id_93>",
97
+ "<extra_id_94>",
98
+ "<extra_id_95>",
99
+ "<extra_id_96>",
100
+ "<extra_id_97>",
101
+ "<extra_id_98>",
102
+ "<extra_id_99>",
103
+ "<extra_id_100>",
104
+ "<extra_id_101>",
105
+ "<extra_id_102>",
106
+ "<extra_id_103>",
107
+ "<extra_id_104>",
108
+ "<extra_id_105>",
109
+ "<extra_id_106>",
110
+ "<extra_id_107>",
111
+ "<extra_id_108>",
112
+ "<extra_id_109>",
113
+ "<extra_id_110>",
114
+ "<extra_id_111>",
115
+ "<extra_id_112>",
116
+ "<extra_id_113>",
117
+ "<extra_id_114>",
118
+ "<extra_id_115>",
119
+ "<extra_id_116>",
120
+ "<extra_id_117>",
121
+ "<extra_id_118>",
122
+ "<extra_id_119>",
123
+ "<extra_id_120>",
124
+ "<extra_id_121>",
125
+ "<extra_id_122>",
126
+ "<extra_id_123>",
127
+ "<extra_id_124>",
128
+ "<extra_id_125>",
129
+ "<extra_id_126>",
130
+ "<extra_id_127>",
131
+ "<extra_id_128>",
132
+ "<extra_id_129>",
133
+ "<extra_id_130>",
134
+ "<extra_id_131>",
135
+ "<extra_id_132>",
136
+ "<extra_id_133>",
137
+ "<extra_id_134>",
138
+ "<extra_id_135>",
139
+ "<extra_id_136>",
140
+ "<extra_id_137>",
141
+ "<extra_id_138>",
142
+ "<extra_id_139>",
143
+ "<extra_id_140>",
144
+ "<extra_id_141>",
145
+ "<extra_id_142>",
146
+ "<extra_id_143>",
147
+ "<extra_id_144>",
148
+ "<extra_id_145>",
149
+ "<extra_id_146>",
150
+ "<extra_id_147>",
151
+ "<extra_id_148>",
152
+ "<extra_id_149>",
153
+ "<extra_id_150>",
154
+ "<extra_id_151>",
155
+ "<extra_id_152>",
156
+ "<extra_id_153>",
157
+ "<extra_id_154>",
158
+ "<extra_id_155>",
159
+ "<extra_id_156>",
160
+ "<extra_id_157>",
161
+ "<extra_id_158>",
162
+ "<extra_id_159>",
163
+ "<extra_id_160>",
164
+ "<extra_id_161>",
165
+ "<extra_id_162>",
166
+ "<extra_id_163>",
167
+ "<extra_id_164>",
168
+ "<extra_id_165>",
169
+ "<extra_id_166>",
170
+ "<extra_id_167>",
171
+ "<extra_id_168>",
172
+ "<extra_id_169>",
173
+ "<extra_id_170>",
174
+ "<extra_id_171>",
175
+ "<extra_id_172>",
176
+ "<extra_id_173>",
177
+ "<extra_id_174>",
178
+ "<extra_id_175>",
179
+ "<extra_id_176>",
180
+ "<extra_id_177>",
181
+ "<extra_id_178>",
182
+ "<extra_id_179>",
183
+ "<extra_id_180>",
184
+ "<extra_id_181>",
185
+ "<extra_id_182>",
186
+ "<extra_id_183>",
187
+ "<extra_id_184>",
188
+ "<extra_id_185>",
189
+ "<extra_id_186>",
190
+ "<extra_id_187>",
191
+ "<extra_id_188>",
192
+ "<extra_id_189>",
193
+ "<extra_id_190>",
194
+ "<extra_id_191>",
195
+ "<extra_id_192>",
196
+ "<extra_id_193>",
197
+ "<extra_id_194>",
198
+ "<extra_id_195>",
199
+ "<extra_id_196>",
200
+ "<extra_id_197>",
201
+ "<extra_id_198>",
202
+ "<extra_id_199>",
203
+ "<extra_id_200>",
204
+ "<extra_id_201>",
205
+ "<extra_id_202>",
206
+ "<extra_id_203>",
207
+ "<extra_id_204>",
208
+ "<extra_id_205>",
209
+ "<extra_id_206>",
210
+ "<extra_id_207>",
211
+ "<extra_id_208>",
212
+ "<extra_id_209>",
213
+ "<extra_id_210>",
214
+ "<extra_id_211>",
215
+ "<extra_id_212>",
216
+ "<extra_id_213>",
217
+ "<extra_id_214>",
218
+ "<extra_id_215>",
219
+ "<extra_id_216>",
220
+ "<extra_id_217>",
221
+ "<extra_id_218>",
222
+ "<extra_id_219>",
223
+ "<extra_id_220>",
224
+ "<extra_id_221>",
225
+ "<extra_id_222>",
226
+ "<extra_id_223>",
227
+ "<extra_id_224>",
228
+ "<extra_id_225>",
229
+ "<extra_id_226>",
230
+ "<extra_id_227>",
231
+ "<extra_id_228>",
232
+ "<extra_id_229>",
233
+ "<extra_id_230>",
234
+ "<extra_id_231>",
235
+ "<extra_id_232>",
236
+ "<extra_id_233>",
237
+ "<extra_id_234>",
238
+ "<extra_id_235>",
239
+ "<extra_id_236>",
240
+ "<extra_id_237>",
241
+ "<extra_id_238>",
242
+ "<extra_id_239>",
243
+ "<extra_id_240>",
244
+ "<extra_id_241>",
245
+ "<extra_id_242>",
246
+ "<extra_id_243>",
247
+ "<extra_id_244>",
248
+ "<extra_id_245>",
249
+ "<extra_id_246>",
250
+ "<extra_id_247>",
251
+ "<extra_id_248>",
252
+ "<extra_id_249>",
253
+ "<extra_id_250>",
254
+ "<extra_id_251>",
255
+ "<extra_id_252>",
256
+ "<extra_id_253>",
257
+ "<extra_id_254>",
258
+ "<extra_id_255>",
259
+ "<extra_id_256>",
260
+ "<extra_id_257>",
261
+ "<extra_id_258>",
262
+ "<extra_id_259>",
263
+ "<extra_id_260>",
264
+ "<extra_id_261>",
265
+ "<extra_id_262>",
266
+ "<extra_id_263>",
267
+ "<extra_id_264>",
268
+ "<extra_id_265>",
269
+ "<extra_id_266>",
270
+ "<extra_id_267>",
271
+ "<extra_id_268>",
272
+ "<extra_id_269>",
273
+ "<extra_id_270>",
274
+ "<extra_id_271>",
275
+ "<extra_id_272>",
276
+ "<extra_id_273>",
277
+ "<extra_id_274>",
278
+ "<extra_id_275>",
279
+ "<extra_id_276>",
280
+ "<extra_id_277>",
281
+ "<extra_id_278>",
282
+ "<extra_id_279>",
283
+ "<extra_id_280>",
284
+ "<extra_id_281>",
285
+ "<extra_id_282>",
286
+ "<extra_id_283>",
287
+ "<extra_id_284>",
288
+ "<extra_id_285>",
289
+ "<extra_id_286>",
290
+ "<extra_id_287>",
291
+ "<extra_id_288>",
292
+ "<extra_id_289>",
293
+ "<extra_id_290>",
294
+ "<extra_id_291>",
295
+ "<extra_id_292>",
296
+ "<extra_id_293>",
297
+ "<extra_id_294>",
298
+ "<extra_id_295>",
299
+ "<extra_id_296>",
300
+ "<extra_id_297>",
301
+ "<extra_id_298>",
302
+ "<extra_id_299>"
303
+ ],
304
+ "bos_token": "<s>",
305
+ "eos_token": "</s>",
306
+ "pad_token": "<pad>",
307
+ "unk_token": "<unk>"
308
+ }
wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/tokenizer_config.json ADDED
@@ -0,0 +1,2748 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "<pad>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "</s>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "<s>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "<unk>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "256000": {
36
+ "content": "<extra_id_299>",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ },
43
+ "256001": {
44
+ "content": "<extra_id_298>",
45
+ "lstrip": false,
46
+ "normalized": false,
47
+ "rstrip": false,
48
+ "single_word": false,
49
+ "special": true
50
+ },
51
+ "256002": {
52
+ "content": "<extra_id_297>",
53
+ "lstrip": false,
54
+ "normalized": false,
55
+ "rstrip": false,
56
+ "single_word": false,
57
+ "special": true
58
+ },
59
+ "256003": {
60
+ "content": "<extra_id_296>",
61
+ "lstrip": false,
62
+ "normalized": false,
63
+ "rstrip": false,
64
+ "single_word": false,
65
+ "special": true
66
+ },
67
+ "256004": {
68
+ "content": "<extra_id_295>",
69
+ "lstrip": false,
70
+ "normalized": false,
71
+ "rstrip": false,
72
+ "single_word": false,
73
+ "special": true
74
+ },
75
+ "256005": {
76
+ "content": "<extra_id_294>",
77
+ "lstrip": false,
78
+ "normalized": false,
79
+ "rstrip": false,
80
+ "single_word": false,
81
+ "special": true
82
+ },
83
+ "256006": {
84
+ "content": "<extra_id_293>",
85
+ "lstrip": false,
86
+ "normalized": false,
87
+ "rstrip": false,
88
+ "single_word": false,
89
+ "special": true
90
+ },
91
+ "256007": {
92
+ "content": "<extra_id_292>",
93
+ "lstrip": false,
94
+ "normalized": false,
95
+ "rstrip": false,
96
+ "single_word": false,
97
+ "special": true
98
+ },
99
+ "256008": {
100
+ "content": "<extra_id_291>",
101
+ "lstrip": false,
102
+ "normalized": false,
103
+ "rstrip": false,
104
+ "single_word": false,
105
+ "special": true
106
+ },
107
+ "256009": {
108
+ "content": "<extra_id_290>",
109
+ "lstrip": false,
110
+ "normalized": false,
111
+ "rstrip": false,
112
+ "single_word": false,
113
+ "special": true
114
+ },
115
+ "256010": {
116
+ "content": "<extra_id_289>",
117
+ "lstrip": false,
118
+ "normalized": false,
119
+ "rstrip": false,
120
+ "single_word": false,
121
+ "special": true
122
+ },
123
+ "256011": {
124
+ "content": "<extra_id_288>",
125
+ "lstrip": false,
126
+ "normalized": false,
127
+ "rstrip": false,
128
+ "single_word": false,
129
+ "special": true
130
+ },
131
+ "256012": {
132
+ "content": "<extra_id_287>",
133
+ "lstrip": false,
134
+ "normalized": false,
135
+ "rstrip": false,
136
+ "single_word": false,
137
+ "special": true
138
+ },
139
+ "256013": {
140
+ "content": "<extra_id_286>",
141
+ "lstrip": false,
142
+ "normalized": false,
143
+ "rstrip": false,
144
+ "single_word": false,
145
+ "special": true
146
+ },
147
+ "256014": {
148
+ "content": "<extra_id_285>",
149
+ "lstrip": false,
150
+ "normalized": false,
151
+ "rstrip": false,
152
+ "single_word": false,
153
+ "special": true
154
+ },
155
+ "256015": {
156
+ "content": "<extra_id_284>",
157
+ "lstrip": false,
158
+ "normalized": false,
159
+ "rstrip": false,
160
+ "single_word": false,
161
+ "special": true
162
+ },
163
+ "256016": {
164
+ "content": "<extra_id_283>",
165
+ "lstrip": false,
166
+ "normalized": false,
167
+ "rstrip": false,
168
+ "single_word": false,
169
+ "special": true
170
+ },
171
+ "256017": {
172
+ "content": "<extra_id_282>",
173
+ "lstrip": false,
174
+ "normalized": false,
175
+ "rstrip": false,
176
+ "single_word": false,
177
+ "special": true
178
+ },
179
+ "256018": {
180
+ "content": "<extra_id_281>",
181
+ "lstrip": false,
182
+ "normalized": false,
183
+ "rstrip": false,
184
+ "single_word": false,
185
+ "special": true
186
+ },
187
+ "256019": {
188
+ "content": "<extra_id_280>",
189
+ "lstrip": false,
190
+ "normalized": false,
191
+ "rstrip": false,
192
+ "single_word": false,
193
+ "special": true
194
+ },
195
+ "256020": {
196
+ "content": "<extra_id_279>",
197
+ "lstrip": false,
198
+ "normalized": false,
199
+ "rstrip": false,
200
+ "single_word": false,
201
+ "special": true
202
+ },
203
+ "256021": {
204
+ "content": "<extra_id_278>",
205
+ "lstrip": false,
206
+ "normalized": false,
207
+ "rstrip": false,
208
+ "single_word": false,
209
+ "special": true
210
+ },
211
+ "256022": {
212
+ "content": "<extra_id_277>",
213
+ "lstrip": false,
214
+ "normalized": false,
215
+ "rstrip": false,
216
+ "single_word": false,
217
+ "special": true
218
+ },
219
+ "256023": {
220
+ "content": "<extra_id_276>",
221
+ "lstrip": false,
222
+ "normalized": false,
223
+ "rstrip": false,
224
+ "single_word": false,
225
+ "special": true
226
+ },
227
+ "256024": {
228
+ "content": "<extra_id_275>",
229
+ "lstrip": false,
230
+ "normalized": false,
231
+ "rstrip": false,
232
+ "single_word": false,
233
+ "special": true
234
+ },
235
+ "256025": {
236
+ "content": "<extra_id_274>",
237
+ "lstrip": false,
238
+ "normalized": false,
239
+ "rstrip": false,
240
+ "single_word": false,
241
+ "special": true
242
+ },
243
+ "256026": {
244
+ "content": "<extra_id_273>",
245
+ "lstrip": false,
246
+ "normalized": false,
247
+ "rstrip": false,
248
+ "single_word": false,
249
+ "special": true
250
+ },
251
+ "256027": {
252
+ "content": "<extra_id_272>",
253
+ "lstrip": false,
254
+ "normalized": false,
255
+ "rstrip": false,
256
+ "single_word": false,
257
+ "special": true
258
+ },
259
+ "256028": {
260
+ "content": "<extra_id_271>",
261
+ "lstrip": false,
262
+ "normalized": false,
263
+ "rstrip": false,
264
+ "single_word": false,
265
+ "special": true
266
+ },
267
+ "256029": {
268
+ "content": "<extra_id_270>",
269
+ "lstrip": false,
270
+ "normalized": false,
271
+ "rstrip": false,
272
+ "single_word": false,
273
+ "special": true
274
+ },
275
+ "256030": {
276
+ "content": "<extra_id_269>",
277
+ "lstrip": false,
278
+ "normalized": false,
279
+ "rstrip": false,
280
+ "single_word": false,
281
+ "special": true
282
+ },
283
+ "256031": {
284
+ "content": "<extra_id_268>",
285
+ "lstrip": false,
286
+ "normalized": false,
287
+ "rstrip": false,
288
+ "single_word": false,
289
+ "special": true
290
+ },
291
+ "256032": {
292
+ "content": "<extra_id_267>",
293
+ "lstrip": false,
294
+ "normalized": false,
295
+ "rstrip": false,
296
+ "single_word": false,
297
+ "special": true
298
+ },
299
+ "256033": {
300
+ "content": "<extra_id_266>",
301
+ "lstrip": false,
302
+ "normalized": false,
303
+ "rstrip": false,
304
+ "single_word": false,
305
+ "special": true
306
+ },
307
+ "256034": {
308
+ "content": "<extra_id_265>",
309
+ "lstrip": false,
310
+ "normalized": false,
311
+ "rstrip": false,
312
+ "single_word": false,
313
+ "special": true
314
+ },
315
+ "256035": {
316
+ "content": "<extra_id_264>",
317
+ "lstrip": false,
318
+ "normalized": false,
319
+ "rstrip": false,
320
+ "single_word": false,
321
+ "special": true
322
+ },
323
+ "256036": {
324
+ "content": "<extra_id_263>",
325
+ "lstrip": false,
326
+ "normalized": false,
327
+ "rstrip": false,
328
+ "single_word": false,
329
+ "special": true
330
+ },
331
+ "256037": {
332
+ "content": "<extra_id_262>",
333
+ "lstrip": false,
334
+ "normalized": false,
335
+ "rstrip": false,
336
+ "single_word": false,
337
+ "special": true
338
+ },
339
+ "256038": {
340
+ "content": "<extra_id_261>",
341
+ "lstrip": false,
342
+ "normalized": false,
343
+ "rstrip": false,
344
+ "single_word": false,
345
+ "special": true
346
+ },
347
+ "256039": {
348
+ "content": "<extra_id_260>",
349
+ "lstrip": false,
350
+ "normalized": false,
351
+ "rstrip": false,
352
+ "single_word": false,
353
+ "special": true
354
+ },
355
+ "256040": {
356
+ "content": "<extra_id_259>",
357
+ "lstrip": false,
358
+ "normalized": false,
359
+ "rstrip": false,
360
+ "single_word": false,
361
+ "special": true
362
+ },
363
+ "256041": {
364
+ "content": "<extra_id_258>",
365
+ "lstrip": false,
366
+ "normalized": false,
367
+ "rstrip": false,
368
+ "single_word": false,
369
+ "special": true
370
+ },
371
+ "256042": {
372
+ "content": "<extra_id_257>",
373
+ "lstrip": false,
374
+ "normalized": false,
375
+ "rstrip": false,
376
+ "single_word": false,
377
+ "special": true
378
+ },
379
+ "256043": {
380
+ "content": "<extra_id_256>",
381
+ "lstrip": false,
382
+ "normalized": false,
383
+ "rstrip": false,
384
+ "single_word": false,
385
+ "special": true
386
+ },
387
+ "256044": {
388
+ "content": "<extra_id_255>",
389
+ "lstrip": false,
390
+ "normalized": false,
391
+ "rstrip": false,
392
+ "single_word": false,
393
+ "special": true
394
+ },
395
+ "256045": {
396
+ "content": "<extra_id_254>",
397
+ "lstrip": false,
398
+ "normalized": false,
399
+ "rstrip": false,
400
+ "single_word": false,
401
+ "special": true
402
+ },
403
+ "256046": {
404
+ "content": "<extra_id_253>",
405
+ "lstrip": false,
406
+ "normalized": false,
407
+ "rstrip": false,
408
+ "single_word": false,
409
+ "special": true
410
+ },
411
+ "256047": {
412
+ "content": "<extra_id_252>",
413
+ "lstrip": false,
414
+ "normalized": false,
415
+ "rstrip": false,
416
+ "single_word": false,
417
+ "special": true
418
+ },
419
+ "256048": {
420
+ "content": "<extra_id_251>",
421
+ "lstrip": false,
422
+ "normalized": false,
423
+ "rstrip": false,
424
+ "single_word": false,
425
+ "special": true
426
+ },
427
+ "256049": {
428
+ "content": "<extra_id_250>",
429
+ "lstrip": false,
430
+ "normalized": false,
431
+ "rstrip": false,
432
+ "single_word": false,
433
+ "special": true
434
+ },
435
+ "256050": {
436
+ "content": "<extra_id_249>",
437
+ "lstrip": false,
438
+ "normalized": false,
439
+ "rstrip": false,
440
+ "single_word": false,
441
+ "special": true
442
+ },
443
+ "256051": {
444
+ "content": "<extra_id_248>",
445
+ "lstrip": false,
446
+ "normalized": false,
447
+ "rstrip": false,
448
+ "single_word": false,
449
+ "special": true
450
+ },
451
+ "256052": {
452
+ "content": "<extra_id_247>",
453
+ "lstrip": false,
454
+ "normalized": false,
455
+ "rstrip": false,
456
+ "single_word": false,
457
+ "special": true
458
+ },
459
+ "256053": {
460
+ "content": "<extra_id_246>",
461
+ "lstrip": false,
462
+ "normalized": false,
463
+ "rstrip": false,
464
+ "single_word": false,
465
+ "special": true
466
+ },
467
+ "256054": {
468
+ "content": "<extra_id_245>",
469
+ "lstrip": false,
470
+ "normalized": false,
471
+ "rstrip": false,
472
+ "single_word": false,
473
+ "special": true
474
+ },
475
+ "256055": {
476
+ "content": "<extra_id_244>",
477
+ "lstrip": false,
478
+ "normalized": false,
479
+ "rstrip": false,
480
+ "single_word": false,
481
+ "special": true
482
+ },
483
+ "256056": {
484
+ "content": "<extra_id_243>",
485
+ "lstrip": false,
486
+ "normalized": false,
487
+ "rstrip": false,
488
+ "single_word": false,
489
+ "special": true
490
+ },
491
+ "256057": {
492
+ "content": "<extra_id_242>",
493
+ "lstrip": false,
494
+ "normalized": false,
495
+ "rstrip": false,
496
+ "single_word": false,
497
+ "special": true
498
+ },
499
+ "256058": {
500
+ "content": "<extra_id_241>",
501
+ "lstrip": false,
502
+ "normalized": false,
503
+ "rstrip": false,
504
+ "single_word": false,
505
+ "special": true
506
+ },
507
+ "256059": {
508
+ "content": "<extra_id_240>",
509
+ "lstrip": false,
510
+ "normalized": false,
511
+ "rstrip": false,
512
+ "single_word": false,
513
+ "special": true
514
+ },
515
+ "256060": {
516
+ "content": "<extra_id_239>",
517
+ "lstrip": false,
518
+ "normalized": false,
519
+ "rstrip": false,
520
+ "single_word": false,
521
+ "special": true
522
+ },
523
+ "256061": {
524
+ "content": "<extra_id_238>",
525
+ "lstrip": false,
526
+ "normalized": false,
527
+ "rstrip": false,
528
+ "single_word": false,
529
+ "special": true
530
+ },
531
+ "256062": {
532
+ "content": "<extra_id_237>",
533
+ "lstrip": false,
534
+ "normalized": false,
535
+ "rstrip": false,
536
+ "single_word": false,
537
+ "special": true
538
+ },
539
+ "256063": {
540
+ "content": "<extra_id_236>",
541
+ "lstrip": false,
542
+ "normalized": false,
543
+ "rstrip": false,
544
+ "single_word": false,
545
+ "special": true
546
+ },
547
+ "256064": {
548
+ "content": "<extra_id_235>",
549
+ "lstrip": false,
550
+ "normalized": false,
551
+ "rstrip": false,
552
+ "single_word": false,
553
+ "special": true
554
+ },
555
+ "256065": {
556
+ "content": "<extra_id_234>",
557
+ "lstrip": false,
558
+ "normalized": false,
559
+ "rstrip": false,
560
+ "single_word": false,
561
+ "special": true
562
+ },
563
+ "256066": {
564
+ "content": "<extra_id_233>",
565
+ "lstrip": false,
566
+ "normalized": false,
567
+ "rstrip": false,
568
+ "single_word": false,
569
+ "special": true
570
+ },
571
+ "256067": {
572
+ "content": "<extra_id_232>",
573
+ "lstrip": false,
574
+ "normalized": false,
575
+ "rstrip": false,
576
+ "single_word": false,
577
+ "special": true
578
+ },
579
+ "256068": {
580
+ "content": "<extra_id_231>",
581
+ "lstrip": false,
582
+ "normalized": false,
583
+ "rstrip": false,
584
+ "single_word": false,
585
+ "special": true
586
+ },
587
+ "256069": {
588
+ "content": "<extra_id_230>",
589
+ "lstrip": false,
590
+ "normalized": false,
591
+ "rstrip": false,
592
+ "single_word": false,
593
+ "special": true
594
+ },
595
+ "256070": {
596
+ "content": "<extra_id_229>",
597
+ "lstrip": false,
598
+ "normalized": false,
599
+ "rstrip": false,
600
+ "single_word": false,
601
+ "special": true
602
+ },
603
+ "256071": {
604
+ "content": "<extra_id_228>",
605
+ "lstrip": false,
606
+ "normalized": false,
607
+ "rstrip": false,
608
+ "single_word": false,
609
+ "special": true
610
+ },
611
+ "256072": {
612
+ "content": "<extra_id_227>",
613
+ "lstrip": false,
614
+ "normalized": false,
615
+ "rstrip": false,
616
+ "single_word": false,
617
+ "special": true
618
+ },
619
+ "256073": {
620
+ "content": "<extra_id_226>",
621
+ "lstrip": false,
622
+ "normalized": false,
623
+ "rstrip": false,
624
+ "single_word": false,
625
+ "special": true
626
+ },
627
+ "256074": {
628
+ "content": "<extra_id_225>",
629
+ "lstrip": false,
630
+ "normalized": false,
631
+ "rstrip": false,
632
+ "single_word": false,
633
+ "special": true
634
+ },
635
+ "256075": {
636
+ "content": "<extra_id_224>",
637
+ "lstrip": false,
638
+ "normalized": false,
639
+ "rstrip": false,
640
+ "single_word": false,
641
+ "special": true
642
+ },
643
+ "256076": {
644
+ "content": "<extra_id_223>",
645
+ "lstrip": false,
646
+ "normalized": false,
647
+ "rstrip": false,
648
+ "single_word": false,
649
+ "special": true
650
+ },
651
+ "256077": {
652
+ "content": "<extra_id_222>",
653
+ "lstrip": false,
654
+ "normalized": false,
655
+ "rstrip": false,
656
+ "single_word": false,
657
+ "special": true
658
+ },
659
+ "256078": {
660
+ "content": "<extra_id_221>",
661
+ "lstrip": false,
662
+ "normalized": false,
663
+ "rstrip": false,
664
+ "single_word": false,
665
+ "special": true
666
+ },
667
+ "256079": {
668
+ "content": "<extra_id_220>",
669
+ "lstrip": false,
670
+ "normalized": false,
671
+ "rstrip": false,
672
+ "single_word": false,
673
+ "special": true
674
+ },
675
+ "256080": {
676
+ "content": "<extra_id_219>",
677
+ "lstrip": false,
678
+ "normalized": false,
679
+ "rstrip": false,
680
+ "single_word": false,
681
+ "special": true
682
+ },
683
+ "256081": {
684
+ "content": "<extra_id_218>",
685
+ "lstrip": false,
686
+ "normalized": false,
687
+ "rstrip": false,
688
+ "single_word": false,
689
+ "special": true
690
+ },
691
+ "256082": {
692
+ "content": "<extra_id_217>",
693
+ "lstrip": false,
694
+ "normalized": false,
695
+ "rstrip": false,
696
+ "single_word": false,
697
+ "special": true
698
+ },
699
+ "256083": {
700
+ "content": "<extra_id_216>",
701
+ "lstrip": false,
702
+ "normalized": false,
703
+ "rstrip": false,
704
+ "single_word": false,
705
+ "special": true
706
+ },
707
+ "256084": {
708
+ "content": "<extra_id_215>",
709
+ "lstrip": false,
710
+ "normalized": false,
711
+ "rstrip": false,
712
+ "single_word": false,
713
+ "special": true
714
+ },
715
+ "256085": {
716
+ "content": "<extra_id_214>",
717
+ "lstrip": false,
718
+ "normalized": false,
719
+ "rstrip": false,
720
+ "single_word": false,
721
+ "special": true
722
+ },
723
+ "256086": {
724
+ "content": "<extra_id_213>",
725
+ "lstrip": false,
726
+ "normalized": false,
727
+ "rstrip": false,
728
+ "single_word": false,
729
+ "special": true
730
+ },
731
+ "256087": {
732
+ "content": "<extra_id_212>",
733
+ "lstrip": false,
734
+ "normalized": false,
735
+ "rstrip": false,
736
+ "single_word": false,
737
+ "special": true
738
+ },
739
+ "256088": {
740
+ "content": "<extra_id_211>",
741
+ "lstrip": false,
742
+ "normalized": false,
743
+ "rstrip": false,
744
+ "single_word": false,
745
+ "special": true
746
+ },
747
+ "256089": {
748
+ "content": "<extra_id_210>",
749
+ "lstrip": false,
750
+ "normalized": false,
751
+ "rstrip": false,
752
+ "single_word": false,
753
+ "special": true
754
+ },
755
+ "256090": {
756
+ "content": "<extra_id_209>",
757
+ "lstrip": false,
758
+ "normalized": false,
759
+ "rstrip": false,
760
+ "single_word": false,
761
+ "special": true
762
+ },
763
+ "256091": {
764
+ "content": "<extra_id_208>",
765
+ "lstrip": false,
766
+ "normalized": false,
767
+ "rstrip": false,
768
+ "single_word": false,
769
+ "special": true
770
+ },
771
+ "256092": {
772
+ "content": "<extra_id_207>",
773
+ "lstrip": false,
774
+ "normalized": false,
775
+ "rstrip": false,
776
+ "single_word": false,
777
+ "special": true
778
+ },
779
+ "256093": {
780
+ "content": "<extra_id_206>",
781
+ "lstrip": false,
782
+ "normalized": false,
783
+ "rstrip": false,
784
+ "single_word": false,
785
+ "special": true
786
+ },
787
+ "256094": {
788
+ "content": "<extra_id_205>",
789
+ "lstrip": false,
790
+ "normalized": false,
791
+ "rstrip": false,
792
+ "single_word": false,
793
+ "special": true
794
+ },
795
+ "256095": {
796
+ "content": "<extra_id_204>",
797
+ "lstrip": false,
798
+ "normalized": false,
799
+ "rstrip": false,
800
+ "single_word": false,
801
+ "special": true
802
+ },
803
+ "256096": {
804
+ "content": "<extra_id_203>",
805
+ "lstrip": false,
806
+ "normalized": false,
807
+ "rstrip": false,
808
+ "single_word": false,
809
+ "special": true
810
+ },
811
+ "256097": {
812
+ "content": "<extra_id_202>",
813
+ "lstrip": false,
814
+ "normalized": false,
815
+ "rstrip": false,
816
+ "single_word": false,
817
+ "special": true
818
+ },
819
+ "256098": {
820
+ "content": "<extra_id_201>",
821
+ "lstrip": false,
822
+ "normalized": false,
823
+ "rstrip": false,
824
+ "single_word": false,
825
+ "special": true
826
+ },
827
+ "256099": {
828
+ "content": "<extra_id_200>",
829
+ "lstrip": false,
830
+ "normalized": false,
831
+ "rstrip": false,
832
+ "single_word": false,
833
+ "special": true
834
+ },
835
+ "256100": {
836
+ "content": "<extra_id_199>",
837
+ "lstrip": false,
838
+ "normalized": false,
839
+ "rstrip": false,
840
+ "single_word": false,
841
+ "special": true
842
+ },
843
+ "256101": {
844
+ "content": "<extra_id_198>",
845
+ "lstrip": false,
846
+ "normalized": false,
847
+ "rstrip": false,
848
+ "single_word": false,
849
+ "special": true
850
+ },
851
+ "256102": {
852
+ "content": "<extra_id_197>",
853
+ "lstrip": false,
854
+ "normalized": false,
855
+ "rstrip": false,
856
+ "single_word": false,
857
+ "special": true
858
+ },
859
+ "256103": {
860
+ "content": "<extra_id_196>",
861
+ "lstrip": false,
862
+ "normalized": false,
863
+ "rstrip": false,
864
+ "single_word": false,
865
+ "special": true
866
+ },
867
+ "256104": {
868
+ "content": "<extra_id_195>",
869
+ "lstrip": false,
870
+ "normalized": false,
871
+ "rstrip": false,
872
+ "single_word": false,
873
+ "special": true
874
+ },
875
+ "256105": {
876
+ "content": "<extra_id_194>",
877
+ "lstrip": false,
878
+ "normalized": false,
879
+ "rstrip": false,
880
+ "single_word": false,
881
+ "special": true
882
+ },
883
+ "256106": {
884
+ "content": "<extra_id_193>",
885
+ "lstrip": false,
886
+ "normalized": false,
887
+ "rstrip": false,
888
+ "single_word": false,
889
+ "special": true
890
+ },
891
+ "256107": {
892
+ "content": "<extra_id_192>",
893
+ "lstrip": false,
894
+ "normalized": false,
895
+ "rstrip": false,
896
+ "single_word": false,
897
+ "special": true
898
+ },
899
+ "256108": {
900
+ "content": "<extra_id_191>",
901
+ "lstrip": false,
902
+ "normalized": false,
903
+ "rstrip": false,
904
+ "single_word": false,
905
+ "special": true
906
+ },
907
+ "256109": {
908
+ "content": "<extra_id_190>",
909
+ "lstrip": false,
910
+ "normalized": false,
911
+ "rstrip": false,
912
+ "single_word": false,
913
+ "special": true
914
+ },
915
+ "256110": {
916
+ "content": "<extra_id_189>",
917
+ "lstrip": false,
918
+ "normalized": false,
919
+ "rstrip": false,
920
+ "single_word": false,
921
+ "special": true
922
+ },
923
+ "256111": {
924
+ "content": "<extra_id_188>",
925
+ "lstrip": false,
926
+ "normalized": false,
927
+ "rstrip": false,
928
+ "single_word": false,
929
+ "special": true
930
+ },
931
+ "256112": {
932
+ "content": "<extra_id_187>",
933
+ "lstrip": false,
934
+ "normalized": false,
935
+ "rstrip": false,
936
+ "single_word": false,
937
+ "special": true
938
+ },
939
+ "256113": {
940
+ "content": "<extra_id_186>",
941
+ "lstrip": false,
942
+ "normalized": false,
943
+ "rstrip": false,
944
+ "single_word": false,
945
+ "special": true
946
+ },
947
+ "256114": {
948
+ "content": "<extra_id_185>",
949
+ "lstrip": false,
950
+ "normalized": false,
951
+ "rstrip": false,
952
+ "single_word": false,
953
+ "special": true
954
+ },
955
+ "256115": {
956
+ "content": "<extra_id_184>",
957
+ "lstrip": false,
958
+ "normalized": false,
959
+ "rstrip": false,
960
+ "single_word": false,
961
+ "special": true
962
+ },
963
+ "256116": {
964
+ "content": "<extra_id_183>",
965
+ "lstrip": false,
966
+ "normalized": false,
967
+ "rstrip": false,
968
+ "single_word": false,
969
+ "special": true
970
+ },
971
+ "256117": {
972
+ "content": "<extra_id_182>",
973
+ "lstrip": false,
974
+ "normalized": false,
975
+ "rstrip": false,
976
+ "single_word": false,
977
+ "special": true
978
+ },
979
+ "256118": {
980
+ "content": "<extra_id_181>",
981
+ "lstrip": false,
982
+ "normalized": false,
983
+ "rstrip": false,
984
+ "single_word": false,
985
+ "special": true
986
+ },
987
+ "256119": {
988
+ "content": "<extra_id_180>",
989
+ "lstrip": false,
990
+ "normalized": false,
991
+ "rstrip": false,
992
+ "single_word": false,
993
+ "special": true
994
+ },
995
+ "256120": {
996
+ "content": "<extra_id_179>",
997
+ "lstrip": false,
998
+ "normalized": false,
999
+ "rstrip": false,
1000
+ "single_word": false,
1001
+ "special": true
1002
+ },
1003
+ "256121": {
1004
+ "content": "<extra_id_178>",
1005
+ "lstrip": false,
1006
+ "normalized": false,
1007
+ "rstrip": false,
1008
+ "single_word": false,
1009
+ "special": true
1010
+ },
1011
+ "256122": {
1012
+ "content": "<extra_id_177>",
1013
+ "lstrip": false,
1014
+ "normalized": false,
1015
+ "rstrip": false,
1016
+ "single_word": false,
1017
+ "special": true
1018
+ },
1019
+ "256123": {
1020
+ "content": "<extra_id_176>",
1021
+ "lstrip": false,
1022
+ "normalized": false,
1023
+ "rstrip": false,
1024
+ "single_word": false,
1025
+ "special": true
1026
+ },
1027
+ "256124": {
1028
+ "content": "<extra_id_175>",
1029
+ "lstrip": false,
1030
+ "normalized": false,
1031
+ "rstrip": false,
1032
+ "single_word": false,
1033
+ "special": true
1034
+ },
1035
+ "256125": {
1036
+ "content": "<extra_id_174>",
1037
+ "lstrip": false,
1038
+ "normalized": false,
1039
+ "rstrip": false,
1040
+ "single_word": false,
1041
+ "special": true
1042
+ },
1043
+ "256126": {
1044
+ "content": "<extra_id_173>",
1045
+ "lstrip": false,
1046
+ "normalized": false,
1047
+ "rstrip": false,
1048
+ "single_word": false,
1049
+ "special": true
1050
+ },
1051
+ "256127": {
1052
+ "content": "<extra_id_172>",
1053
+ "lstrip": false,
1054
+ "normalized": false,
1055
+ "rstrip": false,
1056
+ "single_word": false,
1057
+ "special": true
1058
+ },
1059
+ "256128": {
1060
+ "content": "<extra_id_171>",
1061
+ "lstrip": false,
1062
+ "normalized": false,
1063
+ "rstrip": false,
1064
+ "single_word": false,
1065
+ "special": true
1066
+ },
1067
+ "256129": {
1068
+ "content": "<extra_id_170>",
1069
+ "lstrip": false,
1070
+ "normalized": false,
1071
+ "rstrip": false,
1072
+ "single_word": false,
1073
+ "special": true
1074
+ },
1075
+ "256130": {
1076
+ "content": "<extra_id_169>",
1077
+ "lstrip": false,
1078
+ "normalized": false,
1079
+ "rstrip": false,
1080
+ "single_word": false,
1081
+ "special": true
1082
+ },
1083
+ "256131": {
1084
+ "content": "<extra_id_168>",
1085
+ "lstrip": false,
1086
+ "normalized": false,
1087
+ "rstrip": false,
1088
+ "single_word": false,
1089
+ "special": true
1090
+ },
1091
+ "256132": {
1092
+ "content": "<extra_id_167>",
1093
+ "lstrip": false,
1094
+ "normalized": false,
1095
+ "rstrip": false,
1096
+ "single_word": false,
1097
+ "special": true
1098
+ },
1099
+ "256133": {
1100
+ "content": "<extra_id_166>",
1101
+ "lstrip": false,
1102
+ "normalized": false,
1103
+ "rstrip": false,
1104
+ "single_word": false,
1105
+ "special": true
1106
+ },
1107
+ "256134": {
1108
+ "content": "<extra_id_165>",
1109
+ "lstrip": false,
1110
+ "normalized": false,
1111
+ "rstrip": false,
1112
+ "single_word": false,
1113
+ "special": true
1114
+ },
1115
+ "256135": {
1116
+ "content": "<extra_id_164>",
1117
+ "lstrip": false,
1118
+ "normalized": false,
1119
+ "rstrip": false,
1120
+ "single_word": false,
1121
+ "special": true
1122
+ },
1123
+ "256136": {
1124
+ "content": "<extra_id_163>",
1125
+ "lstrip": false,
1126
+ "normalized": false,
1127
+ "rstrip": false,
1128
+ "single_word": false,
1129
+ "special": true
1130
+ },
1131
+ "256137": {
1132
+ "content": "<extra_id_162>",
1133
+ "lstrip": false,
1134
+ "normalized": false,
1135
+ "rstrip": false,
1136
+ "single_word": false,
1137
+ "special": true
1138
+ },
1139
+ "256138": {
1140
+ "content": "<extra_id_161>",
1141
+ "lstrip": false,
1142
+ "normalized": false,
1143
+ "rstrip": false,
1144
+ "single_word": false,
1145
+ "special": true
1146
+ },
1147
+ "256139": {
1148
+ "content": "<extra_id_160>",
1149
+ "lstrip": false,
1150
+ "normalized": false,
1151
+ "rstrip": false,
1152
+ "single_word": false,
1153
+ "special": true
1154
+ },
1155
+ "256140": {
1156
+ "content": "<extra_id_159>",
1157
+ "lstrip": false,
1158
+ "normalized": false,
1159
+ "rstrip": false,
1160
+ "single_word": false,
1161
+ "special": true
1162
+ },
1163
+ "256141": {
1164
+ "content": "<extra_id_158>",
1165
+ "lstrip": false,
1166
+ "normalized": false,
1167
+ "rstrip": false,
1168
+ "single_word": false,
1169
+ "special": true
1170
+ },
1171
+ "256142": {
1172
+ "content": "<extra_id_157>",
1173
+ "lstrip": false,
1174
+ "normalized": false,
1175
+ "rstrip": false,
1176
+ "single_word": false,
1177
+ "special": true
1178
+ },
1179
+ "256143": {
1180
+ "content": "<extra_id_156>",
1181
+ "lstrip": false,
1182
+ "normalized": false,
1183
+ "rstrip": false,
1184
+ "single_word": false,
1185
+ "special": true
1186
+ },
1187
+ "256144": {
1188
+ "content": "<extra_id_155>",
1189
+ "lstrip": false,
1190
+ "normalized": false,
1191
+ "rstrip": false,
1192
+ "single_word": false,
1193
+ "special": true
1194
+ },
1195
+ "256145": {
1196
+ "content": "<extra_id_154>",
1197
+ "lstrip": false,
1198
+ "normalized": false,
1199
+ "rstrip": false,
1200
+ "single_word": false,
1201
+ "special": true
1202
+ },
1203
+ "256146": {
1204
+ "content": "<extra_id_153>",
1205
+ "lstrip": false,
1206
+ "normalized": false,
1207
+ "rstrip": false,
1208
+ "single_word": false,
1209
+ "special": true
1210
+ },
1211
+ "256147": {
1212
+ "content": "<extra_id_152>",
1213
+ "lstrip": false,
1214
+ "normalized": false,
1215
+ "rstrip": false,
1216
+ "single_word": false,
1217
+ "special": true
1218
+ },
1219
+ "256148": {
1220
+ "content": "<extra_id_151>",
1221
+ "lstrip": false,
1222
+ "normalized": false,
1223
+ "rstrip": false,
1224
+ "single_word": false,
1225
+ "special": true
1226
+ },
1227
+ "256149": {
1228
+ "content": "<extra_id_150>",
1229
+ "lstrip": false,
1230
+ "normalized": false,
1231
+ "rstrip": false,
1232
+ "single_word": false,
1233
+ "special": true
1234
+ },
1235
+ "256150": {
1236
+ "content": "<extra_id_149>",
1237
+ "lstrip": false,
1238
+ "normalized": false,
1239
+ "rstrip": false,
1240
+ "single_word": false,
1241
+ "special": true
1242
+ },
1243
+ "256151": {
1244
+ "content": "<extra_id_148>",
1245
+ "lstrip": false,
1246
+ "normalized": false,
1247
+ "rstrip": false,
1248
+ "single_word": false,
1249
+ "special": true
1250
+ },
1251
+ "256152": {
1252
+ "content": "<extra_id_147>",
1253
+ "lstrip": false,
1254
+ "normalized": false,
1255
+ "rstrip": false,
1256
+ "single_word": false,
1257
+ "special": true
1258
+ },
1259
+ "256153": {
1260
+ "content": "<extra_id_146>",
1261
+ "lstrip": false,
1262
+ "normalized": false,
1263
+ "rstrip": false,
1264
+ "single_word": false,
1265
+ "special": true
1266
+ },
1267
+ "256154": {
1268
+ "content": "<extra_id_145>",
1269
+ "lstrip": false,
1270
+ "normalized": false,
1271
+ "rstrip": false,
1272
+ "single_word": false,
1273
+ "special": true
1274
+ },
1275
+ "256155": {
1276
+ "content": "<extra_id_144>",
1277
+ "lstrip": false,
1278
+ "normalized": false,
1279
+ "rstrip": false,
1280
+ "single_word": false,
1281
+ "special": true
1282
+ },
1283
+ "256156": {
1284
+ "content": "<extra_id_143>",
1285
+ "lstrip": false,
1286
+ "normalized": false,
1287
+ "rstrip": false,
1288
+ "single_word": false,
1289
+ "special": true
1290
+ },
1291
+ "256157": {
1292
+ "content": "<extra_id_142>",
1293
+ "lstrip": false,
1294
+ "normalized": false,
1295
+ "rstrip": false,
1296
+ "single_word": false,
1297
+ "special": true
1298
+ },
1299
+ "256158": {
1300
+ "content": "<extra_id_141>",
1301
+ "lstrip": false,
1302
+ "normalized": false,
1303
+ "rstrip": false,
1304
+ "single_word": false,
1305
+ "special": true
1306
+ },
1307
+ "256159": {
1308
+ "content": "<extra_id_140>",
1309
+ "lstrip": false,
1310
+ "normalized": false,
1311
+ "rstrip": false,
1312
+ "single_word": false,
1313
+ "special": true
1314
+ },
1315
+ "256160": {
1316
+ "content": "<extra_id_139>",
1317
+ "lstrip": false,
1318
+ "normalized": false,
1319
+ "rstrip": false,
1320
+ "single_word": false,
1321
+ "special": true
1322
+ },
1323
+ "256161": {
1324
+ "content": "<extra_id_138>",
1325
+ "lstrip": false,
1326
+ "normalized": false,
1327
+ "rstrip": false,
1328
+ "single_word": false,
1329
+ "special": true
1330
+ },
1331
+ "256162": {
1332
+ "content": "<extra_id_137>",
1333
+ "lstrip": false,
1334
+ "normalized": false,
1335
+ "rstrip": false,
1336
+ "single_word": false,
1337
+ "special": true
1338
+ },
1339
+ "256163": {
1340
+ "content": "<extra_id_136>",
1341
+ "lstrip": false,
1342
+ "normalized": false,
1343
+ "rstrip": false,
1344
+ "single_word": false,
1345
+ "special": true
1346
+ },
1347
+ "256164": {
1348
+ "content": "<extra_id_135>",
1349
+ "lstrip": false,
1350
+ "normalized": false,
1351
+ "rstrip": false,
1352
+ "single_word": false,
1353
+ "special": true
1354
+ },
1355
+ "256165": {
1356
+ "content": "<extra_id_134>",
1357
+ "lstrip": false,
1358
+ "normalized": false,
1359
+ "rstrip": false,
1360
+ "single_word": false,
1361
+ "special": true
1362
+ },
1363
+ "256166": {
1364
+ "content": "<extra_id_133>",
1365
+ "lstrip": false,
1366
+ "normalized": false,
1367
+ "rstrip": false,
1368
+ "single_word": false,
1369
+ "special": true
1370
+ },
1371
+ "256167": {
1372
+ "content": "<extra_id_132>",
1373
+ "lstrip": false,
1374
+ "normalized": false,
1375
+ "rstrip": false,
1376
+ "single_word": false,
1377
+ "special": true
1378
+ },
1379
+ "256168": {
1380
+ "content": "<extra_id_131>",
1381
+ "lstrip": false,
1382
+ "normalized": false,
1383
+ "rstrip": false,
1384
+ "single_word": false,
1385
+ "special": true
1386
+ },
1387
+ "256169": {
1388
+ "content": "<extra_id_130>",
1389
+ "lstrip": false,
1390
+ "normalized": false,
1391
+ "rstrip": false,
1392
+ "single_word": false,
1393
+ "special": true
1394
+ },
1395
+ "256170": {
1396
+ "content": "<extra_id_129>",
1397
+ "lstrip": false,
1398
+ "normalized": false,
1399
+ "rstrip": false,
1400
+ "single_word": false,
1401
+ "special": true
1402
+ },
1403
+ "256171": {
1404
+ "content": "<extra_id_128>",
1405
+ "lstrip": false,
1406
+ "normalized": false,
1407
+ "rstrip": false,
1408
+ "single_word": false,
1409
+ "special": true
1410
+ },
1411
+ "256172": {
1412
+ "content": "<extra_id_127>",
1413
+ "lstrip": false,
1414
+ "normalized": false,
1415
+ "rstrip": false,
1416
+ "single_word": false,
1417
+ "special": true
1418
+ },
1419
+ "256173": {
1420
+ "content": "<extra_id_126>",
1421
+ "lstrip": false,
1422
+ "normalized": false,
1423
+ "rstrip": false,
1424
+ "single_word": false,
1425
+ "special": true
1426
+ },
1427
+ "256174": {
1428
+ "content": "<extra_id_125>",
1429
+ "lstrip": false,
1430
+ "normalized": false,
1431
+ "rstrip": false,
1432
+ "single_word": false,
1433
+ "special": true
1434
+ },
1435
+ "256175": {
1436
+ "content": "<extra_id_124>",
1437
+ "lstrip": false,
1438
+ "normalized": false,
1439
+ "rstrip": false,
1440
+ "single_word": false,
1441
+ "special": true
1442
+ },
1443
+ "256176": {
1444
+ "content": "<extra_id_123>",
1445
+ "lstrip": false,
1446
+ "normalized": false,
1447
+ "rstrip": false,
1448
+ "single_word": false,
1449
+ "special": true
1450
+ },
1451
+ "256177": {
1452
+ "content": "<extra_id_122>",
1453
+ "lstrip": false,
1454
+ "normalized": false,
1455
+ "rstrip": false,
1456
+ "single_word": false,
1457
+ "special": true
1458
+ },
1459
+ "256178": {
1460
+ "content": "<extra_id_121>",
1461
+ "lstrip": false,
1462
+ "normalized": false,
1463
+ "rstrip": false,
1464
+ "single_word": false,
1465
+ "special": true
1466
+ },
1467
+ "256179": {
1468
+ "content": "<extra_id_120>",
1469
+ "lstrip": false,
1470
+ "normalized": false,
1471
+ "rstrip": false,
1472
+ "single_word": false,
1473
+ "special": true
1474
+ },
1475
+ "256180": {
1476
+ "content": "<extra_id_119>",
1477
+ "lstrip": false,
1478
+ "normalized": false,
1479
+ "rstrip": false,
1480
+ "single_word": false,
1481
+ "special": true
1482
+ },
1483
+ "256181": {
1484
+ "content": "<extra_id_118>",
1485
+ "lstrip": false,
1486
+ "normalized": false,
1487
+ "rstrip": false,
1488
+ "single_word": false,
1489
+ "special": true
1490
+ },
1491
+ "256182": {
1492
+ "content": "<extra_id_117>",
1493
+ "lstrip": false,
1494
+ "normalized": false,
1495
+ "rstrip": false,
1496
+ "single_word": false,
1497
+ "special": true
1498
+ },
1499
+ "256183": {
1500
+ "content": "<extra_id_116>",
1501
+ "lstrip": false,
1502
+ "normalized": false,
1503
+ "rstrip": false,
1504
+ "single_word": false,
1505
+ "special": true
1506
+ },
1507
+ "256184": {
1508
+ "content": "<extra_id_115>",
1509
+ "lstrip": false,
1510
+ "normalized": false,
1511
+ "rstrip": false,
1512
+ "single_word": false,
1513
+ "special": true
1514
+ },
1515
+ "256185": {
1516
+ "content": "<extra_id_114>",
1517
+ "lstrip": false,
1518
+ "normalized": false,
1519
+ "rstrip": false,
1520
+ "single_word": false,
1521
+ "special": true
1522
+ },
1523
+ "256186": {
1524
+ "content": "<extra_id_113>",
1525
+ "lstrip": false,
1526
+ "normalized": false,
1527
+ "rstrip": false,
1528
+ "single_word": false,
1529
+ "special": true
1530
+ },
1531
+ "256187": {
1532
+ "content": "<extra_id_112>",
1533
+ "lstrip": false,
1534
+ "normalized": false,
1535
+ "rstrip": false,
1536
+ "single_word": false,
1537
+ "special": true
1538
+ },
1539
+ "256188": {
1540
+ "content": "<extra_id_111>",
1541
+ "lstrip": false,
1542
+ "normalized": false,
1543
+ "rstrip": false,
1544
+ "single_word": false,
1545
+ "special": true
1546
+ },
1547
+ "256189": {
1548
+ "content": "<extra_id_110>",
1549
+ "lstrip": false,
1550
+ "normalized": false,
1551
+ "rstrip": false,
1552
+ "single_word": false,
1553
+ "special": true
1554
+ },
1555
+ "256190": {
1556
+ "content": "<extra_id_109>",
1557
+ "lstrip": false,
1558
+ "normalized": false,
1559
+ "rstrip": false,
1560
+ "single_word": false,
1561
+ "special": true
1562
+ },
1563
+ "256191": {
1564
+ "content": "<extra_id_108>",
1565
+ "lstrip": false,
1566
+ "normalized": false,
1567
+ "rstrip": false,
1568
+ "single_word": false,
1569
+ "special": true
1570
+ },
1571
+ "256192": {
1572
+ "content": "<extra_id_107>",
1573
+ "lstrip": false,
1574
+ "normalized": false,
1575
+ "rstrip": false,
1576
+ "single_word": false,
1577
+ "special": true
1578
+ },
1579
+ "256193": {
1580
+ "content": "<extra_id_106>",
1581
+ "lstrip": false,
1582
+ "normalized": false,
1583
+ "rstrip": false,
1584
+ "single_word": false,
1585
+ "special": true
1586
+ },
1587
+ "256194": {
1588
+ "content": "<extra_id_105>",
1589
+ "lstrip": false,
1590
+ "normalized": false,
1591
+ "rstrip": false,
1592
+ "single_word": false,
1593
+ "special": true
1594
+ },
1595
+ "256195": {
1596
+ "content": "<extra_id_104>",
1597
+ "lstrip": false,
1598
+ "normalized": false,
1599
+ "rstrip": false,
1600
+ "single_word": false,
1601
+ "special": true
1602
+ },
1603
+ "256196": {
1604
+ "content": "<extra_id_103>",
1605
+ "lstrip": false,
1606
+ "normalized": false,
1607
+ "rstrip": false,
1608
+ "single_word": false,
1609
+ "special": true
1610
+ },
1611
+ "256197": {
1612
+ "content": "<extra_id_102>",
1613
+ "lstrip": false,
1614
+ "normalized": false,
1615
+ "rstrip": false,
1616
+ "single_word": false,
1617
+ "special": true
1618
+ },
1619
+ "256198": {
1620
+ "content": "<extra_id_101>",
1621
+ "lstrip": false,
1622
+ "normalized": false,
1623
+ "rstrip": false,
1624
+ "single_word": false,
1625
+ "special": true
1626
+ },
1627
+ "256199": {
1628
+ "content": "<extra_id_100>",
1629
+ "lstrip": false,
1630
+ "normalized": false,
1631
+ "rstrip": false,
1632
+ "single_word": false,
1633
+ "special": true
1634
+ },
1635
+ "256200": {
1636
+ "content": "<extra_id_99>",
1637
+ "lstrip": false,
1638
+ "normalized": false,
1639
+ "rstrip": false,
1640
+ "single_word": false,
1641
+ "special": true
1642
+ },
1643
+ "256201": {
1644
+ "content": "<extra_id_98>",
1645
+ "lstrip": false,
1646
+ "normalized": false,
1647
+ "rstrip": false,
1648
+ "single_word": false,
1649
+ "special": true
1650
+ },
1651
+ "256202": {
1652
+ "content": "<extra_id_97>",
1653
+ "lstrip": false,
1654
+ "normalized": false,
1655
+ "rstrip": false,
1656
+ "single_word": false,
1657
+ "special": true
1658
+ },
1659
+ "256203": {
1660
+ "content": "<extra_id_96>",
1661
+ "lstrip": false,
1662
+ "normalized": false,
1663
+ "rstrip": false,
1664
+ "single_word": false,
1665
+ "special": true
1666
+ },
1667
+ "256204": {
1668
+ "content": "<extra_id_95>",
1669
+ "lstrip": false,
1670
+ "normalized": false,
1671
+ "rstrip": false,
1672
+ "single_word": false,
1673
+ "special": true
1674
+ },
1675
+ "256205": {
1676
+ "content": "<extra_id_94>",
1677
+ "lstrip": false,
1678
+ "normalized": false,
1679
+ "rstrip": false,
1680
+ "single_word": false,
1681
+ "special": true
1682
+ },
1683
+ "256206": {
1684
+ "content": "<extra_id_93>",
1685
+ "lstrip": false,
1686
+ "normalized": false,
1687
+ "rstrip": false,
1688
+ "single_word": false,
1689
+ "special": true
1690
+ },
1691
+ "256207": {
1692
+ "content": "<extra_id_92>",
1693
+ "lstrip": false,
1694
+ "normalized": false,
1695
+ "rstrip": false,
1696
+ "single_word": false,
1697
+ "special": true
1698
+ },
1699
+ "256208": {
1700
+ "content": "<extra_id_91>",
1701
+ "lstrip": false,
1702
+ "normalized": false,
1703
+ "rstrip": false,
1704
+ "single_word": false,
1705
+ "special": true
1706
+ },
1707
+ "256209": {
1708
+ "content": "<extra_id_90>",
1709
+ "lstrip": false,
1710
+ "normalized": false,
1711
+ "rstrip": false,
1712
+ "single_word": false,
1713
+ "special": true
1714
+ },
1715
+ "256210": {
1716
+ "content": "<extra_id_89>",
1717
+ "lstrip": false,
1718
+ "normalized": false,
1719
+ "rstrip": false,
1720
+ "single_word": false,
1721
+ "special": true
1722
+ },
1723
+ "256211": {
1724
+ "content": "<extra_id_88>",
1725
+ "lstrip": false,
1726
+ "normalized": false,
1727
+ "rstrip": false,
1728
+ "single_word": false,
1729
+ "special": true
1730
+ },
1731
+ "256212": {
1732
+ "content": "<extra_id_87>",
1733
+ "lstrip": false,
1734
+ "normalized": false,
1735
+ "rstrip": false,
1736
+ "single_word": false,
1737
+ "special": true
1738
+ },
1739
+ "256213": {
1740
+ "content": "<extra_id_86>",
1741
+ "lstrip": false,
1742
+ "normalized": false,
1743
+ "rstrip": false,
1744
+ "single_word": false,
1745
+ "special": true
1746
+ },
1747
+ "256214": {
1748
+ "content": "<extra_id_85>",
1749
+ "lstrip": false,
1750
+ "normalized": false,
1751
+ "rstrip": false,
1752
+ "single_word": false,
1753
+ "special": true
1754
+ },
1755
+ "256215": {
1756
+ "content": "<extra_id_84>",
1757
+ "lstrip": false,
1758
+ "normalized": false,
1759
+ "rstrip": false,
1760
+ "single_word": false,
1761
+ "special": true
1762
+ },
1763
+ "256216": {
1764
+ "content": "<extra_id_83>",
1765
+ "lstrip": false,
1766
+ "normalized": false,
1767
+ "rstrip": false,
1768
+ "single_word": false,
1769
+ "special": true
1770
+ },
1771
+ "256217": {
1772
+ "content": "<extra_id_82>",
1773
+ "lstrip": false,
1774
+ "normalized": false,
1775
+ "rstrip": false,
1776
+ "single_word": false,
1777
+ "special": true
1778
+ },
1779
+ "256218": {
1780
+ "content": "<extra_id_81>",
1781
+ "lstrip": false,
1782
+ "normalized": false,
1783
+ "rstrip": false,
1784
+ "single_word": false,
1785
+ "special": true
1786
+ },
1787
+ "256219": {
1788
+ "content": "<extra_id_80>",
1789
+ "lstrip": false,
1790
+ "normalized": false,
1791
+ "rstrip": false,
1792
+ "single_word": false,
1793
+ "special": true
1794
+ },
1795
+ "256220": {
1796
+ "content": "<extra_id_79>",
1797
+ "lstrip": false,
1798
+ "normalized": false,
1799
+ "rstrip": false,
1800
+ "single_word": false,
1801
+ "special": true
1802
+ },
1803
+ "256221": {
1804
+ "content": "<extra_id_78>",
1805
+ "lstrip": false,
1806
+ "normalized": false,
1807
+ "rstrip": false,
1808
+ "single_word": false,
1809
+ "special": true
1810
+ },
1811
+ "256222": {
1812
+ "content": "<extra_id_77>",
1813
+ "lstrip": false,
1814
+ "normalized": false,
1815
+ "rstrip": false,
1816
+ "single_word": false,
1817
+ "special": true
1818
+ },
1819
+ "256223": {
1820
+ "content": "<extra_id_76>",
1821
+ "lstrip": false,
1822
+ "normalized": false,
1823
+ "rstrip": false,
1824
+ "single_word": false,
1825
+ "special": true
1826
+ },
1827
+ "256224": {
1828
+ "content": "<extra_id_75>",
1829
+ "lstrip": false,
1830
+ "normalized": false,
1831
+ "rstrip": false,
1832
+ "single_word": false,
1833
+ "special": true
1834
+ },
1835
+ "256225": {
1836
+ "content": "<extra_id_74>",
1837
+ "lstrip": false,
1838
+ "normalized": false,
1839
+ "rstrip": false,
1840
+ "single_word": false,
1841
+ "special": true
1842
+ },
1843
+ "256226": {
1844
+ "content": "<extra_id_73>",
1845
+ "lstrip": false,
1846
+ "normalized": false,
1847
+ "rstrip": false,
1848
+ "single_word": false,
1849
+ "special": true
1850
+ },
1851
+ "256227": {
1852
+ "content": "<extra_id_72>",
1853
+ "lstrip": false,
1854
+ "normalized": false,
1855
+ "rstrip": false,
1856
+ "single_word": false,
1857
+ "special": true
1858
+ },
1859
+ "256228": {
1860
+ "content": "<extra_id_71>",
1861
+ "lstrip": false,
1862
+ "normalized": false,
1863
+ "rstrip": false,
1864
+ "single_word": false,
1865
+ "special": true
1866
+ },
1867
+ "256229": {
1868
+ "content": "<extra_id_70>",
1869
+ "lstrip": false,
1870
+ "normalized": false,
1871
+ "rstrip": false,
1872
+ "single_word": false,
1873
+ "special": true
1874
+ },
1875
+ "256230": {
1876
+ "content": "<extra_id_69>",
1877
+ "lstrip": false,
1878
+ "normalized": false,
1879
+ "rstrip": false,
1880
+ "single_word": false,
1881
+ "special": true
1882
+ },
1883
+ "256231": {
1884
+ "content": "<extra_id_68>",
1885
+ "lstrip": false,
1886
+ "normalized": false,
1887
+ "rstrip": false,
1888
+ "single_word": false,
1889
+ "special": true
1890
+ },
1891
+ "256232": {
1892
+ "content": "<extra_id_67>",
1893
+ "lstrip": false,
1894
+ "normalized": false,
1895
+ "rstrip": false,
1896
+ "single_word": false,
1897
+ "special": true
1898
+ },
1899
+ "256233": {
1900
+ "content": "<extra_id_66>",
1901
+ "lstrip": false,
1902
+ "normalized": false,
1903
+ "rstrip": false,
1904
+ "single_word": false,
1905
+ "special": true
1906
+ },
1907
+ "256234": {
1908
+ "content": "<extra_id_65>",
1909
+ "lstrip": false,
1910
+ "normalized": false,
1911
+ "rstrip": false,
1912
+ "single_word": false,
1913
+ "special": true
1914
+ },
1915
+ "256235": {
1916
+ "content": "<extra_id_64>",
1917
+ "lstrip": false,
1918
+ "normalized": false,
1919
+ "rstrip": false,
1920
+ "single_word": false,
1921
+ "special": true
1922
+ },
1923
+ "256236": {
1924
+ "content": "<extra_id_63>",
1925
+ "lstrip": false,
1926
+ "normalized": false,
1927
+ "rstrip": false,
1928
+ "single_word": false,
1929
+ "special": true
1930
+ },
1931
+ "256237": {
1932
+ "content": "<extra_id_62>",
1933
+ "lstrip": false,
1934
+ "normalized": false,
1935
+ "rstrip": false,
1936
+ "single_word": false,
1937
+ "special": true
1938
+ },
1939
+ "256238": {
1940
+ "content": "<extra_id_61>",
1941
+ "lstrip": false,
1942
+ "normalized": false,
1943
+ "rstrip": false,
1944
+ "single_word": false,
1945
+ "special": true
1946
+ },
1947
+ "256239": {
1948
+ "content": "<extra_id_60>",
1949
+ "lstrip": false,
1950
+ "normalized": false,
1951
+ "rstrip": false,
1952
+ "single_word": false,
1953
+ "special": true
1954
+ },
1955
+ "256240": {
1956
+ "content": "<extra_id_59>",
1957
+ "lstrip": false,
1958
+ "normalized": false,
1959
+ "rstrip": false,
1960
+ "single_word": false,
1961
+ "special": true
1962
+ },
1963
+ "256241": {
1964
+ "content": "<extra_id_58>",
1965
+ "lstrip": false,
1966
+ "normalized": false,
1967
+ "rstrip": false,
1968
+ "single_word": false,
1969
+ "special": true
1970
+ },
1971
+ "256242": {
1972
+ "content": "<extra_id_57>",
1973
+ "lstrip": false,
1974
+ "normalized": false,
1975
+ "rstrip": false,
1976
+ "single_word": false,
1977
+ "special": true
1978
+ },
1979
+ "256243": {
1980
+ "content": "<extra_id_56>",
1981
+ "lstrip": false,
1982
+ "normalized": false,
1983
+ "rstrip": false,
1984
+ "single_word": false,
1985
+ "special": true
1986
+ },
1987
+ "256244": {
1988
+ "content": "<extra_id_55>",
1989
+ "lstrip": false,
1990
+ "normalized": false,
1991
+ "rstrip": false,
1992
+ "single_word": false,
1993
+ "special": true
1994
+ },
1995
+ "256245": {
1996
+ "content": "<extra_id_54>",
1997
+ "lstrip": false,
1998
+ "normalized": false,
1999
+ "rstrip": false,
2000
+ "single_word": false,
2001
+ "special": true
2002
+ },
2003
+ "256246": {
2004
+ "content": "<extra_id_53>",
2005
+ "lstrip": false,
2006
+ "normalized": false,
2007
+ "rstrip": false,
2008
+ "single_word": false,
2009
+ "special": true
2010
+ },
2011
+ "256247": {
2012
+ "content": "<extra_id_52>",
2013
+ "lstrip": false,
2014
+ "normalized": false,
2015
+ "rstrip": false,
2016
+ "single_word": false,
2017
+ "special": true
2018
+ },
2019
+ "256248": {
2020
+ "content": "<extra_id_51>",
2021
+ "lstrip": false,
2022
+ "normalized": false,
2023
+ "rstrip": false,
2024
+ "single_word": false,
2025
+ "special": true
2026
+ },
2027
+ "256249": {
2028
+ "content": "<extra_id_50>",
2029
+ "lstrip": false,
2030
+ "normalized": false,
2031
+ "rstrip": false,
2032
+ "single_word": false,
2033
+ "special": true
2034
+ },
2035
+ "256250": {
2036
+ "content": "<extra_id_49>",
2037
+ "lstrip": false,
2038
+ "normalized": false,
2039
+ "rstrip": false,
2040
+ "single_word": false,
2041
+ "special": true
2042
+ },
2043
+ "256251": {
2044
+ "content": "<extra_id_48>",
2045
+ "lstrip": false,
2046
+ "normalized": false,
2047
+ "rstrip": false,
2048
+ "single_word": false,
2049
+ "special": true
2050
+ },
2051
+ "256252": {
2052
+ "content": "<extra_id_47>",
2053
+ "lstrip": false,
2054
+ "normalized": false,
2055
+ "rstrip": false,
2056
+ "single_word": false,
2057
+ "special": true
2058
+ },
2059
+ "256253": {
2060
+ "content": "<extra_id_46>",
2061
+ "lstrip": false,
2062
+ "normalized": false,
2063
+ "rstrip": false,
2064
+ "single_word": false,
2065
+ "special": true
2066
+ },
2067
+ "256254": {
2068
+ "content": "<extra_id_45>",
2069
+ "lstrip": false,
2070
+ "normalized": false,
2071
+ "rstrip": false,
2072
+ "single_word": false,
2073
+ "special": true
2074
+ },
2075
+ "256255": {
2076
+ "content": "<extra_id_44>",
2077
+ "lstrip": false,
2078
+ "normalized": false,
2079
+ "rstrip": false,
2080
+ "single_word": false,
2081
+ "special": true
2082
+ },
2083
+ "256256": {
2084
+ "content": "<extra_id_43>",
2085
+ "lstrip": false,
2086
+ "normalized": false,
2087
+ "rstrip": false,
2088
+ "single_word": false,
2089
+ "special": true
2090
+ },
2091
+ "256257": {
2092
+ "content": "<extra_id_42>",
2093
+ "lstrip": false,
2094
+ "normalized": false,
2095
+ "rstrip": false,
2096
+ "single_word": false,
2097
+ "special": true
2098
+ },
2099
+ "256258": {
2100
+ "content": "<extra_id_41>",
2101
+ "lstrip": false,
2102
+ "normalized": false,
2103
+ "rstrip": false,
2104
+ "single_word": false,
2105
+ "special": true
2106
+ },
2107
+ "256259": {
2108
+ "content": "<extra_id_40>",
2109
+ "lstrip": false,
2110
+ "normalized": false,
2111
+ "rstrip": false,
2112
+ "single_word": false,
2113
+ "special": true
2114
+ },
2115
+ "256260": {
2116
+ "content": "<extra_id_39>",
2117
+ "lstrip": false,
2118
+ "normalized": false,
2119
+ "rstrip": false,
2120
+ "single_word": false,
2121
+ "special": true
2122
+ },
2123
+ "256261": {
2124
+ "content": "<extra_id_38>",
2125
+ "lstrip": false,
2126
+ "normalized": false,
2127
+ "rstrip": false,
2128
+ "single_word": false,
2129
+ "special": true
2130
+ },
2131
+ "256262": {
2132
+ "content": "<extra_id_37>",
2133
+ "lstrip": false,
2134
+ "normalized": false,
2135
+ "rstrip": false,
2136
+ "single_word": false,
2137
+ "special": true
2138
+ },
2139
+ "256263": {
2140
+ "content": "<extra_id_36>",
2141
+ "lstrip": false,
2142
+ "normalized": false,
2143
+ "rstrip": false,
2144
+ "single_word": false,
2145
+ "special": true
2146
+ },
2147
+ "256264": {
2148
+ "content": "<extra_id_35>",
2149
+ "lstrip": false,
2150
+ "normalized": false,
2151
+ "rstrip": false,
2152
+ "single_word": false,
2153
+ "special": true
2154
+ },
2155
+ "256265": {
2156
+ "content": "<extra_id_34>",
2157
+ "lstrip": false,
2158
+ "normalized": false,
2159
+ "rstrip": false,
2160
+ "single_word": false,
2161
+ "special": true
2162
+ },
2163
+ "256266": {
2164
+ "content": "<extra_id_33>",
2165
+ "lstrip": false,
2166
+ "normalized": false,
2167
+ "rstrip": false,
2168
+ "single_word": false,
2169
+ "special": true
2170
+ },
2171
+ "256267": {
2172
+ "content": "<extra_id_32>",
2173
+ "lstrip": false,
2174
+ "normalized": false,
2175
+ "rstrip": false,
2176
+ "single_word": false,
2177
+ "special": true
2178
+ },
2179
+ "256268": {
2180
+ "content": "<extra_id_31>",
2181
+ "lstrip": false,
2182
+ "normalized": false,
2183
+ "rstrip": false,
2184
+ "single_word": false,
2185
+ "special": true
2186
+ },
2187
+ "256269": {
2188
+ "content": "<extra_id_30>",
2189
+ "lstrip": false,
2190
+ "normalized": false,
2191
+ "rstrip": false,
2192
+ "single_word": false,
2193
+ "special": true
2194
+ },
2195
+ "256270": {
2196
+ "content": "<extra_id_29>",
2197
+ "lstrip": false,
2198
+ "normalized": false,
2199
+ "rstrip": false,
2200
+ "single_word": false,
2201
+ "special": true
2202
+ },
2203
+ "256271": {
2204
+ "content": "<extra_id_28>",
2205
+ "lstrip": false,
2206
+ "normalized": false,
2207
+ "rstrip": false,
2208
+ "single_word": false,
2209
+ "special": true
2210
+ },
2211
+ "256272": {
2212
+ "content": "<extra_id_27>",
2213
+ "lstrip": false,
2214
+ "normalized": false,
2215
+ "rstrip": false,
2216
+ "single_word": false,
2217
+ "special": true
2218
+ },
2219
+ "256273": {
2220
+ "content": "<extra_id_26>",
2221
+ "lstrip": false,
2222
+ "normalized": false,
2223
+ "rstrip": false,
2224
+ "single_word": false,
2225
+ "special": true
2226
+ },
2227
+ "256274": {
2228
+ "content": "<extra_id_25>",
2229
+ "lstrip": false,
2230
+ "normalized": false,
2231
+ "rstrip": false,
2232
+ "single_word": false,
2233
+ "special": true
2234
+ },
2235
+ "256275": {
2236
+ "content": "<extra_id_24>",
2237
+ "lstrip": false,
2238
+ "normalized": false,
2239
+ "rstrip": false,
2240
+ "single_word": false,
2241
+ "special": true
2242
+ },
2243
+ "256276": {
2244
+ "content": "<extra_id_23>",
2245
+ "lstrip": false,
2246
+ "normalized": false,
2247
+ "rstrip": false,
2248
+ "single_word": false,
2249
+ "special": true
2250
+ },
2251
+ "256277": {
2252
+ "content": "<extra_id_22>",
2253
+ "lstrip": false,
2254
+ "normalized": false,
2255
+ "rstrip": false,
2256
+ "single_word": false,
2257
+ "special": true
2258
+ },
2259
+ "256278": {
2260
+ "content": "<extra_id_21>",
2261
+ "lstrip": false,
2262
+ "normalized": false,
2263
+ "rstrip": false,
2264
+ "single_word": false,
2265
+ "special": true
2266
+ },
2267
+ "256279": {
2268
+ "content": "<extra_id_20>",
2269
+ "lstrip": false,
2270
+ "normalized": false,
2271
+ "rstrip": false,
2272
+ "single_word": false,
2273
+ "special": true
2274
+ },
2275
+ "256280": {
2276
+ "content": "<extra_id_19>",
2277
+ "lstrip": false,
2278
+ "normalized": false,
2279
+ "rstrip": false,
2280
+ "single_word": false,
2281
+ "special": true
2282
+ },
2283
+ "256281": {
2284
+ "content": "<extra_id_18>",
2285
+ "lstrip": false,
2286
+ "normalized": false,
2287
+ "rstrip": false,
2288
+ "single_word": false,
2289
+ "special": true
2290
+ },
2291
+ "256282": {
2292
+ "content": "<extra_id_17>",
2293
+ "lstrip": false,
2294
+ "normalized": false,
2295
+ "rstrip": false,
2296
+ "single_word": false,
2297
+ "special": true
2298
+ },
2299
+ "256283": {
2300
+ "content": "<extra_id_16>",
2301
+ "lstrip": false,
2302
+ "normalized": false,
2303
+ "rstrip": false,
2304
+ "single_word": false,
2305
+ "special": true
2306
+ },
2307
+ "256284": {
2308
+ "content": "<extra_id_15>",
2309
+ "lstrip": false,
2310
+ "normalized": false,
2311
+ "rstrip": false,
2312
+ "single_word": false,
2313
+ "special": true
2314
+ },
2315
+ "256285": {
2316
+ "content": "<extra_id_14>",
2317
+ "lstrip": false,
2318
+ "normalized": false,
2319
+ "rstrip": false,
2320
+ "single_word": false,
2321
+ "special": true
2322
+ },
2323
+ "256286": {
2324
+ "content": "<extra_id_13>",
2325
+ "lstrip": false,
2326
+ "normalized": false,
2327
+ "rstrip": false,
2328
+ "single_word": false,
2329
+ "special": true
2330
+ },
2331
+ "256287": {
2332
+ "content": "<extra_id_12>",
2333
+ "lstrip": false,
2334
+ "normalized": false,
2335
+ "rstrip": false,
2336
+ "single_word": false,
2337
+ "special": true
2338
+ },
2339
+ "256288": {
2340
+ "content": "<extra_id_11>",
2341
+ "lstrip": false,
2342
+ "normalized": false,
2343
+ "rstrip": false,
2344
+ "single_word": false,
2345
+ "special": true
2346
+ },
2347
+ "256289": {
2348
+ "content": "<extra_id_10>",
2349
+ "lstrip": false,
2350
+ "normalized": false,
2351
+ "rstrip": false,
2352
+ "single_word": false,
2353
+ "special": true
2354
+ },
2355
+ "256290": {
2356
+ "content": "<extra_id_9>",
2357
+ "lstrip": false,
2358
+ "normalized": false,
2359
+ "rstrip": false,
2360
+ "single_word": false,
2361
+ "special": true
2362
+ },
2363
+ "256291": {
2364
+ "content": "<extra_id_8>",
2365
+ "lstrip": false,
2366
+ "normalized": false,
2367
+ "rstrip": false,
2368
+ "single_word": false,
2369
+ "special": true
2370
+ },
2371
+ "256292": {
2372
+ "content": "<extra_id_7>",
2373
+ "lstrip": false,
2374
+ "normalized": false,
2375
+ "rstrip": false,
2376
+ "single_word": false,
2377
+ "special": true
2378
+ },
2379
+ "256293": {
2380
+ "content": "<extra_id_6>",
2381
+ "lstrip": false,
2382
+ "normalized": false,
2383
+ "rstrip": false,
2384
+ "single_word": false,
2385
+ "special": true
2386
+ },
2387
+ "256294": {
2388
+ "content": "<extra_id_5>",
2389
+ "lstrip": false,
2390
+ "normalized": false,
2391
+ "rstrip": false,
2392
+ "single_word": false,
2393
+ "special": true
2394
+ },
2395
+ "256295": {
2396
+ "content": "<extra_id_4>",
2397
+ "lstrip": false,
2398
+ "normalized": false,
2399
+ "rstrip": false,
2400
+ "single_word": false,
2401
+ "special": true
2402
+ },
2403
+ "256296": {
2404
+ "content": "<extra_id_3>",
2405
+ "lstrip": false,
2406
+ "normalized": false,
2407
+ "rstrip": false,
2408
+ "single_word": false,
2409
+ "special": true
2410
+ },
2411
+ "256297": {
2412
+ "content": "<extra_id_2>",
2413
+ "lstrip": false,
2414
+ "normalized": false,
2415
+ "rstrip": false,
2416
+ "single_word": false,
2417
+ "special": true
2418
+ },
2419
+ "256298": {
2420
+ "content": "<extra_id_1>",
2421
+ "lstrip": false,
2422
+ "normalized": false,
2423
+ "rstrip": false,
2424
+ "single_word": false,
2425
+ "special": true
2426
+ },
2427
+ "256299": {
2428
+ "content": "<extra_id_0>",
2429
+ "lstrip": false,
2430
+ "normalized": false,
2431
+ "rstrip": false,
2432
+ "single_word": false,
2433
+ "special": true
2434
+ }
2435
+ },
2436
+ "additional_special_tokens": [
2437
+ "<extra_id_0>",
2438
+ "<extra_id_1>",
2439
+ "<extra_id_2>",
2440
+ "<extra_id_3>",
2441
+ "<extra_id_4>",
2442
+ "<extra_id_5>",
2443
+ "<extra_id_6>",
2444
+ "<extra_id_7>",
2445
+ "<extra_id_8>",
2446
+ "<extra_id_9>",
2447
+ "<extra_id_10>",
2448
+ "<extra_id_11>",
2449
+ "<extra_id_12>",
2450
+ "<extra_id_13>",
2451
+ "<extra_id_14>",
2452
+ "<extra_id_15>",
2453
+ "<extra_id_16>",
2454
+ "<extra_id_17>",
2455
+ "<extra_id_18>",
2456
+ "<extra_id_19>",
2457
+ "<extra_id_20>",
2458
+ "<extra_id_21>",
2459
+ "<extra_id_22>",
2460
+ "<extra_id_23>",
2461
+ "<extra_id_24>",
2462
+ "<extra_id_25>",
2463
+ "<extra_id_26>",
2464
+ "<extra_id_27>",
2465
+ "<extra_id_28>",
2466
+ "<extra_id_29>",
2467
+ "<extra_id_30>",
2468
+ "<extra_id_31>",
2469
+ "<extra_id_32>",
2470
+ "<extra_id_33>",
2471
+ "<extra_id_34>",
2472
+ "<extra_id_35>",
2473
+ "<extra_id_36>",
2474
+ "<extra_id_37>",
2475
+ "<extra_id_38>",
2476
+ "<extra_id_39>",
2477
+ "<extra_id_40>",
2478
+ "<extra_id_41>",
2479
+ "<extra_id_42>",
2480
+ "<extra_id_43>",
2481
+ "<extra_id_44>",
2482
+ "<extra_id_45>",
2483
+ "<extra_id_46>",
2484
+ "<extra_id_47>",
2485
+ "<extra_id_48>",
2486
+ "<extra_id_49>",
2487
+ "<extra_id_50>",
2488
+ "<extra_id_51>",
2489
+ "<extra_id_52>",
2490
+ "<extra_id_53>",
2491
+ "<extra_id_54>",
2492
+ "<extra_id_55>",
2493
+ "<extra_id_56>",
2494
+ "<extra_id_57>",
2495
+ "<extra_id_58>",
2496
+ "<extra_id_59>",
2497
+ "<extra_id_60>",
2498
+ "<extra_id_61>",
2499
+ "<extra_id_62>",
2500
+ "<extra_id_63>",
2501
+ "<extra_id_64>",
2502
+ "<extra_id_65>",
2503
+ "<extra_id_66>",
2504
+ "<extra_id_67>",
2505
+ "<extra_id_68>",
2506
+ "<extra_id_69>",
2507
+ "<extra_id_70>",
2508
+ "<extra_id_71>",
2509
+ "<extra_id_72>",
2510
+ "<extra_id_73>",
2511
+ "<extra_id_74>",
2512
+ "<extra_id_75>",
2513
+ "<extra_id_76>",
2514
+ "<extra_id_77>",
2515
+ "<extra_id_78>",
2516
+ "<extra_id_79>",
2517
+ "<extra_id_80>",
2518
+ "<extra_id_81>",
2519
+ "<extra_id_82>",
2520
+ "<extra_id_83>",
2521
+ "<extra_id_84>",
2522
+ "<extra_id_85>",
2523
+ "<extra_id_86>",
2524
+ "<extra_id_87>",
2525
+ "<extra_id_88>",
2526
+ "<extra_id_89>",
2527
+ "<extra_id_90>",
2528
+ "<extra_id_91>",
2529
+ "<extra_id_92>",
2530
+ "<extra_id_93>",
2531
+ "<extra_id_94>",
2532
+ "<extra_id_95>",
2533
+ "<extra_id_96>",
2534
+ "<extra_id_97>",
2535
+ "<extra_id_98>",
2536
+ "<extra_id_99>",
2537
+ "<extra_id_100>",
2538
+ "<extra_id_101>",
2539
+ "<extra_id_102>",
2540
+ "<extra_id_103>",
2541
+ "<extra_id_104>",
2542
+ "<extra_id_105>",
2543
+ "<extra_id_106>",
2544
+ "<extra_id_107>",
2545
+ "<extra_id_108>",
2546
+ "<extra_id_109>",
2547
+ "<extra_id_110>",
2548
+ "<extra_id_111>",
2549
+ "<extra_id_112>",
2550
+ "<extra_id_113>",
2551
+ "<extra_id_114>",
2552
+ "<extra_id_115>",
2553
+ "<extra_id_116>",
2554
+ "<extra_id_117>",
2555
+ "<extra_id_118>",
2556
+ "<extra_id_119>",
2557
+ "<extra_id_120>",
2558
+ "<extra_id_121>",
2559
+ "<extra_id_122>",
2560
+ "<extra_id_123>",
2561
+ "<extra_id_124>",
2562
+ "<extra_id_125>",
2563
+ "<extra_id_126>",
2564
+ "<extra_id_127>",
2565
+ "<extra_id_128>",
2566
+ "<extra_id_129>",
2567
+ "<extra_id_130>",
2568
+ "<extra_id_131>",
2569
+ "<extra_id_132>",
2570
+ "<extra_id_133>",
2571
+ "<extra_id_134>",
2572
+ "<extra_id_135>",
2573
+ "<extra_id_136>",
2574
+ "<extra_id_137>",
2575
+ "<extra_id_138>",
2576
+ "<extra_id_139>",
2577
+ "<extra_id_140>",
2578
+ "<extra_id_141>",
2579
+ "<extra_id_142>",
2580
+ "<extra_id_143>",
2581
+ "<extra_id_144>",
2582
+ "<extra_id_145>",
2583
+ "<extra_id_146>",
2584
+ "<extra_id_147>",
2585
+ "<extra_id_148>",
2586
+ "<extra_id_149>",
2587
+ "<extra_id_150>",
2588
+ "<extra_id_151>",
2589
+ "<extra_id_152>",
2590
+ "<extra_id_153>",
2591
+ "<extra_id_154>",
2592
+ "<extra_id_155>",
2593
+ "<extra_id_156>",
2594
+ "<extra_id_157>",
2595
+ "<extra_id_158>",
2596
+ "<extra_id_159>",
2597
+ "<extra_id_160>",
2598
+ "<extra_id_161>",
2599
+ "<extra_id_162>",
2600
+ "<extra_id_163>",
2601
+ "<extra_id_164>",
2602
+ "<extra_id_165>",
2603
+ "<extra_id_166>",
2604
+ "<extra_id_167>",
2605
+ "<extra_id_168>",
2606
+ "<extra_id_169>",
2607
+ "<extra_id_170>",
2608
+ "<extra_id_171>",
2609
+ "<extra_id_172>",
2610
+ "<extra_id_173>",
2611
+ "<extra_id_174>",
2612
+ "<extra_id_175>",
2613
+ "<extra_id_176>",
2614
+ "<extra_id_177>",
2615
+ "<extra_id_178>",
2616
+ "<extra_id_179>",
2617
+ "<extra_id_180>",
2618
+ "<extra_id_181>",
2619
+ "<extra_id_182>",
2620
+ "<extra_id_183>",
2621
+ "<extra_id_184>",
2622
+ "<extra_id_185>",
2623
+ "<extra_id_186>",
2624
+ "<extra_id_187>",
2625
+ "<extra_id_188>",
2626
+ "<extra_id_189>",
2627
+ "<extra_id_190>",
2628
+ "<extra_id_191>",
2629
+ "<extra_id_192>",
2630
+ "<extra_id_193>",
2631
+ "<extra_id_194>",
2632
+ "<extra_id_195>",
2633
+ "<extra_id_196>",
2634
+ "<extra_id_197>",
2635
+ "<extra_id_198>",
2636
+ "<extra_id_199>",
2637
+ "<extra_id_200>",
2638
+ "<extra_id_201>",
2639
+ "<extra_id_202>",
2640
+ "<extra_id_203>",
2641
+ "<extra_id_204>",
2642
+ "<extra_id_205>",
2643
+ "<extra_id_206>",
2644
+ "<extra_id_207>",
2645
+ "<extra_id_208>",
2646
+ "<extra_id_209>",
2647
+ "<extra_id_210>",
2648
+ "<extra_id_211>",
2649
+ "<extra_id_212>",
2650
+ "<extra_id_213>",
2651
+ "<extra_id_214>",
2652
+ "<extra_id_215>",
2653
+ "<extra_id_216>",
2654
+ "<extra_id_217>",
2655
+ "<extra_id_218>",
2656
+ "<extra_id_219>",
2657
+ "<extra_id_220>",
2658
+ "<extra_id_221>",
2659
+ "<extra_id_222>",
2660
+ "<extra_id_223>",
2661
+ "<extra_id_224>",
2662
+ "<extra_id_225>",
2663
+ "<extra_id_226>",
2664
+ "<extra_id_227>",
2665
+ "<extra_id_228>",
2666
+ "<extra_id_229>",
2667
+ "<extra_id_230>",
2668
+ "<extra_id_231>",
2669
+ "<extra_id_232>",
2670
+ "<extra_id_233>",
2671
+ "<extra_id_234>",
2672
+ "<extra_id_235>",
2673
+ "<extra_id_236>",
2674
+ "<extra_id_237>",
2675
+ "<extra_id_238>",
2676
+ "<extra_id_239>",
2677
+ "<extra_id_240>",
2678
+ "<extra_id_241>",
2679
+ "<extra_id_242>",
2680
+ "<extra_id_243>",
2681
+ "<extra_id_244>",
2682
+ "<extra_id_245>",
2683
+ "<extra_id_246>",
2684
+ "<extra_id_247>",
2685
+ "<extra_id_248>",
2686
+ "<extra_id_249>",
2687
+ "<extra_id_250>",
2688
+ "<extra_id_251>",
2689
+ "<extra_id_252>",
2690
+ "<extra_id_253>",
2691
+ "<extra_id_254>",
2692
+ "<extra_id_255>",
2693
+ "<extra_id_256>",
2694
+ "<extra_id_257>",
2695
+ "<extra_id_258>",
2696
+ "<extra_id_259>",
2697
+ "<extra_id_260>",
2698
+ "<extra_id_261>",
2699
+ "<extra_id_262>",
2700
+ "<extra_id_263>",
2701
+ "<extra_id_264>",
2702
+ "<extra_id_265>",
2703
+ "<extra_id_266>",
2704
+ "<extra_id_267>",
2705
+ "<extra_id_268>",
2706
+ "<extra_id_269>",
2707
+ "<extra_id_270>",
2708
+ "<extra_id_271>",
2709
+ "<extra_id_272>",
2710
+ "<extra_id_273>",
2711
+ "<extra_id_274>",
2712
+ "<extra_id_275>",
2713
+ "<extra_id_276>",
2714
+ "<extra_id_277>",
2715
+ "<extra_id_278>",
2716
+ "<extra_id_279>",
2717
+ "<extra_id_280>",
2718
+ "<extra_id_281>",
2719
+ "<extra_id_282>",
2720
+ "<extra_id_283>",
2721
+ "<extra_id_284>",
2722
+ "<extra_id_285>",
2723
+ "<extra_id_286>",
2724
+ "<extra_id_287>",
2725
+ "<extra_id_288>",
2726
+ "<extra_id_289>",
2727
+ "<extra_id_290>",
2728
+ "<extra_id_291>",
2729
+ "<extra_id_292>",
2730
+ "<extra_id_293>",
2731
+ "<extra_id_294>",
2732
+ "<extra_id_295>",
2733
+ "<extra_id_296>",
2734
+ "<extra_id_297>",
2735
+ "<extra_id_298>",
2736
+ "<extra_id_299>"
2737
+ ],
2738
+ "bos_token": "<s>",
2739
+ "clean_up_tokenization_spaces": true,
2740
+ "eos_token": "</s>",
2741
+ "extra_ids": 300,
2742
+ "model_max_length": 1000000000000000019884624838656,
2743
+ "pad_token": "<pad>",
2744
+ "sp_model_kwargs": {},
2745
+ "spaces_between_special_tokens": false,
2746
+ "tokenizer_class": "T5Tokenizer",
2747
+ "unk_token": "<unk>"
2748
+ }
wan_models/Wan2.1-T2V-14B/LICENSE.txt ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
wan_models/Wan2.1-T2V-14B/README.md ADDED
@@ -0,0 +1,301 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ - zh
6
+ pipeline_tag: text-to-video
7
+ tags:
8
+ - video generation
9
+ library_name: diffusers
10
+ inference:
11
+ parameters:
12
+ num_inference_steps: 10
13
+ ---
14
+ # Wan2.1
15
+
16
+ <p align="center">
17
+ <img src="assets/logo.png" width="400"/>
18
+ <p>
19
+
20
+ <p align="center">
21
+ 💜 <a href=""><b>Wan</b></a> &nbsp&nbsp | &nbsp&nbsp 🖥️ <a href="https://github.com/Wan-Video/Wan2.1">GitHub</a> &nbsp&nbsp | &nbsp&nbsp🤗 <a href="https://huggingface.co/Wan-AI/">Hugging Face</a>&nbsp&nbsp | &nbsp&nbsp🤖 <a href="https://modelscope.cn/organization/Wan-AI">ModelScope</a>&nbsp&nbsp | &nbsp&nbsp 📑 <a href="">Paper (Coming soon)</a> &nbsp&nbsp | &nbsp&nbsp 📑 <a href="https://wanxai.com">Blog</a> &nbsp&nbsp | &nbsp&nbsp💬 <a href="https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg">WeChat Group</a>&nbsp&nbsp | &nbsp&nbsp 📖 <a href="https://discord.gg/p5XbdQV7">Discord</a>&nbsp&nbsp
22
+ <br>
23
+
24
+ -----
25
+
26
+ [**Wan: Open and Advanced Large-Scale Video Generative Models**]("") <be>
27
+
28
+ In this repository, we present **Wan2.1**, a comprehensive and open suite of video foundation models that pushes the boundaries of video generation. **Wan2.1** offers these key features:
29
+ - 👍 **SOTA Performance**: **Wan2.1** consistently outperforms existing open-source models and state-of-the-art commercial solutions across multiple benchmarks.
30
+ - 👍 **Supports Consumer-grade GPUs**: The T2V-1.3B model requires only 8.19 GB VRAM, making it compatible with almost all consumer-grade GPUs. It can generate a 5-second 480P video on an RTX 4090 in about 4 minutes (without optimization techniques like quantization). Its performance is even comparable to some closed-source models.
31
+ - 👍 **Multiple Tasks**: **Wan2.1** excels in Text-to-Video, Image-to-Video, Video Editing, Text-to-Image, and Video-to-Audio, advancing the field of video generation.
32
+ - 👍 **Visual Text Generation**: **Wan2.1** is the first video model capable of generating both Chinese and English text, featuring robust text generation that enhances its practical applications.
33
+ - 👍 **Powerful Video VAE**: **Wan-VAE** delivers exceptional efficiency and performance, encoding and decoding 1080P videos of any length while preserving temporal information, making it an ideal foundation for video and image generation.
34
+
35
+ This repository features our T2V-14B model, which establishes a new SOTA performance benchmark among both open-source and closed-source models. It demonstrates exceptional capabilities in generating high-quality visuals with significant motion dynamics. It is also the only video model capable of producing both Chinese and English text and supports video generation at both 480P and 720P resolutions.
36
+
37
+
38
+ ## Video Demos
39
+
40
+ <div align="center">
41
+ <video width="80%" controls>
42
+ <source src="https://cloud.video.taobao.com/vod/Jth64Y7wNoPcJki_Bo1ZJTDBvNjsgjlVKsNs05Fqfps.mp4" type="video/mp4">
43
+ Your browser does not support the video tag.
44
+ </video>
45
+ </div>
46
+
47
+ ## 🔥 Latest News!!
48
+
49
+ * Feb 22, 2025: 👋 We've released the inference code and weights of Wan2.1.
50
+
51
+
52
+ ## 📑 Todo List
53
+ - Wan2.1 Text-to-Video
54
+ - [x] Multi-GPU Inference code of the 14B and 1.3B models
55
+ - [x] Checkpoints of the 14B and 1.3B models
56
+ - [x] Gradio demo
57
+ - [ ] Diffusers integration
58
+ - [ ] ComfyUI integration
59
+ - Wan2.1 Image-to-Video
60
+ - [x] Multi-GPU Inference code of the 14B model
61
+ - [x] Checkpoints of the 14B model
62
+ - [x] Gradio demo
63
+ - [ ] Diffusers integration
64
+ - [ ] ComfyUI integration
65
+
66
+
67
+ ## Quickstart
68
+
69
+ #### Installation
70
+ Clone the repo:
71
+ ```
72
+ git clone https://github.com/Wan-Video/Wan2.1.git
73
+ cd Wan2.1
74
+ ```
75
+
76
+ Install dependencies:
77
+ ```
78
+ # Ensure torch >= 2.4.0
79
+ pip install -r requirements.txt
80
+ ```
81
+
82
+
83
+ #### Model Download
84
+
85
+ | Models | Download Link | Notes |
86
+ | --------------|-------------------------------------------------------------------------------|-------------------------------|
87
+ | T2V-14B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-14B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | Supports both 480P and 720P
88
+ | I2V-14B-720P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | Supports 720P
89
+ | I2V-14B-480P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | Supports 480P
90
+ | T2V-1.3B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | Supports 480P
91
+
92
+ > 💡Note: The 1.3B model is capable of generating videos at 720P resolution. However, due to limited training at this resolution, the results are generally less stable compared to 480P. For optimal performance, we recommend using 480P resolution.
93
+
94
+
95
+ Download models using 🤗 huggingface-cli:
96
+ ```
97
+ pip install "huggingface_hub[cli]"
98
+ huggingface-cli download Wan-AI/Wan2.1-T2V-14B --local-dir ./Wan2.1-T2V-14B
99
+ ```
100
+
101
+ Download models using 🤖 modelscope-cli:
102
+ ```
103
+ pip install modelscope
104
+ modelscope download Wan-AI/Wan2.1-T2V-14B --local_dir ./Wan2.1-T2V-14B
105
+ ```
106
+ #### Run Text-to-Video Generation
107
+
108
+ This repository supports two Text-to-Video models (1.3B and 14B) and two resolutions (480P and 720P). The parameters and configurations for these models are as follows:
109
+
110
+ <table>
111
+ <thead>
112
+ <tr>
113
+ <th rowspan="2">Task</th>
114
+ <th colspan="2">Resolution</th>
115
+ <th rowspan="2">Model</th>
116
+ </tr>
117
+ <tr>
118
+ <th>480P</th>
119
+ <th>720P</th>
120
+ </tr>
121
+ </thead>
122
+ <tbody>
123
+ <tr>
124
+ <td>t2v-14B</td>
125
+ <td style="color: green;">✔️</td>
126
+ <td style="color: green;">✔️</td>
127
+ <td>Wan2.1-T2V-14B</td>
128
+ </tr>
129
+ <tr>
130
+ <td>t2v-1.3B</td>
131
+ <td style="color: green;">✔️</td>
132
+ <td style="color: red;">❌</td>
133
+ <td>Wan2.1-T2V-1.3B</td>
134
+ </tr>
135
+ </tbody>
136
+ </table>
137
+
138
+
139
+ ##### (1) Without Prompt Extention
140
+
141
+ To facilitate implementation, we will start with a basic version of the inference process that skips the [prompt extension](#2-using-prompt-extention) step.
142
+
143
+ - Single-GPU inference
144
+
145
+ ```
146
+ python generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
147
+ ```
148
+
149
+ If you encounter OOM (Out-of-Memory) issues, you can use the `--offload_model True` and `--t5_cpu` options to reduce GPU memory usage. For example, on an RTX 4090 GPU:
150
+
151
+ ```
152
+ python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --offload_model True --t5_cpu --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
153
+ ```
154
+
155
+ > 💡Note: If you are using the `T2V-1.3B` model, we recommend setting the parameter `--sample_guide_scale 6`. The `--sample_shift parameter` can be adjusted within the range of 8 to 12 based on the performance.
156
+
157
+
158
+ - Multi-GPU inference using FSDP + xDiT USP
159
+
160
+ ```
161
+ pip install "xfuser>=0.4.1"
162
+ torchrun --nproc_per_node=8 generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --dit_fsdp --t5_fsdp --ulysses_size 8 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
163
+ ```
164
+
165
+
166
+ ##### (2) Using Prompt Extention
167
+
168
+ Extending the prompts can effectively enrich the details in the generated videos, further enhancing the video quality. Therefore, we recommend enabling prompt extension. We provide the following two methods for prompt extension:
169
+
170
+ - Use the Dashscope API for extension.
171
+ - Apply for a `dashscope.api_key` in advance ([EN](https://www.alibabacloud.com/help/en/model-studio/getting-started/first-api-call-to-qwen) | [CN](https://help.aliyun.com/zh/model-studio/getting-started/first-api-call-to-qwen)).
172
+ - Configure the environment variable `DASH_API_KEY` to specify the Dashscope API key. For users of Alibaba Cloud's international site, you also need to set the environment variable `DASH_API_URL` to 'https://dashscope-intl.aliyuncs.com/api/v1'. For more detailed instructions, please refer to the [dashscope document](https://www.alibabacloud.com/help/en/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c63.p38356.0.i1).
173
+ - Use the `qwen-plus` model for text-to-video tasks and `qwen-vl-max` for image-to-video tasks.
174
+ - You can modify the model used for extension with the parameter `--prompt_extend_model`. For example:
175
+ ```
176
+ DASH_API_KEY=your_key python generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'dashscope' --prompt_extend_target_lang 'ch'
177
+ ```
178
+
179
+ - Using a local model for extension.
180
+
181
+ - By default, the Qwen model on HuggingFace is used for this extension. Users can choose based on the available GPU memory size.
182
+ - For text-to-video tasks, you can use models like `Qwen/Qwen2.5-14B-Instruct`, `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen2.5-3B-Instruct`
183
+ - For image-to-video tasks, you can use models like `Qwen/Qwen2.5-VL-7B-Instruct` and `Qwen/Qwen2.5-VL-3B-Instruct`.
184
+ - Larger models generally provide better extension results but require more GPU memory.
185
+ - You can modify the model used for extension with the parameter `--prompt_extend_model` , allowing you to specify either a local model path or a Hugging Face model. For example:
186
+
187
+ ```
188
+ python generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'local_qwen' --prompt_extend_target_lang 'ch'
189
+ ```
190
+
191
+ ##### (3) Runing local gradio
192
+
193
+ ```
194
+ cd gradio
195
+ # if one uses dashscope’s API for prompt extension
196
+ DASH_API_KEY=your_key python t2v_14B_singleGPU.py --prompt_extend_method 'dashscope' --ckpt_dir ./Wan2.1-T2V-14B
197
+
198
+ # if one uses a local model for prompt extension
199
+ python t2v_14B_singleGPU.py --prompt_extend_method 'local_qwen' --ckpt_dir ./Wan2.1-T2V-14B
200
+ ```
201
+
202
+
203
+ ## Manual Evaluation
204
+
205
+
206
+ Through manual evaluation, the results generated after prompt extension are superior to those from both closed-source and open-source models.
207
+
208
+ <div align="center">
209
+ <img src="assets/t2v_res.jpg" alt="" style="width: 80%;" />
210
+ </div>
211
+
212
+
213
+
214
+ ## Computational Efficiency on Different GPUs
215
+
216
+ We test the computational efficiency of different **Wan2.1** models on different GPUs in the following table. The results are presented in the format: **Total time (s) / peak GPU memory (GB)**.
217
+
218
+
219
+ <div align="center">
220
+ <img src="assets/comp_effic.png" alt="" style="width: 80%;" />
221
+ </div>
222
+
223
+ > The parameter settings for the tests presented in this table are as follows:
224
+ > (1) For the 1.3B model on 8 GPUs, set `--ring_size 8` and `--ulysses_size 1`;
225
+ > (2) For the 14B model on 1 GPU, use `--offload_model True`;
226
+ > (3) For the 1.3B model on a single 4090 GPU, set `--offload_model True --t5_cpu`;
227
+ > (4) For all testings, no prompt extension was applied, meaning `--use_prompt_extend` was not enabled.
228
+
229
+
230
+ ## Community Contributions
231
+ - [DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio) provides more support for Wan, including video-to-video, FP8 quantization, VRAM optimization, LoRA training, and more. Please refer to [their examples](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo).
232
+
233
+ -------
234
+
235
+ ## Introduction of Wan2.1
236
+
237
+ **Wan2.1** is designed on the mainstream diffusion transformer paradigm, achieving significant advancements in generative capabilities through a series of innovations. These include our novel spatio-temporal variational autoencoder (VAE), scalable training strategies, large-scale data construction, and automated evaluation metrics. Collectively, these contributions enhance the model’s performance and versatility.
238
+
239
+
240
+ ##### (1) 3D Variational Autoencoders
241
+ We propose a novel 3D causal VAE architecture, termed **Wan-VAE** specifically designed for video generation. By combining multiple strategies, we improve spatio-temporal compression, reduce memory usage, and ensure temporal causality. **Wan-VAE** demonstrates significant advantages in performance efficiency compared to other open-source VAEs. Furthermore, our **Wan-VAE** can encode and decode unlimited-length 1080P videos without losing historical temporal information, making it particularly well-suited for video generation tasks.
242
+
243
+
244
+ <div align="center">
245
+ <img src="assets/video_vae_res.jpg" alt="" style="width: 80%;" />
246
+ </div>
247
+
248
+
249
+ ##### (2) Video Diffusion DiT
250
+
251
+ **Wan2.1** is designed using the Flow Matching framework within the paradigm of mainstream Diffusion Transformers. Our model's architecture uses the T5 Encoder to encode multilingual text input, with cross-attention in each transformer block embedding the text into the model structure. Additionally, we employ an MLP with a Linear layer and a SiLU layer to process the input time embeddings and predict six modulation parameters individually. This MLP is shared across all transformer blocks, with each block learning a distinct set of biases. Our experimental findings reveal a significant performance improvement with this approach at the same parameter scale.
252
+
253
+ <div align="center">
254
+ <img src="assets/video_dit_arch.jpg" alt="" style="width: 80%;" />
255
+ </div>
256
+
257
+
258
+ | Model | Dimension | Input Dimension | Output Dimension | Feedforward Dimension | Frequency Dimension | Number of Heads | Number of Layers |
259
+ |--------|-----------|-----------------|------------------|-----------------------|---------------------|-----------------|------------------|
260
+ | 1.3B | 1536 | 16 | 16 | 8960 | 256 | 12 | 30 |
261
+ | 14B | 5120 | 16 | 16 | 13824 | 256 | 40 | 40 |
262
+
263
+
264
+
265
+ ##### Data
266
+
267
+ We curated and deduplicated a candidate dataset comprising a vast amount of image and video data. During the data curation process, we designed a four-step data cleaning process, focusing on fundamental dimensions, visual quality and motion quality. Through the robust data processing pipeline, we can easily obtain high-quality, diverse, and large-scale training sets of images and videos.
268
+
269
+ ![figure1](assets/data_for_diff_stage.jpg "figure1")
270
+
271
+
272
+ ##### Comparisons to SOTA
273
+ We compared **Wan2.1** with leading open-source and closed-source models to evaluate the performace. Using our carefully designed set of 1,035 internal prompts, we tested across 14 major dimensions and 26 sub-dimensions. We then compute the total score by performing a weighted calculation on the scores of each dimension, utilizing weights derived from human preferences in the matching process. The detailed results are shown in the table below. These results demonstrate our model's superior performance compared to both open-source and closed-source models.
274
+
275
+ ![figure1](assets/vben_vs_sota.png "figure1")
276
+
277
+
278
+ ## Citation
279
+ If you find our work helpful, please cite us.
280
+
281
+ ```
282
+ @article{wan2.1,
283
+ title = {Wan: Open and Advanced Large-Scale Video Generative Models},
284
+ author = {Wan Team},
285
+ journal = {},
286
+ year = {2025}
287
+ }
288
+ ```
289
+
290
+ ## License Agreement
291
+ The models in this repository are licensed under the Apache 2.0 License. We claim no rights over the your generate contents, granting you the freedom to use them while ensuring that your usage complies with the provisions of this license. You are fully accountable for your use of the models, which must not involve sharing any content that violates applicable laws, causes harm to individuals or groups, disseminates personal information intended for harm, spreads misinformation, or targets vulnerable populations. For a complete list of restrictions and details regarding your rights, please refer to the full text of the [license](LICENSE.txt).
292
+
293
+
294
+ ## Acknowledgements
295
+
296
+ We would like to thank the contributors to the [SD3](https://huggingface.co/stabilityai/stable-diffusion-3-medium), [Qwen](https://huggingface.co/Qwen), [umt5-xxl](https://huggingface.co/google/umt5-xxl), [diffusers](https://github.com/huggingface/diffusers) and [HuggingFace](https://huggingface.co) repositories, for their open research.
297
+
298
+
299
+
300
+ ## Contact Us
301
+ If you would like to leave a message to our research or product teams, feel free to join our [Discord](https://discord.gg/p5XbdQV7) or [WeChat groups](https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg)!
wan_models/Wan2.1-T2V-14B/assets/logo.png ADDED
wan_models/Wan2.1-T2V-14B/diffusion_pytorch_model.safetensors.index.json ADDED
@@ -0,0 +1,1102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "metadata": {
3
+ "total_size": 57153966336
4
+ },
5
+ "weight_map": {
6
+ "blocks.0.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
7
+ "blocks.0.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
8
+ "blocks.0.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
9
+ "blocks.0.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
10
+ "blocks.0.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
11
+ "blocks.0.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
12
+ "blocks.0.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
13
+ "blocks.0.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
14
+ "blocks.0.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
15
+ "blocks.0.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
16
+ "blocks.0.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
17
+ "blocks.0.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
18
+ "blocks.0.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
19
+ "blocks.0.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
20
+ "blocks.0.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
21
+ "blocks.0.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
22
+ "blocks.0.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
23
+ "blocks.0.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
24
+ "blocks.0.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
25
+ "blocks.0.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
26
+ "blocks.0.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
27
+ "blocks.0.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
28
+ "blocks.0.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
29
+ "blocks.0.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
30
+ "blocks.0.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
31
+ "blocks.0.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
32
+ "blocks.0.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
33
+ "blocks.1.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
34
+ "blocks.1.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
35
+ "blocks.1.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
36
+ "blocks.1.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
37
+ "blocks.1.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
38
+ "blocks.1.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
39
+ "blocks.1.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
40
+ "blocks.1.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
41
+ "blocks.1.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
42
+ "blocks.1.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
43
+ "blocks.1.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
44
+ "blocks.1.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
45
+ "blocks.1.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
46
+ "blocks.1.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
47
+ "blocks.1.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
48
+ "blocks.1.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
49
+ "blocks.1.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
50
+ "blocks.1.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
51
+ "blocks.1.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
52
+ "blocks.1.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
53
+ "blocks.1.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
54
+ "blocks.1.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
55
+ "blocks.1.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
56
+ "blocks.1.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
57
+ "blocks.1.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
58
+ "blocks.1.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
59
+ "blocks.1.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
60
+ "blocks.10.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
61
+ "blocks.10.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
62
+ "blocks.10.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
63
+ "blocks.10.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
64
+ "blocks.10.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
65
+ "blocks.10.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
66
+ "blocks.10.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
67
+ "blocks.10.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
68
+ "blocks.10.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
69
+ "blocks.10.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
70
+ "blocks.10.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
71
+ "blocks.10.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
72
+ "blocks.10.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
73
+ "blocks.10.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
74
+ "blocks.10.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
75
+ "blocks.10.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
76
+ "blocks.10.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
77
+ "blocks.10.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
78
+ "blocks.10.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
79
+ "blocks.10.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
80
+ "blocks.10.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
81
+ "blocks.10.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
82
+ "blocks.10.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
83
+ "blocks.10.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
84
+ "blocks.10.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
85
+ "blocks.10.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
86
+ "blocks.10.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
87
+ "blocks.11.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
88
+ "blocks.11.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
89
+ "blocks.11.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
90
+ "blocks.11.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
91
+ "blocks.11.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
92
+ "blocks.11.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
93
+ "blocks.11.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
94
+ "blocks.11.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
95
+ "blocks.11.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
96
+ "blocks.11.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
97
+ "blocks.11.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
98
+ "blocks.11.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
99
+ "blocks.11.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
100
+ "blocks.11.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
101
+ "blocks.11.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
102
+ "blocks.11.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
103
+ "blocks.11.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
104
+ "blocks.11.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
105
+ "blocks.11.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
106
+ "blocks.11.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
107
+ "blocks.11.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
108
+ "blocks.11.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
109
+ "blocks.11.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
110
+ "blocks.11.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
111
+ "blocks.11.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
112
+ "blocks.11.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
113
+ "blocks.11.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
114
+ "blocks.12.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
115
+ "blocks.12.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
116
+ "blocks.12.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
117
+ "blocks.12.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
118
+ "blocks.12.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
119
+ "blocks.12.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
120
+ "blocks.12.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
121
+ "blocks.12.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
122
+ "blocks.12.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
123
+ "blocks.12.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
124
+ "blocks.12.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
125
+ "blocks.12.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
126
+ "blocks.12.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
127
+ "blocks.12.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
128
+ "blocks.12.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
129
+ "blocks.12.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
130
+ "blocks.12.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
131
+ "blocks.12.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
132
+ "blocks.12.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
133
+ "blocks.12.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
134
+ "blocks.12.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
135
+ "blocks.12.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
136
+ "blocks.12.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
137
+ "blocks.12.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
138
+ "blocks.12.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
139
+ "blocks.12.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
140
+ "blocks.12.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
141
+ "blocks.13.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
142
+ "blocks.13.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
143
+ "blocks.13.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
144
+ "blocks.13.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
145
+ "blocks.13.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
146
+ "blocks.13.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
147
+ "blocks.13.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
148
+ "blocks.13.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
149
+ "blocks.13.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
150
+ "blocks.13.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
151
+ "blocks.13.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
152
+ "blocks.13.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
153
+ "blocks.13.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
154
+ "blocks.13.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
155
+ "blocks.13.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
156
+ "blocks.13.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
157
+ "blocks.13.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
158
+ "blocks.13.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
159
+ "blocks.13.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
160
+ "blocks.13.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
161
+ "blocks.13.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
162
+ "blocks.13.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
163
+ "blocks.13.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
164
+ "blocks.13.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
165
+ "blocks.13.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
166
+ "blocks.13.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
167
+ "blocks.13.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
168
+ "blocks.14.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
169
+ "blocks.14.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
170
+ "blocks.14.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
171
+ "blocks.14.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
172
+ "blocks.14.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
173
+ "blocks.14.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
174
+ "blocks.14.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
175
+ "blocks.14.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
176
+ "blocks.14.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
177
+ "blocks.14.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
178
+ "blocks.14.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
179
+ "blocks.14.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
180
+ "blocks.14.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
181
+ "blocks.14.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
182
+ "blocks.14.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
183
+ "blocks.14.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
184
+ "blocks.14.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
185
+ "blocks.14.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
186
+ "blocks.14.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
187
+ "blocks.14.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
188
+ "blocks.14.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
189
+ "blocks.14.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
190
+ "blocks.14.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
191
+ "blocks.14.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
192
+ "blocks.14.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
193
+ "blocks.14.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
194
+ "blocks.14.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
195
+ "blocks.15.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
196
+ "blocks.15.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
197
+ "blocks.15.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
198
+ "blocks.15.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
199
+ "blocks.15.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
200
+ "blocks.15.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
201
+ "blocks.15.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
202
+ "blocks.15.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
203
+ "blocks.15.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
204
+ "blocks.15.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
205
+ "blocks.15.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
206
+ "blocks.15.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
207
+ "blocks.15.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
208
+ "blocks.15.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
209
+ "blocks.15.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
210
+ "blocks.15.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
211
+ "blocks.15.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
212
+ "blocks.15.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
213
+ "blocks.15.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
214
+ "blocks.15.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
215
+ "blocks.15.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
216
+ "blocks.15.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
217
+ "blocks.15.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
218
+ "blocks.15.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
219
+ "blocks.15.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
220
+ "blocks.15.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
221
+ "blocks.15.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
222
+ "blocks.16.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
223
+ "blocks.16.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
224
+ "blocks.16.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
225
+ "blocks.16.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
226
+ "blocks.16.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
227
+ "blocks.16.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
228
+ "blocks.16.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
229
+ "blocks.16.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
230
+ "blocks.16.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
231
+ "blocks.16.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
232
+ "blocks.16.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
233
+ "blocks.16.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
234
+ "blocks.16.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
235
+ "blocks.16.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
236
+ "blocks.16.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
237
+ "blocks.16.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
238
+ "blocks.16.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
239
+ "blocks.16.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
240
+ "blocks.16.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
241
+ "blocks.16.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
242
+ "blocks.16.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
243
+ "blocks.16.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
244
+ "blocks.16.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
245
+ "blocks.16.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
246
+ "blocks.16.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
247
+ "blocks.16.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
248
+ "blocks.16.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
249
+ "blocks.17.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
250
+ "blocks.17.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
251
+ "blocks.17.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
252
+ "blocks.17.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
253
+ "blocks.17.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
254
+ "blocks.17.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
255
+ "blocks.17.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
256
+ "blocks.17.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
257
+ "blocks.17.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
258
+ "blocks.17.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
259
+ "blocks.17.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
260
+ "blocks.17.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
261
+ "blocks.17.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
262
+ "blocks.17.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
263
+ "blocks.17.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
264
+ "blocks.17.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
265
+ "blocks.17.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
266
+ "blocks.17.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
267
+ "blocks.17.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
268
+ "blocks.17.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
269
+ "blocks.17.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
270
+ "blocks.17.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
271
+ "blocks.17.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
272
+ "blocks.17.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
273
+ "blocks.17.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
274
+ "blocks.17.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
275
+ "blocks.17.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
276
+ "blocks.18.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
277
+ "blocks.18.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
278
+ "blocks.18.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
279
+ "blocks.18.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
280
+ "blocks.18.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
281
+ "blocks.18.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
282
+ "blocks.18.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
283
+ "blocks.18.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
284
+ "blocks.18.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
285
+ "blocks.18.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
286
+ "blocks.18.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
287
+ "blocks.18.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
288
+ "blocks.18.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
289
+ "blocks.18.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
290
+ "blocks.18.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
291
+ "blocks.18.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
292
+ "blocks.18.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
293
+ "blocks.18.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
294
+ "blocks.18.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
295
+ "blocks.18.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
296
+ "blocks.18.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
297
+ "blocks.18.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
298
+ "blocks.18.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
299
+ "blocks.18.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
300
+ "blocks.18.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
301
+ "blocks.18.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
302
+ "blocks.18.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
303
+ "blocks.19.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
304
+ "blocks.19.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
305
+ "blocks.19.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
306
+ "blocks.19.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
307
+ "blocks.19.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
308
+ "blocks.19.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
309
+ "blocks.19.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
310
+ "blocks.19.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
311
+ "blocks.19.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
312
+ "blocks.19.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
313
+ "blocks.19.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
314
+ "blocks.19.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
315
+ "blocks.19.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
316
+ "blocks.19.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
317
+ "blocks.19.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
318
+ "blocks.19.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
319
+ "blocks.19.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
320
+ "blocks.19.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
321
+ "blocks.19.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
322
+ "blocks.19.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
323
+ "blocks.19.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
324
+ "blocks.19.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
325
+ "blocks.19.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
326
+ "blocks.19.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
327
+ "blocks.19.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
328
+ "blocks.19.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
329
+ "blocks.19.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
330
+ "blocks.2.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
331
+ "blocks.2.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
332
+ "blocks.2.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
333
+ "blocks.2.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
334
+ "blocks.2.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
335
+ "blocks.2.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
336
+ "blocks.2.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
337
+ "blocks.2.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
338
+ "blocks.2.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
339
+ "blocks.2.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
340
+ "blocks.2.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
341
+ "blocks.2.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
342
+ "blocks.2.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
343
+ "blocks.2.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
344
+ "blocks.2.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
345
+ "blocks.2.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
346
+ "blocks.2.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
347
+ "blocks.2.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
348
+ "blocks.2.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
349
+ "blocks.2.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
350
+ "blocks.2.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
351
+ "blocks.2.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
352
+ "blocks.2.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
353
+ "blocks.2.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
354
+ "blocks.2.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
355
+ "blocks.2.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
356
+ "blocks.2.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
357
+ "blocks.20.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
358
+ "blocks.20.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
359
+ "blocks.20.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
360
+ "blocks.20.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
361
+ "blocks.20.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
362
+ "blocks.20.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
363
+ "blocks.20.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
364
+ "blocks.20.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
365
+ "blocks.20.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
366
+ "blocks.20.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
367
+ "blocks.20.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
368
+ "blocks.20.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
369
+ "blocks.20.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
370
+ "blocks.20.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
371
+ "blocks.20.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
372
+ "blocks.20.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
373
+ "blocks.20.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
374
+ "blocks.20.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
375
+ "blocks.20.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
376
+ "blocks.20.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
377
+ "blocks.20.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
378
+ "blocks.20.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
379
+ "blocks.20.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
380
+ "blocks.20.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
381
+ "blocks.20.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
382
+ "blocks.20.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
383
+ "blocks.20.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
384
+ "blocks.21.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
385
+ "blocks.21.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
386
+ "blocks.21.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
387
+ "blocks.21.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
388
+ "blocks.21.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
389
+ "blocks.21.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
390
+ "blocks.21.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
391
+ "blocks.21.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
392
+ "blocks.21.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
393
+ "blocks.21.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
394
+ "blocks.21.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
395
+ "blocks.21.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
396
+ "blocks.21.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
397
+ "blocks.21.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
398
+ "blocks.21.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
399
+ "blocks.21.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
400
+ "blocks.21.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
401
+ "blocks.21.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
402
+ "blocks.21.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
403
+ "blocks.21.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
404
+ "blocks.21.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
405
+ "blocks.21.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
406
+ "blocks.21.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
407
+ "blocks.21.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
408
+ "blocks.21.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
409
+ "blocks.21.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
410
+ "blocks.21.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
411
+ "blocks.22.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
412
+ "blocks.22.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
413
+ "blocks.22.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
414
+ "blocks.22.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
415
+ "blocks.22.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
416
+ "blocks.22.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
417
+ "blocks.22.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
418
+ "blocks.22.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
419
+ "blocks.22.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
420
+ "blocks.22.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
421
+ "blocks.22.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
422
+ "blocks.22.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
423
+ "blocks.22.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
424
+ "blocks.22.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
425
+ "blocks.22.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
426
+ "blocks.22.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
427
+ "blocks.22.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
428
+ "blocks.22.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
429
+ "blocks.22.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
430
+ "blocks.22.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
431
+ "blocks.22.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
432
+ "blocks.22.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
433
+ "blocks.22.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
434
+ "blocks.22.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
435
+ "blocks.22.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
436
+ "blocks.22.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
437
+ "blocks.22.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
438
+ "blocks.23.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
439
+ "blocks.23.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
440
+ "blocks.23.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
441
+ "blocks.23.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
442
+ "blocks.23.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
443
+ "blocks.23.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
444
+ "blocks.23.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
445
+ "blocks.23.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
446
+ "blocks.23.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
447
+ "blocks.23.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
448
+ "blocks.23.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
449
+ "blocks.23.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
450
+ "blocks.23.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
451
+ "blocks.23.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
452
+ "blocks.23.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
453
+ "blocks.23.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
454
+ "blocks.23.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
455
+ "blocks.23.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
456
+ "blocks.23.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
457
+ "blocks.23.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
458
+ "blocks.23.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
459
+ "blocks.23.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
460
+ "blocks.23.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
461
+ "blocks.23.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
462
+ "blocks.23.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
463
+ "blocks.23.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
464
+ "blocks.23.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
465
+ "blocks.24.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
466
+ "blocks.24.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
467
+ "blocks.24.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
468
+ "blocks.24.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
469
+ "blocks.24.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
470
+ "blocks.24.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
471
+ "blocks.24.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
472
+ "blocks.24.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
473
+ "blocks.24.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
474
+ "blocks.24.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
475
+ "blocks.24.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
476
+ "blocks.24.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
477
+ "blocks.24.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
478
+ "blocks.24.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
479
+ "blocks.24.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
480
+ "blocks.24.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
481
+ "blocks.24.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
482
+ "blocks.24.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
483
+ "blocks.24.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
484
+ "blocks.24.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
485
+ "blocks.24.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
486
+ "blocks.24.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
487
+ "blocks.24.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
488
+ "blocks.24.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
489
+ "blocks.24.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
490
+ "blocks.24.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
491
+ "blocks.24.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
492
+ "blocks.25.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
493
+ "blocks.25.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
494
+ "blocks.25.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
495
+ "blocks.25.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
496
+ "blocks.25.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
497
+ "blocks.25.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
498
+ "blocks.25.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
499
+ "blocks.25.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
500
+ "blocks.25.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
501
+ "blocks.25.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
502
+ "blocks.25.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
503
+ "blocks.25.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
504
+ "blocks.25.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
505
+ "blocks.25.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
506
+ "blocks.25.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
507
+ "blocks.25.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
508
+ "blocks.25.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
509
+ "blocks.25.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
510
+ "blocks.25.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
511
+ "blocks.25.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
512
+ "blocks.25.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
513
+ "blocks.25.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
514
+ "blocks.25.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
515
+ "blocks.25.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
516
+ "blocks.25.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
517
+ "blocks.25.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
518
+ "blocks.25.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
519
+ "blocks.26.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
520
+ "blocks.26.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
521
+ "blocks.26.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
522
+ "blocks.26.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
523
+ "blocks.26.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
524
+ "blocks.26.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
525
+ "blocks.26.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
526
+ "blocks.26.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
527
+ "blocks.26.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
528
+ "blocks.26.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
529
+ "blocks.26.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
530
+ "blocks.26.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
531
+ "blocks.26.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
532
+ "blocks.26.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
533
+ "blocks.26.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
534
+ "blocks.26.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
535
+ "blocks.26.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
536
+ "blocks.26.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
537
+ "blocks.26.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
538
+ "blocks.26.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
539
+ "blocks.26.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
540
+ "blocks.26.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
541
+ "blocks.26.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
542
+ "blocks.26.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
543
+ "blocks.26.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
544
+ "blocks.26.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
545
+ "blocks.26.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
546
+ "blocks.27.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
547
+ "blocks.27.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
548
+ "blocks.27.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
549
+ "blocks.27.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
550
+ "blocks.27.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
551
+ "blocks.27.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
552
+ "blocks.27.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
553
+ "blocks.27.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
554
+ "blocks.27.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
555
+ "blocks.27.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
556
+ "blocks.27.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
557
+ "blocks.27.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
558
+ "blocks.27.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
559
+ "blocks.27.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
560
+ "blocks.27.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
561
+ "blocks.27.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
562
+ "blocks.27.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
563
+ "blocks.27.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
564
+ "blocks.27.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
565
+ "blocks.27.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
566
+ "blocks.27.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
567
+ "blocks.27.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
568
+ "blocks.27.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
569
+ "blocks.27.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
570
+ "blocks.27.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
571
+ "blocks.27.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
572
+ "blocks.27.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
573
+ "blocks.28.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
574
+ "blocks.28.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
575
+ "blocks.28.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
576
+ "blocks.28.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
577
+ "blocks.28.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
578
+ "blocks.28.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
579
+ "blocks.28.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
580
+ "blocks.28.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
581
+ "blocks.28.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
582
+ "blocks.28.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
583
+ "blocks.28.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
584
+ "blocks.28.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
585
+ "blocks.28.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
586
+ "blocks.28.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
587
+ "blocks.28.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
588
+ "blocks.28.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
589
+ "blocks.28.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
590
+ "blocks.28.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
591
+ "blocks.28.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
592
+ "blocks.28.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
593
+ "blocks.28.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
594
+ "blocks.28.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
595
+ "blocks.28.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
596
+ "blocks.28.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
597
+ "blocks.28.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
598
+ "blocks.28.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
599
+ "blocks.28.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
600
+ "blocks.29.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
601
+ "blocks.29.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
602
+ "blocks.29.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
603
+ "blocks.29.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
604
+ "blocks.29.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
605
+ "blocks.29.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
606
+ "blocks.29.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
607
+ "blocks.29.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
608
+ "blocks.29.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
609
+ "blocks.29.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
610
+ "blocks.29.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
611
+ "blocks.29.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
612
+ "blocks.29.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
613
+ "blocks.29.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
614
+ "blocks.29.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
615
+ "blocks.29.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
616
+ "blocks.29.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
617
+ "blocks.29.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
618
+ "blocks.29.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
619
+ "blocks.29.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
620
+ "blocks.29.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
621
+ "blocks.29.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
622
+ "blocks.29.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
623
+ "blocks.29.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
624
+ "blocks.29.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
625
+ "blocks.29.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
626
+ "blocks.29.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
627
+ "blocks.3.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
628
+ "blocks.3.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
629
+ "blocks.3.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
630
+ "blocks.3.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
631
+ "blocks.3.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
632
+ "blocks.3.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
633
+ "blocks.3.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
634
+ "blocks.3.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
635
+ "blocks.3.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
636
+ "blocks.3.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
637
+ "blocks.3.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
638
+ "blocks.3.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
639
+ "blocks.3.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
640
+ "blocks.3.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
641
+ "blocks.3.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
642
+ "blocks.3.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
643
+ "blocks.3.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
644
+ "blocks.3.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
645
+ "blocks.3.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
646
+ "blocks.3.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
647
+ "blocks.3.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
648
+ "blocks.3.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
649
+ "blocks.3.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
650
+ "blocks.3.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
651
+ "blocks.3.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
652
+ "blocks.3.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
653
+ "blocks.3.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
654
+ "blocks.30.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
655
+ "blocks.30.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
656
+ "blocks.30.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
657
+ "blocks.30.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
658
+ "blocks.30.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
659
+ "blocks.30.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
660
+ "blocks.30.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
661
+ "blocks.30.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
662
+ "blocks.30.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
663
+ "blocks.30.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
664
+ "blocks.30.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
665
+ "blocks.30.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
666
+ "blocks.30.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
667
+ "blocks.30.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
668
+ "blocks.30.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
669
+ "blocks.30.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
670
+ "blocks.30.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
671
+ "blocks.30.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
672
+ "blocks.30.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
673
+ "blocks.30.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
674
+ "blocks.30.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
675
+ "blocks.30.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
676
+ "blocks.30.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
677
+ "blocks.30.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
678
+ "blocks.30.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
679
+ "blocks.30.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
680
+ "blocks.30.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
681
+ "blocks.31.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
682
+ "blocks.31.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
683
+ "blocks.31.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
684
+ "blocks.31.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
685
+ "blocks.31.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
686
+ "blocks.31.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
687
+ "blocks.31.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
688
+ "blocks.31.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
689
+ "blocks.31.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
690
+ "blocks.31.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
691
+ "blocks.31.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
692
+ "blocks.31.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
693
+ "blocks.31.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
694
+ "blocks.31.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
695
+ "blocks.31.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
696
+ "blocks.31.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
697
+ "blocks.31.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
698
+ "blocks.31.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
699
+ "blocks.31.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
700
+ "blocks.31.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
701
+ "blocks.31.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
702
+ "blocks.31.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
703
+ "blocks.31.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
704
+ "blocks.31.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
705
+ "blocks.31.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
706
+ "blocks.31.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
707
+ "blocks.31.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
708
+ "blocks.32.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
709
+ "blocks.32.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
710
+ "blocks.32.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
711
+ "blocks.32.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
712
+ "blocks.32.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
713
+ "blocks.32.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
714
+ "blocks.32.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
715
+ "blocks.32.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
716
+ "blocks.32.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
717
+ "blocks.32.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
718
+ "blocks.32.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
719
+ "blocks.32.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
720
+ "blocks.32.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
721
+ "blocks.32.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
722
+ "blocks.32.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
723
+ "blocks.32.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
724
+ "blocks.32.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
725
+ "blocks.32.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
726
+ "blocks.32.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
727
+ "blocks.32.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
728
+ "blocks.32.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
729
+ "blocks.32.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
730
+ "blocks.32.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
731
+ "blocks.32.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
732
+ "blocks.32.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
733
+ "blocks.32.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
734
+ "blocks.32.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
735
+ "blocks.33.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
736
+ "blocks.33.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
737
+ "blocks.33.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
738
+ "blocks.33.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
739
+ "blocks.33.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
740
+ "blocks.33.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
741
+ "blocks.33.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
742
+ "blocks.33.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
743
+ "blocks.33.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
744
+ "blocks.33.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
745
+ "blocks.33.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
746
+ "blocks.33.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
747
+ "blocks.33.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
748
+ "blocks.33.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
749
+ "blocks.33.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
750
+ "blocks.33.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
751
+ "blocks.33.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
752
+ "blocks.33.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
753
+ "blocks.33.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
754
+ "blocks.33.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
755
+ "blocks.33.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
756
+ "blocks.33.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
757
+ "blocks.33.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
758
+ "blocks.33.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
759
+ "blocks.33.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
760
+ "blocks.33.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
761
+ "blocks.33.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
762
+ "blocks.34.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
763
+ "blocks.34.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
764
+ "blocks.34.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
765
+ "blocks.34.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
766
+ "blocks.34.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
767
+ "blocks.34.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
768
+ "blocks.34.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
769
+ "blocks.34.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
770
+ "blocks.34.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
771
+ "blocks.34.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
772
+ "blocks.34.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
773
+ "blocks.34.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
774
+ "blocks.34.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
775
+ "blocks.34.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
776
+ "blocks.34.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
777
+ "blocks.34.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
778
+ "blocks.34.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
779
+ "blocks.34.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
780
+ "blocks.34.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
781
+ "blocks.34.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
782
+ "blocks.34.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
783
+ "blocks.34.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
784
+ "blocks.34.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
785
+ "blocks.34.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
786
+ "blocks.34.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
787
+ "blocks.34.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
788
+ "blocks.34.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
789
+ "blocks.35.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
790
+ "blocks.35.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
791
+ "blocks.35.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
792
+ "blocks.35.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
793
+ "blocks.35.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
794
+ "blocks.35.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
795
+ "blocks.35.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
796
+ "blocks.35.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
797
+ "blocks.35.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
798
+ "blocks.35.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
799
+ "blocks.35.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
800
+ "blocks.35.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
801
+ "blocks.35.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
802
+ "blocks.35.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
803
+ "blocks.35.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
804
+ "blocks.35.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
805
+ "blocks.35.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
806
+ "blocks.35.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
807
+ "blocks.35.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
808
+ "blocks.35.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
809
+ "blocks.35.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
810
+ "blocks.35.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
811
+ "blocks.35.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
812
+ "blocks.35.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
813
+ "blocks.35.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
814
+ "blocks.35.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
815
+ "blocks.35.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
816
+ "blocks.36.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
817
+ "blocks.36.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
818
+ "blocks.36.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
819
+ "blocks.36.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
820
+ "blocks.36.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
821
+ "blocks.36.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
822
+ "blocks.36.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
823
+ "blocks.36.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
824
+ "blocks.36.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
825
+ "blocks.36.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
826
+ "blocks.36.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
827
+ "blocks.36.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
828
+ "blocks.36.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
829
+ "blocks.36.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
830
+ "blocks.36.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
831
+ "blocks.36.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
832
+ "blocks.36.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
833
+ "blocks.36.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
834
+ "blocks.36.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
835
+ "blocks.36.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
836
+ "blocks.36.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
837
+ "blocks.36.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
838
+ "blocks.36.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
839
+ "blocks.36.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
840
+ "blocks.36.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
841
+ "blocks.36.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
842
+ "blocks.36.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
843
+ "blocks.37.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
844
+ "blocks.37.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
845
+ "blocks.37.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
846
+ "blocks.37.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
847
+ "blocks.37.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
848
+ "blocks.37.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
849
+ "blocks.37.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
850
+ "blocks.37.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
851
+ "blocks.37.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
852
+ "blocks.37.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
853
+ "blocks.37.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
854
+ "blocks.37.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
855
+ "blocks.37.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
856
+ "blocks.37.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
857
+ "blocks.37.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
858
+ "blocks.37.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
859
+ "blocks.37.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
860
+ "blocks.37.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
861
+ "blocks.37.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
862
+ "blocks.37.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
863
+ "blocks.37.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
864
+ "blocks.37.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
865
+ "blocks.37.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
866
+ "blocks.37.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
867
+ "blocks.37.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
868
+ "blocks.37.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
869
+ "blocks.37.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
870
+ "blocks.38.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
871
+ "blocks.38.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
872
+ "blocks.38.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
873
+ "blocks.38.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
874
+ "blocks.38.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
875
+ "blocks.38.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
876
+ "blocks.38.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
877
+ "blocks.38.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
878
+ "blocks.38.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
879
+ "blocks.38.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
880
+ "blocks.38.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
881
+ "blocks.38.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
882
+ "blocks.38.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
883
+ "blocks.38.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
884
+ "blocks.38.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
885
+ "blocks.38.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
886
+ "blocks.38.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
887
+ "blocks.38.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
888
+ "blocks.38.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
889
+ "blocks.38.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
890
+ "blocks.38.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
891
+ "blocks.38.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
892
+ "blocks.38.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
893
+ "blocks.38.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
894
+ "blocks.38.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
895
+ "blocks.38.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
896
+ "blocks.38.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
897
+ "blocks.39.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
898
+ "blocks.39.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
899
+ "blocks.39.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
900
+ "blocks.39.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
901
+ "blocks.39.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
902
+ "blocks.39.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
903
+ "blocks.39.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
904
+ "blocks.39.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
905
+ "blocks.39.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
906
+ "blocks.39.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
907
+ "blocks.39.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
908
+ "blocks.39.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
909
+ "blocks.39.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
910
+ "blocks.39.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
911
+ "blocks.39.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
912
+ "blocks.39.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
913
+ "blocks.39.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
914
+ "blocks.39.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
915
+ "blocks.39.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
916
+ "blocks.39.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
917
+ "blocks.39.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
918
+ "blocks.39.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
919
+ "blocks.39.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
920
+ "blocks.39.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
921
+ "blocks.39.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
922
+ "blocks.39.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
923
+ "blocks.39.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
924
+ "blocks.4.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
925
+ "blocks.4.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
926
+ "blocks.4.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
927
+ "blocks.4.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
928
+ "blocks.4.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
929
+ "blocks.4.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
930
+ "blocks.4.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
931
+ "blocks.4.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
932
+ "blocks.4.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
933
+ "blocks.4.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
934
+ "blocks.4.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
935
+ "blocks.4.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
936
+ "blocks.4.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
937
+ "blocks.4.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
938
+ "blocks.4.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
939
+ "blocks.4.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
940
+ "blocks.4.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
941
+ "blocks.4.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
942
+ "blocks.4.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
943
+ "blocks.4.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
944
+ "blocks.4.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
945
+ "blocks.4.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
946
+ "blocks.4.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
947
+ "blocks.4.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
948
+ "blocks.4.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
949
+ "blocks.4.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
950
+ "blocks.4.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
951
+ "blocks.5.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
952
+ "blocks.5.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
953
+ "blocks.5.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
954
+ "blocks.5.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
955
+ "blocks.5.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
956
+ "blocks.5.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
957
+ "blocks.5.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
958
+ "blocks.5.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
959
+ "blocks.5.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
960
+ "blocks.5.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
961
+ "blocks.5.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
962
+ "blocks.5.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
963
+ "blocks.5.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
964
+ "blocks.5.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
965
+ "blocks.5.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
966
+ "blocks.5.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
967
+ "blocks.5.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
968
+ "blocks.5.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
969
+ "blocks.5.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
970
+ "blocks.5.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
971
+ "blocks.5.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
972
+ "blocks.5.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
973
+ "blocks.5.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
974
+ "blocks.5.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
975
+ "blocks.5.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
976
+ "blocks.5.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
977
+ "blocks.5.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
978
+ "blocks.6.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
979
+ "blocks.6.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
980
+ "blocks.6.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
981
+ "blocks.6.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
982
+ "blocks.6.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
983
+ "blocks.6.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
984
+ "blocks.6.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
985
+ "blocks.6.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
986
+ "blocks.6.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
987
+ "blocks.6.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
988
+ "blocks.6.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
989
+ "blocks.6.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
990
+ "blocks.6.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
991
+ "blocks.6.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
992
+ "blocks.6.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
993
+ "blocks.6.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
994
+ "blocks.6.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
995
+ "blocks.6.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
996
+ "blocks.6.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
997
+ "blocks.6.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
998
+ "blocks.6.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
999
+ "blocks.6.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1000
+ "blocks.6.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1001
+ "blocks.6.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1002
+ "blocks.6.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1003
+ "blocks.6.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1004
+ "blocks.6.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1005
+ "blocks.7.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1006
+ "blocks.7.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1007
+ "blocks.7.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1008
+ "blocks.7.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1009
+ "blocks.7.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1010
+ "blocks.7.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1011
+ "blocks.7.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1012
+ "blocks.7.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1013
+ "blocks.7.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1014
+ "blocks.7.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1015
+ "blocks.7.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1016
+ "blocks.7.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1017
+ "blocks.7.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1018
+ "blocks.7.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1019
+ "blocks.7.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
1020
+ "blocks.7.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1021
+ "blocks.7.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1022
+ "blocks.7.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1023
+ "blocks.7.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1024
+ "blocks.7.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1025
+ "blocks.7.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1026
+ "blocks.7.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1027
+ "blocks.7.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1028
+ "blocks.7.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1029
+ "blocks.7.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1030
+ "blocks.7.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1031
+ "blocks.7.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1032
+ "blocks.8.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1033
+ "blocks.8.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1034
+ "blocks.8.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1035
+ "blocks.8.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1036
+ "blocks.8.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1037
+ "blocks.8.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1038
+ "blocks.8.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1039
+ "blocks.8.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1040
+ "blocks.8.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1041
+ "blocks.8.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1042
+ "blocks.8.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1043
+ "blocks.8.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1044
+ "blocks.8.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1045
+ "blocks.8.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1046
+ "blocks.8.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
1047
+ "blocks.8.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1048
+ "blocks.8.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1049
+ "blocks.8.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1050
+ "blocks.8.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1051
+ "blocks.8.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1052
+ "blocks.8.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1053
+ "blocks.8.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1054
+ "blocks.8.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1055
+ "blocks.8.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1056
+ "blocks.8.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1057
+ "blocks.8.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1058
+ "blocks.8.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1059
+ "blocks.9.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1060
+ "blocks.9.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1061
+ "blocks.9.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1062
+ "blocks.9.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1063
+ "blocks.9.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1064
+ "blocks.9.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1065
+ "blocks.9.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1066
+ "blocks.9.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1067
+ "blocks.9.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1068
+ "blocks.9.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1069
+ "blocks.9.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1070
+ "blocks.9.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1071
+ "blocks.9.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1072
+ "blocks.9.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1073
+ "blocks.9.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
1074
+ "blocks.9.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1075
+ "blocks.9.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1076
+ "blocks.9.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1077
+ "blocks.9.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1078
+ "blocks.9.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1079
+ "blocks.9.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1080
+ "blocks.9.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1081
+ "blocks.9.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1082
+ "blocks.9.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1083
+ "blocks.9.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1084
+ "blocks.9.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
1085
+ "blocks.9.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
1086
+ "head.head.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
1087
+ "head.head.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
1088
+ "head.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
1089
+ "patch_embedding.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1090
+ "patch_embedding.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1091
+ "text_embedding.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1092
+ "text_embedding.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1093
+ "text_embedding.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1094
+ "text_embedding.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1095
+ "time_embedding.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1096
+ "time_embedding.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1097
+ "time_embedding.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1098
+ "time_embedding.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
1099
+ "time_projection.1.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
1100
+ "time_projection.1.weight": "diffusion_pytorch_model-00001-of-00006.safetensors"
1101
+ }
1102
+ }
wan_models/Wan2.1-T2V-14B/google/umt5-xxl/special_tokens_map.json ADDED
@@ -0,0 +1,308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<extra_id_0>",
4
+ "<extra_id_1>",
5
+ "<extra_id_2>",
6
+ "<extra_id_3>",
7
+ "<extra_id_4>",
8
+ "<extra_id_5>",
9
+ "<extra_id_6>",
10
+ "<extra_id_7>",
11
+ "<extra_id_8>",
12
+ "<extra_id_9>",
13
+ "<extra_id_10>",
14
+ "<extra_id_11>",
15
+ "<extra_id_12>",
16
+ "<extra_id_13>",
17
+ "<extra_id_14>",
18
+ "<extra_id_15>",
19
+ "<extra_id_16>",
20
+ "<extra_id_17>",
21
+ "<extra_id_18>",
22
+ "<extra_id_19>",
23
+ "<extra_id_20>",
24
+ "<extra_id_21>",
25
+ "<extra_id_22>",
26
+ "<extra_id_23>",
27
+ "<extra_id_24>",
28
+ "<extra_id_25>",
29
+ "<extra_id_26>",
30
+ "<extra_id_27>",
31
+ "<extra_id_28>",
32
+ "<extra_id_29>",
33
+ "<extra_id_30>",
34
+ "<extra_id_31>",
35
+ "<extra_id_32>",
36
+ "<extra_id_33>",
37
+ "<extra_id_34>",
38
+ "<extra_id_35>",
39
+ "<extra_id_36>",
40
+ "<extra_id_37>",
41
+ "<extra_id_38>",
42
+ "<extra_id_39>",
43
+ "<extra_id_40>",
44
+ "<extra_id_41>",
45
+ "<extra_id_42>",
46
+ "<extra_id_43>",
47
+ "<extra_id_44>",
48
+ "<extra_id_45>",
49
+ "<extra_id_46>",
50
+ "<extra_id_47>",
51
+ "<extra_id_48>",
52
+ "<extra_id_49>",
53
+ "<extra_id_50>",
54
+ "<extra_id_51>",
55
+ "<extra_id_52>",
56
+ "<extra_id_53>",
57
+ "<extra_id_54>",
58
+ "<extra_id_55>",
59
+ "<extra_id_56>",
60
+ "<extra_id_57>",
61
+ "<extra_id_58>",
62
+ "<extra_id_59>",
63
+ "<extra_id_60>",
64
+ "<extra_id_61>",
65
+ "<extra_id_62>",
66
+ "<extra_id_63>",
67
+ "<extra_id_64>",
68
+ "<extra_id_65>",
69
+ "<extra_id_66>",
70
+ "<extra_id_67>",
71
+ "<extra_id_68>",
72
+ "<extra_id_69>",
73
+ "<extra_id_70>",
74
+ "<extra_id_71>",
75
+ "<extra_id_72>",
76
+ "<extra_id_73>",
77
+ "<extra_id_74>",
78
+ "<extra_id_75>",
79
+ "<extra_id_76>",
80
+ "<extra_id_77>",
81
+ "<extra_id_78>",
82
+ "<extra_id_79>",
83
+ "<extra_id_80>",
84
+ "<extra_id_81>",
85
+ "<extra_id_82>",
86
+ "<extra_id_83>",
87
+ "<extra_id_84>",
88
+ "<extra_id_85>",
89
+ "<extra_id_86>",
90
+ "<extra_id_87>",
91
+ "<extra_id_88>",
92
+ "<extra_id_89>",
93
+ "<extra_id_90>",
94
+ "<extra_id_91>",
95
+ "<extra_id_92>",
96
+ "<extra_id_93>",
97
+ "<extra_id_94>",
98
+ "<extra_id_95>",
99
+ "<extra_id_96>",
100
+ "<extra_id_97>",
101
+ "<extra_id_98>",
102
+ "<extra_id_99>",
103
+ "<extra_id_100>",
104
+ "<extra_id_101>",
105
+ "<extra_id_102>",
106
+ "<extra_id_103>",
107
+ "<extra_id_104>",
108
+ "<extra_id_105>",
109
+ "<extra_id_106>",
110
+ "<extra_id_107>",
111
+ "<extra_id_108>",
112
+ "<extra_id_109>",
113
+ "<extra_id_110>",
114
+ "<extra_id_111>",
115
+ "<extra_id_112>",
116
+ "<extra_id_113>",
117
+ "<extra_id_114>",
118
+ "<extra_id_115>",
119
+ "<extra_id_116>",
120
+ "<extra_id_117>",
121
+ "<extra_id_118>",
122
+ "<extra_id_119>",
123
+ "<extra_id_120>",
124
+ "<extra_id_121>",
125
+ "<extra_id_122>",
126
+ "<extra_id_123>",
127
+ "<extra_id_124>",
128
+ "<extra_id_125>",
129
+ "<extra_id_126>",
130
+ "<extra_id_127>",
131
+ "<extra_id_128>",
132
+ "<extra_id_129>",
133
+ "<extra_id_130>",
134
+ "<extra_id_131>",
135
+ "<extra_id_132>",
136
+ "<extra_id_133>",
137
+ "<extra_id_134>",
138
+ "<extra_id_135>",
139
+ "<extra_id_136>",
140
+ "<extra_id_137>",
141
+ "<extra_id_138>",
142
+ "<extra_id_139>",
143
+ "<extra_id_140>",
144
+ "<extra_id_141>",
145
+ "<extra_id_142>",
146
+ "<extra_id_143>",
147
+ "<extra_id_144>",
148
+ "<extra_id_145>",
149
+ "<extra_id_146>",
150
+ "<extra_id_147>",
151
+ "<extra_id_148>",
152
+ "<extra_id_149>",
153
+ "<extra_id_150>",
154
+ "<extra_id_151>",
155
+ "<extra_id_152>",
156
+ "<extra_id_153>",
157
+ "<extra_id_154>",
158
+ "<extra_id_155>",
159
+ "<extra_id_156>",
160
+ "<extra_id_157>",
161
+ "<extra_id_158>",
162
+ "<extra_id_159>",
163
+ "<extra_id_160>",
164
+ "<extra_id_161>",
165
+ "<extra_id_162>",
166
+ "<extra_id_163>",
167
+ "<extra_id_164>",
168
+ "<extra_id_165>",
169
+ "<extra_id_166>",
170
+ "<extra_id_167>",
171
+ "<extra_id_168>",
172
+ "<extra_id_169>",
173
+ "<extra_id_170>",
174
+ "<extra_id_171>",
175
+ "<extra_id_172>",
176
+ "<extra_id_173>",
177
+ "<extra_id_174>",
178
+ "<extra_id_175>",
179
+ "<extra_id_176>",
180
+ "<extra_id_177>",
181
+ "<extra_id_178>",
182
+ "<extra_id_179>",
183
+ "<extra_id_180>",
184
+ "<extra_id_181>",
185
+ "<extra_id_182>",
186
+ "<extra_id_183>",
187
+ "<extra_id_184>",
188
+ "<extra_id_185>",
189
+ "<extra_id_186>",
190
+ "<extra_id_187>",
191
+ "<extra_id_188>",
192
+ "<extra_id_189>",
193
+ "<extra_id_190>",
194
+ "<extra_id_191>",
195
+ "<extra_id_192>",
196
+ "<extra_id_193>",
197
+ "<extra_id_194>",
198
+ "<extra_id_195>",
199
+ "<extra_id_196>",
200
+ "<extra_id_197>",
201
+ "<extra_id_198>",
202
+ "<extra_id_199>",
203
+ "<extra_id_200>",
204
+ "<extra_id_201>",
205
+ "<extra_id_202>",
206
+ "<extra_id_203>",
207
+ "<extra_id_204>",
208
+ "<extra_id_205>",
209
+ "<extra_id_206>",
210
+ "<extra_id_207>",
211
+ "<extra_id_208>",
212
+ "<extra_id_209>",
213
+ "<extra_id_210>",
214
+ "<extra_id_211>",
215
+ "<extra_id_212>",
216
+ "<extra_id_213>",
217
+ "<extra_id_214>",
218
+ "<extra_id_215>",
219
+ "<extra_id_216>",
220
+ "<extra_id_217>",
221
+ "<extra_id_218>",
222
+ "<extra_id_219>",
223
+ "<extra_id_220>",
224
+ "<extra_id_221>",
225
+ "<extra_id_222>",
226
+ "<extra_id_223>",
227
+ "<extra_id_224>",
228
+ "<extra_id_225>",
229
+ "<extra_id_226>",
230
+ "<extra_id_227>",
231
+ "<extra_id_228>",
232
+ "<extra_id_229>",
233
+ "<extra_id_230>",
234
+ "<extra_id_231>",
235
+ "<extra_id_232>",
236
+ "<extra_id_233>",
237
+ "<extra_id_234>",
238
+ "<extra_id_235>",
239
+ "<extra_id_236>",
240
+ "<extra_id_237>",
241
+ "<extra_id_238>",
242
+ "<extra_id_239>",
243
+ "<extra_id_240>",
244
+ "<extra_id_241>",
245
+ "<extra_id_242>",
246
+ "<extra_id_243>",
247
+ "<extra_id_244>",
248
+ "<extra_id_245>",
249
+ "<extra_id_246>",
250
+ "<extra_id_247>",
251
+ "<extra_id_248>",
252
+ "<extra_id_249>",
253
+ "<extra_id_250>",
254
+ "<extra_id_251>",
255
+ "<extra_id_252>",
256
+ "<extra_id_253>",
257
+ "<extra_id_254>",
258
+ "<extra_id_255>",
259
+ "<extra_id_256>",
260
+ "<extra_id_257>",
261
+ "<extra_id_258>",
262
+ "<extra_id_259>",
263
+ "<extra_id_260>",
264
+ "<extra_id_261>",
265
+ "<extra_id_262>",
266
+ "<extra_id_263>",
267
+ "<extra_id_264>",
268
+ "<extra_id_265>",
269
+ "<extra_id_266>",
270
+ "<extra_id_267>",
271
+ "<extra_id_268>",
272
+ "<extra_id_269>",
273
+ "<extra_id_270>",
274
+ "<extra_id_271>",
275
+ "<extra_id_272>",
276
+ "<extra_id_273>",
277
+ "<extra_id_274>",
278
+ "<extra_id_275>",
279
+ "<extra_id_276>",
280
+ "<extra_id_277>",
281
+ "<extra_id_278>",
282
+ "<extra_id_279>",
283
+ "<extra_id_280>",
284
+ "<extra_id_281>",
285
+ "<extra_id_282>",
286
+ "<extra_id_283>",
287
+ "<extra_id_284>",
288
+ "<extra_id_285>",
289
+ "<extra_id_286>",
290
+ "<extra_id_287>",
291
+ "<extra_id_288>",
292
+ "<extra_id_289>",
293
+ "<extra_id_290>",
294
+ "<extra_id_291>",
295
+ "<extra_id_292>",
296
+ "<extra_id_293>",
297
+ "<extra_id_294>",
298
+ "<extra_id_295>",
299
+ "<extra_id_296>",
300
+ "<extra_id_297>",
301
+ "<extra_id_298>",
302
+ "<extra_id_299>"
303
+ ],
304
+ "bos_token": "<s>",
305
+ "eos_token": "</s>",
306
+ "pad_token": "<pad>",
307
+ "unk_token": "<unk>"
308
+ }
wan_models/Wan2.1-T2V-14B/google/umt5-xxl/tokenizer_config.json ADDED
@@ -0,0 +1,2748 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "<pad>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "</s>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "<s>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "<unk>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "256000": {
36
+ "content": "<extra_id_299>",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ },
43
+ "256001": {
44
+ "content": "<extra_id_298>",
45
+ "lstrip": false,
46
+ "normalized": false,
47
+ "rstrip": false,
48
+ "single_word": false,
49
+ "special": true
50
+ },
51
+ "256002": {
52
+ "content": "<extra_id_297>",
53
+ "lstrip": false,
54
+ "normalized": false,
55
+ "rstrip": false,
56
+ "single_word": false,
57
+ "special": true
58
+ },
59
+ "256003": {
60
+ "content": "<extra_id_296>",
61
+ "lstrip": false,
62
+ "normalized": false,
63
+ "rstrip": false,
64
+ "single_word": false,
65
+ "special": true
66
+ },
67
+ "256004": {
68
+ "content": "<extra_id_295>",
69
+ "lstrip": false,
70
+ "normalized": false,
71
+ "rstrip": false,
72
+ "single_word": false,
73
+ "special": true
74
+ },
75
+ "256005": {
76
+ "content": "<extra_id_294>",
77
+ "lstrip": false,
78
+ "normalized": false,
79
+ "rstrip": false,
80
+ "single_word": false,
81
+ "special": true
82
+ },
83
+ "256006": {
84
+ "content": "<extra_id_293>",
85
+ "lstrip": false,
86
+ "normalized": false,
87
+ "rstrip": false,
88
+ "single_word": false,
89
+ "special": true
90
+ },
91
+ "256007": {
92
+ "content": "<extra_id_292>",
93
+ "lstrip": false,
94
+ "normalized": false,
95
+ "rstrip": false,
96
+ "single_word": false,
97
+ "special": true
98
+ },
99
+ "256008": {
100
+ "content": "<extra_id_291>",
101
+ "lstrip": false,
102
+ "normalized": false,
103
+ "rstrip": false,
104
+ "single_word": false,
105
+ "special": true
106
+ },
107
+ "256009": {
108
+ "content": "<extra_id_290>",
109
+ "lstrip": false,
110
+ "normalized": false,
111
+ "rstrip": false,
112
+ "single_word": false,
113
+ "special": true
114
+ },
115
+ "256010": {
116
+ "content": "<extra_id_289>",
117
+ "lstrip": false,
118
+ "normalized": false,
119
+ "rstrip": false,
120
+ "single_word": false,
121
+ "special": true
122
+ },
123
+ "256011": {
124
+ "content": "<extra_id_288>",
125
+ "lstrip": false,
126
+ "normalized": false,
127
+ "rstrip": false,
128
+ "single_word": false,
129
+ "special": true
130
+ },
131
+ "256012": {
132
+ "content": "<extra_id_287>",
133
+ "lstrip": false,
134
+ "normalized": false,
135
+ "rstrip": false,
136
+ "single_word": false,
137
+ "special": true
138
+ },
139
+ "256013": {
140
+ "content": "<extra_id_286>",
141
+ "lstrip": false,
142
+ "normalized": false,
143
+ "rstrip": false,
144
+ "single_word": false,
145
+ "special": true
146
+ },
147
+ "256014": {
148
+ "content": "<extra_id_285>",
149
+ "lstrip": false,
150
+ "normalized": false,
151
+ "rstrip": false,
152
+ "single_word": false,
153
+ "special": true
154
+ },
155
+ "256015": {
156
+ "content": "<extra_id_284>",
157
+ "lstrip": false,
158
+ "normalized": false,
159
+ "rstrip": false,
160
+ "single_word": false,
161
+ "special": true
162
+ },
163
+ "256016": {
164
+ "content": "<extra_id_283>",
165
+ "lstrip": false,
166
+ "normalized": false,
167
+ "rstrip": false,
168
+ "single_word": false,
169
+ "special": true
170
+ },
171
+ "256017": {
172
+ "content": "<extra_id_282>",
173
+ "lstrip": false,
174
+ "normalized": false,
175
+ "rstrip": false,
176
+ "single_word": false,
177
+ "special": true
178
+ },
179
+ "256018": {
180
+ "content": "<extra_id_281>",
181
+ "lstrip": false,
182
+ "normalized": false,
183
+ "rstrip": false,
184
+ "single_word": false,
185
+ "special": true
186
+ },
187
+ "256019": {
188
+ "content": "<extra_id_280>",
189
+ "lstrip": false,
190
+ "normalized": false,
191
+ "rstrip": false,
192
+ "single_word": false,
193
+ "special": true
194
+ },
195
+ "256020": {
196
+ "content": "<extra_id_279>",
197
+ "lstrip": false,
198
+ "normalized": false,
199
+ "rstrip": false,
200
+ "single_word": false,
201
+ "special": true
202
+ },
203
+ "256021": {
204
+ "content": "<extra_id_278>",
205
+ "lstrip": false,
206
+ "normalized": false,
207
+ "rstrip": false,
208
+ "single_word": false,
209
+ "special": true
210
+ },
211
+ "256022": {
212
+ "content": "<extra_id_277>",
213
+ "lstrip": false,
214
+ "normalized": false,
215
+ "rstrip": false,
216
+ "single_word": false,
217
+ "special": true
218
+ },
219
+ "256023": {
220
+ "content": "<extra_id_276>",
221
+ "lstrip": false,
222
+ "normalized": false,
223
+ "rstrip": false,
224
+ "single_word": false,
225
+ "special": true
226
+ },
227
+ "256024": {
228
+ "content": "<extra_id_275>",
229
+ "lstrip": false,
230
+ "normalized": false,
231
+ "rstrip": false,
232
+ "single_word": false,
233
+ "special": true
234
+ },
235
+ "256025": {
236
+ "content": "<extra_id_274>",
237
+ "lstrip": false,
238
+ "normalized": false,
239
+ "rstrip": false,
240
+ "single_word": false,
241
+ "special": true
242
+ },
243
+ "256026": {
244
+ "content": "<extra_id_273>",
245
+ "lstrip": false,
246
+ "normalized": false,
247
+ "rstrip": false,
248
+ "single_word": false,
249
+ "special": true
250
+ },
251
+ "256027": {
252
+ "content": "<extra_id_272>",
253
+ "lstrip": false,
254
+ "normalized": false,
255
+ "rstrip": false,
256
+ "single_word": false,
257
+ "special": true
258
+ },
259
+ "256028": {
260
+ "content": "<extra_id_271>",
261
+ "lstrip": false,
262
+ "normalized": false,
263
+ "rstrip": false,
264
+ "single_word": false,
265
+ "special": true
266
+ },
267
+ "256029": {
268
+ "content": "<extra_id_270>",
269
+ "lstrip": false,
270
+ "normalized": false,
271
+ "rstrip": false,
272
+ "single_word": false,
273
+ "special": true
274
+ },
275
+ "256030": {
276
+ "content": "<extra_id_269>",
277
+ "lstrip": false,
278
+ "normalized": false,
279
+ "rstrip": false,
280
+ "single_word": false,
281
+ "special": true
282
+ },
283
+ "256031": {
284
+ "content": "<extra_id_268>",
285
+ "lstrip": false,
286
+ "normalized": false,
287
+ "rstrip": false,
288
+ "single_word": false,
289
+ "special": true
290
+ },
291
+ "256032": {
292
+ "content": "<extra_id_267>",
293
+ "lstrip": false,
294
+ "normalized": false,
295
+ "rstrip": false,
296
+ "single_word": false,
297
+ "special": true
298
+ },
299
+ "256033": {
300
+ "content": "<extra_id_266>",
301
+ "lstrip": false,
302
+ "normalized": false,
303
+ "rstrip": false,
304
+ "single_word": false,
305
+ "special": true
306
+ },
307
+ "256034": {
308
+ "content": "<extra_id_265>",
309
+ "lstrip": false,
310
+ "normalized": false,
311
+ "rstrip": false,
312
+ "single_word": false,
313
+ "special": true
314
+ },
315
+ "256035": {
316
+ "content": "<extra_id_264>",
317
+ "lstrip": false,
318
+ "normalized": false,
319
+ "rstrip": false,
320
+ "single_word": false,
321
+ "special": true
322
+ },
323
+ "256036": {
324
+ "content": "<extra_id_263>",
325
+ "lstrip": false,
326
+ "normalized": false,
327
+ "rstrip": false,
328
+ "single_word": false,
329
+ "special": true
330
+ },
331
+ "256037": {
332
+ "content": "<extra_id_262>",
333
+ "lstrip": false,
334
+ "normalized": false,
335
+ "rstrip": false,
336
+ "single_word": false,
337
+ "special": true
338
+ },
339
+ "256038": {
340
+ "content": "<extra_id_261>",
341
+ "lstrip": false,
342
+ "normalized": false,
343
+ "rstrip": false,
344
+ "single_word": false,
345
+ "special": true
346
+ },
347
+ "256039": {
348
+ "content": "<extra_id_260>",
349
+ "lstrip": false,
350
+ "normalized": false,
351
+ "rstrip": false,
352
+ "single_word": false,
353
+ "special": true
354
+ },
355
+ "256040": {
356
+ "content": "<extra_id_259>",
357
+ "lstrip": false,
358
+ "normalized": false,
359
+ "rstrip": false,
360
+ "single_word": false,
361
+ "special": true
362
+ },
363
+ "256041": {
364
+ "content": "<extra_id_258>",
365
+ "lstrip": false,
366
+ "normalized": false,
367
+ "rstrip": false,
368
+ "single_word": false,
369
+ "special": true
370
+ },
371
+ "256042": {
372
+ "content": "<extra_id_257>",
373
+ "lstrip": false,
374
+ "normalized": false,
375
+ "rstrip": false,
376
+ "single_word": false,
377
+ "special": true
378
+ },
379
+ "256043": {
380
+ "content": "<extra_id_256>",
381
+ "lstrip": false,
382
+ "normalized": false,
383
+ "rstrip": false,
384
+ "single_word": false,
385
+ "special": true
386
+ },
387
+ "256044": {
388
+ "content": "<extra_id_255>",
389
+ "lstrip": false,
390
+ "normalized": false,
391
+ "rstrip": false,
392
+ "single_word": false,
393
+ "special": true
394
+ },
395
+ "256045": {
396
+ "content": "<extra_id_254>",
397
+ "lstrip": false,
398
+ "normalized": false,
399
+ "rstrip": false,
400
+ "single_word": false,
401
+ "special": true
402
+ },
403
+ "256046": {
404
+ "content": "<extra_id_253>",
405
+ "lstrip": false,
406
+ "normalized": false,
407
+ "rstrip": false,
408
+ "single_word": false,
409
+ "special": true
410
+ },
411
+ "256047": {
412
+ "content": "<extra_id_252>",
413
+ "lstrip": false,
414
+ "normalized": false,
415
+ "rstrip": false,
416
+ "single_word": false,
417
+ "special": true
418
+ },
419
+ "256048": {
420
+ "content": "<extra_id_251>",
421
+ "lstrip": false,
422
+ "normalized": false,
423
+ "rstrip": false,
424
+ "single_word": false,
425
+ "special": true
426
+ },
427
+ "256049": {
428
+ "content": "<extra_id_250>",
429
+ "lstrip": false,
430
+ "normalized": false,
431
+ "rstrip": false,
432
+ "single_word": false,
433
+ "special": true
434
+ },
435
+ "256050": {
436
+ "content": "<extra_id_249>",
437
+ "lstrip": false,
438
+ "normalized": false,
439
+ "rstrip": false,
440
+ "single_word": false,
441
+ "special": true
442
+ },
443
+ "256051": {
444
+ "content": "<extra_id_248>",
445
+ "lstrip": false,
446
+ "normalized": false,
447
+ "rstrip": false,
448
+ "single_word": false,
449
+ "special": true
450
+ },
451
+ "256052": {
452
+ "content": "<extra_id_247>",
453
+ "lstrip": false,
454
+ "normalized": false,
455
+ "rstrip": false,
456
+ "single_word": false,
457
+ "special": true
458
+ },
459
+ "256053": {
460
+ "content": "<extra_id_246>",
461
+ "lstrip": false,
462
+ "normalized": false,
463
+ "rstrip": false,
464
+ "single_word": false,
465
+ "special": true
466
+ },
467
+ "256054": {
468
+ "content": "<extra_id_245>",
469
+ "lstrip": false,
470
+ "normalized": false,
471
+ "rstrip": false,
472
+ "single_word": false,
473
+ "special": true
474
+ },
475
+ "256055": {
476
+ "content": "<extra_id_244>",
477
+ "lstrip": false,
478
+ "normalized": false,
479
+ "rstrip": false,
480
+ "single_word": false,
481
+ "special": true
482
+ },
483
+ "256056": {
484
+ "content": "<extra_id_243>",
485
+ "lstrip": false,
486
+ "normalized": false,
487
+ "rstrip": false,
488
+ "single_word": false,
489
+ "special": true
490
+ },
491
+ "256057": {
492
+ "content": "<extra_id_242>",
493
+ "lstrip": false,
494
+ "normalized": false,
495
+ "rstrip": false,
496
+ "single_word": false,
497
+ "special": true
498
+ },
499
+ "256058": {
500
+ "content": "<extra_id_241>",
501
+ "lstrip": false,
502
+ "normalized": false,
503
+ "rstrip": false,
504
+ "single_word": false,
505
+ "special": true
506
+ },
507
+ "256059": {
508
+ "content": "<extra_id_240>",
509
+ "lstrip": false,
510
+ "normalized": false,
511
+ "rstrip": false,
512
+ "single_word": false,
513
+ "special": true
514
+ },
515
+ "256060": {
516
+ "content": "<extra_id_239>",
517
+ "lstrip": false,
518
+ "normalized": false,
519
+ "rstrip": false,
520
+ "single_word": false,
521
+ "special": true
522
+ },
523
+ "256061": {
524
+ "content": "<extra_id_238>",
525
+ "lstrip": false,
526
+ "normalized": false,
527
+ "rstrip": false,
528
+ "single_word": false,
529
+ "special": true
530
+ },
531
+ "256062": {
532
+ "content": "<extra_id_237>",
533
+ "lstrip": false,
534
+ "normalized": false,
535
+ "rstrip": false,
536
+ "single_word": false,
537
+ "special": true
538
+ },
539
+ "256063": {
540
+ "content": "<extra_id_236>",
541
+ "lstrip": false,
542
+ "normalized": false,
543
+ "rstrip": false,
544
+ "single_word": false,
545
+ "special": true
546
+ },
547
+ "256064": {
548
+ "content": "<extra_id_235>",
549
+ "lstrip": false,
550
+ "normalized": false,
551
+ "rstrip": false,
552
+ "single_word": false,
553
+ "special": true
554
+ },
555
+ "256065": {
556
+ "content": "<extra_id_234>",
557
+ "lstrip": false,
558
+ "normalized": false,
559
+ "rstrip": false,
560
+ "single_word": false,
561
+ "special": true
562
+ },
563
+ "256066": {
564
+ "content": "<extra_id_233>",
565
+ "lstrip": false,
566
+ "normalized": false,
567
+ "rstrip": false,
568
+ "single_word": false,
569
+ "special": true
570
+ },
571
+ "256067": {
572
+ "content": "<extra_id_232>",
573
+ "lstrip": false,
574
+ "normalized": false,
575
+ "rstrip": false,
576
+ "single_word": false,
577
+ "special": true
578
+ },
579
+ "256068": {
580
+ "content": "<extra_id_231>",
581
+ "lstrip": false,
582
+ "normalized": false,
583
+ "rstrip": false,
584
+ "single_word": false,
585
+ "special": true
586
+ },
587
+ "256069": {
588
+ "content": "<extra_id_230>",
589
+ "lstrip": false,
590
+ "normalized": false,
591
+ "rstrip": false,
592
+ "single_word": false,
593
+ "special": true
594
+ },
595
+ "256070": {
596
+ "content": "<extra_id_229>",
597
+ "lstrip": false,
598
+ "normalized": false,
599
+ "rstrip": false,
600
+ "single_word": false,
601
+ "special": true
602
+ },
603
+ "256071": {
604
+ "content": "<extra_id_228>",
605
+ "lstrip": false,
606
+ "normalized": false,
607
+ "rstrip": false,
608
+ "single_word": false,
609
+ "special": true
610
+ },
611
+ "256072": {
612
+ "content": "<extra_id_227>",
613
+ "lstrip": false,
614
+ "normalized": false,
615
+ "rstrip": false,
616
+ "single_word": false,
617
+ "special": true
618
+ },
619
+ "256073": {
620
+ "content": "<extra_id_226>",
621
+ "lstrip": false,
622
+ "normalized": false,
623
+ "rstrip": false,
624
+ "single_word": false,
625
+ "special": true
626
+ },
627
+ "256074": {
628
+ "content": "<extra_id_225>",
629
+ "lstrip": false,
630
+ "normalized": false,
631
+ "rstrip": false,
632
+ "single_word": false,
633
+ "special": true
634
+ },
635
+ "256075": {
636
+ "content": "<extra_id_224>",
637
+ "lstrip": false,
638
+ "normalized": false,
639
+ "rstrip": false,
640
+ "single_word": false,
641
+ "special": true
642
+ },
643
+ "256076": {
644
+ "content": "<extra_id_223>",
645
+ "lstrip": false,
646
+ "normalized": false,
647
+ "rstrip": false,
648
+ "single_word": false,
649
+ "special": true
650
+ },
651
+ "256077": {
652
+ "content": "<extra_id_222>",
653
+ "lstrip": false,
654
+ "normalized": false,
655
+ "rstrip": false,
656
+ "single_word": false,
657
+ "special": true
658
+ },
659
+ "256078": {
660
+ "content": "<extra_id_221>",
661
+ "lstrip": false,
662
+ "normalized": false,
663
+ "rstrip": false,
664
+ "single_word": false,
665
+ "special": true
666
+ },
667
+ "256079": {
668
+ "content": "<extra_id_220>",
669
+ "lstrip": false,
670
+ "normalized": false,
671
+ "rstrip": false,
672
+ "single_word": false,
673
+ "special": true
674
+ },
675
+ "256080": {
676
+ "content": "<extra_id_219>",
677
+ "lstrip": false,
678
+ "normalized": false,
679
+ "rstrip": false,
680
+ "single_word": false,
681
+ "special": true
682
+ },
683
+ "256081": {
684
+ "content": "<extra_id_218>",
685
+ "lstrip": false,
686
+ "normalized": false,
687
+ "rstrip": false,
688
+ "single_word": false,
689
+ "special": true
690
+ },
691
+ "256082": {
692
+ "content": "<extra_id_217>",
693
+ "lstrip": false,
694
+ "normalized": false,
695
+ "rstrip": false,
696
+ "single_word": false,
697
+ "special": true
698
+ },
699
+ "256083": {
700
+ "content": "<extra_id_216>",
701
+ "lstrip": false,
702
+ "normalized": false,
703
+ "rstrip": false,
704
+ "single_word": false,
705
+ "special": true
706
+ },
707
+ "256084": {
708
+ "content": "<extra_id_215>",
709
+ "lstrip": false,
710
+ "normalized": false,
711
+ "rstrip": false,
712
+ "single_word": false,
713
+ "special": true
714
+ },
715
+ "256085": {
716
+ "content": "<extra_id_214>",
717
+ "lstrip": false,
718
+ "normalized": false,
719
+ "rstrip": false,
720
+ "single_word": false,
721
+ "special": true
722
+ },
723
+ "256086": {
724
+ "content": "<extra_id_213>",
725
+ "lstrip": false,
726
+ "normalized": false,
727
+ "rstrip": false,
728
+ "single_word": false,
729
+ "special": true
730
+ },
731
+ "256087": {
732
+ "content": "<extra_id_212>",
733
+ "lstrip": false,
734
+ "normalized": false,
735
+ "rstrip": false,
736
+ "single_word": false,
737
+ "special": true
738
+ },
739
+ "256088": {
740
+ "content": "<extra_id_211>",
741
+ "lstrip": false,
742
+ "normalized": false,
743
+ "rstrip": false,
744
+ "single_word": false,
745
+ "special": true
746
+ },
747
+ "256089": {
748
+ "content": "<extra_id_210>",
749
+ "lstrip": false,
750
+ "normalized": false,
751
+ "rstrip": false,
752
+ "single_word": false,
753
+ "special": true
754
+ },
755
+ "256090": {
756
+ "content": "<extra_id_209>",
757
+ "lstrip": false,
758
+ "normalized": false,
759
+ "rstrip": false,
760
+ "single_word": false,
761
+ "special": true
762
+ },
763
+ "256091": {
764
+ "content": "<extra_id_208>",
765
+ "lstrip": false,
766
+ "normalized": false,
767
+ "rstrip": false,
768
+ "single_word": false,
769
+ "special": true
770
+ },
771
+ "256092": {
772
+ "content": "<extra_id_207>",
773
+ "lstrip": false,
774
+ "normalized": false,
775
+ "rstrip": false,
776
+ "single_word": false,
777
+ "special": true
778
+ },
779
+ "256093": {
780
+ "content": "<extra_id_206>",
781
+ "lstrip": false,
782
+ "normalized": false,
783
+ "rstrip": false,
784
+ "single_word": false,
785
+ "special": true
786
+ },
787
+ "256094": {
788
+ "content": "<extra_id_205>",
789
+ "lstrip": false,
790
+ "normalized": false,
791
+ "rstrip": false,
792
+ "single_word": false,
793
+ "special": true
794
+ },
795
+ "256095": {
796
+ "content": "<extra_id_204>",
797
+ "lstrip": false,
798
+ "normalized": false,
799
+ "rstrip": false,
800
+ "single_word": false,
801
+ "special": true
802
+ },
803
+ "256096": {
804
+ "content": "<extra_id_203>",
805
+ "lstrip": false,
806
+ "normalized": false,
807
+ "rstrip": false,
808
+ "single_word": false,
809
+ "special": true
810
+ },
811
+ "256097": {
812
+ "content": "<extra_id_202>",
813
+ "lstrip": false,
814
+ "normalized": false,
815
+ "rstrip": false,
816
+ "single_word": false,
817
+ "special": true
818
+ },
819
+ "256098": {
820
+ "content": "<extra_id_201>",
821
+ "lstrip": false,
822
+ "normalized": false,
823
+ "rstrip": false,
824
+ "single_word": false,
825
+ "special": true
826
+ },
827
+ "256099": {
828
+ "content": "<extra_id_200>",
829
+ "lstrip": false,
830
+ "normalized": false,
831
+ "rstrip": false,
832
+ "single_word": false,
833
+ "special": true
834
+ },
835
+ "256100": {
836
+ "content": "<extra_id_199>",
837
+ "lstrip": false,
838
+ "normalized": false,
839
+ "rstrip": false,
840
+ "single_word": false,
841
+ "special": true
842
+ },
843
+ "256101": {
844
+ "content": "<extra_id_198>",
845
+ "lstrip": false,
846
+ "normalized": false,
847
+ "rstrip": false,
848
+ "single_word": false,
849
+ "special": true
850
+ },
851
+ "256102": {
852
+ "content": "<extra_id_197>",
853
+ "lstrip": false,
854
+ "normalized": false,
855
+ "rstrip": false,
856
+ "single_word": false,
857
+ "special": true
858
+ },
859
+ "256103": {
860
+ "content": "<extra_id_196>",
861
+ "lstrip": false,
862
+ "normalized": false,
863
+ "rstrip": false,
864
+ "single_word": false,
865
+ "special": true
866
+ },
867
+ "256104": {
868
+ "content": "<extra_id_195>",
869
+ "lstrip": false,
870
+ "normalized": false,
871
+ "rstrip": false,
872
+ "single_word": false,
873
+ "special": true
874
+ },
875
+ "256105": {
876
+ "content": "<extra_id_194>",
877
+ "lstrip": false,
878
+ "normalized": false,
879
+ "rstrip": false,
880
+ "single_word": false,
881
+ "special": true
882
+ },
883
+ "256106": {
884
+ "content": "<extra_id_193>",
885
+ "lstrip": false,
886
+ "normalized": false,
887
+ "rstrip": false,
888
+ "single_word": false,
889
+ "special": true
890
+ },
891
+ "256107": {
892
+ "content": "<extra_id_192>",
893
+ "lstrip": false,
894
+ "normalized": false,
895
+ "rstrip": false,
896
+ "single_word": false,
897
+ "special": true
898
+ },
899
+ "256108": {
900
+ "content": "<extra_id_191>",
901
+ "lstrip": false,
902
+ "normalized": false,
903
+ "rstrip": false,
904
+ "single_word": false,
905
+ "special": true
906
+ },
907
+ "256109": {
908
+ "content": "<extra_id_190>",
909
+ "lstrip": false,
910
+ "normalized": false,
911
+ "rstrip": false,
912
+ "single_word": false,
913
+ "special": true
914
+ },
915
+ "256110": {
916
+ "content": "<extra_id_189>",
917
+ "lstrip": false,
918
+ "normalized": false,
919
+ "rstrip": false,
920
+ "single_word": false,
921
+ "special": true
922
+ },
923
+ "256111": {
924
+ "content": "<extra_id_188>",
925
+ "lstrip": false,
926
+ "normalized": false,
927
+ "rstrip": false,
928
+ "single_word": false,
929
+ "special": true
930
+ },
931
+ "256112": {
932
+ "content": "<extra_id_187>",
933
+ "lstrip": false,
934
+ "normalized": false,
935
+ "rstrip": false,
936
+ "single_word": false,
937
+ "special": true
938
+ },
939
+ "256113": {
940
+ "content": "<extra_id_186>",
941
+ "lstrip": false,
942
+ "normalized": false,
943
+ "rstrip": false,
944
+ "single_word": false,
945
+ "special": true
946
+ },
947
+ "256114": {
948
+ "content": "<extra_id_185>",
949
+ "lstrip": false,
950
+ "normalized": false,
951
+ "rstrip": false,
952
+ "single_word": false,
953
+ "special": true
954
+ },
955
+ "256115": {
956
+ "content": "<extra_id_184>",
957
+ "lstrip": false,
958
+ "normalized": false,
959
+ "rstrip": false,
960
+ "single_word": false,
961
+ "special": true
962
+ },
963
+ "256116": {
964
+ "content": "<extra_id_183>",
965
+ "lstrip": false,
966
+ "normalized": false,
967
+ "rstrip": false,
968
+ "single_word": false,
969
+ "special": true
970
+ },
971
+ "256117": {
972
+ "content": "<extra_id_182>",
973
+ "lstrip": false,
974
+ "normalized": false,
975
+ "rstrip": false,
976
+ "single_word": false,
977
+ "special": true
978
+ },
979
+ "256118": {
980
+ "content": "<extra_id_181>",
981
+ "lstrip": false,
982
+ "normalized": false,
983
+ "rstrip": false,
984
+ "single_word": false,
985
+ "special": true
986
+ },
987
+ "256119": {
988
+ "content": "<extra_id_180>",
989
+ "lstrip": false,
990
+ "normalized": false,
991
+ "rstrip": false,
992
+ "single_word": false,
993
+ "special": true
994
+ },
995
+ "256120": {
996
+ "content": "<extra_id_179>",
997
+ "lstrip": false,
998
+ "normalized": false,
999
+ "rstrip": false,
1000
+ "single_word": false,
1001
+ "special": true
1002
+ },
1003
+ "256121": {
1004
+ "content": "<extra_id_178>",
1005
+ "lstrip": false,
1006
+ "normalized": false,
1007
+ "rstrip": false,
1008
+ "single_word": false,
1009
+ "special": true
1010
+ },
1011
+ "256122": {
1012
+ "content": "<extra_id_177>",
1013
+ "lstrip": false,
1014
+ "normalized": false,
1015
+ "rstrip": false,
1016
+ "single_word": false,
1017
+ "special": true
1018
+ },
1019
+ "256123": {
1020
+ "content": "<extra_id_176>",
1021
+ "lstrip": false,
1022
+ "normalized": false,
1023
+ "rstrip": false,
1024
+ "single_word": false,
1025
+ "special": true
1026
+ },
1027
+ "256124": {
1028
+ "content": "<extra_id_175>",
1029
+ "lstrip": false,
1030
+ "normalized": false,
1031
+ "rstrip": false,
1032
+ "single_word": false,
1033
+ "special": true
1034
+ },
1035
+ "256125": {
1036
+ "content": "<extra_id_174>",
1037
+ "lstrip": false,
1038
+ "normalized": false,
1039
+ "rstrip": false,
1040
+ "single_word": false,
1041
+ "special": true
1042
+ },
1043
+ "256126": {
1044
+ "content": "<extra_id_173>",
1045
+ "lstrip": false,
1046
+ "normalized": false,
1047
+ "rstrip": false,
1048
+ "single_word": false,
1049
+ "special": true
1050
+ },
1051
+ "256127": {
1052
+ "content": "<extra_id_172>",
1053
+ "lstrip": false,
1054
+ "normalized": false,
1055
+ "rstrip": false,
1056
+ "single_word": false,
1057
+ "special": true
1058
+ },
1059
+ "256128": {
1060
+ "content": "<extra_id_171>",
1061
+ "lstrip": false,
1062
+ "normalized": false,
1063
+ "rstrip": false,
1064
+ "single_word": false,
1065
+ "special": true
1066
+ },
1067
+ "256129": {
1068
+ "content": "<extra_id_170>",
1069
+ "lstrip": false,
1070
+ "normalized": false,
1071
+ "rstrip": false,
1072
+ "single_word": false,
1073
+ "special": true
1074
+ },
1075
+ "256130": {
1076
+ "content": "<extra_id_169>",
1077
+ "lstrip": false,
1078
+ "normalized": false,
1079
+ "rstrip": false,
1080
+ "single_word": false,
1081
+ "special": true
1082
+ },
1083
+ "256131": {
1084
+ "content": "<extra_id_168>",
1085
+ "lstrip": false,
1086
+ "normalized": false,
1087
+ "rstrip": false,
1088
+ "single_word": false,
1089
+ "special": true
1090
+ },
1091
+ "256132": {
1092
+ "content": "<extra_id_167>",
1093
+ "lstrip": false,
1094
+ "normalized": false,
1095
+ "rstrip": false,
1096
+ "single_word": false,
1097
+ "special": true
1098
+ },
1099
+ "256133": {
1100
+ "content": "<extra_id_166>",
1101
+ "lstrip": false,
1102
+ "normalized": false,
1103
+ "rstrip": false,
1104
+ "single_word": false,
1105
+ "special": true
1106
+ },
1107
+ "256134": {
1108
+ "content": "<extra_id_165>",
1109
+ "lstrip": false,
1110
+ "normalized": false,
1111
+ "rstrip": false,
1112
+ "single_word": false,
1113
+ "special": true
1114
+ },
1115
+ "256135": {
1116
+ "content": "<extra_id_164>",
1117
+ "lstrip": false,
1118
+ "normalized": false,
1119
+ "rstrip": false,
1120
+ "single_word": false,
1121
+ "special": true
1122
+ },
1123
+ "256136": {
1124
+ "content": "<extra_id_163>",
1125
+ "lstrip": false,
1126
+ "normalized": false,
1127
+ "rstrip": false,
1128
+ "single_word": false,
1129
+ "special": true
1130
+ },
1131
+ "256137": {
1132
+ "content": "<extra_id_162>",
1133
+ "lstrip": false,
1134
+ "normalized": false,
1135
+ "rstrip": false,
1136
+ "single_word": false,
1137
+ "special": true
1138
+ },
1139
+ "256138": {
1140
+ "content": "<extra_id_161>",
1141
+ "lstrip": false,
1142
+ "normalized": false,
1143
+ "rstrip": false,
1144
+ "single_word": false,
1145
+ "special": true
1146
+ },
1147
+ "256139": {
1148
+ "content": "<extra_id_160>",
1149
+ "lstrip": false,
1150
+ "normalized": false,
1151
+ "rstrip": false,
1152
+ "single_word": false,
1153
+ "special": true
1154
+ },
1155
+ "256140": {
1156
+ "content": "<extra_id_159>",
1157
+ "lstrip": false,
1158
+ "normalized": false,
1159
+ "rstrip": false,
1160
+ "single_word": false,
1161
+ "special": true
1162
+ },
1163
+ "256141": {
1164
+ "content": "<extra_id_158>",
1165
+ "lstrip": false,
1166
+ "normalized": false,
1167
+ "rstrip": false,
1168
+ "single_word": false,
1169
+ "special": true
1170
+ },
1171
+ "256142": {
1172
+ "content": "<extra_id_157>",
1173
+ "lstrip": false,
1174
+ "normalized": false,
1175
+ "rstrip": false,
1176
+ "single_word": false,
1177
+ "special": true
1178
+ },
1179
+ "256143": {
1180
+ "content": "<extra_id_156>",
1181
+ "lstrip": false,
1182
+ "normalized": false,
1183
+ "rstrip": false,
1184
+ "single_word": false,
1185
+ "special": true
1186
+ },
1187
+ "256144": {
1188
+ "content": "<extra_id_155>",
1189
+ "lstrip": false,
1190
+ "normalized": false,
1191
+ "rstrip": false,
1192
+ "single_word": false,
1193
+ "special": true
1194
+ },
1195
+ "256145": {
1196
+ "content": "<extra_id_154>",
1197
+ "lstrip": false,
1198
+ "normalized": false,
1199
+ "rstrip": false,
1200
+ "single_word": false,
1201
+ "special": true
1202
+ },
1203
+ "256146": {
1204
+ "content": "<extra_id_153>",
1205
+ "lstrip": false,
1206
+ "normalized": false,
1207
+ "rstrip": false,
1208
+ "single_word": false,
1209
+ "special": true
1210
+ },
1211
+ "256147": {
1212
+ "content": "<extra_id_152>",
1213
+ "lstrip": false,
1214
+ "normalized": false,
1215
+ "rstrip": false,
1216
+ "single_word": false,
1217
+ "special": true
1218
+ },
1219
+ "256148": {
1220
+ "content": "<extra_id_151>",
1221
+ "lstrip": false,
1222
+ "normalized": false,
1223
+ "rstrip": false,
1224
+ "single_word": false,
1225
+ "special": true
1226
+ },
1227
+ "256149": {
1228
+ "content": "<extra_id_150>",
1229
+ "lstrip": false,
1230
+ "normalized": false,
1231
+ "rstrip": false,
1232
+ "single_word": false,
1233
+ "special": true
1234
+ },
1235
+ "256150": {
1236
+ "content": "<extra_id_149>",
1237
+ "lstrip": false,
1238
+ "normalized": false,
1239
+ "rstrip": false,
1240
+ "single_word": false,
1241
+ "special": true
1242
+ },
1243
+ "256151": {
1244
+ "content": "<extra_id_148>",
1245
+ "lstrip": false,
1246
+ "normalized": false,
1247
+ "rstrip": false,
1248
+ "single_word": false,
1249
+ "special": true
1250
+ },
1251
+ "256152": {
1252
+ "content": "<extra_id_147>",
1253
+ "lstrip": false,
1254
+ "normalized": false,
1255
+ "rstrip": false,
1256
+ "single_word": false,
1257
+ "special": true
1258
+ },
1259
+ "256153": {
1260
+ "content": "<extra_id_146>",
1261
+ "lstrip": false,
1262
+ "normalized": false,
1263
+ "rstrip": false,
1264
+ "single_word": false,
1265
+ "special": true
1266
+ },
1267
+ "256154": {
1268
+ "content": "<extra_id_145>",
1269
+ "lstrip": false,
1270
+ "normalized": false,
1271
+ "rstrip": false,
1272
+ "single_word": false,
1273
+ "special": true
1274
+ },
1275
+ "256155": {
1276
+ "content": "<extra_id_144>",
1277
+ "lstrip": false,
1278
+ "normalized": false,
1279
+ "rstrip": false,
1280
+ "single_word": false,
1281
+ "special": true
1282
+ },
1283
+ "256156": {
1284
+ "content": "<extra_id_143>",
1285
+ "lstrip": false,
1286
+ "normalized": false,
1287
+ "rstrip": false,
1288
+ "single_word": false,
1289
+ "special": true
1290
+ },
1291
+ "256157": {
1292
+ "content": "<extra_id_142>",
1293
+ "lstrip": false,
1294
+ "normalized": false,
1295
+ "rstrip": false,
1296
+ "single_word": false,
1297
+ "special": true
1298
+ },
1299
+ "256158": {
1300
+ "content": "<extra_id_141>",
1301
+ "lstrip": false,
1302
+ "normalized": false,
1303
+ "rstrip": false,
1304
+ "single_word": false,
1305
+ "special": true
1306
+ },
1307
+ "256159": {
1308
+ "content": "<extra_id_140>",
1309
+ "lstrip": false,
1310
+ "normalized": false,
1311
+ "rstrip": false,
1312
+ "single_word": false,
1313
+ "special": true
1314
+ },
1315
+ "256160": {
1316
+ "content": "<extra_id_139>",
1317
+ "lstrip": false,
1318
+ "normalized": false,
1319
+ "rstrip": false,
1320
+ "single_word": false,
1321
+ "special": true
1322
+ },
1323
+ "256161": {
1324
+ "content": "<extra_id_138>",
1325
+ "lstrip": false,
1326
+ "normalized": false,
1327
+ "rstrip": false,
1328
+ "single_word": false,
1329
+ "special": true
1330
+ },
1331
+ "256162": {
1332
+ "content": "<extra_id_137>",
1333
+ "lstrip": false,
1334
+ "normalized": false,
1335
+ "rstrip": false,
1336
+ "single_word": false,
1337
+ "special": true
1338
+ },
1339
+ "256163": {
1340
+ "content": "<extra_id_136>",
1341
+ "lstrip": false,
1342
+ "normalized": false,
1343
+ "rstrip": false,
1344
+ "single_word": false,
1345
+ "special": true
1346
+ },
1347
+ "256164": {
1348
+ "content": "<extra_id_135>",
1349
+ "lstrip": false,
1350
+ "normalized": false,
1351
+ "rstrip": false,
1352
+ "single_word": false,
1353
+ "special": true
1354
+ },
1355
+ "256165": {
1356
+ "content": "<extra_id_134>",
1357
+ "lstrip": false,
1358
+ "normalized": false,
1359
+ "rstrip": false,
1360
+ "single_word": false,
1361
+ "special": true
1362
+ },
1363
+ "256166": {
1364
+ "content": "<extra_id_133>",
1365
+ "lstrip": false,
1366
+ "normalized": false,
1367
+ "rstrip": false,
1368
+ "single_word": false,
1369
+ "special": true
1370
+ },
1371
+ "256167": {
1372
+ "content": "<extra_id_132>",
1373
+ "lstrip": false,
1374
+ "normalized": false,
1375
+ "rstrip": false,
1376
+ "single_word": false,
1377
+ "special": true
1378
+ },
1379
+ "256168": {
1380
+ "content": "<extra_id_131>",
1381
+ "lstrip": false,
1382
+ "normalized": false,
1383
+ "rstrip": false,
1384
+ "single_word": false,
1385
+ "special": true
1386
+ },
1387
+ "256169": {
1388
+ "content": "<extra_id_130>",
1389
+ "lstrip": false,
1390
+ "normalized": false,
1391
+ "rstrip": false,
1392
+ "single_word": false,
1393
+ "special": true
1394
+ },
1395
+ "256170": {
1396
+ "content": "<extra_id_129>",
1397
+ "lstrip": false,
1398
+ "normalized": false,
1399
+ "rstrip": false,
1400
+ "single_word": false,
1401
+ "special": true
1402
+ },
1403
+ "256171": {
1404
+ "content": "<extra_id_128>",
1405
+ "lstrip": false,
1406
+ "normalized": false,
1407
+ "rstrip": false,
1408
+ "single_word": false,
1409
+ "special": true
1410
+ },
1411
+ "256172": {
1412
+ "content": "<extra_id_127>",
1413
+ "lstrip": false,
1414
+ "normalized": false,
1415
+ "rstrip": false,
1416
+ "single_word": false,
1417
+ "special": true
1418
+ },
1419
+ "256173": {
1420
+ "content": "<extra_id_126>",
1421
+ "lstrip": false,
1422
+ "normalized": false,
1423
+ "rstrip": false,
1424
+ "single_word": false,
1425
+ "special": true
1426
+ },
1427
+ "256174": {
1428
+ "content": "<extra_id_125>",
1429
+ "lstrip": false,
1430
+ "normalized": false,
1431
+ "rstrip": false,
1432
+ "single_word": false,
1433
+ "special": true
1434
+ },
1435
+ "256175": {
1436
+ "content": "<extra_id_124>",
1437
+ "lstrip": false,
1438
+ "normalized": false,
1439
+ "rstrip": false,
1440
+ "single_word": false,
1441
+ "special": true
1442
+ },
1443
+ "256176": {
1444
+ "content": "<extra_id_123>",
1445
+ "lstrip": false,
1446
+ "normalized": false,
1447
+ "rstrip": false,
1448
+ "single_word": false,
1449
+ "special": true
1450
+ },
1451
+ "256177": {
1452
+ "content": "<extra_id_122>",
1453
+ "lstrip": false,
1454
+ "normalized": false,
1455
+ "rstrip": false,
1456
+ "single_word": false,
1457
+ "special": true
1458
+ },
1459
+ "256178": {
1460
+ "content": "<extra_id_121>",
1461
+ "lstrip": false,
1462
+ "normalized": false,
1463
+ "rstrip": false,
1464
+ "single_word": false,
1465
+ "special": true
1466
+ },
1467
+ "256179": {
1468
+ "content": "<extra_id_120>",
1469
+ "lstrip": false,
1470
+ "normalized": false,
1471
+ "rstrip": false,
1472
+ "single_word": false,
1473
+ "special": true
1474
+ },
1475
+ "256180": {
1476
+ "content": "<extra_id_119>",
1477
+ "lstrip": false,
1478
+ "normalized": false,
1479
+ "rstrip": false,
1480
+ "single_word": false,
1481
+ "special": true
1482
+ },
1483
+ "256181": {
1484
+ "content": "<extra_id_118>",
1485
+ "lstrip": false,
1486
+ "normalized": false,
1487
+ "rstrip": false,
1488
+ "single_word": false,
1489
+ "special": true
1490
+ },
1491
+ "256182": {
1492
+ "content": "<extra_id_117>",
1493
+ "lstrip": false,
1494
+ "normalized": false,
1495
+ "rstrip": false,
1496
+ "single_word": false,
1497
+ "special": true
1498
+ },
1499
+ "256183": {
1500
+ "content": "<extra_id_116>",
1501
+ "lstrip": false,
1502
+ "normalized": false,
1503
+ "rstrip": false,
1504
+ "single_word": false,
1505
+ "special": true
1506
+ },
1507
+ "256184": {
1508
+ "content": "<extra_id_115>",
1509
+ "lstrip": false,
1510
+ "normalized": false,
1511
+ "rstrip": false,
1512
+ "single_word": false,
1513
+ "special": true
1514
+ },
1515
+ "256185": {
1516
+ "content": "<extra_id_114>",
1517
+ "lstrip": false,
1518
+ "normalized": false,
1519
+ "rstrip": false,
1520
+ "single_word": false,
1521
+ "special": true
1522
+ },
1523
+ "256186": {
1524
+ "content": "<extra_id_113>",
1525
+ "lstrip": false,
1526
+ "normalized": false,
1527
+ "rstrip": false,
1528
+ "single_word": false,
1529
+ "special": true
1530
+ },
1531
+ "256187": {
1532
+ "content": "<extra_id_112>",
1533
+ "lstrip": false,
1534
+ "normalized": false,
1535
+ "rstrip": false,
1536
+ "single_word": false,
1537
+ "special": true
1538
+ },
1539
+ "256188": {
1540
+ "content": "<extra_id_111>",
1541
+ "lstrip": false,
1542
+ "normalized": false,
1543
+ "rstrip": false,
1544
+ "single_word": false,
1545
+ "special": true
1546
+ },
1547
+ "256189": {
1548
+ "content": "<extra_id_110>",
1549
+ "lstrip": false,
1550
+ "normalized": false,
1551
+ "rstrip": false,
1552
+ "single_word": false,
1553
+ "special": true
1554
+ },
1555
+ "256190": {
1556
+ "content": "<extra_id_109>",
1557
+ "lstrip": false,
1558
+ "normalized": false,
1559
+ "rstrip": false,
1560
+ "single_word": false,
1561
+ "special": true
1562
+ },
1563
+ "256191": {
1564
+ "content": "<extra_id_108>",
1565
+ "lstrip": false,
1566
+ "normalized": false,
1567
+ "rstrip": false,
1568
+ "single_word": false,
1569
+ "special": true
1570
+ },
1571
+ "256192": {
1572
+ "content": "<extra_id_107>",
1573
+ "lstrip": false,
1574
+ "normalized": false,
1575
+ "rstrip": false,
1576
+ "single_word": false,
1577
+ "special": true
1578
+ },
1579
+ "256193": {
1580
+ "content": "<extra_id_106>",
1581
+ "lstrip": false,
1582
+ "normalized": false,
1583
+ "rstrip": false,
1584
+ "single_word": false,
1585
+ "special": true
1586
+ },
1587
+ "256194": {
1588
+ "content": "<extra_id_105>",
1589
+ "lstrip": false,
1590
+ "normalized": false,
1591
+ "rstrip": false,
1592
+ "single_word": false,
1593
+ "special": true
1594
+ },
1595
+ "256195": {
1596
+ "content": "<extra_id_104>",
1597
+ "lstrip": false,
1598
+ "normalized": false,
1599
+ "rstrip": false,
1600
+ "single_word": false,
1601
+ "special": true
1602
+ },
1603
+ "256196": {
1604
+ "content": "<extra_id_103>",
1605
+ "lstrip": false,
1606
+ "normalized": false,
1607
+ "rstrip": false,
1608
+ "single_word": false,
1609
+ "special": true
1610
+ },
1611
+ "256197": {
1612
+ "content": "<extra_id_102>",
1613
+ "lstrip": false,
1614
+ "normalized": false,
1615
+ "rstrip": false,
1616
+ "single_word": false,
1617
+ "special": true
1618
+ },
1619
+ "256198": {
1620
+ "content": "<extra_id_101>",
1621
+ "lstrip": false,
1622
+ "normalized": false,
1623
+ "rstrip": false,
1624
+ "single_word": false,
1625
+ "special": true
1626
+ },
1627
+ "256199": {
1628
+ "content": "<extra_id_100>",
1629
+ "lstrip": false,
1630
+ "normalized": false,
1631
+ "rstrip": false,
1632
+ "single_word": false,
1633
+ "special": true
1634
+ },
1635
+ "256200": {
1636
+ "content": "<extra_id_99>",
1637
+ "lstrip": false,
1638
+ "normalized": false,
1639
+ "rstrip": false,
1640
+ "single_word": false,
1641
+ "special": true
1642
+ },
1643
+ "256201": {
1644
+ "content": "<extra_id_98>",
1645
+ "lstrip": false,
1646
+ "normalized": false,
1647
+ "rstrip": false,
1648
+ "single_word": false,
1649
+ "special": true
1650
+ },
1651
+ "256202": {
1652
+ "content": "<extra_id_97>",
1653
+ "lstrip": false,
1654
+ "normalized": false,
1655
+ "rstrip": false,
1656
+ "single_word": false,
1657
+ "special": true
1658
+ },
1659
+ "256203": {
1660
+ "content": "<extra_id_96>",
1661
+ "lstrip": false,
1662
+ "normalized": false,
1663
+ "rstrip": false,
1664
+ "single_word": false,
1665
+ "special": true
1666
+ },
1667
+ "256204": {
1668
+ "content": "<extra_id_95>",
1669
+ "lstrip": false,
1670
+ "normalized": false,
1671
+ "rstrip": false,
1672
+ "single_word": false,
1673
+ "special": true
1674
+ },
1675
+ "256205": {
1676
+ "content": "<extra_id_94>",
1677
+ "lstrip": false,
1678
+ "normalized": false,
1679
+ "rstrip": false,
1680
+ "single_word": false,
1681
+ "special": true
1682
+ },
1683
+ "256206": {
1684
+ "content": "<extra_id_93>",
1685
+ "lstrip": false,
1686
+ "normalized": false,
1687
+ "rstrip": false,
1688
+ "single_word": false,
1689
+ "special": true
1690
+ },
1691
+ "256207": {
1692
+ "content": "<extra_id_92>",
1693
+ "lstrip": false,
1694
+ "normalized": false,
1695
+ "rstrip": false,
1696
+ "single_word": false,
1697
+ "special": true
1698
+ },
1699
+ "256208": {
1700
+ "content": "<extra_id_91>",
1701
+ "lstrip": false,
1702
+ "normalized": false,
1703
+ "rstrip": false,
1704
+ "single_word": false,
1705
+ "special": true
1706
+ },
1707
+ "256209": {
1708
+ "content": "<extra_id_90>",
1709
+ "lstrip": false,
1710
+ "normalized": false,
1711
+ "rstrip": false,
1712
+ "single_word": false,
1713
+ "special": true
1714
+ },
1715
+ "256210": {
1716
+ "content": "<extra_id_89>",
1717
+ "lstrip": false,
1718
+ "normalized": false,
1719
+ "rstrip": false,
1720
+ "single_word": false,
1721
+ "special": true
1722
+ },
1723
+ "256211": {
1724
+ "content": "<extra_id_88>",
1725
+ "lstrip": false,
1726
+ "normalized": false,
1727
+ "rstrip": false,
1728
+ "single_word": false,
1729
+ "special": true
1730
+ },
1731
+ "256212": {
1732
+ "content": "<extra_id_87>",
1733
+ "lstrip": false,
1734
+ "normalized": false,
1735
+ "rstrip": false,
1736
+ "single_word": false,
1737
+ "special": true
1738
+ },
1739
+ "256213": {
1740
+ "content": "<extra_id_86>",
1741
+ "lstrip": false,
1742
+ "normalized": false,
1743
+ "rstrip": false,
1744
+ "single_word": false,
1745
+ "special": true
1746
+ },
1747
+ "256214": {
1748
+ "content": "<extra_id_85>",
1749
+ "lstrip": false,
1750
+ "normalized": false,
1751
+ "rstrip": false,
1752
+ "single_word": false,
1753
+ "special": true
1754
+ },
1755
+ "256215": {
1756
+ "content": "<extra_id_84>",
1757
+ "lstrip": false,
1758
+ "normalized": false,
1759
+ "rstrip": false,
1760
+ "single_word": false,
1761
+ "special": true
1762
+ },
1763
+ "256216": {
1764
+ "content": "<extra_id_83>",
1765
+ "lstrip": false,
1766
+ "normalized": false,
1767
+ "rstrip": false,
1768
+ "single_word": false,
1769
+ "special": true
1770
+ },
1771
+ "256217": {
1772
+ "content": "<extra_id_82>",
1773
+ "lstrip": false,
1774
+ "normalized": false,
1775
+ "rstrip": false,
1776
+ "single_word": false,
1777
+ "special": true
1778
+ },
1779
+ "256218": {
1780
+ "content": "<extra_id_81>",
1781
+ "lstrip": false,
1782
+ "normalized": false,
1783
+ "rstrip": false,
1784
+ "single_word": false,
1785
+ "special": true
1786
+ },
1787
+ "256219": {
1788
+ "content": "<extra_id_80>",
1789
+ "lstrip": false,
1790
+ "normalized": false,
1791
+ "rstrip": false,
1792
+ "single_word": false,
1793
+ "special": true
1794
+ },
1795
+ "256220": {
1796
+ "content": "<extra_id_79>",
1797
+ "lstrip": false,
1798
+ "normalized": false,
1799
+ "rstrip": false,
1800
+ "single_word": false,
1801
+ "special": true
1802
+ },
1803
+ "256221": {
1804
+ "content": "<extra_id_78>",
1805
+ "lstrip": false,
1806
+ "normalized": false,
1807
+ "rstrip": false,
1808
+ "single_word": false,
1809
+ "special": true
1810
+ },
1811
+ "256222": {
1812
+ "content": "<extra_id_77>",
1813
+ "lstrip": false,
1814
+ "normalized": false,
1815
+ "rstrip": false,
1816
+ "single_word": false,
1817
+ "special": true
1818
+ },
1819
+ "256223": {
1820
+ "content": "<extra_id_76>",
1821
+ "lstrip": false,
1822
+ "normalized": false,
1823
+ "rstrip": false,
1824
+ "single_word": false,
1825
+ "special": true
1826
+ },
1827
+ "256224": {
1828
+ "content": "<extra_id_75>",
1829
+ "lstrip": false,
1830
+ "normalized": false,
1831
+ "rstrip": false,
1832
+ "single_word": false,
1833
+ "special": true
1834
+ },
1835
+ "256225": {
1836
+ "content": "<extra_id_74>",
1837
+ "lstrip": false,
1838
+ "normalized": false,
1839
+ "rstrip": false,
1840
+ "single_word": false,
1841
+ "special": true
1842
+ },
1843
+ "256226": {
1844
+ "content": "<extra_id_73>",
1845
+ "lstrip": false,
1846
+ "normalized": false,
1847
+ "rstrip": false,
1848
+ "single_word": false,
1849
+ "special": true
1850
+ },
1851
+ "256227": {
1852
+ "content": "<extra_id_72>",
1853
+ "lstrip": false,
1854
+ "normalized": false,
1855
+ "rstrip": false,
1856
+ "single_word": false,
1857
+ "special": true
1858
+ },
1859
+ "256228": {
1860
+ "content": "<extra_id_71>",
1861
+ "lstrip": false,
1862
+ "normalized": false,
1863
+ "rstrip": false,
1864
+ "single_word": false,
1865
+ "special": true
1866
+ },
1867
+ "256229": {
1868
+ "content": "<extra_id_70>",
1869
+ "lstrip": false,
1870
+ "normalized": false,
1871
+ "rstrip": false,
1872
+ "single_word": false,
1873
+ "special": true
1874
+ },
1875
+ "256230": {
1876
+ "content": "<extra_id_69>",
1877
+ "lstrip": false,
1878
+ "normalized": false,
1879
+ "rstrip": false,
1880
+ "single_word": false,
1881
+ "special": true
1882
+ },
1883
+ "256231": {
1884
+ "content": "<extra_id_68>",
1885
+ "lstrip": false,
1886
+ "normalized": false,
1887
+ "rstrip": false,
1888
+ "single_word": false,
1889
+ "special": true
1890
+ },
1891
+ "256232": {
1892
+ "content": "<extra_id_67>",
1893
+ "lstrip": false,
1894
+ "normalized": false,
1895
+ "rstrip": false,
1896
+ "single_word": false,
1897
+ "special": true
1898
+ },
1899
+ "256233": {
1900
+ "content": "<extra_id_66>",
1901
+ "lstrip": false,
1902
+ "normalized": false,
1903
+ "rstrip": false,
1904
+ "single_word": false,
1905
+ "special": true
1906
+ },
1907
+ "256234": {
1908
+ "content": "<extra_id_65>",
1909
+ "lstrip": false,
1910
+ "normalized": false,
1911
+ "rstrip": false,
1912
+ "single_word": false,
1913
+ "special": true
1914
+ },
1915
+ "256235": {
1916
+ "content": "<extra_id_64>",
1917
+ "lstrip": false,
1918
+ "normalized": false,
1919
+ "rstrip": false,
1920
+ "single_word": false,
1921
+ "special": true
1922
+ },
1923
+ "256236": {
1924
+ "content": "<extra_id_63>",
1925
+ "lstrip": false,
1926
+ "normalized": false,
1927
+ "rstrip": false,
1928
+ "single_word": false,
1929
+ "special": true
1930
+ },
1931
+ "256237": {
1932
+ "content": "<extra_id_62>",
1933
+ "lstrip": false,
1934
+ "normalized": false,
1935
+ "rstrip": false,
1936
+ "single_word": false,
1937
+ "special": true
1938
+ },
1939
+ "256238": {
1940
+ "content": "<extra_id_61>",
1941
+ "lstrip": false,
1942
+ "normalized": false,
1943
+ "rstrip": false,
1944
+ "single_word": false,
1945
+ "special": true
1946
+ },
1947
+ "256239": {
1948
+ "content": "<extra_id_60>",
1949
+ "lstrip": false,
1950
+ "normalized": false,
1951
+ "rstrip": false,
1952
+ "single_word": false,
1953
+ "special": true
1954
+ },
1955
+ "256240": {
1956
+ "content": "<extra_id_59>",
1957
+ "lstrip": false,
1958
+ "normalized": false,
1959
+ "rstrip": false,
1960
+ "single_word": false,
1961
+ "special": true
1962
+ },
1963
+ "256241": {
1964
+ "content": "<extra_id_58>",
1965
+ "lstrip": false,
1966
+ "normalized": false,
1967
+ "rstrip": false,
1968
+ "single_word": false,
1969
+ "special": true
1970
+ },
1971
+ "256242": {
1972
+ "content": "<extra_id_57>",
1973
+ "lstrip": false,
1974
+ "normalized": false,
1975
+ "rstrip": false,
1976
+ "single_word": false,
1977
+ "special": true
1978
+ },
1979
+ "256243": {
1980
+ "content": "<extra_id_56>",
1981
+ "lstrip": false,
1982
+ "normalized": false,
1983
+ "rstrip": false,
1984
+ "single_word": false,
1985
+ "special": true
1986
+ },
1987
+ "256244": {
1988
+ "content": "<extra_id_55>",
1989
+ "lstrip": false,
1990
+ "normalized": false,
1991
+ "rstrip": false,
1992
+ "single_word": false,
1993
+ "special": true
1994
+ },
1995
+ "256245": {
1996
+ "content": "<extra_id_54>",
1997
+ "lstrip": false,
1998
+ "normalized": false,
1999
+ "rstrip": false,
2000
+ "single_word": false,
2001
+ "special": true
2002
+ },
2003
+ "256246": {
2004
+ "content": "<extra_id_53>",
2005
+ "lstrip": false,
2006
+ "normalized": false,
2007
+ "rstrip": false,
2008
+ "single_word": false,
2009
+ "special": true
2010
+ },
2011
+ "256247": {
2012
+ "content": "<extra_id_52>",
2013
+ "lstrip": false,
2014
+ "normalized": false,
2015
+ "rstrip": false,
2016
+ "single_word": false,
2017
+ "special": true
2018
+ },
2019
+ "256248": {
2020
+ "content": "<extra_id_51>",
2021
+ "lstrip": false,
2022
+ "normalized": false,
2023
+ "rstrip": false,
2024
+ "single_word": false,
2025
+ "special": true
2026
+ },
2027
+ "256249": {
2028
+ "content": "<extra_id_50>",
2029
+ "lstrip": false,
2030
+ "normalized": false,
2031
+ "rstrip": false,
2032
+ "single_word": false,
2033
+ "special": true
2034
+ },
2035
+ "256250": {
2036
+ "content": "<extra_id_49>",
2037
+ "lstrip": false,
2038
+ "normalized": false,
2039
+ "rstrip": false,
2040
+ "single_word": false,
2041
+ "special": true
2042
+ },
2043
+ "256251": {
2044
+ "content": "<extra_id_48>",
2045
+ "lstrip": false,
2046
+ "normalized": false,
2047
+ "rstrip": false,
2048
+ "single_word": false,
2049
+ "special": true
2050
+ },
2051
+ "256252": {
2052
+ "content": "<extra_id_47>",
2053
+ "lstrip": false,
2054
+ "normalized": false,
2055
+ "rstrip": false,
2056
+ "single_word": false,
2057
+ "special": true
2058
+ },
2059
+ "256253": {
2060
+ "content": "<extra_id_46>",
2061
+ "lstrip": false,
2062
+ "normalized": false,
2063
+ "rstrip": false,
2064
+ "single_word": false,
2065
+ "special": true
2066
+ },
2067
+ "256254": {
2068
+ "content": "<extra_id_45>",
2069
+ "lstrip": false,
2070
+ "normalized": false,
2071
+ "rstrip": false,
2072
+ "single_word": false,
2073
+ "special": true
2074
+ },
2075
+ "256255": {
2076
+ "content": "<extra_id_44>",
2077
+ "lstrip": false,
2078
+ "normalized": false,
2079
+ "rstrip": false,
2080
+ "single_word": false,
2081
+ "special": true
2082
+ },
2083
+ "256256": {
2084
+ "content": "<extra_id_43>",
2085
+ "lstrip": false,
2086
+ "normalized": false,
2087
+ "rstrip": false,
2088
+ "single_word": false,
2089
+ "special": true
2090
+ },
2091
+ "256257": {
2092
+ "content": "<extra_id_42>",
2093
+ "lstrip": false,
2094
+ "normalized": false,
2095
+ "rstrip": false,
2096
+ "single_word": false,
2097
+ "special": true
2098
+ },
2099
+ "256258": {
2100
+ "content": "<extra_id_41>",
2101
+ "lstrip": false,
2102
+ "normalized": false,
2103
+ "rstrip": false,
2104
+ "single_word": false,
2105
+ "special": true
2106
+ },
2107
+ "256259": {
2108
+ "content": "<extra_id_40>",
2109
+ "lstrip": false,
2110
+ "normalized": false,
2111
+ "rstrip": false,
2112
+ "single_word": false,
2113
+ "special": true
2114
+ },
2115
+ "256260": {
2116
+ "content": "<extra_id_39>",
2117
+ "lstrip": false,
2118
+ "normalized": false,
2119
+ "rstrip": false,
2120
+ "single_word": false,
2121
+ "special": true
2122
+ },
2123
+ "256261": {
2124
+ "content": "<extra_id_38>",
2125
+ "lstrip": false,
2126
+ "normalized": false,
2127
+ "rstrip": false,
2128
+ "single_word": false,
2129
+ "special": true
2130
+ },
2131
+ "256262": {
2132
+ "content": "<extra_id_37>",
2133
+ "lstrip": false,
2134
+ "normalized": false,
2135
+ "rstrip": false,
2136
+ "single_word": false,
2137
+ "special": true
2138
+ },
2139
+ "256263": {
2140
+ "content": "<extra_id_36>",
2141
+ "lstrip": false,
2142
+ "normalized": false,
2143
+ "rstrip": false,
2144
+ "single_word": false,
2145
+ "special": true
2146
+ },
2147
+ "256264": {
2148
+ "content": "<extra_id_35>",
2149
+ "lstrip": false,
2150
+ "normalized": false,
2151
+ "rstrip": false,
2152
+ "single_word": false,
2153
+ "special": true
2154
+ },
2155
+ "256265": {
2156
+ "content": "<extra_id_34>",
2157
+ "lstrip": false,
2158
+ "normalized": false,
2159
+ "rstrip": false,
2160
+ "single_word": false,
2161
+ "special": true
2162
+ },
2163
+ "256266": {
2164
+ "content": "<extra_id_33>",
2165
+ "lstrip": false,
2166
+ "normalized": false,
2167
+ "rstrip": false,
2168
+ "single_word": false,
2169
+ "special": true
2170
+ },
2171
+ "256267": {
2172
+ "content": "<extra_id_32>",
2173
+ "lstrip": false,
2174
+ "normalized": false,
2175
+ "rstrip": false,
2176
+ "single_word": false,
2177
+ "special": true
2178
+ },
2179
+ "256268": {
2180
+ "content": "<extra_id_31>",
2181
+ "lstrip": false,
2182
+ "normalized": false,
2183
+ "rstrip": false,
2184
+ "single_word": false,
2185
+ "special": true
2186
+ },
2187
+ "256269": {
2188
+ "content": "<extra_id_30>",
2189
+ "lstrip": false,
2190
+ "normalized": false,
2191
+ "rstrip": false,
2192
+ "single_word": false,
2193
+ "special": true
2194
+ },
2195
+ "256270": {
2196
+ "content": "<extra_id_29>",
2197
+ "lstrip": false,
2198
+ "normalized": false,
2199
+ "rstrip": false,
2200
+ "single_word": false,
2201
+ "special": true
2202
+ },
2203
+ "256271": {
2204
+ "content": "<extra_id_28>",
2205
+ "lstrip": false,
2206
+ "normalized": false,
2207
+ "rstrip": false,
2208
+ "single_word": false,
2209
+ "special": true
2210
+ },
2211
+ "256272": {
2212
+ "content": "<extra_id_27>",
2213
+ "lstrip": false,
2214
+ "normalized": false,
2215
+ "rstrip": false,
2216
+ "single_word": false,
2217
+ "special": true
2218
+ },
2219
+ "256273": {
2220
+ "content": "<extra_id_26>",
2221
+ "lstrip": false,
2222
+ "normalized": false,
2223
+ "rstrip": false,
2224
+ "single_word": false,
2225
+ "special": true
2226
+ },
2227
+ "256274": {
2228
+ "content": "<extra_id_25>",
2229
+ "lstrip": false,
2230
+ "normalized": false,
2231
+ "rstrip": false,
2232
+ "single_word": false,
2233
+ "special": true
2234
+ },
2235
+ "256275": {
2236
+ "content": "<extra_id_24>",
2237
+ "lstrip": false,
2238
+ "normalized": false,
2239
+ "rstrip": false,
2240
+ "single_word": false,
2241
+ "special": true
2242
+ },
2243
+ "256276": {
2244
+ "content": "<extra_id_23>",
2245
+ "lstrip": false,
2246
+ "normalized": false,
2247
+ "rstrip": false,
2248
+ "single_word": false,
2249
+ "special": true
2250
+ },
2251
+ "256277": {
2252
+ "content": "<extra_id_22>",
2253
+ "lstrip": false,
2254
+ "normalized": false,
2255
+ "rstrip": false,
2256
+ "single_word": false,
2257
+ "special": true
2258
+ },
2259
+ "256278": {
2260
+ "content": "<extra_id_21>",
2261
+ "lstrip": false,
2262
+ "normalized": false,
2263
+ "rstrip": false,
2264
+ "single_word": false,
2265
+ "special": true
2266
+ },
2267
+ "256279": {
2268
+ "content": "<extra_id_20>",
2269
+ "lstrip": false,
2270
+ "normalized": false,
2271
+ "rstrip": false,
2272
+ "single_word": false,
2273
+ "special": true
2274
+ },
2275
+ "256280": {
2276
+ "content": "<extra_id_19>",
2277
+ "lstrip": false,
2278
+ "normalized": false,
2279
+ "rstrip": false,
2280
+ "single_word": false,
2281
+ "special": true
2282
+ },
2283
+ "256281": {
2284
+ "content": "<extra_id_18>",
2285
+ "lstrip": false,
2286
+ "normalized": false,
2287
+ "rstrip": false,
2288
+ "single_word": false,
2289
+ "special": true
2290
+ },
2291
+ "256282": {
2292
+ "content": "<extra_id_17>",
2293
+ "lstrip": false,
2294
+ "normalized": false,
2295
+ "rstrip": false,
2296
+ "single_word": false,
2297
+ "special": true
2298
+ },
2299
+ "256283": {
2300
+ "content": "<extra_id_16>",
2301
+ "lstrip": false,
2302
+ "normalized": false,
2303
+ "rstrip": false,
2304
+ "single_word": false,
2305
+ "special": true
2306
+ },
2307
+ "256284": {
2308
+ "content": "<extra_id_15>",
2309
+ "lstrip": false,
2310
+ "normalized": false,
2311
+ "rstrip": false,
2312
+ "single_word": false,
2313
+ "special": true
2314
+ },
2315
+ "256285": {
2316
+ "content": "<extra_id_14>",
2317
+ "lstrip": false,
2318
+ "normalized": false,
2319
+ "rstrip": false,
2320
+ "single_word": false,
2321
+ "special": true
2322
+ },
2323
+ "256286": {
2324
+ "content": "<extra_id_13>",
2325
+ "lstrip": false,
2326
+ "normalized": false,
2327
+ "rstrip": false,
2328
+ "single_word": false,
2329
+ "special": true
2330
+ },
2331
+ "256287": {
2332
+ "content": "<extra_id_12>",
2333
+ "lstrip": false,
2334
+ "normalized": false,
2335
+ "rstrip": false,
2336
+ "single_word": false,
2337
+ "special": true
2338
+ },
2339
+ "256288": {
2340
+ "content": "<extra_id_11>",
2341
+ "lstrip": false,
2342
+ "normalized": false,
2343
+ "rstrip": false,
2344
+ "single_word": false,
2345
+ "special": true
2346
+ },
2347
+ "256289": {
2348
+ "content": "<extra_id_10>",
2349
+ "lstrip": false,
2350
+ "normalized": false,
2351
+ "rstrip": false,
2352
+ "single_word": false,
2353
+ "special": true
2354
+ },
2355
+ "256290": {
2356
+ "content": "<extra_id_9>",
2357
+ "lstrip": false,
2358
+ "normalized": false,
2359
+ "rstrip": false,
2360
+ "single_word": false,
2361
+ "special": true
2362
+ },
2363
+ "256291": {
2364
+ "content": "<extra_id_8>",
2365
+ "lstrip": false,
2366
+ "normalized": false,
2367
+ "rstrip": false,
2368
+ "single_word": false,
2369
+ "special": true
2370
+ },
2371
+ "256292": {
2372
+ "content": "<extra_id_7>",
2373
+ "lstrip": false,
2374
+ "normalized": false,
2375
+ "rstrip": false,
2376
+ "single_word": false,
2377
+ "special": true
2378
+ },
2379
+ "256293": {
2380
+ "content": "<extra_id_6>",
2381
+ "lstrip": false,
2382
+ "normalized": false,
2383
+ "rstrip": false,
2384
+ "single_word": false,
2385
+ "special": true
2386
+ },
2387
+ "256294": {
2388
+ "content": "<extra_id_5>",
2389
+ "lstrip": false,
2390
+ "normalized": false,
2391
+ "rstrip": false,
2392
+ "single_word": false,
2393
+ "special": true
2394
+ },
2395
+ "256295": {
2396
+ "content": "<extra_id_4>",
2397
+ "lstrip": false,
2398
+ "normalized": false,
2399
+ "rstrip": false,
2400
+ "single_word": false,
2401
+ "special": true
2402
+ },
2403
+ "256296": {
2404
+ "content": "<extra_id_3>",
2405
+ "lstrip": false,
2406
+ "normalized": false,
2407
+ "rstrip": false,
2408
+ "single_word": false,
2409
+ "special": true
2410
+ },
2411
+ "256297": {
2412
+ "content": "<extra_id_2>",
2413
+ "lstrip": false,
2414
+ "normalized": false,
2415
+ "rstrip": false,
2416
+ "single_word": false,
2417
+ "special": true
2418
+ },
2419
+ "256298": {
2420
+ "content": "<extra_id_1>",
2421
+ "lstrip": false,
2422
+ "normalized": false,
2423
+ "rstrip": false,
2424
+ "single_word": false,
2425
+ "special": true
2426
+ },
2427
+ "256299": {
2428
+ "content": "<extra_id_0>",
2429
+ "lstrip": false,
2430
+ "normalized": false,
2431
+ "rstrip": false,
2432
+ "single_word": false,
2433
+ "special": true
2434
+ }
2435
+ },
2436
+ "additional_special_tokens": [
2437
+ "<extra_id_0>",
2438
+ "<extra_id_1>",
2439
+ "<extra_id_2>",
2440
+ "<extra_id_3>",
2441
+ "<extra_id_4>",
2442
+ "<extra_id_5>",
2443
+ "<extra_id_6>",
2444
+ "<extra_id_7>",
2445
+ "<extra_id_8>",
2446
+ "<extra_id_9>",
2447
+ "<extra_id_10>",
2448
+ "<extra_id_11>",
2449
+ "<extra_id_12>",
2450
+ "<extra_id_13>",
2451
+ "<extra_id_14>",
2452
+ "<extra_id_15>",
2453
+ "<extra_id_16>",
2454
+ "<extra_id_17>",
2455
+ "<extra_id_18>",
2456
+ "<extra_id_19>",
2457
+ "<extra_id_20>",
2458
+ "<extra_id_21>",
2459
+ "<extra_id_22>",
2460
+ "<extra_id_23>",
2461
+ "<extra_id_24>",
2462
+ "<extra_id_25>",
2463
+ "<extra_id_26>",
2464
+ "<extra_id_27>",
2465
+ "<extra_id_28>",
2466
+ "<extra_id_29>",
2467
+ "<extra_id_30>",
2468
+ "<extra_id_31>",
2469
+ "<extra_id_32>",
2470
+ "<extra_id_33>",
2471
+ "<extra_id_34>",
2472
+ "<extra_id_35>",
2473
+ "<extra_id_36>",
2474
+ "<extra_id_37>",
2475
+ "<extra_id_38>",
2476
+ "<extra_id_39>",
2477
+ "<extra_id_40>",
2478
+ "<extra_id_41>",
2479
+ "<extra_id_42>",
2480
+ "<extra_id_43>",
2481
+ "<extra_id_44>",
2482
+ "<extra_id_45>",
2483
+ "<extra_id_46>",
2484
+ "<extra_id_47>",
2485
+ "<extra_id_48>",
2486
+ "<extra_id_49>",
2487
+ "<extra_id_50>",
2488
+ "<extra_id_51>",
2489
+ "<extra_id_52>",
2490
+ "<extra_id_53>",
2491
+ "<extra_id_54>",
2492
+ "<extra_id_55>",
2493
+ "<extra_id_56>",
2494
+ "<extra_id_57>",
2495
+ "<extra_id_58>",
2496
+ "<extra_id_59>",
2497
+ "<extra_id_60>",
2498
+ "<extra_id_61>",
2499
+ "<extra_id_62>",
2500
+ "<extra_id_63>",
2501
+ "<extra_id_64>",
2502
+ "<extra_id_65>",
2503
+ "<extra_id_66>",
2504
+ "<extra_id_67>",
2505
+ "<extra_id_68>",
2506
+ "<extra_id_69>",
2507
+ "<extra_id_70>",
2508
+ "<extra_id_71>",
2509
+ "<extra_id_72>",
2510
+ "<extra_id_73>",
2511
+ "<extra_id_74>",
2512
+ "<extra_id_75>",
2513
+ "<extra_id_76>",
2514
+ "<extra_id_77>",
2515
+ "<extra_id_78>",
2516
+ "<extra_id_79>",
2517
+ "<extra_id_80>",
2518
+ "<extra_id_81>",
2519
+ "<extra_id_82>",
2520
+ "<extra_id_83>",
2521
+ "<extra_id_84>",
2522
+ "<extra_id_85>",
2523
+ "<extra_id_86>",
2524
+ "<extra_id_87>",
2525
+ "<extra_id_88>",
2526
+ "<extra_id_89>",
2527
+ "<extra_id_90>",
2528
+ "<extra_id_91>",
2529
+ "<extra_id_92>",
2530
+ "<extra_id_93>",
2531
+ "<extra_id_94>",
2532
+ "<extra_id_95>",
2533
+ "<extra_id_96>",
2534
+ "<extra_id_97>",
2535
+ "<extra_id_98>",
2536
+ "<extra_id_99>",
2537
+ "<extra_id_100>",
2538
+ "<extra_id_101>",
2539
+ "<extra_id_102>",
2540
+ "<extra_id_103>",
2541
+ "<extra_id_104>",
2542
+ "<extra_id_105>",
2543
+ "<extra_id_106>",
2544
+ "<extra_id_107>",
2545
+ "<extra_id_108>",
2546
+ "<extra_id_109>",
2547
+ "<extra_id_110>",
2548
+ "<extra_id_111>",
2549
+ "<extra_id_112>",
2550
+ "<extra_id_113>",
2551
+ "<extra_id_114>",
2552
+ "<extra_id_115>",
2553
+ "<extra_id_116>",
2554
+ "<extra_id_117>",
2555
+ "<extra_id_118>",
2556
+ "<extra_id_119>",
2557
+ "<extra_id_120>",
2558
+ "<extra_id_121>",
2559
+ "<extra_id_122>",
2560
+ "<extra_id_123>",
2561
+ "<extra_id_124>",
2562
+ "<extra_id_125>",
2563
+ "<extra_id_126>",
2564
+ "<extra_id_127>",
2565
+ "<extra_id_128>",
2566
+ "<extra_id_129>",
2567
+ "<extra_id_130>",
2568
+ "<extra_id_131>",
2569
+ "<extra_id_132>",
2570
+ "<extra_id_133>",
2571
+ "<extra_id_134>",
2572
+ "<extra_id_135>",
2573
+ "<extra_id_136>",
2574
+ "<extra_id_137>",
2575
+ "<extra_id_138>",
2576
+ "<extra_id_139>",
2577
+ "<extra_id_140>",
2578
+ "<extra_id_141>",
2579
+ "<extra_id_142>",
2580
+ "<extra_id_143>",
2581
+ "<extra_id_144>",
2582
+ "<extra_id_145>",
2583
+ "<extra_id_146>",
2584
+ "<extra_id_147>",
2585
+ "<extra_id_148>",
2586
+ "<extra_id_149>",
2587
+ "<extra_id_150>",
2588
+ "<extra_id_151>",
2589
+ "<extra_id_152>",
2590
+ "<extra_id_153>",
2591
+ "<extra_id_154>",
2592
+ "<extra_id_155>",
2593
+ "<extra_id_156>",
2594
+ "<extra_id_157>",
2595
+ "<extra_id_158>",
2596
+ "<extra_id_159>",
2597
+ "<extra_id_160>",
2598
+ "<extra_id_161>",
2599
+ "<extra_id_162>",
2600
+ "<extra_id_163>",
2601
+ "<extra_id_164>",
2602
+ "<extra_id_165>",
2603
+ "<extra_id_166>",
2604
+ "<extra_id_167>",
2605
+ "<extra_id_168>",
2606
+ "<extra_id_169>",
2607
+ "<extra_id_170>",
2608
+ "<extra_id_171>",
2609
+ "<extra_id_172>",
2610
+ "<extra_id_173>",
2611
+ "<extra_id_174>",
2612
+ "<extra_id_175>",
2613
+ "<extra_id_176>",
2614
+ "<extra_id_177>",
2615
+ "<extra_id_178>",
2616
+ "<extra_id_179>",
2617
+ "<extra_id_180>",
2618
+ "<extra_id_181>",
2619
+ "<extra_id_182>",
2620
+ "<extra_id_183>",
2621
+ "<extra_id_184>",
2622
+ "<extra_id_185>",
2623
+ "<extra_id_186>",
2624
+ "<extra_id_187>",
2625
+ "<extra_id_188>",
2626
+ "<extra_id_189>",
2627
+ "<extra_id_190>",
2628
+ "<extra_id_191>",
2629
+ "<extra_id_192>",
2630
+ "<extra_id_193>",
2631
+ "<extra_id_194>",
2632
+ "<extra_id_195>",
2633
+ "<extra_id_196>",
2634
+ "<extra_id_197>",
2635
+ "<extra_id_198>",
2636
+ "<extra_id_199>",
2637
+ "<extra_id_200>",
2638
+ "<extra_id_201>",
2639
+ "<extra_id_202>",
2640
+ "<extra_id_203>",
2641
+ "<extra_id_204>",
2642
+ "<extra_id_205>",
2643
+ "<extra_id_206>",
2644
+ "<extra_id_207>",
2645
+ "<extra_id_208>",
2646
+ "<extra_id_209>",
2647
+ "<extra_id_210>",
2648
+ "<extra_id_211>",
2649
+ "<extra_id_212>",
2650
+ "<extra_id_213>",
2651
+ "<extra_id_214>",
2652
+ "<extra_id_215>",
2653
+ "<extra_id_216>",
2654
+ "<extra_id_217>",
2655
+ "<extra_id_218>",
2656
+ "<extra_id_219>",
2657
+ "<extra_id_220>",
2658
+ "<extra_id_221>",
2659
+ "<extra_id_222>",
2660
+ "<extra_id_223>",
2661
+ "<extra_id_224>",
2662
+ "<extra_id_225>",
2663
+ "<extra_id_226>",
2664
+ "<extra_id_227>",
2665
+ "<extra_id_228>",
2666
+ "<extra_id_229>",
2667
+ "<extra_id_230>",
2668
+ "<extra_id_231>",
2669
+ "<extra_id_232>",
2670
+ "<extra_id_233>",
2671
+ "<extra_id_234>",
2672
+ "<extra_id_235>",
2673
+ "<extra_id_236>",
2674
+ "<extra_id_237>",
2675
+ "<extra_id_238>",
2676
+ "<extra_id_239>",
2677
+ "<extra_id_240>",
2678
+ "<extra_id_241>",
2679
+ "<extra_id_242>",
2680
+ "<extra_id_243>",
2681
+ "<extra_id_244>",
2682
+ "<extra_id_245>",
2683
+ "<extra_id_246>",
2684
+ "<extra_id_247>",
2685
+ "<extra_id_248>",
2686
+ "<extra_id_249>",
2687
+ "<extra_id_250>",
2688
+ "<extra_id_251>",
2689
+ "<extra_id_252>",
2690
+ "<extra_id_253>",
2691
+ "<extra_id_254>",
2692
+ "<extra_id_255>",
2693
+ "<extra_id_256>",
2694
+ "<extra_id_257>",
2695
+ "<extra_id_258>",
2696
+ "<extra_id_259>",
2697
+ "<extra_id_260>",
2698
+ "<extra_id_261>",
2699
+ "<extra_id_262>",
2700
+ "<extra_id_263>",
2701
+ "<extra_id_264>",
2702
+ "<extra_id_265>",
2703
+ "<extra_id_266>",
2704
+ "<extra_id_267>",
2705
+ "<extra_id_268>",
2706
+ "<extra_id_269>",
2707
+ "<extra_id_270>",
2708
+ "<extra_id_271>",
2709
+ "<extra_id_272>",
2710
+ "<extra_id_273>",
2711
+ "<extra_id_274>",
2712
+ "<extra_id_275>",
2713
+ "<extra_id_276>",
2714
+ "<extra_id_277>",
2715
+ "<extra_id_278>",
2716
+ "<extra_id_279>",
2717
+ "<extra_id_280>",
2718
+ "<extra_id_281>",
2719
+ "<extra_id_282>",
2720
+ "<extra_id_283>",
2721
+ "<extra_id_284>",
2722
+ "<extra_id_285>",
2723
+ "<extra_id_286>",
2724
+ "<extra_id_287>",
2725
+ "<extra_id_288>",
2726
+ "<extra_id_289>",
2727
+ "<extra_id_290>",
2728
+ "<extra_id_291>",
2729
+ "<extra_id_292>",
2730
+ "<extra_id_293>",
2731
+ "<extra_id_294>",
2732
+ "<extra_id_295>",
2733
+ "<extra_id_296>",
2734
+ "<extra_id_297>",
2735
+ "<extra_id_298>",
2736
+ "<extra_id_299>"
2737
+ ],
2738
+ "bos_token": "<s>",
2739
+ "clean_up_tokenization_spaces": true,
2740
+ "eos_token": "</s>",
2741
+ "extra_ids": 300,
2742
+ "model_max_length": 1000000000000000019884624838656,
2743
+ "pad_token": "<pad>",
2744
+ "sp_model_kwargs": {},
2745
+ "spaces_between_special_tokens": false,
2746
+ "tokenizer_class": "T5Tokenizer",
2747
+ "unk_token": "<unk>"
2748
+ }