Views
No views yet


### nvfp4
Model LTXAV prepared for dynamic VRAM loading. 16747MB Staged. 1660 patches attached.
100%|███████████████████| 8/8 [00:11<00:00, 1.43s/it]
### nvfp4mixed_input_scaled
Model LTXAV prepared for dynamic VRAM loading. 19295MB Staged. 1660 patches attached.
100%|███████████████████| 8/8 [00:11<00:00, 1.44s/it]
### fp8_input_scaled
Model LTXAV prepared for dynamic VRAM loading. 23838MB Staged. 1660 patches attached.
100%|███████████████████| 8/8 [00:13<00:00, 1.73s/it]
### mxfp8
Model LTXAV prepared for dynamic VRAM loading. 24345MB Staged. 1660 patches attached.
100%|███████████████████| 8/8 [00:13<00:00, 1.67s/it]1import sys
2import json
3import torch
4from safetensors.torch import safe_open, save_file
5
6def cut_safetensors(input_path, output_path):
7 with safe_open(input_path, framework="pt", device="cpu") as f:
8 metadata = f.metadata()
9
10 config = json.loads(metadata.get('config', '{}'))
11 for key in ['vae', 'audio_vae', 'vocoder']:
12 if key in config:
13 del config[key]
14 metadata['config'] = json.dumps(config)
15
16 quant_meta = json.loads(metadata.get('_quantization_metadata', '{"layers": {}}'))
17 quant_layers = quant_meta.get("layers", {})
18 del metadata['_quantization_metadata']
19
20 new_state_dict = {}
21 prefix = "model.diffusion_model."
22
23 for key in f.keys():
24 if key.startswith(prefix):
25 new_state_dict[key] = f.get_tensor(key)
26 base_key = key.replace(".weight", "")
27 if base_key in quant_layers:
28 quant_info = quant_layers[base_key]
29 json_data = json.dumps(quant_info).encode("utf-8")
30 new_tensor = torch.tensor(list(json_data), dtype=torch.uint8)
31 new_state_dict[f"{base_key}.comfy_quant"] = new_tensor
32
33 save_file(new_state_dict, output_path, metadata=metadata)
34
35input_path, output_path = sys.argv[1:3]
36
37if __name__ == "__main__":
38 cut_safetensors(input_path, output_path)1import torch
2import json
3import os
4from safetensors.torch import load_file, save_file, safe_open
5
6def parse_args():
7 import argparse
8 parser = argparse.ArgumentParser()
9 parser.add_argument("src1") # fp8
10 parser.add_argument("src2") # nvfp4
11 parser.add_argument("dst")
12 return parser.parse_args()
13
14def main():
15 args = parse_args()
16
17 original_metadata = {}
18 with safe_open(args.src1, framework="pt") as f:
19 original_metadata = f.metadata()
20
21 state_dict1 = load_file(args.src1)
22 new_state_dict = {}
23 quantization_layers = {}
24
25 block_names = [".to_", ".ff.net"]
26 exception_names = [
27 "blocks.0.", "blocks.1.", "blocks.46.", "blocks.47.",
28 ".to_gate_logits", ".to_out.0", ".audio_ff.net", ".attn2."
29 ]
30 for key, tensor in state_dict1.items():
31 if any(b in key for b in block_names) and not any(e in key for e in exception_names):
32 continue
33 new_state_dict[key] = tensor
34 if key.endswith(".weight_scale"):
35 layer_name = key[:-13]
36 quantization_layers[layer_name] = {"format": "float8_e4m3fn"}
37
38 state_dict2 = load_file(args.src2)
39 for key, tensor in state_dict2.items():
40 if any(b in key for b in block_names) and not any(e in key for e in exception_names):
41 new_state_dict[key] = tensor
42 if key.endswith(".weight_scale"):
43 layer_name = key[:-13]
44 quantization_layers[layer_name] = {"format": "nvfp4"}
45
46 save_file(new_state_dict, args.dst, metadata=original_metadata)
47 total_bytes = os.path.getsize(args.dst)
48 print(f"Output: {args.dst} ({round(total_bytes / (1024**3), 2)}GB)")
49
50if __name__ == "__main__":
51 main()input_scale on nvfp4 layers.1import sys
2
3from safetensors import safe_open
4from safetensors.torch import save_file
5import torch
6
7def main():
8 src1_path, src2_path, output_path = sys.argv[1:4]
9 out_tensors = {}
10 with safe_open(src1_path, framework="pt") as f1:
11 for k in f1.keys():
12 out_tensors[k] = f1.get_tensor(k)
13 metadata = f1.metadata() or {}
14 with safe_open(src2_path, framework="pt") as f2:
15 for k in f2.keys():
16 if k.endswith(".input_scale"):
17 base_key = k.replace(".input_scale", "")
18 if f2.get_tensor(f"{base_key}.comfy_quant") is not None:
19 out_tensors[k] = f2.get_tensor(k)
20 save_file(out_tensors, output_path, metadata=metadata)
21
22if __name__ == "__main__":
23 main()1{
2 "format": "comfy_quant",
3 "block_names": ["transformer_blocks"],
4 "rules": [
5 { "policy": "keep", "match": ["blocks.0.", "blocks.1.", "blocks.46.", "blocks.47."] },
6 { "policy": "mxfp8", "match": [".to_", "ff.net."] }
7 ]
8}