On the public action-cond GR-1 checkpoint (2B_GR1_post-train/iter_000050000/model_ema_bf16.pt), model.decode(model.encode(real_video)) produces near-all-black output. PSNR ≈ 7.9 dB vs the input, mean ≈ −0.92 in [−1, 1]. the round-trip is structurally non-identity and is not a quality issue.
The wan2pt1 tokenizer 'cosmos_predict2/_src/predict2/tokenizers/wan2pt1.py lines 594-698' defaults load_mean_std=False, which falls through to video_mean=zeros(...), video_std=ones(...). a no-op outer normalization. The proper statistics live at s3://bucket/cosmos_diffusion_v2/pretrain_weights/tokenizer/wan2pt1/mean_std.pt, which is gated. Without those stats, the encoder emits latents at the wrong scale for the (also un-calibrated) decoder.
The reason it works for the DiT is i think they were trained on this same setup (PSNR ≈ 21 vs real).
Please either:
- release mean_std.pt (or images_mean_std.pt / video_mean_std.pt) on a public mirror so load_mean_std=True works
- verify explicitly that the public build supports rollout-decode only and that direct VAE round-trips will not be supported without the gated stats
On the public action-cond GR-1 checkpoint (2B_GR1_post-train/iter_000050000/model_ema_bf16.pt),
model.decode(model.encode(real_video))produces near-all-black output. PSNR ≈ 7.9 dB vs the input, mean ≈ −0.92 in [−1, 1]. the round-trip is structurally non-identity and is not a quality issue.The wan2pt1 tokenizer 'cosmos_predict2/_src/predict2/tokenizers/wan2pt1.py lines 594-698' defaults load_mean_std=False, which falls through to video_mean=zeros(...), video_std=ones(...). a no-op outer normalization. The proper statistics live at s3://bucket/cosmos_diffusion_v2/pretrain_weights/tokenizer/wan2pt1/mean_std.pt, which is gated. Without those stats, the encoder emits latents at the wrong scale for the (also un-calibrated) decoder.
The reason it works for the DiT is i think they were trained on this same setup (PSNR ≈ 21 vs real).
Please either: