hanxxing rzgar commited on
Commit
832fee5
·
0 Parent(s):

Duplicate from rzgar/Bernini-R-S2V

Browse files

Co-authored-by: Rzgar <rzgar@users.noreply.huggingface.co>

Files changed (41) hide show
  1. .gitattributes +53 -0
  2. Bernini-R-S2V-FP16/wan2.2_bernini_r_high_noise_fp16_s2v.safetensors +3 -0
  3. Bernini-R-S2V-FP16/wan2.2_bernini_r_low_noise_fp16_s2v.safetensors +3 -0
  4. Bernini-R-S2V-FP8/video/ComfyUI__00005-audio.mp4 +3 -0
  5. Bernini-R-S2V-FP8/video/pirate.wav +3 -0
  6. Bernini-R-S2V-FP8/wan2.2_bernini_r_high_noise_fp8_scaled_s2v.safetensors +3 -0
  7. Bernini-R-S2V-FP8/wan2.2_bernini_r_low_noise_fp8_scaled_s2v.safetensors +3 -0
  8. Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_high_noise_int8_convrot_s2v.safetensors +3 -0
  9. Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_low_noise_int8_convrot_s2v.safetensors +3 -0
  10. ComfyUI-WanBerniniS2V/__init__.py +7 -0
  11. ComfyUI-WanBerniniS2V/model_patch.py +122 -0
  12. ComfyUI-WanBerniniS2V/nodes.py +92 -0
  13. ComfyUI-WanBerniniS2V/wan_audio.py +29 -0
  14. ComfyUI-WanBerniniS2V_v2/ComfyUI-WanBerniniS2V_v2.zip +3 -0
  15. ComfyUI-WanBerniniS2V_v2/Workflow/Bernini-R-S2V-Workflow-V2.json +2857 -0
  16. ComfyUI-WanBerniniS2V_v2/__init__.py +7 -0
  17. ComfyUI-WanBerniniS2V_v2/audio_mask.py +68 -0
  18. ComfyUI-WanBerniniS2V_v2/demo_assets/ComfyUI_00207-audio.mp4 +3 -0
  19. ComfyUI-WanBerniniS2V_v2/demo_assets/I am The Dude Playing The Dude.wav +3 -0
  20. ComfyUI-WanBerniniS2V_v2/demo_assets/Im the Dude.wav +3 -0
  21. ComfyUI-WanBerniniS2V_v2/demo_assets/Screenshot_ComfyUI-WanBerniniS2V_v2.png +3 -0
  22. ComfyUI-WanBerniniS2V_v2/demo_assets/dude.jpg +3 -0
  23. ComfyUI-WanBerniniS2V_v2/model_patch.py +226 -0
  24. ComfyUI-WanBerniniS2V_v2/nodes.py +153 -0
  25. ComfyUI-WanBerniniS2V_v2/wan_audio.py +89 -0
  26. README.md +98 -0
  27. Workflow/Bernini-R-S2V_Workflow.json +2174 -0
  28. Workflow/audio_preparation_basic_workflow.json +599 -0
  29. Workflow/silent_audio/silent_1sec.wav +0 -0
  30. Workflow/silent_audio/silent_2sec.wav +3 -0
  31. Workflow/silent_audio/silent_3sec.wav +3 -0
  32. Workflow/silent_audio/silent_4sec.wav +3 -0
  33. Workflow/silent_audio/silent_5sec.wav +3 -0
  34. audio_encoders/wav2vec2_large_english_fp16.safetensors +3 -0
  35. config.json +3 -0
  36. video/ComfyUI__00002-audio.mp4 +3 -0
  37. video/ComfyUI__00003-audio.mp4 +3 -0
  38. video/Triumph_of_the_Iron.mp3 +3 -0
  39. video/anthony.wav +3 -0
  40. video/not_today.wav +3 -0
  41. video/scream_mono.wav +3 -0
.gitattributes ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ video/anthony.wav filter=lfs diff=lfs merge=lfs -text
37
+ video/ComfyUI__00002-audio.mp4 filter=lfs diff=lfs merge=lfs -text
38
+ video/not_today.wav filter=lfs diff=lfs merge=lfs -text
39
+ video/scream_mono.wav filter=lfs diff=lfs merge=lfs -text
40
+ video/Triumph_of_the_Iron.mp3 filter=lfs diff=lfs merge=lfs -text
41
+ Bernini-R-S2V-FP8/video/ComfyUI_00164-audio.mp4 filter=lfs diff=lfs merge=lfs -text
42
+ Bernini-R-S2V-FP8/video/pirate.wav filter=lfs diff=lfs merge=lfs -text
43
+ Bernini-R-S2V-FP8/video/ComfyUI__00005-audio.mp4 filter=lfs diff=lfs merge=lfs -text
44
+ Workflow/silent_audio/silent_2sec.wav filter=lfs diff=lfs merge=lfs -text
45
+ Workflow/silent_audio/silent_3sec.wav filter=lfs diff=lfs merge=lfs -text
46
+ Workflow/silent_audio/silent_4sec.wav filter=lfs diff=lfs merge=lfs -text
47
+ Workflow/silent_audio/silent_5sec.wav filter=lfs diff=lfs merge=lfs -text
48
+ video/ComfyUI__00003-audio.mp4 filter=lfs diff=lfs merge=lfs -text
49
+ ComfyUI-WanBerniniS2V_v2/demo_assets/ComfyUI_00207-audio.mp4 filter=lfs diff=lfs merge=lfs -text
50
+ ComfyUI-WanBerniniS2V_v2/demo_assets/dude.jpg filter=lfs diff=lfs merge=lfs -text
51
+ ComfyUI-WanBerniniS2V_v2/demo_assets/I[[:space:]]am[[:space:]]The[[:space:]]Dude[[:space:]]Playing[[:space:]]The[[:space:]]Dude.wav filter=lfs diff=lfs merge=lfs -text
52
+ ComfyUI-WanBerniniS2V_v2/demo_assets/Im[[:space:]]the[[:space:]]Dude.wav filter=lfs diff=lfs merge=lfs -text
53
+ ComfyUI-WanBerniniS2V_v2/demo_assets/Screenshot_ComfyUI-WanBerniniS2V_v2.png filter=lfs diff=lfs merge=lfs -text
Bernini-R-S2V-FP16/wan2.2_bernini_r_high_noise_fp16_s2v.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:19e68138b6dbea96db244d4b92566d878c354813ab7e45da6285c848260d5d33
3
+ size 32592308250
Bernini-R-S2V-FP16/wan2.2_bernini_r_low_noise_fp16_s2v.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f6af80326c7f7c180da16171a6631a9ae04a6e9ca013d4297f513df57e66d15b
3
+ size 32592308250
Bernini-R-S2V-FP8/video/ComfyUI__00005-audio.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5b07e7696216e344a762bcb3a791bafa680e28c0a39f167285250cc8971cf750
3
+ size 5673505
Bernini-R-S2V-FP8/video/pirate.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ca0441e50577b54580c79dfa2f911701204d0b4fafe7e2f8d9db873b6efafb6e
3
+ size 1965540
Bernini-R-S2V-FP8/wan2.2_bernini_r_high_noise_fp8_scaled_s2v.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5bc161782586f1c9cd42a3681037e4fcd117cebcd7d8d25cdee01c5f9b7ce38d
3
+ size 19589380770
Bernini-R-S2V-FP8/wan2.2_bernini_r_low_noise_fp8_scaled_s2v.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a3d8be2ae587cdf0fcc1dc0845632e3284185ee8b38cbbbf5b2602bc1d63c551
3
+ size 19589380770
Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_high_noise_int8_convrot_s2v.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1a71c3cb2a3ded330086c2211f0525b93e9436fd0114096e662e8f43f28dd7a9
3
+ size 19025569194
Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_low_noise_int8_convrot_s2v.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2c3dd9f648df805ec1dd7ad7ae1866864ed2574f72ab4817d7fc21c135f58e84
3
+ size 19025569194
ComfyUI-WanBerniniS2V/__init__.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ from .model_patch import apply_wan_s2v_bernini_model_patch
2
+
3
+ apply_wan_s2v_bernini_model_patch()
4
+
5
+ from .nodes import comfy_entrypoint
6
+
7
+ __all__ = ["comfy_entrypoint"]
ComfyUI-WanBerniniS2V/model_patch.py ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import inspect
2
+ import logging
3
+
4
+ import torch
5
+
6
+ import comfy.model_management
7
+
8
+
9
+ def _append_context_latents(self, x, kwargs):
10
+ context_latents = kwargs.get("context_latents", None)
11
+ if context_latents is None:
12
+ return x
13
+ for lat in context_latents:
14
+ cl = self.patch_embedding(lat.float().to(x.device)).to(x.dtype).flatten(2).transpose(1, 2)
15
+ x = torch.cat([x, cl], dim=1)
16
+ return x
17
+
18
+
19
+ def apply_wan_s2v_bernini_model_patch():
20
+ from comfy.ldm.wan.model import WanModel_S2V
21
+
22
+ try:
23
+ source = inspect.getsource(WanModel_S2V.forward_orig)
24
+ except (OSError, TypeError):
25
+ source = ""
26
+ if "context_latents" in source:
27
+ return False
28
+
29
+ if getattr(WanModel_S2V.forward_orig, "__wan_bernini_s2v_patch__", False):
30
+ return True
31
+
32
+ original = WanModel_S2V.forward_orig
33
+
34
+ def forward_orig(
35
+ self,
36
+ x,
37
+ t,
38
+ context,
39
+ audio_embed=None,
40
+ reference_latent=None,
41
+ control_video=None,
42
+ reference_motion=None,
43
+ clip_fea=None,
44
+ freqs=None,
45
+ transformer_options={},
46
+ **kwargs,
47
+ ):
48
+ if audio_embed is not None:
49
+ num_embeds = x.shape[-3] * 4
50
+ audio_emb_global, audio_emb = self.casual_audio_encoder(audio_embed[:, :, :, :num_embeds])
51
+ else:
52
+ audio_emb = None
53
+ audio_emb_global = None
54
+
55
+ bs, _, time, height, width = x.shape
56
+ x = self.patch_embedding(x.float()).to(x.dtype)
57
+ if control_video is not None:
58
+ x = x + self.cond_encoder(control_video)
59
+
60
+ if t.ndim == 1:
61
+ t = t.unsqueeze(1).repeat(1, x.shape[2])
62
+
63
+ grid_sizes = x.shape[2:]
64
+ x = x.flatten(2).transpose(1, 2)
65
+ seq_len = x.size(1)
66
+
67
+ cond_mask_weight = comfy.model_management.cast_to(self.trainable_cond_mask.weight, dtype=x.dtype, device=x.device).unsqueeze(1).unsqueeze(1)
68
+ x = x + cond_mask_weight[0]
69
+ x = _append_context_latents(self, x, kwargs)
70
+
71
+ if reference_latent is not None:
72
+ ref = self.patch_embedding(reference_latent.float()).to(x.dtype)
73
+ ref = ref.flatten(2).transpose(1, 2)
74
+ freqs_ref = self.rope_encode(reference_latent.shape[-3], reference_latent.shape[-2], reference_latent.shape[-1], t_start=max(30, time + 9), device=x.device, dtype=x.dtype)
75
+ ref = ref + cond_mask_weight[1]
76
+ x = torch.cat([x, ref], dim=1)
77
+ freqs = torch.cat([freqs, freqs_ref], dim=1)
78
+ t = torch.cat([t, torch.zeros((t.shape[0], reference_latent.shape[-3]), device=t.device, dtype=t.dtype)], dim=1)
79
+
80
+ if reference_motion is not None:
81
+ motion_encoded, freqs_motion = self.frame_packer(reference_motion, self)
82
+ motion_encoded = motion_encoded + cond_mask_weight[2]
83
+ x = torch.cat([x, motion_encoded], dim=1)
84
+ freqs = torch.cat([freqs, freqs_motion], dim=1)
85
+ t = torch.repeat_interleave(t, 2, dim=1)
86
+ t = torch.cat([t, torch.zeros((t.shape[0], 3), device=t.device, dtype=t.dtype)], dim=1)
87
+
88
+ from comfy.ldm.wan.model import sinusoidal_embedding_1d
89
+
90
+ e = self.time_embedding(
91
+ sinusoidal_embedding_1d(self.freq_dim, t.flatten()).to(dtype=x[0].dtype))
92
+ e = e.reshape(t.shape[0], -1, e.shape[-1])
93
+ e0 = self.time_projection(e).unflatten(2, (6, self.dim))
94
+
95
+ context = self.text_embedding(context)
96
+
97
+ patches_replace = transformer_options.get("patches_replace", {})
98
+ blocks_replace = patches_replace.get("dit", {})
99
+ transformer_options["total_blocks"] = len(self.blocks)
100
+ transformer_options["block_type"] = "double"
101
+ for i, block in enumerate(self.blocks):
102
+ transformer_options["block_index"] = i
103
+ if ("double_block", i) in blocks_replace:
104
+ def block_wrap(args):
105
+ out = {}
106
+ out["img"] = block(args["img"], context=args["txt"], e=args["vec"], freqs=args["pe"], transformer_options=args["transformer_options"])
107
+ return out
108
+ out = blocks_replace[("double_block", i)]({"img": x, "txt": context, "vec": e0, "pe": freqs, "transformer_options": transformer_options}, {"original_block": block_wrap})
109
+ x = out["img"]
110
+ else:
111
+ x = block(x, e=e0, freqs=freqs, context=context, transformer_options=transformer_options)
112
+ if audio_emb is not None:
113
+ x = self.audio_injector(x, i, audio_emb, audio_emb_global, seq_len)
114
+ x = self.head(x, e)
115
+ x = self.unpatchify(x, grid_sizes)
116
+ return x
117
+
118
+ forward_orig.__wan_bernini_s2v_patch__ = True
119
+ forward_orig.__wan_bernini_s2v_original__ = original
120
+ WanModel_S2V.forward_orig = forward_orig
121
+ logging.info("ComfyUI-WanBerniniS2V: patched WanModel_S2V.forward_orig for Bernini context_latents")
122
+ return True
ComfyUI-WanBerniniS2V/nodes.py ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from typing_extensions import override
3
+
4
+ import comfy.model_management
5
+ import comfy.utils
6
+ import node_helpers
7
+ from comfy_api.latest import ComfyExtension, io
8
+
9
+ from .wan_audio import apply_wan_s2v_audio_conditioning
10
+
11
+
12
+ def _resize_long_edge(image, max_size, stride=16):
13
+ h, w = image.shape[1], image.shape[2]
14
+ scale = min(max_size / max(h, w), 1.0)
15
+ nh = max(stride, round(h * scale / stride) * stride)
16
+ nw = max(stride, round(w * scale / stride) * stride)
17
+ return comfy.utils.common_upscale(image[:, :, :, :3].movedim(-1, 1), nw, nh, "area", "disabled").movedim(1, -1)
18
+
19
+
20
+ class BerniniS2VConditioning(io.ComfyNode):
21
+ """Bernini in-context conditioning plus Wan 2.2 S2V audio."""
22
+
23
+ @classmethod
24
+ def define_schema(cls):
25
+ return io.Schema(
26
+ node_id="BerniniS2VConditioning",
27
+ display_name="Bernini S2V Conditioning",
28
+ category="model/conditioning/bernini",
29
+ description="Bernini in-context video/image conditioning with optional S2V audio. Requires a Wan2.2 S2V grafted diffusion model.",
30
+ inputs=[
31
+ io.Conditioning.Input("positive"),
32
+ io.Conditioning.Input("negative"),
33
+ io.Vae.Input("vae"),
34
+ io.Int.Input("width", default=832, min=16, max=8192, step=16),
35
+ io.Int.Input("height", default=480, min=16, max=8192, step=16),
36
+ io.Int.Input("length", default=81, min=1, max=8192, step=4),
37
+ io.Int.Input("batch_size", default=1, min=1, max=4096),
38
+ io.AudioEncoderOutput.Input("audio_encoder_output", optional=True),
39
+ io.Image.Input("source_video", optional=True),
40
+ io.Image.Input("reference_video", optional=True),
41
+ io.Autogrow.Input("reference_images", optional=True,
42
+ template=io.Autogrow.TemplatePrefix(
43
+ input=io.Image.Input("reference_image"),
44
+ prefix="reference_image_", min=0, max=8)),
45
+ io.Int.Input("ref_max_size", default=848, min=16, max=8192, step=16, optional=True),
46
+ ],
47
+ outputs=[
48
+ io.Conditioning.Output(display_name="positive"),
49
+ io.Conditioning.Output(display_name="negative"),
50
+ io.Latent.Output(display_name="latent"),
51
+ ],
52
+ )
53
+
54
+ @classmethod
55
+ def execute(cls, positive, negative, vae, width, height, length, batch_size, audio_encoder_output=None, source_video=None, reference_video=None, reference_images=None, ref_max_size=848) -> io.NodeOutput:
56
+ positive, negative, _ = apply_wan_s2v_audio_conditioning(positive, negative, length, audio_encoder_output=audio_encoder_output)
57
+
58
+ latent = torch.zeros([batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device())
59
+
60
+ context = []
61
+ if source_video is not None:
62
+ vid = comfy.utils.common_upscale(source_video[:length, :, :, :3].movedim(-1, 1), width, height, "area", "center").movedim(1, -1)
63
+ context.append(vae.encode(vid[:, :, :, :3]))
64
+
65
+ if reference_video is not None:
66
+ ref_vid = _resize_long_edge(reference_video[:length], ref_max_size)
67
+ context.append(vae.encode(ref_vid[:, :, :, :3]))
68
+
69
+ if reference_images:
70
+ for name in sorted(reference_images):
71
+ imgs = reference_images[name]
72
+ if imgs is None:
73
+ continue
74
+ for i in range(imgs.shape[0]):
75
+ img = _resize_long_edge(imgs[i:i + 1], ref_max_size)
76
+ context.append(vae.encode(img[:, :, :, :3]))
77
+
78
+ if context:
79
+ positive = node_helpers.conditioning_set_values(positive, {"context_latents": context})
80
+ negative = node_helpers.conditioning_set_values(negative, {"context_latents": context})
81
+
82
+ return io.NodeOutput(positive, negative, {"samples": latent})
83
+
84
+
85
+ class WanBerniniS2VExtension(ComfyExtension):
86
+ @override
87
+ async def get_node_list(self) -> list[type[io.ComfyNode]]:
88
+ return [BerniniS2VConditioning]
89
+
90
+
91
+ async def comfy_entrypoint() -> WanBerniniS2VExtension:
92
+ return WanBerniniS2VExtension()
ComfyUI-WanBerniniS2V/wan_audio.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+
3
+ import node_helpers
4
+ from comfy_extras.nodes_wan import get_audio_embed_bucket_fps, linear_interpolation
5
+
6
+
7
+ def apply_wan_s2v_audio_conditioning(positive, negative, length, audio_encoder_output=None, frame_offset=0):
8
+ if audio_encoder_output is None:
9
+ return positive, negative, frame_offset
10
+
11
+ latent_t = ((length - 1) // 4) + 1
12
+ feat = torch.cat(audio_encoder_output["encoded_audio_all_layers"])
13
+ video_rate = 30
14
+ fps = 16
15
+ feat = linear_interpolation(feat, input_fps=50, output_fps=video_rate)
16
+ batch_frames = latent_t * 4
17
+ audio_embed_bucket, _ = get_audio_embed_bucket_fps(feat, fps=fps, batch_frames=batch_frames, m=0, video_rate=video_rate)
18
+ audio_embed_bucket = audio_embed_bucket.unsqueeze(0)
19
+ if len(audio_embed_bucket.shape) == 3:
20
+ audio_embed_bucket = audio_embed_bucket.permute(0, 2, 1)
21
+ elif len(audio_embed_bucket.shape) == 4:
22
+ audio_embed_bucket = audio_embed_bucket.permute(0, 2, 3, 1)
23
+
24
+ audio_embed_bucket = audio_embed_bucket[:, :, :, frame_offset:frame_offset + batch_frames]
25
+ if audio_embed_bucket.shape[3] > 0:
26
+ positive = node_helpers.conditioning_set_values(positive, {"audio_embed": audio_embed_bucket})
27
+ negative = node_helpers.conditioning_set_values(negative, {"audio_embed": audio_embed_bucket * 0.0})
28
+ frame_offset += batch_frames
29
+ return positive, negative, frame_offset
ComfyUI-WanBerniniS2V_v2/ComfyUI-WanBerniniS2V_v2.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:790d32a15fe19a572ab199ff9c9f7ae0c3099ba3169f3c9a51538a723700fa84
3
+ size 2524040
ComfyUI-WanBerniniS2V_v2/Workflow/Bernini-R-S2V-Workflow-V2.json ADDED
@@ -0,0 +1,2857 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "id": "ea7ba43e-ab56-40d4-a298-423f5bfe4462",
3
+ "revision": 0,
4
+ "last_node_id": 279,
5
+ "last_link_id": 758,
6
+ "nodes": [
7
+ {
8
+ "id": 80,
9
+ "type": "VAEDecode",
10
+ "pos": [
11
+ 1210,
12
+ 170
13
+ ],
14
+ "size": [
15
+ 210,
16
+ 50
17
+ ],
18
+ "flags": {},
19
+ "order": 41,
20
+ "mode": 0,
21
+ "inputs": [
22
+ {
23
+ "name": "samples",
24
+ "type": "LATENT",
25
+ "link": 533
26
+ },
27
+ {
28
+ "name": "vae",
29
+ "type": "VAE",
30
+ "link": 285
31
+ }
32
+ ],
33
+ "outputs": [
34
+ {
35
+ "name": "IMAGE",
36
+ "type": "IMAGE",
37
+ "links": [
38
+ 580
39
+ ]
40
+ }
41
+ ],
42
+ "properties": {
43
+ "cnr_id": "comfy-core",
44
+ "ver": "0.3.54",
45
+ "Node name for S&R": "VAEDecode"
46
+ },
47
+ "widgets_values": []
48
+ },
49
+ {
50
+ "id": 38,
51
+ "type": "CLIPLoader",
52
+ "pos": [
53
+ -530,
54
+ 470
55
+ ],
56
+ "size": [
57
+ 390,
58
+ 110
59
+ ],
60
+ "flags": {},
61
+ "order": 0,
62
+ "mode": 0,
63
+ "inputs": [],
64
+ "outputs": [
65
+ {
66
+ "name": "CLIP",
67
+ "type": "CLIP",
68
+ "slot_index": 0,
69
+ "links": [
70
+ 74,
71
+ 75
72
+ ]
73
+ }
74
+ ],
75
+ "properties": {
76
+ "cnr_id": "comfy-core",
77
+ "ver": "0.3.54",
78
+ "Node name for S&R": "CLIPLoader",
79
+ "models": [
80
+ {
81
+ "name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
82
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors",
83
+ "directory": "text_encoders"
84
+ }
85
+ ]
86
+ },
87
+ "widgets_values": [
88
+ "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
89
+ "wan",
90
+ "default"
91
+ ]
92
+ },
93
+ {
94
+ "id": 201,
95
+ "type": "RIFEInterpolation",
96
+ "pos": [
97
+ 1480,
98
+ 170
99
+ ],
100
+ "size": [
101
+ 270,
102
+ 180
103
+ ],
104
+ "flags": {},
105
+ "order": 42,
106
+ "mode": 0,
107
+ "inputs": [
108
+ {
109
+ "name": "images",
110
+ "type": "IMAGE",
111
+ "link": 580
112
+ }
113
+ ],
114
+ "outputs": [
115
+ {
116
+ "name": "images",
117
+ "type": "IMAGE",
118
+ "links": [
119
+ 629
120
+ ]
121
+ }
122
+ ],
123
+ "properties": {
124
+ "aux_id": "GACLove/ComfyUI-VFI",
125
+ "ver": "6176a430f12cd16003f4664c1e3c6af8e96cc3c6",
126
+ "Node name for S&R": "RIFEInterpolation"
127
+ },
128
+ "widgets_values": [
129
+ 16,
130
+ 24,
131
+ 2,
132
+ "flownet.pkl",
133
+ 4,
134
+ true
135
+ ]
136
+ },
137
+ {
138
+ "id": 210,
139
+ "type": "LoraLoaderModelOnly",
140
+ "pos": [
141
+ 1560,
142
+ 450
143
+ ],
144
+ "size": [
145
+ 360,
146
+ 90
147
+ ],
148
+ "flags": {},
149
+ "order": 18,
150
+ "mode": 0,
151
+ "inputs": [
152
+ {
153
+ "name": "model",
154
+ "type": "MODEL",
155
+ "link": 586
156
+ }
157
+ ],
158
+ "outputs": [
159
+ {
160
+ "name": "MODEL",
161
+ "type": "MODEL",
162
+ "links": [
163
+ 581
164
+ ]
165
+ }
166
+ ],
167
+ "properties": {
168
+ "cnr_id": "comfy-core",
169
+ "ver": "0.3.54",
170
+ "Node name for S&R": "LoraLoaderModelOnly",
171
+ "models": [
172
+ {
173
+ "name": "wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
174
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
175
+ "directory": "loras"
176
+ }
177
+ ]
178
+ },
179
+ "widgets_values": [
180
+ "Wan-Speed/Bernini-R/Bernini-R_LightX2V_low_noise.safetensors",
181
+ 1
182
+ ]
183
+ },
184
+ {
185
+ "id": 54,
186
+ "type": "ModelSamplingSD3",
187
+ "pos": [
188
+ 1140,
189
+ 590
190
+ ],
191
+ "size": [
192
+ 370,
193
+ 60
194
+ ],
195
+ "flags": {},
196
+ "order": 25,
197
+ "mode": 4,
198
+ "inputs": [
199
+ {
200
+ "name": "model",
201
+ "type": "MODEL",
202
+ "link": 363
203
+ }
204
+ ],
205
+ "outputs": [
206
+ {
207
+ "name": "MODEL",
208
+ "type": "MODEL",
209
+ "slot_index": 0,
210
+ "links": [
211
+ 522
212
+ ]
213
+ }
214
+ ],
215
+ "properties": {
216
+ "cnr_id": "comfy-core",
217
+ "ver": "0.3.54",
218
+ "Node name for S&R": "ModelSamplingSD3"
219
+ },
220
+ "widgets_values": [
221
+ 8
222
+ ]
223
+ },
224
+ {
225
+ "id": 214,
226
+ "type": "ModelSamplingSD3",
227
+ "pos": [
228
+ 1560,
229
+ 590
230
+ ],
231
+ "size": [
232
+ 360,
233
+ 60
234
+ ],
235
+ "flags": {},
236
+ "order": 26,
237
+ "mode": 4,
238
+ "inputs": [
239
+ {
240
+ "name": "model",
241
+ "type": "MODEL",
242
+ "link": 581
243
+ }
244
+ ],
245
+ "outputs": [
246
+ {
247
+ "name": "MODEL",
248
+ "type": "MODEL",
249
+ "slot_index": 0,
250
+ "links": [
251
+ 582
252
+ ]
253
+ }
254
+ ],
255
+ "properties": {
256
+ "cnr_id": "comfy-core",
257
+ "ver": "0.3.54",
258
+ "Node name for S&R": "ModelSamplingSD3"
259
+ },
260
+ "widgets_values": [
261
+ 8
262
+ ]
263
+ },
264
+ {
265
+ "id": 207,
266
+ "type": "KSamplerAdvanced",
267
+ "pos": [
268
+ 1560,
269
+ 690
270
+ ],
271
+ "size": [
272
+ 360,
273
+ 340
274
+ ],
275
+ "flags": {},
276
+ "order": 40,
277
+ "mode": 0,
278
+ "inputs": [
279
+ {
280
+ "name": "model",
281
+ "type": "MODEL",
282
+ "link": 582
283
+ },
284
+ {
285
+ "name": "positive",
286
+ "type": "CONDITIONING",
287
+ "link": 741
288
+ },
289
+ {
290
+ "name": "negative",
291
+ "type": "CONDITIONING",
292
+ "link": 743
293
+ },
294
+ {
295
+ "name": "latent_image",
296
+ "type": "LATENT",
297
+ "link": 526
298
+ }
299
+ ],
300
+ "outputs": [
301
+ {
302
+ "name": "LATENT",
303
+ "type": "LATENT",
304
+ "links": [
305
+ 533
306
+ ]
307
+ }
308
+ ],
309
+ "properties": {
310
+ "cnr_id": "comfy-core",
311
+ "ver": "0.27.0",
312
+ "Node name for S&R": "KSamplerAdvanced"
313
+ },
314
+ "widgets_values": [
315
+ "disable",
316
+ 0,
317
+ "fixed",
318
+ 4,
319
+ 1,
320
+ "dpmpp_2m_sde",
321
+ "sgm_uniform",
322
+ 2,
323
+ 4,
324
+ "disable"
325
+ ]
326
+ },
327
+ {
328
+ "id": 250,
329
+ "type": "StringConcatenate",
330
+ "pos": [
331
+ -520,
332
+ 930
333
+ ],
334
+ "size": [
335
+ 400,
336
+ 250
337
+ ],
338
+ "flags": {},
339
+ "order": 24,
340
+ "mode": 0,
341
+ "inputs": [
342
+ {
343
+ "name": "string_a",
344
+ "type": "STRING",
345
+ "widget": {
346
+ "name": "string_a"
347
+ },
348
+ "link": 662
349
+ },
350
+ {
351
+ "name": "string_b",
352
+ "type": "STRING",
353
+ "widget": {
354
+ "name": "string_b"
355
+ },
356
+ "link": 664
357
+ }
358
+ ],
359
+ "outputs": [
360
+ {
361
+ "name": "STRING",
362
+ "type": "STRING",
363
+ "links": [
364
+ 663
365
+ ]
366
+ }
367
+ ],
368
+ "properties": {
369
+ "cnr_id": "comfy-core",
370
+ "ver": "0.24.0",
371
+ "Node name for S&R": "StringConcatenate"
372
+ },
373
+ "widgets_values": [
374
+ "",
375
+ "",
376
+ "."
377
+ ]
378
+ },
379
+ {
380
+ "id": 6,
381
+ "type": "CLIPTextEncode",
382
+ "pos": [
383
+ -50,
384
+ 750
385
+ ],
386
+ "size": [
387
+ 670,
388
+ 280
389
+ ],
390
+ "flags": {
391
+ "collapsed": true
392
+ },
393
+ "order": 30,
394
+ "mode": 0,
395
+ "inputs": [
396
+ {
397
+ "name": "clip",
398
+ "type": "CLIP",
399
+ "link": 74
400
+ },
401
+ {
402
+ "name": "text",
403
+ "type": "STRING",
404
+ "widget": {
405
+ "name": "text"
406
+ },
407
+ "link": 663
408
+ }
409
+ ],
410
+ "outputs": [
411
+ {
412
+ "name": "CONDITIONING",
413
+ "type": "CONDITIONING",
414
+ "slot_index": 0,
415
+ "links": [
416
+ 725
417
+ ]
418
+ }
419
+ ],
420
+ "title": "CLIP Text Encode (Positive Prompt)",
421
+ "properties": {
422
+ "cnr_id": "comfy-core",
423
+ "ver": "0.3.54",
424
+ "Node name for S&R": "CLIPTextEncode"
425
+ },
426
+ "widgets_values": [
427
+ ""
428
+ ],
429
+ "color": "#232",
430
+ "bgcolor": "#353"
431
+ },
432
+ {
433
+ "id": 251,
434
+ "type": "CustomCombo",
435
+ "pos": [
436
+ -1020,
437
+ 760
438
+ ],
439
+ "size": [
440
+ 460,
441
+ 390
442
+ ],
443
+ "flags": {},
444
+ "order": 1,
445
+ "mode": 0,
446
+ "inputs": [],
447
+ "outputs": [
448
+ {
449
+ "name": "STRING",
450
+ "type": "STRING",
451
+ "links": []
452
+ },
453
+ {
454
+ "name": "INDEX",
455
+ "type": "INT",
456
+ "links": [
457
+ 661
458
+ ]
459
+ }
460
+ ],
461
+ "properties": {
462
+ "cnr_id": "comfy-core",
463
+ "ver": "0.24.0",
464
+ "Node name for S&R": "CustomCombo"
465
+ },
466
+ "widgets_values": [
467
+ "Image to Video",
468
+ 5,
469
+ "Default",
470
+ "Text to Image",
471
+ "Text to Video",
472
+ "Image Editing",
473
+ "Subject to Image",
474
+ "Image to Video",
475
+ "Video Editing",
476
+ "Video Editing (Content Propagation)",
477
+ "Video Editing with Reference",
478
+ "Ads / Content Insertion",
479
+ "Video Editing (Action / Position)",
480
+ "Video Editing (Style / Motion)",
481
+ ""
482
+ ]
483
+ },
484
+ {
485
+ "id": 249,
486
+ "type": "6da2792c-a953-4960-a53a-ff1b5df6fe09",
487
+ "pos": [
488
+ -530,
489
+ 750
490
+ ],
491
+ "size": [
492
+ 410,
493
+ 150
494
+ ],
495
+ "flags": {},
496
+ "order": 15,
497
+ "mode": 0,
498
+ "inputs": [
499
+ {
500
+ "name": "index",
501
+ "type": "INT",
502
+ "widget": {
503
+ "name": "index"
504
+ },
505
+ "link": 661
506
+ }
507
+ ],
508
+ "outputs": [
509
+ {
510
+ "name": "selected_line",
511
+ "type": "STRING",
512
+ "links": [
513
+ 662
514
+ ]
515
+ }
516
+ ],
517
+ "properties": {
518
+ "proxyWidgets": [
519
+ [
520
+ "2",
521
+ "string"
522
+ ],
523
+ [
524
+ "248",
525
+ "value"
526
+ ]
527
+ ],
528
+ "cnr_id": "comfy-core",
529
+ "ver": "0.19.0",
530
+ "ue_properties": {
531
+ "widget_ue_connectable": {},
532
+ "input_ue_unconnectable": {}
533
+ }
534
+ },
535
+ "widgets_values": []
536
+ },
537
+ {
538
+ "id": 107,
539
+ "type": "LoraLoaderModelOnly",
540
+ "pos": [
541
+ 1140,
542
+ 450
543
+ ],
544
+ "size": [
545
+ 380,
546
+ 90
547
+ ],
548
+ "flags": {},
549
+ "order": 17,
550
+ "mode": 0,
551
+ "inputs": [
552
+ {
553
+ "name": "model",
554
+ "type": "MODEL",
555
+ "link": 585
556
+ }
557
+ ],
558
+ "outputs": [
559
+ {
560
+ "name": "MODEL",
561
+ "type": "MODEL",
562
+ "links": [
563
+ 363
564
+ ]
565
+ }
566
+ ],
567
+ "properties": {
568
+ "cnr_id": "comfy-core",
569
+ "ver": "0.3.54",
570
+ "Node name for S&R": "LoraLoaderModelOnly",
571
+ "models": [
572
+ {
573
+ "name": "wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
574
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
575
+ "directory": "loras"
576
+ }
577
+ ]
578
+ },
579
+ "widgets_values": [
580
+ "Wan-Speed/Bernini-R/Bernini-R_LightX2V_high_noise.safetensors",
581
+ 1
582
+ ]
583
+ },
584
+ {
585
+ "id": 205,
586
+ "type": "KSamplerAdvanced",
587
+ "pos": [
588
+ 1130,
589
+ 710
590
+ ],
591
+ "size": [
592
+ 370,
593
+ 340
594
+ ],
595
+ "flags": {},
596
+ "order": 38,
597
+ "mode": 0,
598
+ "inputs": [
599
+ {
600
+ "name": "model",
601
+ "type": "MODEL",
602
+ "link": 522
603
+ },
604
+ {
605
+ "name": "positive",
606
+ "type": "CONDITIONING",
607
+ "link": 740
608
+ },
609
+ {
610
+ "name": "negative",
611
+ "type": "CONDITIONING",
612
+ "link": 742
613
+ },
614
+ {
615
+ "name": "latent_image",
616
+ "type": "LATENT",
617
+ "link": 744
618
+ }
619
+ ],
620
+ "outputs": [
621
+ {
622
+ "name": "LATENT",
623
+ "type": "LATENT",
624
+ "links": [
625
+ 526
626
+ ]
627
+ }
628
+ ],
629
+ "properties": {
630
+ "cnr_id": "comfy-core",
631
+ "ver": "0.27.0",
632
+ "Node name for S&R": "KSamplerAdvanced"
633
+ },
634
+ "widgets_values": [
635
+ "enable",
636
+ 780018084687208,
637
+ "randomize",
638
+ 4,
639
+ 1,
640
+ "dpmpp_2m_sde",
641
+ "sgm_uniform",
642
+ 0,
643
+ 2,
644
+ "enable"
645
+ ]
646
+ },
647
+ {
648
+ "id": 271,
649
+ "type": "Reroute",
650
+ "pos": [
651
+ -360,
652
+ 1610
653
+ ],
654
+ "size": [
655
+ 75,
656
+ 26
657
+ ],
658
+ "flags": {},
659
+ "order": 29,
660
+ "mode": 0,
661
+ "inputs": [
662
+ {
663
+ "name": "",
664
+ "type": "*",
665
+ "link": 737
666
+ }
667
+ ],
668
+ "outputs": [
669
+ {
670
+ "name": "",
671
+ "type": "AUDIO",
672
+ "links": [
673
+ 738,
674
+ 739
675
+ ]
676
+ }
677
+ ],
678
+ "properties": {
679
+ "showOutputText": false,
680
+ "horizontal": false
681
+ },
682
+ "color": "#323",
683
+ "bgcolor": "#535"
684
+ },
685
+ {
686
+ "id": 39,
687
+ "type": "VAELoader",
688
+ "pos": [
689
+ 530,
690
+ 730
691
+ ],
692
+ "size": [
693
+ 210,
694
+ 60
695
+ ],
696
+ "flags": {
697
+ "collapsed": true
698
+ },
699
+ "order": 2,
700
+ "mode": 0,
701
+ "inputs": [],
702
+ "outputs": [
703
+ {
704
+ "name": "VAE",
705
+ "type": "VAE",
706
+ "slot_index": 0,
707
+ "links": [
708
+ 285,
709
+ 727
710
+ ]
711
+ }
712
+ ],
713
+ "properties": {
714
+ "cnr_id": "comfy-core",
715
+ "ver": "0.3.54",
716
+ "Node name for S&R": "VAELoader",
717
+ "models": [
718
+ {
719
+ "name": "wan_2.1_vae.safetensors",
720
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan_2.1_vae.safetensors",
721
+ "directory": "vae"
722
+ }
723
+ ]
724
+ },
725
+ "widgets_values": [
726
+ "Wan/Wan2_1_VAE_fp32.safetensors"
727
+ ]
728
+ },
729
+ {
730
+ "id": 235,
731
+ "type": "Reroute",
732
+ "pos": [
733
+ -350,
734
+ 1410
735
+ ],
736
+ "size": [
737
+ 75,
738
+ 26
739
+ ],
740
+ "flags": {},
741
+ "order": 28,
742
+ "mode": 0,
743
+ "inputs": [
744
+ {
745
+ "name": "",
746
+ "type": "*",
747
+ "link": 736
748
+ }
749
+ ],
750
+ "outputs": [
751
+ {
752
+ "name": "",
753
+ "type": "AUDIO",
754
+ "links": [
755
+ 622,
756
+ 717
757
+ ]
758
+ }
759
+ ],
760
+ "properties": {
761
+ "showOutputText": false,
762
+ "horizontal": false
763
+ },
764
+ "color": "#323",
765
+ "bgcolor": "#535"
766
+ },
767
+ {
768
+ "id": 270,
769
+ "type": "Reroute",
770
+ "pos": [
771
+ -450,
772
+ 1290
773
+ ],
774
+ "size": [
775
+ 75,
776
+ 26
777
+ ],
778
+ "flags": {},
779
+ "order": 19,
780
+ "mode": 0,
781
+ "inputs": [
782
+ {
783
+ "name": "",
784
+ "type": "*",
785
+ "link": 733
786
+ }
787
+ ],
788
+ "outputs": [
789
+ {
790
+ "name": "",
791
+ "type": "AUDIO_ENCODER",
792
+ "links": [
793
+ 734,
794
+ 735
795
+ ]
796
+ }
797
+ ],
798
+ "properties": {
799
+ "showOutputText": false,
800
+ "horizontal": false
801
+ }
802
+ },
803
+ {
804
+ "id": 241,
805
+ "type": "LoadImage",
806
+ "pos": [
807
+ -40,
808
+ 840
809
+ ],
810
+ "size": [
811
+ 290,
812
+ 320
813
+ ],
814
+ "flags": {},
815
+ "order": 3,
816
+ "mode": 0,
817
+ "inputs": [],
818
+ "outputs": [
819
+ {
820
+ "name": "IMAGE",
821
+ "type": "IMAGE",
822
+ "links": [
823
+ 731
824
+ ]
825
+ },
826
+ {
827
+ "name": "MASK",
828
+ "type": "MASK",
829
+ "links": [
830
+ 702,
831
+ 729
832
+ ]
833
+ }
834
+ ],
835
+ "title": "image0 & mask_1",
836
+ "properties": {
837
+ "cnr_id": "comfy-core",
838
+ "ver": "0.27.0",
839
+ "Node name for S&R": "LoadImage",
840
+ "image": "clipspace/clipspace-painted-masked-1783665396446.png [input]"
841
+ },
842
+ "widgets_values": [
843
+ "clipspace/clipspace-painted-masked-1783665396446.png [input]",
844
+ "image"
845
+ ]
846
+ },
847
+ {
848
+ "id": 265,
849
+ "type": "InvertMask",
850
+ "pos": [
851
+ 240,
852
+ 790
853
+ ],
854
+ "size": [
855
+ 140,
856
+ 30
857
+ ],
858
+ "flags": {
859
+ "collapsed": true
860
+ },
861
+ "order": 16,
862
+ "mode": 4,
863
+ "inputs": [
864
+ {
865
+ "name": "mask",
866
+ "type": "MASK",
867
+ "link": 702
868
+ }
869
+ ],
870
+ "outputs": [
871
+ {
872
+ "name": "MASK",
873
+ "type": "MASK",
874
+ "links": []
875
+ }
876
+ ],
877
+ "properties": {
878
+ "cnr_id": "comfy-core",
879
+ "ver": "0.27.0",
880
+ "Node name for S&R": "InvertMask"
881
+ },
882
+ "widgets_values": []
883
+ },
884
+ {
885
+ "id": 7,
886
+ "type": "CLIPTextEncode",
887
+ "pos": [
888
+ 10,
889
+ 500
890
+ ],
891
+ "size": [
892
+ 650,
893
+ 180
894
+ ],
895
+ "flags": {
896
+ "collapsed": true
897
+ },
898
+ "order": 14,
899
+ "mode": 0,
900
+ "inputs": [
901
+ {
902
+ "name": "clip",
903
+ "type": "CLIP",
904
+ "link": 75
905
+ }
906
+ ],
907
+ "outputs": [
908
+ {
909
+ "name": "CONDITIONING",
910
+ "type": "CONDITIONING",
911
+ "slot_index": 0,
912
+ "links": [
913
+ 726
914
+ ]
915
+ }
916
+ ],
917
+ "title": "CLIP Text Encode (Negative Prompt)",
918
+ "properties": {
919
+ "cnr_id": "comfy-core",
920
+ "ver": "0.3.54",
921
+ "Node name for S&R": "CLIPTextEncode"
922
+ },
923
+ "widgets_values": [
924
+ "Vivid color tone, overexposed, static, unclear details, subtitles, style, artwork, painting, image, still, overall grayish, worst quality, low quality, leftover JPEG compression artifacts, ugly, incomplete, missing parts, extra fingers, poorly drawn hands, poorly drawn face, disfigured, malformed body parts, fused fingers, a completely motionless image, messy background, three legs, many people in the background, walking backward."
925
+ ],
926
+ "color": "#223",
927
+ "bgcolor": "#335"
928
+ },
929
+ {
930
+ "id": 37,
931
+ "type": "UNETLoader",
932
+ "pos": [
933
+ -530,
934
+ 180
935
+ ],
936
+ "size": [
937
+ 390,
938
+ 90
939
+ ],
940
+ "flags": {},
941
+ "order": 4,
942
+ "mode": 0,
943
+ "inputs": [],
944
+ "outputs": [
945
+ {
946
+ "name": "MODEL",
947
+ "type": "MODEL",
948
+ "slot_index": 0,
949
+ "links": [
950
+ 585
951
+ ]
952
+ }
953
+ ],
954
+ "properties": {
955
+ "cnr_id": "comfy-core",
956
+ "ver": "0.3.54",
957
+ "Node name for S&R": "UNETLoader",
958
+ "models": [
959
+ {
960
+ "name": "wan2.2_s2v_14B_fp8_scaled.safetensors",
961
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_s2v_14B_fp8_scaled.safetensors",
962
+ "directory": "diffusion_models"
963
+ }
964
+ ]
965
+ },
966
+ "widgets_values": [
967
+ "Bernini-R_fp8/Bernini-R-S2V-FP8/wan2.2_bernini_r_high_noise_fp8_scaled_s2v.safetensors",
968
+ "default"
969
+ ]
970
+ },
971
+ {
972
+ "id": 204,
973
+ "type": "UNETLoader",
974
+ "pos": [
975
+ -530,
976
+ 320
977
+ ],
978
+ "size": [
979
+ 390,
980
+ 90
981
+ ],
982
+ "flags": {},
983
+ "order": 5,
984
+ "mode": 0,
985
+ "inputs": [],
986
+ "outputs": [
987
+ {
988
+ "name": "MODEL",
989
+ "type": "MODEL",
990
+ "slot_index": 0,
991
+ "links": [
992
+ 586
993
+ ]
994
+ }
995
+ ],
996
+ "properties": {
997
+ "cnr_id": "comfy-core",
998
+ "ver": "0.3.54",
999
+ "Node name for S&R": "UNETLoader",
1000
+ "models": [
1001
+ {
1002
+ "name": "wan2.2_s2v_14B_fp8_scaled.safetensors",
1003
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_s2v_14B_fp8_scaled.safetensors",
1004
+ "directory": "diffusion_models"
1005
+ }
1006
+ ]
1007
+ },
1008
+ "widgets_values": [
1009
+ "Bernini-R_fp8/Bernini-R-S2V-FP8/wan2.2_bernini_r_low_noise_fp8_scaled_s2v.safetensors",
1010
+ "default"
1011
+ ]
1012
+ },
1013
+ {
1014
+ "id": 267,
1015
+ "type": "AudioConcat",
1016
+ "pos": [
1017
+ -210,
1018
+ 1290
1019
+ ],
1020
+ "size": [
1021
+ 290,
1022
+ 80
1023
+ ],
1024
+ "flags": {},
1025
+ "order": 34,
1026
+ "mode": 0,
1027
+ "inputs": [
1028
+ {
1029
+ "name": "audio1",
1030
+ "type": "AUDIO",
1031
+ "link": 717
1032
+ },
1033
+ {
1034
+ "name": "audio2",
1035
+ "type": "AUDIO",
1036
+ "link": 739
1037
+ }
1038
+ ],
1039
+ "outputs": [
1040
+ {
1041
+ "name": "AUDIO",
1042
+ "type": "AUDIO",
1043
+ "links": [
1044
+ 745,
1045
+ 754
1046
+ ]
1047
+ }
1048
+ ],
1049
+ "title": "audio_1 + audio_2",
1050
+ "properties": {
1051
+ "cnr_id": "comfy-core",
1052
+ "ver": "0.27.0",
1053
+ "Node name for S&R": "AudioConcat"
1054
+ },
1055
+ "widgets_values": [
1056
+ "after"
1057
+ ]
1058
+ },
1059
+ {
1060
+ "id": 238,
1061
+ "type": "ComfyMathExpression",
1062
+ "pos": [
1063
+ 1110,
1064
+ 1110
1065
+ ],
1066
+ "size": [
1067
+ 400,
1068
+ 200
1069
+ ],
1070
+ "flags": {
1071
+ "collapsed": true
1072
+ },
1073
+ "order": 21,
1074
+ "mode": 0,
1075
+ "inputs": [
1076
+ {
1077
+ "label": "a",
1078
+ "name": "values.a",
1079
+ "type": "FLOAT,INT,BOOLEAN",
1080
+ "link": 627
1081
+ },
1082
+ {
1083
+ "label": "b",
1084
+ "name": "values.b",
1085
+ "shape": 7,
1086
+ "type": "FLOAT,INT,BOOLEAN",
1087
+ "link": null
1088
+ }
1089
+ ],
1090
+ "outputs": [
1091
+ {
1092
+ "name": "FLOAT",
1093
+ "type": "FLOAT",
1094
+ "links": null
1095
+ },
1096
+ {
1097
+ "name": "INT",
1098
+ "type": "INT",
1099
+ "links": [
1100
+ 641,
1101
+ 724
1102
+ ]
1103
+ },
1104
+ {
1105
+ "name": "BOOL",
1106
+ "type": "BOOLEAN",
1107
+ "links": null
1108
+ }
1109
+ ],
1110
+ "title": "16 F/S",
1111
+ "properties": {
1112
+ "cnr_id": "comfy-core",
1113
+ "ver": "0.27.0",
1114
+ "Node name for S&R": "ComfyMathExpression"
1115
+ },
1116
+ "widgets_values": [
1117
+ "a * 16 + 1"
1118
+ ]
1119
+ },
1120
+ {
1121
+ "id": 57,
1122
+ "type": "AudioEncoderLoader",
1123
+ "pos": [
1124
+ -1030,
1125
+ 1290
1126
+ ],
1127
+ "size": [
1128
+ 290,
1129
+ 60
1130
+ ],
1131
+ "flags": {},
1132
+ "order": 6,
1133
+ "mode": 0,
1134
+ "inputs": [],
1135
+ "outputs": [
1136
+ {
1137
+ "name": "AUDIO_ENCODER",
1138
+ "type": "AUDIO_ENCODER",
1139
+ "links": [
1140
+ 733
1141
+ ]
1142
+ }
1143
+ ],
1144
+ "properties": {
1145
+ "cnr_id": "comfy-core",
1146
+ "ver": "0.3.54",
1147
+ "Node name for S&R": "AudioEncoderLoader",
1148
+ "models": [
1149
+ {
1150
+ "name": "wav2vec2_large_english_fp16.safetensors",
1151
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/audio_encoders/wav2vec2_large_english_fp16.safetensors",
1152
+ "directory": "audio_encoders"
1153
+ }
1154
+ ]
1155
+ },
1156
+ "widgets_values": [
1157
+ "wav2vec2_large_english_fp16.safetensors"
1158
+ ]
1159
+ },
1160
+ {
1161
+ "id": 266,
1162
+ "type": "AudioEncoderEncode",
1163
+ "pos": [
1164
+ -220,
1165
+ 1610
1166
+ ],
1167
+ "size": [
1168
+ 290,
1169
+ 50
1170
+ ],
1171
+ "flags": {},
1172
+ "order": 33,
1173
+ "mode": 0,
1174
+ "inputs": [
1175
+ {
1176
+ "name": "audio_encoder",
1177
+ "type": "AUDIO_ENCODER",
1178
+ "link": 735
1179
+ },
1180
+ {
1181
+ "name": "audio",
1182
+ "type": "AUDIO",
1183
+ "link": 738
1184
+ }
1185
+ ],
1186
+ "outputs": [
1187
+ {
1188
+ "name": "AUDIO_ENCODER_OUTPUT",
1189
+ "type": "AUDIO_ENCODER_OUTPUT",
1190
+ "links": [
1191
+ 730
1192
+ ]
1193
+ }
1194
+ ],
1195
+ "properties": {
1196
+ "cnr_id": "comfy-core",
1197
+ "ver": "0.27.0",
1198
+ "Node name for S&R": "AudioEncoderEncode"
1199
+ },
1200
+ "widgets_values": []
1201
+ },
1202
+ {
1203
+ "id": 275,
1204
+ "type": "AudioEncoderLoader",
1205
+ "pos": [
1206
+ 120,
1207
+ 1310
1208
+ ],
1209
+ "size": [
1210
+ 290,
1211
+ 60
1212
+ ],
1213
+ "flags": {},
1214
+ "order": 7,
1215
+ "mode": 2,
1216
+ "inputs": [],
1217
+ "outputs": [
1218
+ {
1219
+ "name": "AUDIO_ENCODER",
1220
+ "type": "AUDIO_ENCODER",
1221
+ "links": [
1222
+ 746
1223
+ ]
1224
+ }
1225
+ ],
1226
+ "properties": {
1227
+ "cnr_id": "comfy-core",
1228
+ "ver": "0.3.54",
1229
+ "Node name for S&R": "AudioEncoderLoader",
1230
+ "models": [
1231
+ {
1232
+ "name": "wav2vec2_large_english_fp16.safetensors",
1233
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/audio_encoders/wav2vec2_large_english_fp16.safetensors",
1234
+ "directory": "audio_encoders"
1235
+ }
1236
+ ]
1237
+ },
1238
+ "widgets_values": [
1239
+ "wav2vec2_large_english_fp16.safetensors"
1240
+ ]
1241
+ },
1242
+ {
1243
+ "id": 273,
1244
+ "type": "LoadAudio",
1245
+ "pos": [
1246
+ 120,
1247
+ 1420
1248
+ ],
1249
+ "size": [
1250
+ 290,
1251
+ 140
1252
+ ],
1253
+ "flags": {},
1254
+ "order": 8,
1255
+ "mode": 2,
1256
+ "inputs": [],
1257
+ "outputs": [
1258
+ {
1259
+ "name": "AUDIO",
1260
+ "type": "AUDIO",
1261
+ "links": [
1262
+ 747
1263
+ ]
1264
+ }
1265
+ ],
1266
+ "title": "audio_1",
1267
+ "properties": {
1268
+ "cnr_id": "comfy-core",
1269
+ "ver": "0.3.54",
1270
+ "Node name for S&R": "LoadAudio"
1271
+ },
1272
+ "widgets_values": [
1273
+ "anthony.wav",
1274
+ null,
1275
+ null
1276
+ ]
1277
+ },
1278
+ {
1279
+ "id": 274,
1280
+ "type": "TrimAudioDuration",
1281
+ "pos": [
1282
+ 440,
1283
+ 1420
1284
+ ],
1285
+ "size": [
1286
+ 270,
1287
+ 90
1288
+ ],
1289
+ "flags": {},
1290
+ "order": 20,
1291
+ "mode": 2,
1292
+ "inputs": [
1293
+ {
1294
+ "name": "audio",
1295
+ "type": "AUDIO",
1296
+ "link": 747
1297
+ }
1298
+ ],
1299
+ "outputs": [
1300
+ {
1301
+ "name": "AUDIO",
1302
+ "type": "AUDIO",
1303
+ "links": [
1304
+ 751
1305
+ ]
1306
+ }
1307
+ ],
1308
+ "properties": {
1309
+ "cnr_id": "comfy-core",
1310
+ "ver": "0.27.0",
1311
+ "Node name for S&R": "TrimAudioDuration"
1312
+ },
1313
+ "widgets_values": [
1314
+ 0,
1315
+ 9
1316
+ ]
1317
+ },
1318
+ {
1319
+ "id": 276,
1320
+ "type": "AudioEncoderEncode",
1321
+ "pos": [
1322
+ 740,
1323
+ 1300
1324
+ ],
1325
+ "size": [
1326
+ 290,
1327
+ 50
1328
+ ],
1329
+ "flags": {},
1330
+ "order": 31,
1331
+ "mode": 2,
1332
+ "inputs": [
1333
+ {
1334
+ "name": "audio_encoder",
1335
+ "type": "AUDIO_ENCODER",
1336
+ "link": 746
1337
+ },
1338
+ {
1339
+ "name": "audio",
1340
+ "type": "AUDIO",
1341
+ "link": 752
1342
+ }
1343
+ ],
1344
+ "outputs": [
1345
+ {
1346
+ "name": "AUDIO_ENCODER_OUTPUT",
1347
+ "type": "AUDIO_ENCODER_OUTPUT",
1348
+ "links": []
1349
+ }
1350
+ ],
1351
+ "properties": {
1352
+ "cnr_id": "comfy-core",
1353
+ "ver": "0.27.0",
1354
+ "Node name for S&R": "AudioEncoderEncode"
1355
+ },
1356
+ "widgets_values": []
1357
+ },
1358
+ {
1359
+ "id": 279,
1360
+ "type": "Reroute",
1361
+ "pos": [
1362
+ 1920,
1363
+ 250
1364
+ ],
1365
+ "size": [
1366
+ 75,
1367
+ 26
1368
+ ],
1369
+ "flags": {},
1370
+ "order": 39,
1371
+ "mode": 0,
1372
+ "inputs": [
1373
+ {
1374
+ "name": "",
1375
+ "type": "*",
1376
+ "link": 757
1377
+ }
1378
+ ],
1379
+ "outputs": [
1380
+ {
1381
+ "name": "",
1382
+ "type": "AUDIO",
1383
+ "links": [
1384
+ 755
1385
+ ]
1386
+ }
1387
+ ],
1388
+ "properties": {
1389
+ "showOutputText": false,
1390
+ "horizontal": false
1391
+ },
1392
+ "color": "#323",
1393
+ "bgcolor": "#535"
1394
+ },
1395
+ {
1396
+ "id": 277,
1397
+ "type": "Reroute",
1398
+ "pos": [
1399
+ 770,
1400
+ 1430
1401
+ ],
1402
+ "size": [
1403
+ 75,
1404
+ 26
1405
+ ],
1406
+ "flags": {},
1407
+ "order": 27,
1408
+ "mode": 2,
1409
+ "inputs": [
1410
+ {
1411
+ "name": "",
1412
+ "type": "*",
1413
+ "link": 751
1414
+ }
1415
+ ],
1416
+ "outputs": [
1417
+ {
1418
+ "name": "",
1419
+ "type": "AUDIO",
1420
+ "links": [
1421
+ 752
1422
+ ]
1423
+ }
1424
+ ],
1425
+ "properties": {
1426
+ "showOutputText": false,
1427
+ "horizontal": false
1428
+ },
1429
+ "color": "#323",
1430
+ "bgcolor": "#535"
1431
+ },
1432
+ {
1433
+ "id": 239,
1434
+ "type": "PrimitiveInt",
1435
+ "pos": [
1436
+ 710,
1437
+ 1080
1438
+ ],
1439
+ "size": [
1440
+ 350,
1441
+ 90
1442
+ ],
1443
+ "flags": {},
1444
+ "order": 9,
1445
+ "mode": 0,
1446
+ "inputs": [],
1447
+ "outputs": [
1448
+ {
1449
+ "name": "INT",
1450
+ "type": "INT",
1451
+ "links": [
1452
+ 627
1453
+ ]
1454
+ }
1455
+ ],
1456
+ "title": "Video Length in Seconds",
1457
+ "properties": {
1458
+ "cnr_id": "comfy-core",
1459
+ "ver": "0.27.0",
1460
+ "Node name for S&R": "PrimitiveInt"
1461
+ },
1462
+ "widgets_values": [
1463
+ 9,
1464
+ "fixed"
1465
+ ]
1466
+ },
1467
+ {
1468
+ "id": 269,
1469
+ "type": "BerniniS2VConditioningV2",
1470
+ "pos": [
1471
+ 710,
1472
+ 600
1473
+ ],
1474
+ "size": [
1475
+ 360,
1476
+ 450
1477
+ ],
1478
+ "flags": {},
1479
+ "order": 35,
1480
+ "mode": 0,
1481
+ "inputs": [
1482
+ {
1483
+ "name": "positive",
1484
+ "type": "CONDITIONING",
1485
+ "link": 725
1486
+ },
1487
+ {
1488
+ "name": "negative",
1489
+ "type": "CONDITIONING",
1490
+ "link": 726
1491
+ },
1492
+ {
1493
+ "name": "vae",
1494
+ "type": "VAE",
1495
+ "link": 727
1496
+ },
1497
+ {
1498
+ "name": "audio_1",
1499
+ "type": "AUDIO_ENCODER_OUTPUT",
1500
+ "link": 758
1501
+ },
1502
+ {
1503
+ "name": "mask_1",
1504
+ "type": "MASK",
1505
+ "link": 729
1506
+ },
1507
+ {
1508
+ "name": "audio_2",
1509
+ "shape": 7,
1510
+ "type": "AUDIO_ENCODER_OUTPUT",
1511
+ "link": 730
1512
+ },
1513
+ {
1514
+ "name": "mask_2",
1515
+ "shape": 7,
1516
+ "type": "MASK",
1517
+ "link": 732
1518
+ },
1519
+ {
1520
+ "name": "source_video",
1521
+ "shape": 7,
1522
+ "type": "IMAGE",
1523
+ "link": null
1524
+ },
1525
+ {
1526
+ "name": "reference_video",
1527
+ "shape": 7,
1528
+ "type": "IMAGE",
1529
+ "link": null
1530
+ },
1531
+ {
1532
+ "label": "reference_image_0",
1533
+ "name": "reference_images.reference_image_0",
1534
+ "shape": 7,
1535
+ "type": "IMAGE",
1536
+ "link": 731
1537
+ },
1538
+ {
1539
+ "label": "reference_image_1",
1540
+ "name": "reference_images.reference_image_1",
1541
+ "shape": 7,
1542
+ "type": "IMAGE",
1543
+ "link": null
1544
+ },
1545
+ {
1546
+ "name": "length",
1547
+ "type": "INT",
1548
+ "widget": {
1549
+ "name": "length"
1550
+ },
1551
+ "link": 724
1552
+ }
1553
+ ],
1554
+ "outputs": [
1555
+ {
1556
+ "name": "positive",
1557
+ "type": "CONDITIONING",
1558
+ "links": [
1559
+ 740,
1560
+ 741
1561
+ ]
1562
+ },
1563
+ {
1564
+ "name": "negative",
1565
+ "type": "CONDITIONING",
1566
+ "links": [
1567
+ 742,
1568
+ 743
1569
+ ]
1570
+ },
1571
+ {
1572
+ "name": "latent",
1573
+ "type": "LATENT",
1574
+ "links": [
1575
+ 744
1576
+ ]
1577
+ }
1578
+ ],
1579
+ "properties": {
1580
+ "Node name for S&R": "BerniniS2VConditioningV2"
1581
+ },
1582
+ "widgets_values": [
1583
+ 720,
1584
+ 480,
1585
+ 81,
1586
+ 1,
1587
+ -1,
1588
+ 0,
1589
+ 1,
1590
+ 848
1591
+ ]
1592
+ },
1593
+ {
1594
+ "id": 240,
1595
+ "type": "VHS_VideoCombine",
1596
+ "pos": [
1597
+ 2040,
1598
+ 230
1599
+ ],
1600
+ "size": [
1601
+ 470,
1602
+ 648
1603
+ ],
1604
+ "flags": {},
1605
+ "order": 43,
1606
+ "mode": 0,
1607
+ "inputs": [
1608
+ {
1609
+ "name": "images",
1610
+ "type": "IMAGE",
1611
+ "link": 629
1612
+ },
1613
+ {
1614
+ "name": "audio",
1615
+ "shape": 7,
1616
+ "type": "AUDIO",
1617
+ "link": 755
1618
+ },
1619
+ {
1620
+ "name": "meta_batch",
1621
+ "shape": 7,
1622
+ "type": "VHS_BatchManager",
1623
+ "link": null
1624
+ },
1625
+ {
1626
+ "name": "vae",
1627
+ "shape": 7,
1628
+ "type": "VAE",
1629
+ "link": null
1630
+ }
1631
+ ],
1632
+ "outputs": [
1633
+ {
1634
+ "name": "Filenames",
1635
+ "type": "VHS_FILENAMES",
1636
+ "links": null
1637
+ }
1638
+ ],
1639
+ "properties": {
1640
+ "cnr_id": "comfyui-videohelpersuite",
1641
+ "ver": "1.7.9",
1642
+ "Node name for S&R": "VHS_VideoCombine"
1643
+ },
1644
+ "widgets_values": {
1645
+ "frame_rate": 24,
1646
+ "loop_count": 0,
1647
+ "filename_prefix": "video/ComfyUI",
1648
+ "format": "video/h264-mp4",
1649
+ "pix_fmt": "yuv420p",
1650
+ "crf": 19,
1651
+ "save_metadata": true,
1652
+ "trim_to_audio": true,
1653
+ "pingpong": false,
1654
+ "save_output": true,
1655
+ "videopreview": {
1656
+ "hidden": false,
1657
+ "paused": false,
1658
+ "params": {
1659
+ "filename": "ComfyUI_00207-audio.mp4",
1660
+ "subfolder": "video",
1661
+ "type": "output",
1662
+ "format": "video/h264-mp4",
1663
+ "frame_rate": 24,
1664
+ "workflow": "ComfyUI_00207.png",
1665
+ "fullpath": "/media/dgt/N33B/AI/ComfyUI/output/video/ComfyUI_00207-audio.mp4"
1666
+ }
1667
+ }
1668
+ }
1669
+ },
1670
+ {
1671
+ "id": 268,
1672
+ "type": "LoadImage",
1673
+ "pos": [
1674
+ 320,
1675
+ 840
1676
+ ],
1677
+ "size": [
1678
+ 290,
1679
+ 320
1680
+ ],
1681
+ "flags": {},
1682
+ "order": 10,
1683
+ "mode": 0,
1684
+ "inputs": [],
1685
+ "outputs": [
1686
+ {
1687
+ "name": "IMAGE",
1688
+ "type": "IMAGE",
1689
+ "links": []
1690
+ },
1691
+ {
1692
+ "name": "MASK",
1693
+ "type": "MASK",
1694
+ "links": [
1695
+ 732
1696
+ ]
1697
+ }
1698
+ ],
1699
+ "title": "Mask_2",
1700
+ "properties": {
1701
+ "cnr_id": "comfy-core",
1702
+ "ver": "0.27.0",
1703
+ "Node name for S&R": "LoadImage",
1704
+ "image": "clipspace/clipspace-painted-masked-1783665412223.png [input]"
1705
+ },
1706
+ "widgets_values": [
1707
+ "clipspace/clipspace-painted-masked-1783665412223.png [input]",
1708
+ "image"
1709
+ ]
1710
+ },
1711
+ {
1712
+ "id": 278,
1713
+ "type": "Reroute",
1714
+ "pos": [
1715
+ 0,
1716
+ 1220
1717
+ ],
1718
+ "size": [
1719
+ 75,
1720
+ 26
1721
+ ],
1722
+ "flags": {},
1723
+ "order": 37,
1724
+ "mode": 0,
1725
+ "inputs": [
1726
+ {
1727
+ "name": "",
1728
+ "type": "*",
1729
+ "link": 754
1730
+ }
1731
+ ],
1732
+ "outputs": [
1733
+ {
1734
+ "name": "",
1735
+ "type": "AUDIO",
1736
+ "links": [
1737
+ 757
1738
+ ]
1739
+ }
1740
+ ],
1741
+ "properties": {
1742
+ "showOutputText": false,
1743
+ "horizontal": false
1744
+ },
1745
+ "color": "#323",
1746
+ "bgcolor": "#535"
1747
+ },
1748
+ {
1749
+ "id": 58,
1750
+ "type": "LoadAudio",
1751
+ "pos": [
1752
+ -1030,
1753
+ 1410
1754
+ ],
1755
+ "size": [
1756
+ 290,
1757
+ 140
1758
+ ],
1759
+ "flags": {},
1760
+ "order": 11,
1761
+ "mode": 0,
1762
+ "inputs": [],
1763
+ "outputs": [
1764
+ {
1765
+ "name": "AUDIO",
1766
+ "type": "AUDIO",
1767
+ "links": [
1768
+ 671
1769
+ ]
1770
+ }
1771
+ ],
1772
+ "title": "audio_1",
1773
+ "properties": {
1774
+ "cnr_id": "comfy-core",
1775
+ "ver": "0.3.54",
1776
+ "Node name for S&R": "LoadAudio"
1777
+ },
1778
+ "widgets_values": [
1779
+ "I am The Dude Playing The Dude.wav",
1780
+ null,
1781
+ null
1782
+ ]
1783
+ },
1784
+ {
1785
+ "id": 253,
1786
+ "type": "TrimAudioDuration",
1787
+ "pos": [
1788
+ -660,
1789
+ 1610
1790
+ ],
1791
+ "size": [
1792
+ 270,
1793
+ 90
1794
+ ],
1795
+ "flags": {},
1796
+ "order": 23,
1797
+ "mode": 0,
1798
+ "inputs": [
1799
+ {
1800
+ "name": "audio",
1801
+ "type": "AUDIO",
1802
+ "link": 667
1803
+ }
1804
+ ],
1805
+ "outputs": [
1806
+ {
1807
+ "name": "AUDIO",
1808
+ "type": "AUDIO",
1809
+ "links": [
1810
+ 737
1811
+ ]
1812
+ }
1813
+ ],
1814
+ "properties": {
1815
+ "cnr_id": "comfy-core",
1816
+ "ver": "0.27.0",
1817
+ "Node name for S&R": "TrimAudioDuration"
1818
+ },
1819
+ "widgets_values": [
1820
+ 0,
1821
+ 3
1822
+ ]
1823
+ },
1824
+ {
1825
+ "id": 223,
1826
+ "type": "TrimAudioDuration",
1827
+ "pos": [
1828
+ -660,
1829
+ 1410
1830
+ ],
1831
+ "size": [
1832
+ 270,
1833
+ 90
1834
+ ],
1835
+ "flags": {},
1836
+ "order": 22,
1837
+ "mode": 0,
1838
+ "inputs": [
1839
+ {
1840
+ "name": "audio",
1841
+ "type": "AUDIO",
1842
+ "link": 671
1843
+ }
1844
+ ],
1845
+ "outputs": [
1846
+ {
1847
+ "name": "AUDIO",
1848
+ "type": "AUDIO",
1849
+ "links": [
1850
+ 736
1851
+ ]
1852
+ }
1853
+ ],
1854
+ "properties": {
1855
+ "cnr_id": "comfy-core",
1856
+ "ver": "0.27.0",
1857
+ "Node name for S&R": "TrimAudioDuration"
1858
+ },
1859
+ "widgets_values": [
1860
+ 0,
1861
+ 6
1862
+ ]
1863
+ },
1864
+ {
1865
+ "id": 247,
1866
+ "type": "LoadAudio",
1867
+ "pos": [
1868
+ -1030,
1869
+ 1610
1870
+ ],
1871
+ "size": [
1872
+ 290,
1873
+ 140
1874
+ ],
1875
+ "flags": {},
1876
+ "order": 12,
1877
+ "mode": 0,
1878
+ "inputs": [],
1879
+ "outputs": [
1880
+ {
1881
+ "name": "AUDIO",
1882
+ "type": "AUDIO",
1883
+ "links": [
1884
+ 667
1885
+ ]
1886
+ }
1887
+ ],
1888
+ "title": "audio_2",
1889
+ "properties": {
1890
+ "cnr_id": "comfy-core",
1891
+ "ver": "0.27.0",
1892
+ "Node name for S&R": "LoadAudio"
1893
+ },
1894
+ "widgets_values": [
1895
+ "Im the Dude.wav",
1896
+ null,
1897
+ null
1898
+ ]
1899
+ },
1900
+ {
1901
+ "id": 252,
1902
+ "type": "PrimitiveStringMultiline",
1903
+ "pos": [
1904
+ -10,
1905
+ 170
1906
+ ],
1907
+ "size": [
1908
+ 710,
1909
+ 290
1910
+ ],
1911
+ "flags": {},
1912
+ "order": 13,
1913
+ "mode": 0,
1914
+ "inputs": [],
1915
+ "outputs": [
1916
+ {
1917
+ "name": "STRING",
1918
+ "type": "STRING",
1919
+ "links": [
1920
+ 664
1921
+ ]
1922
+ }
1923
+ ],
1924
+ "properties": {
1925
+ "cnr_id": "comfy-core",
1926
+ "ver": "0.27.0",
1927
+ "Node name for S&R": "PrimitiveStringMultiline"
1928
+ },
1929
+ "widgets_values": [
1930
+ "two men in image0 sitting in a restaurant."
1931
+ ],
1932
+ "color": "#232",
1933
+ "bgcolor": "#353"
1934
+ },
1935
+ {
1936
+ "id": 56,
1937
+ "type": "AudioEncoderEncode",
1938
+ "pos": [
1939
+ -210,
1940
+ 1410
1941
+ ],
1942
+ "size": [
1943
+ 290,
1944
+ 50
1945
+ ],
1946
+ "flags": {},
1947
+ "order": 32,
1948
+ "mode": 0,
1949
+ "inputs": [
1950
+ {
1951
+ "name": "audio_encoder",
1952
+ "type": "AUDIO_ENCODER",
1953
+ "link": 734
1954
+ },
1955
+ {
1956
+ "name": "audio",
1957
+ "type": "AUDIO",
1958
+ "link": 622
1959
+ }
1960
+ ],
1961
+ "outputs": [
1962
+ {
1963
+ "name": "AUDIO_ENCODER_OUTPUT",
1964
+ "type": "AUDIO_ENCODER_OUTPUT",
1965
+ "links": [
1966
+ 758
1967
+ ]
1968
+ }
1969
+ ],
1970
+ "properties": {
1971
+ "cnr_id": "comfy-core",
1972
+ "ver": "0.3.54",
1973
+ "Node name for S&R": "AudioEncoderEncode"
1974
+ },
1975
+ "widgets_values": []
1976
+ },
1977
+ {
1978
+ "id": 272,
1979
+ "type": "PreviewAudio",
1980
+ "pos": [
1981
+ -180,
1982
+ 1720
1983
+ ],
1984
+ "size": [
1985
+ 270,
1986
+ 90
1987
+ ],
1988
+ "flags": {},
1989
+ "order": 36,
1990
+ "mode": 0,
1991
+ "inputs": [
1992
+ {
1993
+ "name": "audio",
1994
+ "type": "AUDIO",
1995
+ "link": 745
1996
+ }
1997
+ ],
1998
+ "outputs": [
1999
+ {
2000
+ "name": "audio",
2001
+ "type": "AUDIO",
2002
+ "links": null
2003
+ }
2004
+ ],
2005
+ "properties": {
2006
+ "cnr_id": "comfy-core",
2007
+ "ver": "0.27.0",
2008
+ "Node name for S&R": "PreviewAudio"
2009
+ },
2010
+ "widgets_values": []
2011
+ }
2012
+ ],
2013
+ "links": [
2014
+ [
2015
+ 74,
2016
+ 38,
2017
+ 0,
2018
+ 6,
2019
+ 0,
2020
+ "CLIP"
2021
+ ],
2022
+ [
2023
+ 75,
2024
+ 38,
2025
+ 0,
2026
+ 7,
2027
+ 0,
2028
+ "CLIP"
2029
+ ],
2030
+ [
2031
+ 285,
2032
+ 39,
2033
+ 0,
2034
+ 80,
2035
+ 1,
2036
+ "VAE"
2037
+ ],
2038
+ [
2039
+ 363,
2040
+ 107,
2041
+ 0,
2042
+ 54,
2043
+ 0,
2044
+ "MODEL"
2045
+ ],
2046
+ [
2047
+ 522,
2048
+ 54,
2049
+ 0,
2050
+ 205,
2051
+ 0,
2052
+ "MODEL"
2053
+ ],
2054
+ [
2055
+ 526,
2056
+ 205,
2057
+ 0,
2058
+ 207,
2059
+ 3,
2060
+ "LATENT"
2061
+ ],
2062
+ [
2063
+ 533,
2064
+ 207,
2065
+ 0,
2066
+ 80,
2067
+ 0,
2068
+ "LATENT"
2069
+ ],
2070
+ [
2071
+ 580,
2072
+ 80,
2073
+ 0,
2074
+ 201,
2075
+ 0,
2076
+ "IMAGE"
2077
+ ],
2078
+ [
2079
+ 581,
2080
+ 210,
2081
+ 0,
2082
+ 214,
2083
+ 0,
2084
+ "MODEL"
2085
+ ],
2086
+ [
2087
+ 582,
2088
+ 214,
2089
+ 0,
2090
+ 207,
2091
+ 0,
2092
+ "MODEL"
2093
+ ],
2094
+ [
2095
+ 585,
2096
+ 37,
2097
+ 0,
2098
+ 107,
2099
+ 0,
2100
+ "MODEL"
2101
+ ],
2102
+ [
2103
+ 586,
2104
+ 204,
2105
+ 0,
2106
+ 210,
2107
+ 0,
2108
+ "MODEL"
2109
+ ],
2110
+ [
2111
+ 622,
2112
+ 235,
2113
+ 0,
2114
+ 56,
2115
+ 1,
2116
+ "AUDIO"
2117
+ ],
2118
+ [
2119
+ 627,
2120
+ 239,
2121
+ 0,
2122
+ 238,
2123
+ 0,
2124
+ "INT"
2125
+ ],
2126
+ [
2127
+ 629,
2128
+ 201,
2129
+ 0,
2130
+ 240,
2131
+ 0,
2132
+ "IMAGE"
2133
+ ],
2134
+ [
2135
+ 661,
2136
+ 251,
2137
+ 1,
2138
+ 249,
2139
+ 0,
2140
+ "INT"
2141
+ ],
2142
+ [
2143
+ 662,
2144
+ 249,
2145
+ 0,
2146
+ 250,
2147
+ 0,
2148
+ "STRING"
2149
+ ],
2150
+ [
2151
+ 663,
2152
+ 250,
2153
+ 0,
2154
+ 6,
2155
+ 1,
2156
+ "STRING"
2157
+ ],
2158
+ [
2159
+ 664,
2160
+ 252,
2161
+ 0,
2162
+ 250,
2163
+ 1,
2164
+ "STRING"
2165
+ ],
2166
+ [
2167
+ 667,
2168
+ 247,
2169
+ 0,
2170
+ 253,
2171
+ 0,
2172
+ "AUDIO"
2173
+ ],
2174
+ [
2175
+ 671,
2176
+ 58,
2177
+ 0,
2178
+ 223,
2179
+ 0,
2180
+ "AUDIO"
2181
+ ],
2182
+ [
2183
+ 702,
2184
+ 241,
2185
+ 1,
2186
+ 265,
2187
+ 0,
2188
+ "MASK"
2189
+ ],
2190
+ [
2191
+ 717,
2192
+ 235,
2193
+ 0,
2194
+ 267,
2195
+ 0,
2196
+ "AUDIO"
2197
+ ],
2198
+ [
2199
+ 724,
2200
+ 238,
2201
+ 1,
2202
+ 269,
2203
+ 11,
2204
+ "INT"
2205
+ ],
2206
+ [
2207
+ 725,
2208
+ 6,
2209
+ 0,
2210
+ 269,
2211
+ 0,
2212
+ "CONDITIONING"
2213
+ ],
2214
+ [
2215
+ 726,
2216
+ 7,
2217
+ 0,
2218
+ 269,
2219
+ 1,
2220
+ "CONDITIONING"
2221
+ ],
2222
+ [
2223
+ 727,
2224
+ 39,
2225
+ 0,
2226
+ 269,
2227
+ 2,
2228
+ "VAE"
2229
+ ],
2230
+ [
2231
+ 729,
2232
+ 241,
2233
+ 1,
2234
+ 269,
2235
+ 4,
2236
+ "MASK"
2237
+ ],
2238
+ [
2239
+ 730,
2240
+ 266,
2241
+ 0,
2242
+ 269,
2243
+ 5,
2244
+ "AUDIO_ENCODER_OUTPUT"
2245
+ ],
2246
+ [
2247
+ 731,
2248
+ 241,
2249
+ 0,
2250
+ 269,
2251
+ 9,
2252
+ "IMAGE"
2253
+ ],
2254
+ [
2255
+ 732,
2256
+ 268,
2257
+ 1,
2258
+ 269,
2259
+ 6,
2260
+ "MASK"
2261
+ ],
2262
+ [
2263
+ 733,
2264
+ 57,
2265
+ 0,
2266
+ 270,
2267
+ 0,
2268
+ "AUDIO_ENCODER"
2269
+ ],
2270
+ [
2271
+ 734,
2272
+ 270,
2273
+ 0,
2274
+ 56,
2275
+ 0,
2276
+ "AUDIO_ENCODER"
2277
+ ],
2278
+ [
2279
+ 735,
2280
+ 270,
2281
+ 0,
2282
+ 266,
2283
+ 0,
2284
+ "AUDIO_ENCODER"
2285
+ ],
2286
+ [
2287
+ 736,
2288
+ 223,
2289
+ 0,
2290
+ 235,
2291
+ 0,
2292
+ "AUDIO"
2293
+ ],
2294
+ [
2295
+ 737,
2296
+ 253,
2297
+ 0,
2298
+ 271,
2299
+ 0,
2300
+ "AUDIO"
2301
+ ],
2302
+ [
2303
+ 738,
2304
+ 271,
2305
+ 0,
2306
+ 266,
2307
+ 1,
2308
+ "AUDIO"
2309
+ ],
2310
+ [
2311
+ 739,
2312
+ 271,
2313
+ 0,
2314
+ 267,
2315
+ 1,
2316
+ "AUDIO"
2317
+ ],
2318
+ [
2319
+ 740,
2320
+ 269,
2321
+ 0,
2322
+ 205,
2323
+ 1,
2324
+ "CONDITIONING"
2325
+ ],
2326
+ [
2327
+ 741,
2328
+ 269,
2329
+ 0,
2330
+ 207,
2331
+ 1,
2332
+ "CONDITIONING"
2333
+ ],
2334
+ [
2335
+ 742,
2336
+ 269,
2337
+ 1,
2338
+ 205,
2339
+ 2,
2340
+ "CONDITIONING"
2341
+ ],
2342
+ [
2343
+ 743,
2344
+ 269,
2345
+ 1,
2346
+ 207,
2347
+ 2,
2348
+ "CONDITIONING"
2349
+ ],
2350
+ [
2351
+ 744,
2352
+ 269,
2353
+ 2,
2354
+ 205,
2355
+ 3,
2356
+ "LATENT"
2357
+ ],
2358
+ [
2359
+ 745,
2360
+ 267,
2361
+ 0,
2362
+ 272,
2363
+ 0,
2364
+ "AUDIO"
2365
+ ],
2366
+ [
2367
+ 746,
2368
+ 275,
2369
+ 0,
2370
+ 276,
2371
+ 0,
2372
+ "AUDIO_ENCODER"
2373
+ ],
2374
+ [
2375
+ 747,
2376
+ 273,
2377
+ 0,
2378
+ 274,
2379
+ 0,
2380
+ "AUDIO"
2381
+ ],
2382
+ [
2383
+ 751,
2384
+ 274,
2385
+ 0,
2386
+ 277,
2387
+ 0,
2388
+ "AUDIO"
2389
+ ],
2390
+ [
2391
+ 752,
2392
+ 277,
2393
+ 0,
2394
+ 276,
2395
+ 1,
2396
+ "AUDIO"
2397
+ ],
2398
+ [
2399
+ 754,
2400
+ 267,
2401
+ 0,
2402
+ 278,
2403
+ 0,
2404
+ "AUDIO"
2405
+ ],
2406
+ [
2407
+ 755,
2408
+ 279,
2409
+ 0,
2410
+ 240,
2411
+ 1,
2412
+ "AUDIO"
2413
+ ],
2414
+ [
2415
+ 757,
2416
+ 278,
2417
+ 0,
2418
+ 279,
2419
+ 0,
2420
+ "AUDIO"
2421
+ ],
2422
+ [
2423
+ 758,
2424
+ 56,
2425
+ 0,
2426
+ 269,
2427
+ 3,
2428
+ "AUDIO_ENCODER_OUTPUT"
2429
+ ]
2430
+ ],
2431
+ "groups": [
2432
+ {
2433
+ "id": 2,
2434
+ "title": "-",
2435
+ "bounding": [
2436
+ -110,
2437
+ 100,
2438
+ 2650,
2439
+ 1090
2440
+ ],
2441
+ "color": "#3f789e",
2442
+ "flags": {}
2443
+ },
2444
+ {
2445
+ "id": 3,
2446
+ "title": "-",
2447
+ "bounding": [
2448
+ -540,
2449
+ 100,
2450
+ 430,
2451
+ 490
2452
+ ],
2453
+ "color": "#3f789e",
2454
+ "flags": {}
2455
+ },
2456
+ {
2457
+ "id": 10,
2458
+ "title": "Tasks",
2459
+ "bounding": [
2460
+ -1030,
2461
+ 680,
2462
+ 920,
2463
+ 510
2464
+ ],
2465
+ "color": "#3f789e",
2466
+ "flags": {}
2467
+ },
2468
+ {
2469
+ "id": 11,
2470
+ "title": "2 Speakers",
2471
+ "bounding": [
2472
+ -1040,
2473
+ 1220,
2474
+ 1130,
2475
+ 540
2476
+ ],
2477
+ "color": "#3f789e",
2478
+ "flags": {}
2479
+ },
2480
+ {
2481
+ "id": 12,
2482
+ "title": "1 Speaker",
2483
+ "bounding": [
2484
+ 90,
2485
+ 1220,
2486
+ 1170,
2487
+ 530
2488
+ ],
2489
+ "color": "#3f789e",
2490
+ "flags": {}
2491
+ }
2492
+ ],
2493
+ "definitions": {
2494
+ "subgraphs": [
2495
+ {
2496
+ "id": "6da2792c-a953-4960-a53a-ff1b5df6fe09",
2497
+ "version": 1,
2498
+ "state": {
2499
+ "lastGroupId": 12,
2500
+ "lastNodeId": 279,
2501
+ "lastLinkId": 758,
2502
+ "lastRerouteId": 0
2503
+ },
2504
+ "revision": 0,
2505
+ "config": {},
2506
+ "name": "Select Per-Line Text by Index",
2507
+ "description": "Selects one line from multiline text by zero-based index for batch or list-driven prompt workflows.",
2508
+ "inputNode": {
2509
+ "id": -10,
2510
+ "bounding": [
2511
+ -990,
2512
+ 8595,
2513
+ 128,
2514
+ 88
2515
+ ]
2516
+ },
2517
+ "outputNode": {
2518
+ "id": -20,
2519
+ "bounding": [
2520
+ 710,
2521
+ 8585,
2522
+ 128,
2523
+ 68
2524
+ ]
2525
+ },
2526
+ "inputs": [
2527
+ {
2528
+ "id": "75417d82-a934-4ac9-b667-d8dcd5a3bfb3",
2529
+ "name": "text_per_line",
2530
+ "type": "STRING",
2531
+ "linkIds": [
2532
+ 13
2533
+ ],
2534
+ "localized_name": "text_per_line",
2535
+ "pos": [
2536
+ -886,
2537
+ 8619
2538
+ ]
2539
+ },
2540
+ {
2541
+ "id": "46e69a73-1804-4ca6-9175-31445bf0be96",
2542
+ "name": "index",
2543
+ "type": "INT",
2544
+ "linkIds": [
2545
+ 14
2546
+ ],
2547
+ "localized_name": "index",
2548
+ "pos": [
2549
+ -886,
2550
+ 8639
2551
+ ]
2552
+ }
2553
+ ],
2554
+ "outputs": [
2555
+ {
2556
+ "id": "e34e8ad1-84d2-4bd2-a460-eb7de6067c10",
2557
+ "name": "selected_line",
2558
+ "type": "STRING",
2559
+ "linkIds": [
2560
+ 10
2561
+ ],
2562
+ "localized_name": "selected_line",
2563
+ "pos": [
2564
+ 734,
2565
+ 8609
2566
+ ]
2567
+ }
2568
+ ],
2569
+ "widgets": [],
2570
+ "nodes": [
2571
+ {
2572
+ "id": 1,
2573
+ "type": "PreviewAny",
2574
+ "pos": [
2575
+ -500,
2576
+ 8400
2577
+ ],
2578
+ "size": [
2579
+ 230,
2580
+ 180
2581
+ ],
2582
+ "flags": {},
2583
+ "order": 0,
2584
+ "mode": 0,
2585
+ "inputs": [
2586
+ {
2587
+ "localized_name": "source",
2588
+ "name": "source",
2589
+ "type": "*",
2590
+ "link": 1
2591
+ }
2592
+ ],
2593
+ "outputs": [
2594
+ {
2595
+ "localized_name": "STRING",
2596
+ "name": "STRING",
2597
+ "type": "STRING",
2598
+ "links": [
2599
+ 6
2600
+ ]
2601
+ }
2602
+ ],
2603
+ "properties": {
2604
+ "cnr_id": "comfy-core",
2605
+ "ver": "0.19.0",
2606
+ "Node name for S&R": "PreviewAny",
2607
+ "ue_properties": {
2608
+ "widget_ue_connectable": {},
2609
+ "input_ue_unconnectable": {}
2610
+ }
2611
+ },
2612
+ "widgets_values": [
2613
+ null,
2614
+ null,
2615
+ null
2616
+ ]
2617
+ },
2618
+ {
2619
+ "id": 2,
2620
+ "type": "RegexExtract",
2621
+ "pos": [
2622
+ -240,
2623
+ 8740
2624
+ ],
2625
+ "size": [
2626
+ 470,
2627
+ 460
2628
+ ],
2629
+ "flags": {},
2630
+ "order": 1,
2631
+ "mode": 0,
2632
+ "showAdvanced": false,
2633
+ "inputs": [
2634
+ {
2635
+ "localized_name": "string",
2636
+ "name": "string",
2637
+ "type": "STRING",
2638
+ "widget": {
2639
+ "name": "string"
2640
+ },
2641
+ "link": 13
2642
+ },
2643
+ {
2644
+ "localized_name": "regex_pattern",
2645
+ "name": "regex_pattern",
2646
+ "type": "STRING",
2647
+ "widget": {
2648
+ "name": "regex_pattern"
2649
+ },
2650
+ "link": 9
2651
+ }
2652
+ ],
2653
+ "outputs": [
2654
+ {
2655
+ "localized_name": "STRING",
2656
+ "name": "STRING",
2657
+ "type": "STRING",
2658
+ "links": [
2659
+ 10
2660
+ ]
2661
+ }
2662
+ ],
2663
+ "properties": {
2664
+ "cnr_id": "comfy-core",
2665
+ "ver": "0.19.0",
2666
+ "Node name for S&R": "RegexExtract",
2667
+ "ue_properties": {
2668
+ "widget_ue_connectable": {},
2669
+ "input_ue_unconnectable": {}
2670
+ }
2671
+ },
2672
+ "widgets_values": [
2673
+ "You are a helpful assistant.\nYou are a helpful assistant specialized in text-to-image generation.\nYou are a helpful assistant specialized in text-to-video generation.\nYou are a helpful assistant specialized in image editing.\nYou are a helpful assistant specialized in subject-to-image generation.\nYou are a helpful assistant specialized in image-to-video generation.\nYou are a helpful assistant specialized in video editing.\nYou are a helpful assistant specialized in video editing on content propagation.\nYou are a helpful assistant specialized in video editing with reference.\nYou are a helpful assistant specialized in ads insertion.\nYou are a helpful assistant for editing. You may need to adjust the subject's action or position.\nYou are a helpful assistant for editing. You might need to adjust the video's style, lighting, colors, textures, and the subject's pose or action.",
2674
+ "",
2675
+ "First Group",
2676
+ false,
2677
+ false,
2678
+ false,
2679
+ 1
2680
+ ]
2681
+ },
2682
+ {
2683
+ "id": 248,
2684
+ "type": "PrimitiveInt",
2685
+ "pos": [
2686
+ -810,
2687
+ 8400
2688
+ ],
2689
+ "size": [
2690
+ 270,
2691
+ 110
2692
+ ],
2693
+ "flags": {},
2694
+ "order": 3,
2695
+ "mode": 0,
2696
+ "inputs": [
2697
+ {
2698
+ "localized_name": "value",
2699
+ "name": "value",
2700
+ "type": "INT",
2701
+ "widget": {
2702
+ "name": "value"
2703
+ },
2704
+ "link": 14
2705
+ }
2706
+ ],
2707
+ "outputs": [
2708
+ {
2709
+ "localized_name": "INT",
2710
+ "name": "INT",
2711
+ "type": "INT",
2712
+ "links": [
2713
+ 1
2714
+ ]
2715
+ }
2716
+ ],
2717
+ "title": "Int (line index)",
2718
+ "properties": {
2719
+ "cnr_id": "comfy-core",
2720
+ "ver": "0.19.0",
2721
+ "Node name for S&R": "Int (line index)",
2722
+ "ue_properties": {
2723
+ "widget_ue_connectable": {},
2724
+ "input_ue_unconnectable": {}
2725
+ }
2726
+ },
2727
+ "widgets_values": [
2728
+ 0,
2729
+ "fixed"
2730
+ ]
2731
+ },
2732
+ {
2733
+ "id": 8,
2734
+ "type": "StringReplace",
2735
+ "pos": [
2736
+ -240,
2737
+ 8400
2738
+ ],
2739
+ "size": [
2740
+ 400,
2741
+ 280
2742
+ ],
2743
+ "flags": {},
2744
+ "order": 2,
2745
+ "mode": 0,
2746
+ "inputs": [
2747
+ {
2748
+ "localized_name": "replace",
2749
+ "name": "replace",
2750
+ "type": "STRING",
2751
+ "widget": {
2752
+ "name": "replace"
2753
+ },
2754
+ "link": 6
2755
+ }
2756
+ ],
2757
+ "outputs": [
2758
+ {
2759
+ "localized_name": "STRING",
2760
+ "name": "STRING",
2761
+ "type": "STRING",
2762
+ "links": [
2763
+ 9
2764
+ ]
2765
+ }
2766
+ ],
2767
+ "properties": {
2768
+ "cnr_id": "comfy-core",
2769
+ "ver": "0.19.0",
2770
+ "Node name for S&R": "StringReplace",
2771
+ "ue_properties": {
2772
+ "widget_ue_connectable": {},
2773
+ "input_ue_unconnectable": {}
2774
+ }
2775
+ },
2776
+ "widgets_values": [
2777
+ "^(?:[^\\n]*\\n){index}([^\\n]*)(?:\\n|$)",
2778
+ "index",
2779
+ ""
2780
+ ]
2781
+ }
2782
+ ],
2783
+ "groups": [],
2784
+ "links": [
2785
+ {
2786
+ "id": 1,
2787
+ "origin_id": 248,
2788
+ "origin_slot": 0,
2789
+ "target_id": 1,
2790
+ "target_slot": 0,
2791
+ "type": "INT"
2792
+ },
2793
+ {
2794
+ "id": 9,
2795
+ "origin_id": 8,
2796
+ "origin_slot": 0,
2797
+ "target_id": 2,
2798
+ "target_slot": 1,
2799
+ "type": "STRING"
2800
+ },
2801
+ {
2802
+ "id": 6,
2803
+ "origin_id": 1,
2804
+ "origin_slot": 0,
2805
+ "target_id": 8,
2806
+ "target_slot": 0,
2807
+ "type": "STRING"
2808
+ },
2809
+ {
2810
+ "id": 10,
2811
+ "origin_id": 2,
2812
+ "origin_slot": 0,
2813
+ "target_id": -20,
2814
+ "target_slot": 0,
2815
+ "type": "STRING"
2816
+ },
2817
+ {
2818
+ "id": 13,
2819
+ "origin_id": -10,
2820
+ "origin_slot": 0,
2821
+ "target_id": 2,
2822
+ "target_slot": 0,
2823
+ "type": "STRING"
2824
+ },
2825
+ {
2826
+ "id": 14,
2827
+ "origin_id": -10,
2828
+ "origin_slot": 1,
2829
+ "target_id": 248,
2830
+ "target_slot": 0,
2831
+ "type": "INT"
2832
+ }
2833
+ ],
2834
+ "extra": {
2835
+ "ue_links": [],
2836
+ "links_added_by_ue": []
2837
+ }
2838
+ }
2839
+ ]
2840
+ },
2841
+ "config": {},
2842
+ "extra": {
2843
+ "ds": {
2844
+ "scale": 0.6618166065230274,
2845
+ "offset": [
2846
+ 567.2760482151011,
2847
+ 4.735915514621264
2848
+ ]
2849
+ },
2850
+ "frontendVersion": "1.45.20",
2851
+ "VHS_latentpreview": false,
2852
+ "VHS_latentpreviewrate": 0,
2853
+ "VHS_MetadataImage": true,
2854
+ "VHS_KeepIntermediate": true
2855
+ },
2856
+ "version": 0.4
2857
+ }
ComfyUI-WanBerniniS2V_v2/__init__.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ from .model_patch import apply_model_patches
2
+
3
+ apply_model_patches()
4
+
5
+ from .nodes import comfy_entrypoint
6
+
7
+ __all__ = ["comfy_entrypoint"]
ComfyUI-WanBerniniS2V_v2/audio_mask.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+
3
+ import comfy.utils
4
+
5
+ WAN_VAE_SCALE = 8
6
+ WAN_PATCH_SPATIAL = 2
7
+
8
+
9
+ def _padded_latent_dim(pixels: int) -> int:
10
+ latent = pixels // WAN_VAE_SCALE
11
+ return latent + (WAN_PATCH_SPATIAL - latent % WAN_PATCH_SPATIAL) % WAN_PATCH_SPATIAL
12
+
13
+
14
+ def token_grid_size(width: int, height: int) -> tuple[int, int]:
15
+ return _padded_latent_dim(height) // WAN_PATCH_SPATIAL, _padded_latent_dim(width) // WAN_PATCH_SPATIAL
16
+
17
+
18
+ def mask_to_token_grid(mask_image: torch.Tensor, width: int, height: int) -> torch.Tensor:
19
+ token_h, token_w = token_grid_size(width, height)
20
+ mask = mask_image[0] if mask_image.ndim == 3 else mask_image
21
+ mask = mask.unsqueeze(0).unsqueeze(0)
22
+ mask = comfy.utils.common_upscale(mask, width, height, "area", "center")
23
+ mask = comfy.utils.common_upscale(mask, token_w, token_h, "area", "center")
24
+ return (mask > 0.5).to(dtype=torch.float32).flatten(2).squeeze(1)
25
+
26
+
27
+ def _latent_frame_weight(video_frame: int, start_frame: int, end_frame: int, crossfade_frames: int) -> float:
28
+ if video_frame < start_frame or video_frame >= end_frame:
29
+ return 0.0
30
+ if crossfade_frames <= 0:
31
+ return 1.0
32
+ weight = 1.0
33
+ if video_frame < start_frame + crossfade_frames:
34
+ weight = min(weight, (video_frame - start_frame + 1) / crossfade_frames)
35
+ if video_frame >= end_frame - crossfade_frames:
36
+ weight = min(weight, (end_frame - video_frame) / crossfade_frames)
37
+ return max(0.0, weight)
38
+
39
+
40
+ def build_timeline_audio_inject_mask(
41
+ width: int,
42
+ height: int,
43
+ length: int,
44
+ segments,
45
+ crossfade_frames: int = 0,
46
+ device=None,
47
+ ) -> torch.Tensor:
48
+ latent_t = ((length - 1) // 4) + 1
49
+ token_h, token_w = token_grid_size(width, height)
50
+ n_tokens = token_h * token_w
51
+ mask = torch.zeros(1, latent_t, n_tokens, 1)
52
+
53
+ for segment in segments:
54
+ tokens = mask_to_token_grid(segment["mask_image"], width, height)
55
+ start_frame = int(segment["start_frame"])
56
+ end_frame = int(segment["end_frame"])
57
+ for latent_idx in range(latent_t):
58
+ vf0 = latent_idx * 4
59
+ vf1 = vf0 + 4
60
+ weight = 0.0
61
+ for video_frame in range(vf0, vf1):
62
+ weight = max(weight, _latent_frame_weight(video_frame, start_frame, end_frame, crossfade_frames))
63
+ if weight > 0.0:
64
+ mask[:, latent_idx, :, 0] = torch.maximum(mask[:, latent_idx, :, 0], tokens * weight)
65
+
66
+ if device is not None:
67
+ mask = mask.to(device)
68
+ return mask
ComfyUI-WanBerniniS2V_v2/demo_assets/ComfyUI_00207-audio.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a01ab587948bca585beb7422d10cdb7a0cd05dc06740bb97400e8b894e1417ff
3
+ size 1877791
ComfyUI-WanBerniniS2V_v2/demo_assets/I am The Dude Playing The Dude.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1b1dcc8ec7a4ca3b26196713e65ab214f7a2516778f45d9273829255d098bab2
3
+ size 191604
ComfyUI-WanBerniniS2V_v2/demo_assets/Im the Dude.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4590983cee3e79dda5b59979b84ffa8b811e86c7f19f97483a1fb7ce0c824d97
3
+ size 404056
ComfyUI-WanBerniniS2V_v2/demo_assets/Screenshot_ComfyUI-WanBerniniS2V_v2.png ADDED

Git LFS Details

  • SHA256: 23f9b9997266f9423c5c5f7b0d60daf3a7fdb225fcb50225a11d610b66596314
  • Pointer size: 131 Bytes
  • Size of remote file: 541 kB
ComfyUI-WanBerniniS2V_v2/demo_assets/dude.jpg ADDED

Git LFS Details

  • SHA256: a2c1aab95534c8c1fd8611235f20a19b5078b67f47d6f0029f2e8b8d7c41ab6d
  • Pointer size: 131 Bytes
  • Size of remote file: 118 kB
ComfyUI-WanBerniniS2V_v2/model_patch.py ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import inspect
2
+ import logging
3
+
4
+ import torch
5
+
6
+ import comfy.conds
7
+ import comfy.model_management
8
+ from comfy.ldm.wan.model import AudioInjector_WAN, WanModel_S2V
9
+ from comfy.model_base import WAN22_S2V
10
+
11
+
12
+ def _append_context_latents(self, x, kwargs):
13
+ context_latents = kwargs.get("context_latents", None)
14
+ if context_latents is None:
15
+ return x
16
+ for lat in context_latents:
17
+ cl = self.patch_embedding(lat.float().to(x.device)).to(x.dtype).flatten(2).transpose(1, 2)
18
+ x = torch.cat([x, cl], dim=1)
19
+ return x
20
+
21
+
22
+ def _patch_wan_model_s2v_forward():
23
+ if getattr(WanModel_S2V.forward_orig, "__wan_bernini_s2v_v2_patch__", False):
24
+ return
25
+
26
+ try:
27
+ source = inspect.getsource(WanModel_S2V.forward_orig)
28
+ except (OSError, TypeError):
29
+ source = ""
30
+ if "context_latents" in source and getattr(WanModel_S2V.forward_orig, "__wan_bernini_s2v_patch__", False):
31
+ WanModel_S2V.forward_orig.__wan_bernini_s2v_v2_patch__ = True
32
+ return
33
+
34
+ original = WanModel_S2V.forward_orig
35
+
36
+ def forward_orig(
37
+ self,
38
+ x,
39
+ t,
40
+ context,
41
+ audio_embed=None,
42
+ reference_latent=None,
43
+ control_video=None,
44
+ reference_motion=None,
45
+ clip_fea=None,
46
+ freqs=None,
47
+ transformer_options={},
48
+ **kwargs,
49
+ ):
50
+ if audio_embed is not None:
51
+ num_embeds = x.shape[-3] * 4
52
+ audio_emb_global, audio_emb = self.casual_audio_encoder(audio_embed[:, :, :, :num_embeds])
53
+ else:
54
+ audio_emb = None
55
+ audio_emb_global = None
56
+
57
+ bs, _, time, height, width = x.shape
58
+ x = self.patch_embedding(x.float()).to(x.dtype)
59
+ if control_video is not None:
60
+ x = x + self.cond_encoder(control_video)
61
+
62
+ if t.ndim == 1:
63
+ t = t.unsqueeze(1).repeat(1, x.shape[2])
64
+
65
+ grid_sizes = x.shape[2:]
66
+ x = x.flatten(2).transpose(1, 2)
67
+ seq_len = x.size(1)
68
+
69
+ cond_mask_weight = comfy.model_management.cast_to(self.trainable_cond_mask.weight, dtype=x.dtype, device=x.device).unsqueeze(1).unsqueeze(1)
70
+ x = x + cond_mask_weight[0]
71
+ x = _append_context_latents(self, x, kwargs)
72
+
73
+ if reference_latent is not None:
74
+ ref = self.patch_embedding(reference_latent.float()).to(x.dtype)
75
+ ref = ref.flatten(2).transpose(1, 2)
76
+ freqs_ref = self.rope_encode(reference_latent.shape[-3], reference_latent.shape[-2], reference_latent.shape[-1], t_start=max(30, time + 9), device=x.device, dtype=x.dtype)
77
+ ref = ref + cond_mask_weight[1]
78
+ x = torch.cat([x, ref], dim=1)
79
+ freqs = torch.cat([freqs, freqs_ref], dim=1)
80
+ t = torch.cat([t, torch.zeros((t.shape[0], reference_latent.shape[-3]), device=t.device, dtype=t.dtype)], dim=1)
81
+
82
+ if reference_motion is not None:
83
+ motion_encoded, freqs_motion = self.frame_packer(reference_motion, self)
84
+ motion_encoded = motion_encoded + cond_mask_weight[2]
85
+ x = torch.cat([x, motion_encoded], dim=1)
86
+ freqs = torch.cat([freqs, freqs_motion], dim=1)
87
+ t = torch.repeat_interleave(t, 2, dim=1)
88
+ t = torch.cat([t, torch.zeros((t.shape[0], 3), device=t.device, dtype=t.dtype)], dim=1)
89
+
90
+ from comfy.ldm.wan.model import sinusoidal_embedding_1d
91
+
92
+ e = self.time_embedding(
93
+ sinusoidal_embedding_1d(self.freq_dim, t.flatten()).to(dtype=x[0].dtype))
94
+ e = e.reshape(t.shape[0], -1, e.shape[-1])
95
+ e0 = self.time_projection(e).unflatten(2, (6, self.dim))
96
+
97
+ context = self.text_embedding(context)
98
+
99
+ patches_replace = transformer_options.get("patches_replace", {})
100
+ blocks_replace = patches_replace.get("dit", {})
101
+ transformer_options["total_blocks"] = len(self.blocks)
102
+ transformer_options["block_type"] = "double"
103
+ for i, block in enumerate(self.blocks):
104
+ transformer_options["block_index"] = i
105
+ if ("double_block", i) in blocks_replace:
106
+ def block_wrap(args):
107
+ out = {}
108
+ out["img"] = block(args["img"], context=args["txt"], e=args["vec"], freqs=args["pe"], transformer_options=args["transformer_options"])
109
+ return out
110
+ out = blocks_replace[("double_block", i)]({"img": x, "txt": context, "vec": e0, "pe": freqs, "transformer_options": transformer_options}, {"original_block": block_wrap})
111
+ x = out["img"]
112
+ else:
113
+ x = block(x, e=e0, freqs=freqs, context=context, transformer_options=transformer_options)
114
+ if audio_emb is not None:
115
+ inject_scale = kwargs.get("audio_inject_scale", 1.0)
116
+ if isinstance(inject_scale, torch.Tensor):
117
+ inject_scale = inject_scale.reshape(-1)[0].item()
118
+ x = self.audio_injector(
119
+ x, i, audio_emb, audio_emb_global, seq_len,
120
+ scale=inject_scale,
121
+ token_mask=kwargs.get("audio_inject_mask", None),
122
+ )
123
+ x = self.head(x, e)
124
+ x = self.unpatchify(x, grid_sizes)
125
+ return x
126
+
127
+ forward_orig.__wan_bernini_s2v_v2_patch__ = True
128
+ forward_orig.__wan_bernini_s2v_patch__ = True
129
+ forward_orig.__wan_bernini_s2v_original__ = original
130
+ WanModel_S2V.forward_orig = forward_orig
131
+
132
+
133
+ def _patch_audio_injector():
134
+ if getattr(AudioInjector_WAN.forward, "__wan_bernini_s2v_v2_masked_patch__", False):
135
+ return
136
+
137
+ original_forward = AudioInjector_WAN.forward
138
+
139
+ def forward(self, x, block_id, audio_emb, audio_emb_global, seq_len, scale=1.0, token_mask=None):
140
+ if token_mask is None:
141
+ return original_forward(self, x, block_id, audio_emb, audio_emb_global, seq_len, scale=scale)
142
+
143
+ audio_attn_id = self.injected_block_id.get(block_id, None)
144
+ if audio_attn_id is None:
145
+ return x
146
+
147
+ from einops import rearrange
148
+
149
+ num_frames = audio_emb.shape[1]
150
+ input_hidden_states = rearrange(x[:, :seq_len], "b (t n) c -> (b t) n c", t=num_frames)
151
+ if self.enable_adain and self.adain_mode == "attn_norm":
152
+ audio_emb_global = rearrange(audio_emb_global, "b t n c -> (b t) n c")
153
+ adain_hidden_states = self.injector_adain_layers[audio_attn_id](input_hidden_states, temb=audio_emb_global[:, 0])
154
+ attn_hidden_states = adain_hidden_states
155
+ else:
156
+ attn_hidden_states = self.injector_pre_norm_feat[audio_attn_id](input_hidden_states)
157
+
158
+ if audio_emb.dim() == 3:
159
+ attn_audio_emb = rearrange(audio_emb, "b t c -> (b t) 1 c", t=num_frames)
160
+ else:
161
+ attn_audio_emb = rearrange(audio_emb, "b t n c -> (b t) n c", t=num_frames)
162
+
163
+ residual_out = self.injector[audio_attn_id](x=attn_hidden_states, context=attn_audio_emb)
164
+ residual_out = rearrange(residual_out, "(b t) n c -> b (t n) c", t=num_frames)
165
+
166
+ if token_mask.ndim == 4:
167
+ token_mask = token_mask.flatten(1, 2)
168
+ if token_mask.shape[1] == residual_out.shape[1]:
169
+ residual_out = residual_out * token_mask.to(device=residual_out.device, dtype=residual_out.dtype)
170
+ else:
171
+ logging.warning(
172
+ "ComfyUI-WanBerniniS2V_v2: mask length %s does not match token count %s; using global audio injection",
173
+ token_mask.shape[1],
174
+ residual_out.shape[1],
175
+ )
176
+
177
+ x[:, :seq_len] = x[:, :seq_len] + residual_out * scale
178
+ return x
179
+
180
+ forward.__wan_bernini_s2v_v2_masked_patch__ = True
181
+ forward.__wan_bernini_s2v_masked_patch__ = True
182
+ forward.__wan_bernini_s2v_masked_original__ = original_forward
183
+ AudioInjector_WAN.forward = forward
184
+
185
+
186
+ def _patch_wan22_s2v_extra_conds():
187
+ if getattr(WAN22_S2V.extra_conds, "__wan_bernini_s2v_v2_masked_patch__", False):
188
+ return
189
+
190
+ original_extra_conds = WAN22_S2V.extra_conds
191
+
192
+ def extra_conds(self, **kwargs):
193
+ out = original_extra_conds(self, **kwargs)
194
+ audio_inject_mask = kwargs.get("audio_inject_mask", None)
195
+ if audio_inject_mask is not None:
196
+ out["audio_inject_mask"] = comfy.conds.CONDRegular(audio_inject_mask)
197
+ audio_inject_scale = kwargs.get("audio_inject_scale", None)
198
+ if audio_inject_scale is not None:
199
+ out["audio_inject_scale"] = comfy.conds.CONDRegular(torch.FloatTensor([audio_inject_scale]))
200
+ return out
201
+
202
+ extra_conds.__wan_bernini_s2v_v2_masked_patch__ = True
203
+ extra_conds.__wan_bernini_s2v_masked_patch__ = True
204
+ extra_conds.__wan_bernini_s2v_masked_original__ = original_extra_conds
205
+ WAN22_S2V.extra_conds = extra_conds
206
+
207
+ original_resize = WAN22_S2V.resize_cond_for_context_window
208
+
209
+ def resize_cond_for_context_window(self, cond_key, cond_value, window, x_in, device, retain_index_list=[]):
210
+ if cond_key == "audio_inject_mask":
211
+ mask = cond_value.cond
212
+ if mask.ndim == 4 and mask.shape[1] == x_in.shape[2]:
213
+ return cond_value._copy_with(window.get_tensor(mask, device, dim=1))
214
+ return original_resize(self, cond_key, cond_value, window, x_in, device, retain_index_list=retain_index_list)
215
+
216
+ resize_cond_for_context_window.__wan_bernini_s2v_v2_masked_patch__ = True
217
+ resize_cond_for_context_window.__wan_bernini_s2v_masked_patch__ = True
218
+ resize_cond_for_context_window.__wan_bernini_s2v_masked_original__ = original_resize
219
+ WAN22_S2V.resize_cond_for_context_window = resize_cond_for_context_window
220
+
221
+
222
+ def apply_model_patches():
223
+ _patch_wan_model_s2v_forward()
224
+ _patch_audio_injector()
225
+ _patch_wan22_s2v_extra_conds()
226
+ logging.info("ComfyUI-WanBerniniS2V_v2: applied Bernini S2V model patches")
ComfyUI-WanBerniniS2V_v2/nodes.py ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from typing_extensions import override
3
+
4
+ import comfy.model_management
5
+ import comfy.utils
6
+ import node_helpers
7
+ from comfy_api.latest import ComfyExtension, io
8
+
9
+ from .audio_mask import build_timeline_audio_inject_mask
10
+ from .wan_audio import apply_timeline_audio_conditioning, resolve_timeline_segment_ranges
11
+
12
+
13
+ def _resize_long_edge(image, max_size, stride=16):
14
+ h, w = image.shape[1], image.shape[2]
15
+ scale = min(max_size / max(h, w), 1.0)
16
+ nh = max(stride, round(h * scale / stride) * stride)
17
+ nw = max(stride, round(w * scale / stride) * stride)
18
+ return comfy.utils.common_upscale(image[:, :, :, :3].movedim(-1, 1), nw, nh, "area", "disabled").movedim(1, -1)
19
+
20
+
21
+ def _build_context_latents(vae, width, height, length, source_video=None, reference_video=None, reference_images=None, ref_max_size=848):
22
+ context = []
23
+ if source_video is not None:
24
+ vid = comfy.utils.common_upscale(source_video[:length, :, :, :3].movedim(-1, 1), width, height, "area", "center").movedim(1, -1)
25
+ context.append(vae.encode(vid[:, :, :, :3]))
26
+
27
+ if reference_video is not None:
28
+ ref_vid = _resize_long_edge(reference_video[:length], ref_max_size)
29
+ context.append(vae.encode(ref_vid[:, :, :, :3]))
30
+
31
+ if reference_images:
32
+ for name in sorted(reference_images):
33
+ imgs = reference_images[name]
34
+ if imgs is None:
35
+ continue
36
+ for i in range(imgs.shape[0]):
37
+ img = _resize_long_edge(imgs[i:i + 1], ref_max_size)
38
+ context.append(vae.encode(img[:, :, :, :3]))
39
+ return context
40
+
41
+
42
+ class BerniniS2VConditioningV2(io.ComfyNode):
43
+ @classmethod
44
+ def define_schema(cls):
45
+ return io.Schema(
46
+ node_id="BerniniS2VConditioningV2",
47
+ display_name="Bernini S2V Conditioning v2",
48
+ category="model/conditioning/bernini",
49
+ description="Bernini in-context conditioning with masked S2V audio for one or two speakers. Requires a Wan 2.2 S2V grafted Bernini-R model. Paint speaker masks on the output frame; reference_image_0 maps to image0 in prompts.",
50
+ inputs=[
51
+ io.Conditioning.Input("positive"),
52
+ io.Conditioning.Input("negative"),
53
+ io.Vae.Input("vae"),
54
+ io.Int.Input("width", default=832, min=16, max=8192, step=16),
55
+ io.Int.Input("height", default=480, min=16, max=8192, step=16),
56
+ io.Int.Input("length", default=81, min=1, max=8192, step=4),
57
+ io.Int.Input("batch_size", default=1, min=1, max=4096),
58
+ io.AudioEncoderOutput.Input("audio_1"),
59
+ io.Mask.Input("mask_1", tooltip="White = speaker 1 lip-sync region on the output frame."),
60
+ io.AudioEncoderOutput.Input("audio_2", optional=True),
61
+ io.Mask.Input("mask_2", optional=True, tooltip="Required when audio_2 is connected."),
62
+ io.Int.Input("speaker_2_start_frame", default=-1, min=-1, max=8192, step=1,
63
+ tooltip="-1 auto-starts speaker 2 when speaker 1 audio ends."),
64
+ io.Image.Input("source_video", optional=True),
65
+ io.Image.Input("reference_video", optional=True),
66
+ io.Autogrow.Input("reference_images", optional=True,
67
+ template=io.Autogrow.TemplatePrefix(
68
+ input=io.Image.Input("reference_image"),
69
+ prefix="reference_image_", min=0, max=8)),
70
+ io.Int.Input("ref_max_size", default=848, min=16, max=8192, step=16, optional=True),
71
+ io.Int.Input("mask_crossfade_frames", default=4, min=0, max=64, step=1,
72
+ tooltip="Softens the mask handoff between speakers. 0 = hard cut."),
73
+ io.Float.Input("audio_inject_scale", default=1.0, min=0.0, max=10.0, step=0.01),
74
+ ],
75
+ outputs=[
76
+ io.Conditioning.Output(display_name="positive"),
77
+ io.Conditioning.Output(display_name="negative"),
78
+ io.Latent.Output(display_name="latent"),
79
+ ],
80
+ )
81
+
82
+ @classmethod
83
+ def execute(
84
+ cls,
85
+ positive,
86
+ negative,
87
+ vae,
88
+ width,
89
+ height,
90
+ length,
91
+ batch_size,
92
+ audio_1,
93
+ mask_1,
94
+ audio_2=None,
95
+ mask_2=None,
96
+ speaker_2_start_frame=-1,
97
+ source_video=None,
98
+ reference_video=None,
99
+ reference_images=None,
100
+ ref_max_size=848,
101
+ mask_crossfade_frames=4,
102
+ audio_inject_scale=1.0,
103
+ ) -> io.NodeOutput:
104
+ if audio_1 is None:
105
+ raise ValueError("Bernini S2V Conditioning v2 requires audio_1.")
106
+ if mask_1 is None:
107
+ raise ValueError("Bernini S2V Conditioning v2 requires mask_1.")
108
+ if audio_2 is not None and mask_2 is None:
109
+ raise ValueError("mask_2 is required when audio_2 is connected.")
110
+
111
+ segments = [{"audio_encoder_output": audio_1, "start_frame": 0, "mask_image": mask_1}]
112
+ if audio_2 is not None:
113
+ segments.append({
114
+ "audio_encoder_output": audio_2,
115
+ "start_frame": speaker_2_start_frame,
116
+ "mask_image": mask_2,
117
+ })
118
+
119
+ latent = torch.zeros(
120
+ [batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8],
121
+ device=comfy.model_management.intermediate_device())
122
+
123
+ context = _build_context_latents(vae, width, height, length, source_video, reference_video, reference_images, ref_max_size)
124
+ if context:
125
+ positive = node_helpers.conditioning_set_values(positive, {"context_latents": context})
126
+ negative = node_helpers.conditioning_set_values(negative, {"context_latents": context})
127
+
128
+ positive, negative = apply_timeline_audio_conditioning(positive, negative, length, segments)
129
+ resolved_segments = resolve_timeline_segment_ranges(length, segments)
130
+ cond_values = {
131
+ "audio_inject_scale": audio_inject_scale,
132
+ "audio_inject_mask": build_timeline_audio_inject_mask(
133
+ width, height, length, resolved_segments,
134
+ crossfade_frames=mask_crossfade_frames,
135
+ device=comfy.model_management.intermediate_device(),
136
+ ),
137
+ }
138
+ positive = node_helpers.conditioning_set_values(positive, cond_values)
139
+ negative_values = dict(cond_values)
140
+ negative_values["audio_inject_mask"] = negative_values["audio_inject_mask"] * 0.0
141
+ negative = node_helpers.conditioning_set_values(negative, negative_values)
142
+
143
+ return io.NodeOutput(positive, negative, {"samples": latent})
144
+
145
+
146
+ class WanBerniniS2VV2Extension(ComfyExtension):
147
+ @override
148
+ async def get_node_list(self) -> list[type[io.ComfyNode]]:
149
+ return [BerniniS2VConditioningV2]
150
+
151
+
152
+ async def comfy_entrypoint() -> WanBerniniS2VV2Extension:
153
+ return WanBerniniS2VV2Extension()
ComfyUI-WanBerniniS2V_v2/wan_audio.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import math
2
+
3
+ import torch
4
+
5
+ import node_helpers
6
+ from comfy_extras.nodes_wan import get_audio_embed_bucket_fps, linear_interpolation
7
+
8
+ WAN_AUDIO_INPUT_FPS = 50
9
+ WAN_AUDIO_VIDEO_RATE = 30
10
+ WAN_AUDIO_FPS = 16
11
+ WAN_AUDIO_SAMPLE_RATE = 16000
12
+
13
+
14
+ def _audio_feat(audio_encoder_output):
15
+ feat = torch.cat(audio_encoder_output["encoded_audio_all_layers"])
16
+ return linear_interpolation(feat, input_fps=WAN_AUDIO_INPUT_FPS, output_fps=WAN_AUDIO_VIDEO_RATE)
17
+
18
+
19
+ def audio_encoder_output_video_frames(audio_encoder_output, fps=WAN_AUDIO_FPS):
20
+ audio_samples = audio_encoder_output.get("audio_samples")
21
+ if audio_samples is not None:
22
+ return max(1, int(round(audio_samples / float(WAN_AUDIO_SAMPLE_RATE) * fps)))
23
+ feat = _audio_feat(audio_encoder_output)
24
+ return max(1, int(round(feat.shape[1] * fps / WAN_AUDIO_VIDEO_RATE)))
25
+
26
+
27
+ def _permute_audio_embed_bucket(audio_embed_bucket):
28
+ audio_embed_bucket = audio_embed_bucket.unsqueeze(0)
29
+ if len(audio_embed_bucket.shape) == 3:
30
+ return audio_embed_bucket.permute(0, 2, 1)
31
+ return audio_embed_bucket.permute(0, 2, 3, 1)
32
+
33
+
34
+ def build_timeline_audio_embed(length, segments):
35
+ latent_t = ((length - 1) // 4) + 1
36
+ batch_frames = latent_t * 4
37
+ total_feat_frames = int(math.ceil(batch_frames * WAN_AUDIO_VIDEO_RATE / WAN_AUDIO_FPS))
38
+
39
+ composite = None
40
+ cursor_auto = 0
41
+ for segment in segments:
42
+ feat = _audio_feat(segment["audio_encoder_output"])
43
+ if composite is None:
44
+ composite = torch.zeros(
45
+ feat.shape[0], total_feat_frames, feat.shape[2],
46
+ dtype=feat.dtype, device=feat.device)
47
+
48
+ start_frame = segment.get("start_frame", -1)
49
+ if start_frame is None or start_frame < 0:
50
+ start_frame = cursor_auto
51
+ else:
52
+ start_frame = int(start_frame)
53
+
54
+ start_feat = int(round(start_frame * WAN_AUDIO_VIDEO_RATE / WAN_AUDIO_FPS))
55
+ copy_len = min(feat.shape[1], total_feat_frames - start_feat)
56
+ if copy_len > 0 and start_feat < total_feat_frames:
57
+ composite[:, start_feat:start_feat + copy_len, :] = feat[:, :copy_len, :]
58
+
59
+ cursor_auto = start_frame + audio_encoder_output_video_frames(segment["audio_encoder_output"])
60
+
61
+ audio_embed_bucket, _ = get_audio_embed_bucket_fps(
62
+ composite, fps=WAN_AUDIO_FPS, batch_frames=batch_frames, m=0, video_rate=WAN_AUDIO_VIDEO_RATE)
63
+ audio_embed_bucket = _permute_audio_embed_bucket(audio_embed_bucket)
64
+ return audio_embed_bucket[:, :, :, :batch_frames]
65
+
66
+
67
+ def resolve_timeline_segment_ranges(length, segments):
68
+ batch_frames = (((length - 1) // 4) + 1) * 4
69
+ resolved = []
70
+ cursor_auto = 0
71
+ for segment in segments:
72
+ start_frame = segment.get("start_frame", -1)
73
+ if start_frame is None or start_frame < 0:
74
+ start_frame = cursor_auto
75
+ else:
76
+ start_frame = int(start_frame)
77
+ end_frame = min(batch_frames, start_frame + audio_encoder_output_video_frames(segment["audio_encoder_output"]))
78
+ resolved.append({**segment, "start_frame": start_frame, "end_frame": end_frame})
79
+ cursor_auto = end_frame
80
+ return resolved
81
+
82
+
83
+ def apply_timeline_audio_conditioning(positive, negative, length, segments):
84
+ audio_embed_bucket = build_timeline_audio_embed(length, segments)
85
+ if audio_embed_bucket is None or audio_embed_bucket.shape[3] <= 0:
86
+ return positive, negative
87
+ positive = node_helpers.conditioning_set_values(positive, {"audio_embed": audio_embed_bucket})
88
+ negative = node_helpers.conditioning_set_values(negative, {"audio_embed": audio_embed_bucket * 0.0})
89
+ return positive, negative
README.md ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model:
4
+ - ByteDance/Bernini-R
5
+ tags:
6
+ - text-to-video
7
+ - image-to-video
8
+ - video-to-video
9
+ - image-to-image
10
+ - audio-to-video
11
+ - wan-s2v
12
+ - bernini-r-s2v
13
+ ---
14
+
15
+ # Bernini-R-S2V
16
+
17
+ ## ComfyUI Bernini-R-S2V custom node v2 (update)
18
+
19
+ **Bernini S2V Conditioning v2** - Bernini in-context video/image conditioning with masked lip-sync for one or two speakers.
20
+ <video controls width="100%" height="480">
21
+ <source src="https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/video/ComfyUI__00003-audio.mp4" type="video/mp4">
22
+ Your browser does not support the video tag.
23
+ </video>
24
+
25
+ Unzip [ComfyUI-WanBerniniS2V_v2.zip](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/ComfyUI-WanBerniniS2V_v2/ComfyUI-WanBerniniS2V_v2.zip) into `ComfyUI/custom_nodes/`, then restart ComfyUI.
26
+
27
+ ```
28
+ or save the Python files in: ComfyUI/custom_nodes/ComfyUI-WanBerniniS2V_v2/
29
+ ```
30
+
31
+ Disable or remove the older `ComfyUI-WanBerniniS2V` folder if you only want v2.
32
+
33
+ ### One speaker
34
+
35
+ - `audio_1` + `mask_1`
36
+ - Leave `audio_2` / `mask_2` unwired
37
+
38
+ ### Two speakers (dialog)
39
+
40
+ - `audio_1` + `mask_1` - first speaker
41
+ - `audio_2` + `mask_2` - second speaker
42
+ - `speaker_2_start_frame = -1` - second audio starts when the first clip ends
43
+
44
+ ### Masks
45
+
46
+ Paint on the **output frame** where each speaker's face appears. Masks control lip-sync placement only, they are not tied to `reference_image_N` slots.
47
+ <img src="https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/ComfyUI-WanBerniniS2V_v2/demo_assets/Screenshot_ComfyUI-WanBerniniS2V_v2.png" width="1280" height="720" />
48
+ ________
49
+ <video controls width="100%" height="480">
50
+ <source src="https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/Bernini-R-S2V-FP8/video/ComfyUI__00005-audio.mp4" type="video/mp4">
51
+ Your browser does not support the video tag.
52
+ </video>
53
+
54
+ *Speech-driven video on Bernini-R , T2V, I2V, and V2V with lip-sync.*
55
+
56
+ This model adds single-speaker audio support to Bernini-R, so you can drive video with speech in text-to-video, image-to-video, and video-to-video setups.
57
+ It is not state-of-the-art audio-to-video, but it removes the need for post-processing or extra models just to add speech to Wan videos.
58
+ For basic talking-head work, or longer videos built from short sequences, it is a handy all-in-one option on top of Bernini's motion and editing strengths.
59
+
60
+
61
+ | File | Role |
62
+ |---|---|
63
+ | '[wan2.2_bernini_r_high_noise_fp16_s2v.safetensors](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/Bernini-R-S2V-FP16/wan2.2_bernini_r_high_noise_fp16_s2v.safetensors)'| High noise |
64
+ | '[wan2.2_bernini_r_low_noise_fp16_s2v.safetensors](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/Bernini-R-S2V-FP16/wan2.2_bernini_r_low_noise_fp16_s2v.safetensors)'| Low noise |
65
+ | '[wan2.2_bernini_r_high_noise_fp8_scaled_s2v.safetensors](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/Bernini-R-S2V-FP8/wan2.2_bernini_r_high_noise_fp8_scaled_s2v.safetensors)' | High noise |
66
+ | '[wan2.2_bernini_r_low_noise_fp8_scaled_s2v.safetensors](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/Bernini-R-S2V-FP8/wan2.2_bernini_r_low_noise_fp8_scaled_s2v.safetensors)' | Low noise |
67
+ | '[wan2.2_bernini_r_high_noise_int8_convrot_s2v.safetensors](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_high_noise_int8_convrot_s2v.safetensors)' | High noise |
68
+ | '[wan2.2_bernini_r_low_noise_int8_convrot_s2v.safetensors](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_low_noise_int8_convrot_s2v.safetensors)' | Low noise |
69
+
70
+ ComfyUI detects these as **`WAN22_S2V`** / 'WanModel_S2V' (audio keys trigger S2V model type).
71
+
72
+ ## Usage
73
+
74
+ 1. Download the checkpoints.
75
+ 2. Place in:
76
+ ```
77
+ ComfyUI/models/diffusion_models/
78
+ ```
79
+ 3. Add [wav2vec2](https://huggingface.co/rzgar/Bernini-R-S2V/resolve/main/audio_encoders/wav2vec2_large_english_fp16.safetensors) to:
80
+ ```
81
+ ComfyUI/models/audio_encoders/
82
+ ```
83
+ 4. Install **[ComfyUI-WanBerniniS2V](https://huggingface.co/rzgar/Bernini-R-S2V/tree/main/ComfyUI-WanBerniniS2V)** custom node:
84
+ ```
85
+ (Create a folder in 'ComfyUI/custom_nodes/' named 'ComfyUI-WanBerniniS2V', then save the Python files in that folder.)
86
+ ```
87
+ 5. Restart ComfyUI.
88
+ 6. Search for the Bernini S2V Conditioning node or use the example [workfllow](https://huggingface.co/rzgar/Bernini-R-S2V/blob/main/Workflow/Bernini-R-S2V_Workflow.json)
89
+
90
+ ## Audio tips
91
+
92
+ | Setting | Recommendation |
93
+ |---|---|
94
+ | **Channels** | **Mono**, wav2vec2 downmixes stereo internally |
95
+ | **Sample rate** | 44.1 khz or 48 khz (resampled to 16 kHz) |
96
+ | **Content** | Clear speech, less background music = better sync |
97
+ | **Length** | in my testing, max 9 to 15 seconds |
98
+
Workflow/Bernini-R-S2V_Workflow.json ADDED
@@ -0,0 +1,2174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "id": "ea7ba43e-ab56-40d4-a298-423f5bfe4462",
3
+ "revision": 0,
4
+ "last_node_id": 252,
5
+ "last_link_id": 664,
6
+ "nodes": [
7
+ {
8
+ "id": 80,
9
+ "type": "VAEDecode",
10
+ "pos": [
11
+ 1210,
12
+ 170
13
+ ],
14
+ "size": [
15
+ 210,
16
+ 50
17
+ ],
18
+ "flags": {},
19
+ "order": 28,
20
+ "mode": 0,
21
+ "inputs": [
22
+ {
23
+ "name": "samples",
24
+ "type": "LATENT",
25
+ "link": 533
26
+ },
27
+ {
28
+ "name": "vae",
29
+ "type": "VAE",
30
+ "link": 285
31
+ }
32
+ ],
33
+ "outputs": [
34
+ {
35
+ "name": "IMAGE",
36
+ "type": "IMAGE",
37
+ "links": [
38
+ 580
39
+ ]
40
+ }
41
+ ],
42
+ "properties": {
43
+ "cnr_id": "comfy-core",
44
+ "ver": "0.3.54",
45
+ "Node name for S&R": "VAEDecode"
46
+ },
47
+ "widgets_values": []
48
+ },
49
+ {
50
+ "id": 57,
51
+ "type": "AudioEncoderLoader",
52
+ "pos": [
53
+ -80,
54
+ 850
55
+ ],
56
+ "size": [
57
+ 390,
58
+ 70
59
+ ],
60
+ "flags": {},
61
+ "order": 0,
62
+ "mode": 0,
63
+ "inputs": [],
64
+ "outputs": [
65
+ {
66
+ "name": "AUDIO_ENCODER",
67
+ "type": "AUDIO_ENCODER",
68
+ "links": [
69
+ 120
70
+ ]
71
+ }
72
+ ],
73
+ "properties": {
74
+ "cnr_id": "comfy-core",
75
+ "ver": "0.3.54",
76
+ "Node name for S&R": "AudioEncoderLoader",
77
+ "models": [
78
+ {
79
+ "name": "wav2vec2_large_english_fp16.safetensors",
80
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/audio_encoders/wav2vec2_large_english_fp16.safetensors",
81
+ "directory": "audio_encoders"
82
+ }
83
+ ]
84
+ },
85
+ "widgets_values": [
86
+ "wav2vec2_large_english_fp16.safetensors"
87
+ ]
88
+ },
89
+ {
90
+ "id": 235,
91
+ "type": "Reroute",
92
+ "pos": [
93
+ 360,
94
+ 760
95
+ ],
96
+ "size": [
97
+ 75,
98
+ 26
99
+ ],
100
+ "flags": {},
101
+ "order": 23,
102
+ "mode": 0,
103
+ "inputs": [
104
+ {
105
+ "name": "",
106
+ "type": "*",
107
+ "link": 656
108
+ }
109
+ ],
110
+ "outputs": [
111
+ {
112
+ "name": "",
113
+ "type": "AUDIO",
114
+ "links": [
115
+ 622,
116
+ 630
117
+ ]
118
+ }
119
+ ],
120
+ "properties": {
121
+ "showOutputText": false,
122
+ "horizontal": false
123
+ },
124
+ "color": "#323",
125
+ "bgcolor": "#535"
126
+ },
127
+ {
128
+ "id": 238,
129
+ "type": "ComfyMathExpression",
130
+ "pos": [
131
+ 1150,
132
+ 1120
133
+ ],
134
+ "size": [
135
+ 400,
136
+ 200
137
+ ],
138
+ "flags": {
139
+ "collapsed": true
140
+ },
141
+ "order": 14,
142
+ "mode": 0,
143
+ "inputs": [
144
+ {
145
+ "label": "a",
146
+ "name": "values.a",
147
+ "type": "FLOAT,INT,BOOLEAN",
148
+ "link": 627
149
+ },
150
+ {
151
+ "label": "b",
152
+ "name": "values.b",
153
+ "shape": 7,
154
+ "type": "FLOAT,INT,BOOLEAN",
155
+ "link": null
156
+ }
157
+ ],
158
+ "outputs": [
159
+ {
160
+ "name": "FLOAT",
161
+ "type": "FLOAT",
162
+ "links": null
163
+ },
164
+ {
165
+ "name": "INT",
166
+ "type": "INT",
167
+ "links": [
168
+ 641,
169
+ 653
170
+ ]
171
+ },
172
+ {
173
+ "name": "BOOL",
174
+ "type": "BOOLEAN",
175
+ "links": null
176
+ }
177
+ ],
178
+ "title": "16 F/S",
179
+ "properties": {
180
+ "cnr_id": "comfy-core",
181
+ "ver": "0.27.0",
182
+ "Node name for S&R": "ComfyMathExpression"
183
+ },
184
+ "widgets_values": [
185
+ "a * 16"
186
+ ]
187
+ },
188
+ {
189
+ "id": 38,
190
+ "type": "CLIPLoader",
191
+ "pos": [
192
+ -530,
193
+ 470
194
+ ],
195
+ "size": [
196
+ 390,
197
+ 110
198
+ ],
199
+ "flags": {},
200
+ "order": 1,
201
+ "mode": 0,
202
+ "inputs": [],
203
+ "outputs": [
204
+ {
205
+ "name": "CLIP",
206
+ "type": "CLIP",
207
+ "slot_index": 0,
208
+ "links": [
209
+ 74,
210
+ 75
211
+ ]
212
+ }
213
+ ],
214
+ "properties": {
215
+ "cnr_id": "comfy-core",
216
+ "ver": "0.3.54",
217
+ "Node name for S&R": "CLIPLoader",
218
+ "models": [
219
+ {
220
+ "name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
221
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors",
222
+ "directory": "text_encoders"
223
+ }
224
+ ]
225
+ },
226
+ "widgets_values": [
227
+ "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
228
+ "wan",
229
+ "default"
230
+ ]
231
+ },
232
+ {
233
+ "id": 201,
234
+ "type": "RIFEInterpolation",
235
+ "pos": [
236
+ 1480,
237
+ 170
238
+ ],
239
+ "size": [
240
+ 270,
241
+ 180
242
+ ],
243
+ "flags": {},
244
+ "order": 29,
245
+ "mode": 0,
246
+ "inputs": [
247
+ {
248
+ "name": "images",
249
+ "type": "IMAGE",
250
+ "link": 580
251
+ }
252
+ ],
253
+ "outputs": [
254
+ {
255
+ "name": "images",
256
+ "type": "IMAGE",
257
+ "links": [
258
+ 629
259
+ ]
260
+ }
261
+ ],
262
+ "properties": {
263
+ "aux_id": "GACLove/ComfyUI-VFI",
264
+ "ver": "6176a430f12cd16003f4664c1e3c6af8e96cc3c6",
265
+ "Node name for S&R": "RIFEInterpolation"
266
+ },
267
+ "widgets_values": [
268
+ 16,
269
+ 24,
270
+ 2,
271
+ "flownet.pkl",
272
+ 4,
273
+ true
274
+ ]
275
+ },
276
+ {
277
+ "id": 107,
278
+ "type": "LoraLoaderModelOnly",
279
+ "pos": [
280
+ 1140,
281
+ 450
282
+ ],
283
+ "size": [
284
+ 380,
285
+ 90
286
+ ],
287
+ "flags": {},
288
+ "order": 15,
289
+ "mode": 0,
290
+ "inputs": [
291
+ {
292
+ "name": "model",
293
+ "type": "MODEL",
294
+ "link": 585
295
+ }
296
+ ],
297
+ "outputs": [
298
+ {
299
+ "name": "MODEL",
300
+ "type": "MODEL",
301
+ "links": [
302
+ 363
303
+ ]
304
+ }
305
+ ],
306
+ "properties": {
307
+ "cnr_id": "comfy-core",
308
+ "ver": "0.3.54",
309
+ "Node name for S&R": "LoraLoaderModelOnly",
310
+ "models": [
311
+ {
312
+ "name": "wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
313
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
314
+ "directory": "loras"
315
+ }
316
+ ]
317
+ },
318
+ "widgets_values": [
319
+ "Wan-Speed/Bernini-R/Bernini-R_LightX2V_high_noise.safetensors",
320
+ 1
321
+ ]
322
+ },
323
+ {
324
+ "id": 210,
325
+ "type": "LoraLoaderModelOnly",
326
+ "pos": [
327
+ 1560,
328
+ 450
329
+ ],
330
+ "size": [
331
+ 360,
332
+ 90
333
+ ],
334
+ "flags": {},
335
+ "order": 16,
336
+ "mode": 0,
337
+ "inputs": [
338
+ {
339
+ "name": "model",
340
+ "type": "MODEL",
341
+ "link": 586
342
+ }
343
+ ],
344
+ "outputs": [
345
+ {
346
+ "name": "MODEL",
347
+ "type": "MODEL",
348
+ "links": [
349
+ 581
350
+ ]
351
+ }
352
+ ],
353
+ "properties": {
354
+ "cnr_id": "comfy-core",
355
+ "ver": "0.3.54",
356
+ "Node name for S&R": "LoraLoaderModelOnly",
357
+ "models": [
358
+ {
359
+ "name": "wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
360
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors",
361
+ "directory": "loras"
362
+ }
363
+ ]
364
+ },
365
+ "widgets_values": [
366
+ "Wan-Speed/Bernini-R/Bernini-R_LightX2V_low_noise.safetensors",
367
+ 1
368
+ ]
369
+ },
370
+ {
371
+ "id": 56,
372
+ "type": "AudioEncoderEncode",
373
+ "pos": [
374
+ 390,
375
+ 850
376
+ ],
377
+ "size": [
378
+ 290,
379
+ 50
380
+ ],
381
+ "flags": {},
382
+ "order": 24,
383
+ "mode": 0,
384
+ "inputs": [
385
+ {
386
+ "name": "audio_encoder",
387
+ "type": "AUDIO_ENCODER",
388
+ "link": 120
389
+ },
390
+ {
391
+ "name": "audio",
392
+ "type": "AUDIO",
393
+ "link": 622
394
+ }
395
+ ],
396
+ "outputs": [
397
+ {
398
+ "name": "AUDIO_ENCODER_OUTPUT",
399
+ "type": "AUDIO_ENCODER_OUTPUT",
400
+ "links": [
401
+ 646
402
+ ]
403
+ }
404
+ ],
405
+ "properties": {
406
+ "cnr_id": "comfy-core",
407
+ "ver": "0.3.54",
408
+ "Node name for S&R": "AudioEncoderEncode"
409
+ },
410
+ "widgets_values": []
411
+ },
412
+ {
413
+ "id": 54,
414
+ "type": "ModelSamplingSD3",
415
+ "pos": [
416
+ 1140,
417
+ 590
418
+ ],
419
+ "size": [
420
+ 370,
421
+ 60
422
+ ],
423
+ "flags": {},
424
+ "order": 20,
425
+ "mode": 4,
426
+ "inputs": [
427
+ {
428
+ "name": "model",
429
+ "type": "MODEL",
430
+ "link": 363
431
+ }
432
+ ],
433
+ "outputs": [
434
+ {
435
+ "name": "MODEL",
436
+ "type": "MODEL",
437
+ "slot_index": 0,
438
+ "links": [
439
+ 522
440
+ ]
441
+ }
442
+ ],
443
+ "properties": {
444
+ "cnr_id": "comfy-core",
445
+ "ver": "0.3.54",
446
+ "Node name for S&R": "ModelSamplingSD3"
447
+ },
448
+ "widgets_values": [
449
+ 8
450
+ ]
451
+ },
452
+ {
453
+ "id": 214,
454
+ "type": "ModelSamplingSD3",
455
+ "pos": [
456
+ 1560,
457
+ 590
458
+ ],
459
+ "size": [
460
+ 360,
461
+ 60
462
+ ],
463
+ "flags": {},
464
+ "order": 21,
465
+ "mode": 4,
466
+ "inputs": [
467
+ {
468
+ "name": "model",
469
+ "type": "MODEL",
470
+ "link": 581
471
+ }
472
+ ],
473
+ "outputs": [
474
+ {
475
+ "name": "MODEL",
476
+ "type": "MODEL",
477
+ "slot_index": 0,
478
+ "links": [
479
+ 582
480
+ ]
481
+ }
482
+ ],
483
+ "properties": {
484
+ "cnr_id": "comfy-core",
485
+ "ver": "0.3.54",
486
+ "Node name for S&R": "ModelSamplingSD3"
487
+ },
488
+ "widgets_values": [
489
+ 8
490
+ ]
491
+ },
492
+ {
493
+ "id": 39,
494
+ "type": "VAELoader",
495
+ "pos": [
496
+ 550,
497
+ 990
498
+ ],
499
+ "size": [
500
+ 210,
501
+ 60
502
+ ],
503
+ "flags": {
504
+ "collapsed": true
505
+ },
506
+ "order": 2,
507
+ "mode": 0,
508
+ "inputs": [],
509
+ "outputs": [
510
+ {
511
+ "name": "VAE",
512
+ "type": "VAE",
513
+ "slot_index": 0,
514
+ "links": [
515
+ 285,
516
+ 645
517
+ ]
518
+ }
519
+ ],
520
+ "properties": {
521
+ "cnr_id": "comfy-core",
522
+ "ver": "0.3.54",
523
+ "Node name for S&R": "VAELoader",
524
+ "models": [
525
+ {
526
+ "name": "wan_2.1_vae.safetensors",
527
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan_2.1_vae.safetensors",
528
+ "directory": "vae"
529
+ }
530
+ ]
531
+ },
532
+ "widgets_values": [
533
+ "Wan/Wan2_1_VAE_fp32.safetensors"
534
+ ]
535
+ },
536
+ {
537
+ "id": 245,
538
+ "type": "BerniniS2VConditioning",
539
+ "pos": [
540
+ 780,
541
+ 730
542
+ ],
543
+ "size": [
544
+ 310,
545
+ 320
546
+ ],
547
+ "flags": {},
548
+ "order": 25,
549
+ "mode": 0,
550
+ "inputs": [
551
+ {
552
+ "name": "positive",
553
+ "type": "CONDITIONING",
554
+ "link": 643
555
+ },
556
+ {
557
+ "name": "negative",
558
+ "type": "CONDITIONING",
559
+ "link": 644
560
+ },
561
+ {
562
+ "name": "vae",
563
+ "type": "VAE",
564
+ "link": 645
565
+ },
566
+ {
567
+ "name": "audio_encoder_output",
568
+ "shape": 7,
569
+ "type": "AUDIO_ENCODER_OUTPUT",
570
+ "link": 646
571
+ },
572
+ {
573
+ "name": "source_video",
574
+ "shape": 7,
575
+ "type": "IMAGE",
576
+ "link": null
577
+ },
578
+ {
579
+ "name": "reference_video",
580
+ "shape": 7,
581
+ "type": "IMAGE",
582
+ "link": null
583
+ },
584
+ {
585
+ "label": "reference_image_0",
586
+ "name": "reference_images.reference_image_0",
587
+ "shape": 7,
588
+ "type": "IMAGE",
589
+ "link": 647
590
+ },
591
+ {
592
+ "label": "reference_image_1",
593
+ "name": "reference_images.reference_image_1",
594
+ "shape": 7,
595
+ "type": "IMAGE",
596
+ "link": null
597
+ },
598
+ {
599
+ "name": "length",
600
+ "type": "INT",
601
+ "widget": {
602
+ "name": "length"
603
+ },
604
+ "link": 653
605
+ }
606
+ ],
607
+ "outputs": [
608
+ {
609
+ "name": "positive",
610
+ "type": "CONDITIONING",
611
+ "links": [
612
+ 648,
613
+ 651
614
+ ]
615
+ },
616
+ {
617
+ "name": "negative",
618
+ "type": "CONDITIONING",
619
+ "links": [
620
+ 649,
621
+ 652
622
+ ]
623
+ },
624
+ {
625
+ "name": "latent",
626
+ "type": "LATENT",
627
+ "links": [
628
+ 650
629
+ ]
630
+ }
631
+ ],
632
+ "properties": {
633
+ "Node name for S&R": "BerniniS2VConditioning"
634
+ },
635
+ "widgets_values": [
636
+ 720,
637
+ 480,
638
+ 81,
639
+ 1,
640
+ 848
641
+ ]
642
+ },
643
+ {
644
+ "id": 205,
645
+ "type": "KSamplerAdvanced",
646
+ "pos": [
647
+ 1130,
648
+ 690
649
+ ],
650
+ "size": [
651
+ 370,
652
+ 340
653
+ ],
654
+ "flags": {},
655
+ "order": 26,
656
+ "mode": 0,
657
+ "inputs": [
658
+ {
659
+ "name": "model",
660
+ "type": "MODEL",
661
+ "link": 522
662
+ },
663
+ {
664
+ "name": "positive",
665
+ "type": "CONDITIONING",
666
+ "link": 648
667
+ },
668
+ {
669
+ "name": "negative",
670
+ "type": "CONDITIONING",
671
+ "link": 649
672
+ },
673
+ {
674
+ "name": "latent_image",
675
+ "type": "LATENT",
676
+ "link": 650
677
+ }
678
+ ],
679
+ "outputs": [
680
+ {
681
+ "name": "LATENT",
682
+ "type": "LATENT",
683
+ "links": [
684
+ 526
685
+ ]
686
+ }
687
+ ],
688
+ "properties": {
689
+ "cnr_id": "comfy-core",
690
+ "ver": "0.27.0",
691
+ "Node name for S&R": "KSamplerAdvanced"
692
+ },
693
+ "widgets_values": [
694
+ "enable",
695
+ 786173997924816,
696
+ "randomize",
697
+ 4,
698
+ 1,
699
+ "dpmpp_2m_sde",
700
+ "sgm_uniform",
701
+ 0,
702
+ 2,
703
+ "enable"
704
+ ]
705
+ },
706
+ {
707
+ "id": 207,
708
+ "type": "KSamplerAdvanced",
709
+ "pos": [
710
+ 1560,
711
+ 690
712
+ ],
713
+ "size": [
714
+ 360,
715
+ 340
716
+ ],
717
+ "flags": {},
718
+ "order": 27,
719
+ "mode": 0,
720
+ "inputs": [
721
+ {
722
+ "name": "model",
723
+ "type": "MODEL",
724
+ "link": 582
725
+ },
726
+ {
727
+ "name": "positive",
728
+ "type": "CONDITIONING",
729
+ "link": 651
730
+ },
731
+ {
732
+ "name": "negative",
733
+ "type": "CONDITIONING",
734
+ "link": 652
735
+ },
736
+ {
737
+ "name": "latent_image",
738
+ "type": "LATENT",
739
+ "link": 526
740
+ }
741
+ ],
742
+ "outputs": [
743
+ {
744
+ "name": "LATENT",
745
+ "type": "LATENT",
746
+ "links": [
747
+ 533
748
+ ]
749
+ }
750
+ ],
751
+ "properties": {
752
+ "cnr_id": "comfy-core",
753
+ "ver": "0.27.0",
754
+ "Node name for S&R": "KSamplerAdvanced"
755
+ },
756
+ "widgets_values": [
757
+ "disable",
758
+ 0,
759
+ "fixed",
760
+ 4,
761
+ 1,
762
+ "dpmpp_2m_sde",
763
+ "sgm_uniform",
764
+ 2,
765
+ 4,
766
+ "disable"
767
+ ]
768
+ },
769
+ {
770
+ "id": 237,
771
+ "type": "Reroute",
772
+ "pos": [
773
+ 530,
774
+ 1040
775
+ ],
776
+ "size": [
777
+ 75,
778
+ 26
779
+ ],
780
+ "flags": {},
781
+ "order": 19,
782
+ "mode": 0,
783
+ "inputs": [
784
+ {
785
+ "name": "",
786
+ "type": "*",
787
+ "link": 626
788
+ }
789
+ ],
790
+ "outputs": [
791
+ {
792
+ "name": "",
793
+ "type": "AUDIO",
794
+ "links": [
795
+ 656
796
+ ]
797
+ }
798
+ ],
799
+ "properties": {
800
+ "showOutputText": false,
801
+ "horizontal": false
802
+ },
803
+ "color": "#323",
804
+ "bgcolor": "#535"
805
+ },
806
+ {
807
+ "id": 246,
808
+ "type": "AudioConcat",
809
+ "pos": [
810
+ 180,
811
+ 1250
812
+ ],
813
+ "size": [
814
+ 270,
815
+ 80
816
+ ],
817
+ "flags": {},
818
+ "order": 17,
819
+ "mode": 0,
820
+ "inputs": [
821
+ {
822
+ "name": "audio1",
823
+ "type": "AUDIO",
824
+ "link": 660
825
+ },
826
+ {
827
+ "name": "audio2",
828
+ "type": "AUDIO",
829
+ "link": null
830
+ }
831
+ ],
832
+ "outputs": [
833
+ {
834
+ "name": "AUDIO",
835
+ "type": "AUDIO",
836
+ "links": null
837
+ }
838
+ ],
839
+ "properties": {
840
+ "cnr_id": "comfy-core",
841
+ "ver": "0.27.0",
842
+ "Node name for S&R": "AudioConcat"
843
+ },
844
+ "widgets_values": [
845
+ "after"
846
+ ]
847
+ },
848
+ {
849
+ "id": 250,
850
+ "type": "StringConcatenate",
851
+ "pos": [
852
+ -520,
853
+ 930
854
+ ],
855
+ "size": [
856
+ 400,
857
+ 250
858
+ ],
859
+ "flags": {},
860
+ "order": 18,
861
+ "mode": 0,
862
+ "inputs": [
863
+ {
864
+ "name": "string_a",
865
+ "type": "STRING",
866
+ "widget": {
867
+ "name": "string_a"
868
+ },
869
+ "link": 662
870
+ },
871
+ {
872
+ "name": "string_b",
873
+ "type": "STRING",
874
+ "widget": {
875
+ "name": "string_b"
876
+ },
877
+ "link": 664
878
+ }
879
+ ],
880
+ "outputs": [
881
+ {
882
+ "name": "STRING",
883
+ "type": "STRING",
884
+ "links": [
885
+ 663
886
+ ]
887
+ }
888
+ ],
889
+ "properties": {
890
+ "cnr_id": "comfy-core",
891
+ "ver": "0.24.0",
892
+ "Node name for S&R": "StringConcatenate"
893
+ },
894
+ "widgets_values": [
895
+ "",
896
+ "",
897
+ "."
898
+ ]
899
+ },
900
+ {
901
+ "id": 6,
902
+ "type": "CLIPTextEncode",
903
+ "pos": [
904
+ -50,
905
+ 750
906
+ ],
907
+ "size": [
908
+ 670,
909
+ 280
910
+ ],
911
+ "flags": {
912
+ "collapsed": true
913
+ },
914
+ "order": 22,
915
+ "mode": 0,
916
+ "inputs": [
917
+ {
918
+ "name": "clip",
919
+ "type": "CLIP",
920
+ "link": 74
921
+ },
922
+ {
923
+ "name": "text",
924
+ "type": "STRING",
925
+ "widget": {
926
+ "name": "text"
927
+ },
928
+ "link": 663
929
+ }
930
+ ],
931
+ "outputs": [
932
+ {
933
+ "name": "CONDITIONING",
934
+ "type": "CONDITIONING",
935
+ "slot_index": 0,
936
+ "links": [
937
+ 643
938
+ ]
939
+ }
940
+ ],
941
+ "title": "CLIP Text Encode (Positive Prompt)",
942
+ "properties": {
943
+ "cnr_id": "comfy-core",
944
+ "ver": "0.3.54",
945
+ "Node name for S&R": "CLIPTextEncode"
946
+ },
947
+ "widgets_values": [
948
+ ""
949
+ ],
950
+ "color": "#232",
951
+ "bgcolor": "#353"
952
+ },
953
+ {
954
+ "id": 7,
955
+ "type": "CLIPTextEncode",
956
+ "pos": [
957
+ 10,
958
+ 500
959
+ ],
960
+ "size": [
961
+ 650,
962
+ 180
963
+ ],
964
+ "flags": {},
965
+ "order": 11,
966
+ "mode": 0,
967
+ "inputs": [
968
+ {
969
+ "name": "clip",
970
+ "type": "CLIP",
971
+ "link": 75
972
+ }
973
+ ],
974
+ "outputs": [
975
+ {
976
+ "name": "CONDITIONING",
977
+ "type": "CONDITIONING",
978
+ "slot_index": 0,
979
+ "links": [
980
+ 644
981
+ ]
982
+ }
983
+ ],
984
+ "title": "CLIP Text Encode (Negative Prompt)",
985
+ "properties": {
986
+ "cnr_id": "comfy-core",
987
+ "ver": "0.3.54",
988
+ "Node name for S&R": "CLIPTextEncode"
989
+ },
990
+ "widgets_values": [
991
+ "Vivid color tone, overexposed, static, unclear details, subtitles, style, artwork, painting, image, still, overall grayish, worst quality, low quality, leftover JPEG compression artifacts, ugly, incomplete, missing parts, extra fingers, poorly drawn hands, poorly drawn face, disfigured, malformed body parts, fused fingers, a completely motionless image, messy background, three legs, many people in the background, walking backward."
992
+ ],
993
+ "color": "#223",
994
+ "bgcolor": "#335"
995
+ },
996
+ {
997
+ "id": 251,
998
+ "type": "CustomCombo",
999
+ "pos": [
1000
+ -1020,
1001
+ 760
1002
+ ],
1003
+ "size": [
1004
+ 460,
1005
+ 390
1006
+ ],
1007
+ "flags": {},
1008
+ "order": 3,
1009
+ "mode": 0,
1010
+ "inputs": [],
1011
+ "outputs": [
1012
+ {
1013
+ "name": "STRING",
1014
+ "type": "STRING",
1015
+ "links": []
1016
+ },
1017
+ {
1018
+ "name": "INDEX",
1019
+ "type": "INT",
1020
+ "links": [
1021
+ 661
1022
+ ]
1023
+ }
1024
+ ],
1025
+ "properties": {
1026
+ "cnr_id": "comfy-core",
1027
+ "ver": "0.24.0",
1028
+ "Node name for S&R": "CustomCombo"
1029
+ },
1030
+ "widgets_values": [
1031
+ "Image to Video",
1032
+ 5,
1033
+ "Default",
1034
+ "Text to Image",
1035
+ "Text to Video",
1036
+ "Image Editing",
1037
+ "Subject to Image",
1038
+ "Image to Video",
1039
+ "Video Editing",
1040
+ "Video Editing (Content Propagation)",
1041
+ "Video Editing with Reference",
1042
+ "Ads / Content Insertion",
1043
+ "Video Editing (Action / Position)",
1044
+ "Video Editing (Style / Motion)",
1045
+ ""
1046
+ ]
1047
+ },
1048
+ {
1049
+ "id": 249,
1050
+ "type": "6da2792c-a953-4960-a53a-ff1b5df6fe09",
1051
+ "pos": [
1052
+ -530,
1053
+ 750
1054
+ ],
1055
+ "size": [
1056
+ 410,
1057
+ 150
1058
+ ],
1059
+ "flags": {},
1060
+ "order": 12,
1061
+ "mode": 0,
1062
+ "inputs": [
1063
+ {
1064
+ "name": "index",
1065
+ "type": "INT",
1066
+ "widget": {
1067
+ "name": "index"
1068
+ },
1069
+ "link": 661
1070
+ }
1071
+ ],
1072
+ "outputs": [
1073
+ {
1074
+ "name": "selected_line",
1075
+ "type": "STRING",
1076
+ "links": [
1077
+ 662
1078
+ ]
1079
+ }
1080
+ ],
1081
+ "properties": {
1082
+ "proxyWidgets": [
1083
+ [
1084
+ "2",
1085
+ "string"
1086
+ ],
1087
+ [
1088
+ "248",
1089
+ "value"
1090
+ ]
1091
+ ],
1092
+ "cnr_id": "comfy-core",
1093
+ "ver": "0.19.0",
1094
+ "ue_properties": {
1095
+ "widget_ue_connectable": {},
1096
+ "input_ue_unconnectable": {}
1097
+ }
1098
+ },
1099
+ "widgets_values": []
1100
+ },
1101
+ {
1102
+ "id": 240,
1103
+ "type": "VHS_VideoCombine",
1104
+ "pos": [
1105
+ 2040,
1106
+ 230
1107
+ ],
1108
+ "size": [
1109
+ 470,
1110
+ 648
1111
+ ],
1112
+ "flags": {},
1113
+ "order": 30,
1114
+ "mode": 0,
1115
+ "inputs": [
1116
+ {
1117
+ "name": "images",
1118
+ "type": "IMAGE",
1119
+ "link": 629
1120
+ },
1121
+ {
1122
+ "name": "audio",
1123
+ "shape": 7,
1124
+ "type": "AUDIO",
1125
+ "link": 630
1126
+ },
1127
+ {
1128
+ "name": "meta_batch",
1129
+ "shape": 7,
1130
+ "type": "VHS_BatchManager",
1131
+ "link": null
1132
+ },
1133
+ {
1134
+ "name": "vae",
1135
+ "shape": 7,
1136
+ "type": "VAE",
1137
+ "link": null
1138
+ }
1139
+ ],
1140
+ "outputs": [
1141
+ {
1142
+ "name": "Filenames",
1143
+ "type": "VHS_FILENAMES",
1144
+ "links": null
1145
+ }
1146
+ ],
1147
+ "properties": {
1148
+ "cnr_id": "comfyui-videohelpersuite",
1149
+ "ver": "1.7.9",
1150
+ "Node name for S&R": "VHS_VideoCombine"
1151
+ },
1152
+ "widgets_values": {
1153
+ "frame_rate": 24,
1154
+ "loop_count": 0,
1155
+ "filename_prefix": "video/ComfyUI",
1156
+ "format": "video/h264-mp4",
1157
+ "pix_fmt": "yuv420p",
1158
+ "crf": 19,
1159
+ "save_metadata": true,
1160
+ "trim_to_audio": false,
1161
+ "pingpong": false,
1162
+ "save_output": true,
1163
+ "videopreview": {
1164
+ "hidden": false,
1165
+ "paused": false,
1166
+ "params": {
1167
+ "filename": "ComfyUI_00162-audio.mp4",
1168
+ "subfolder": "video",
1169
+ "type": "output",
1170
+ "format": "video/h264-mp4",
1171
+ "frame_rate": 24,
1172
+ "workflow": "ComfyUI_00162.png",
1173
+ "fullpath": "/media/dgt/N33B/AI/ComfyUI/output/video/ComfyUI_00162-audio.mp4"
1174
+ }
1175
+ }
1176
+ }
1177
+ },
1178
+ {
1179
+ "id": 58,
1180
+ "type": "LoadAudio",
1181
+ "pos": [
1182
+ -90,
1183
+ 1040
1184
+ ],
1185
+ "size": [
1186
+ 280,
1187
+ 140
1188
+ ],
1189
+ "flags": {},
1190
+ "order": 4,
1191
+ "mode": 0,
1192
+ "inputs": [],
1193
+ "outputs": [
1194
+ {
1195
+ "name": "AUDIO",
1196
+ "type": "AUDIO",
1197
+ "links": [
1198
+ 618
1199
+ ]
1200
+ }
1201
+ ],
1202
+ "properties": {
1203
+ "cnr_id": "comfy-core",
1204
+ "ver": "0.3.54",
1205
+ "Node name for S&R": "LoadAudio"
1206
+ },
1207
+ "widgets_values": [
1208
+ "scream_mono.wav",
1209
+ null,
1210
+ null
1211
+ ]
1212
+ },
1213
+ {
1214
+ "id": 223,
1215
+ "type": "TrimAudioDuration",
1216
+ "pos": [
1217
+ 220,
1218
+ 1040
1219
+ ],
1220
+ "size": [
1221
+ 270,
1222
+ 90
1223
+ ],
1224
+ "flags": {},
1225
+ "order": 13,
1226
+ "mode": 0,
1227
+ "inputs": [
1228
+ {
1229
+ "name": "audio",
1230
+ "type": "AUDIO",
1231
+ "link": 618
1232
+ }
1233
+ ],
1234
+ "outputs": [
1235
+ {
1236
+ "name": "AUDIO",
1237
+ "type": "AUDIO",
1238
+ "links": [
1239
+ 626
1240
+ ]
1241
+ }
1242
+ ],
1243
+ "properties": {
1244
+ "cnr_id": "comfy-core",
1245
+ "ver": "0.27.0",
1246
+ "Node name for S&R": "TrimAudioDuration"
1247
+ },
1248
+ "widgets_values": [
1249
+ 0,
1250
+ 7
1251
+ ]
1252
+ },
1253
+ {
1254
+ "id": 252,
1255
+ "type": "PrimitiveStringMultiline",
1256
+ "pos": [
1257
+ -10,
1258
+ 170
1259
+ ],
1260
+ "size": [
1261
+ 710,
1262
+ 290
1263
+ ],
1264
+ "flags": {},
1265
+ "order": 5,
1266
+ "mode": 0,
1267
+ "inputs": [],
1268
+ "outputs": [
1269
+ {
1270
+ "name": "STRING",
1271
+ "type": "STRING",
1272
+ "links": [
1273
+ 664
1274
+ ]
1275
+ }
1276
+ ],
1277
+ "properties": {
1278
+ "cnr_id": "comfy-core",
1279
+ "ver": "0.27.0",
1280
+ "Node name for S&R": "PrimitiveStringMultiline"
1281
+ },
1282
+ "widgets_values": [
1283
+ "the sad young woman in image0 screams out of extreme emotional pain and suffering"
1284
+ ],
1285
+ "color": "#232",
1286
+ "bgcolor": "#353"
1287
+ },
1288
+ {
1289
+ "id": 239,
1290
+ "type": "PrimitiveInt",
1291
+ "pos": [
1292
+ 780,
1293
+ 1090
1294
+ ],
1295
+ "size": [
1296
+ 320,
1297
+ 90
1298
+ ],
1299
+ "flags": {},
1300
+ "order": 6,
1301
+ "mode": 0,
1302
+ "inputs": [],
1303
+ "outputs": [
1304
+ {
1305
+ "name": "INT",
1306
+ "type": "INT",
1307
+ "links": [
1308
+ 627
1309
+ ]
1310
+ }
1311
+ ],
1312
+ "title": "Video Length in Seconds",
1313
+ "properties": {
1314
+ "cnr_id": "comfy-core",
1315
+ "ver": "0.27.0",
1316
+ "Node name for S&R": "PrimitiveInt"
1317
+ },
1318
+ "widgets_values": [
1319
+ 7,
1320
+ "fixed"
1321
+ ]
1322
+ },
1323
+ {
1324
+ "id": 37,
1325
+ "type": "UNETLoader",
1326
+ "pos": [
1327
+ -530,
1328
+ 180
1329
+ ],
1330
+ "size": [
1331
+ 390,
1332
+ 90
1333
+ ],
1334
+ "flags": {},
1335
+ "order": 7,
1336
+ "mode": 0,
1337
+ "inputs": [],
1338
+ "outputs": [
1339
+ {
1340
+ "name": "MODEL",
1341
+ "type": "MODEL",
1342
+ "slot_index": 0,
1343
+ "links": [
1344
+ 585
1345
+ ]
1346
+ }
1347
+ ],
1348
+ "properties": {
1349
+ "cnr_id": "comfy-core",
1350
+ "ver": "0.3.54",
1351
+ "Node name for S&R": "UNETLoader",
1352
+ "models": [
1353
+ {
1354
+ "name": "wan2.2_s2v_14B_fp8_scaled.safetensors",
1355
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_s2v_14B_fp8_scaled.safetensors",
1356
+ "directory": "diffusion_models"
1357
+ }
1358
+ ]
1359
+ },
1360
+ "widgets_values": [
1361
+ "Bernini-R-ComfyUI-int8-convrot-n4w/Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_high_noise_int8_convrot_s2v.safetensors",
1362
+ "default"
1363
+ ]
1364
+ },
1365
+ {
1366
+ "id": 204,
1367
+ "type": "UNETLoader",
1368
+ "pos": [
1369
+ -530,
1370
+ 320
1371
+ ],
1372
+ "size": [
1373
+ 390,
1374
+ 90
1375
+ ],
1376
+ "flags": {},
1377
+ "order": 8,
1378
+ "mode": 0,
1379
+ "inputs": [],
1380
+ "outputs": [
1381
+ {
1382
+ "name": "MODEL",
1383
+ "type": "MODEL",
1384
+ "slot_index": 0,
1385
+ "links": [
1386
+ 586
1387
+ ]
1388
+ }
1389
+ ],
1390
+ "properties": {
1391
+ "cnr_id": "comfy-core",
1392
+ "ver": "0.3.54",
1393
+ "Node name for S&R": "UNETLoader",
1394
+ "models": [
1395
+ {
1396
+ "name": "wan2.2_s2v_14B_fp8_scaled.safetensors",
1397
+ "url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_s2v_14B_fp8_scaled.safetensors",
1398
+ "directory": "diffusion_models"
1399
+ }
1400
+ ]
1401
+ },
1402
+ "widgets_values": [
1403
+ "Bernini-R-ComfyUI-int8-convrot-n4w/Bernini-R-S2V-int8-convrot/wan2.2_bernini_r_low_noise_int8_convrot_s2v.safetensors",
1404
+ "default"
1405
+ ]
1406
+ },
1407
+ {
1408
+ "id": 247,
1409
+ "type": "LoadAudio",
1410
+ "pos": [
1411
+ -150,
1412
+ 1250
1413
+ ],
1414
+ "size": [
1415
+ 290,
1416
+ 140
1417
+ ],
1418
+ "flags": {},
1419
+ "order": 9,
1420
+ "mode": 0,
1421
+ "inputs": [],
1422
+ "outputs": [
1423
+ {
1424
+ "name": "AUDIO",
1425
+ "type": "AUDIO",
1426
+ "links": [
1427
+ 660
1428
+ ]
1429
+ }
1430
+ ],
1431
+ "properties": {
1432
+ "cnr_id": "comfy-core",
1433
+ "ver": "0.27.0",
1434
+ "Node name for S&R": "LoadAudio"
1435
+ },
1436
+ "widgets_values": [
1437
+ "silent_2sec.wav",
1438
+ null,
1439
+ null
1440
+ ]
1441
+ },
1442
+ {
1443
+ "id": 241,
1444
+ "type": "LoadImage",
1445
+ "pos": [
1446
+ 500,
1447
+ 1160
1448
+ ],
1449
+ "size": [
1450
+ 290,
1451
+ 320
1452
+ ],
1453
+ "flags": {},
1454
+ "order": 10,
1455
+ "mode": 0,
1456
+ "inputs": [],
1457
+ "outputs": [
1458
+ {
1459
+ "name": "IMAGE",
1460
+ "type": "IMAGE",
1461
+ "links": [
1462
+ 647
1463
+ ]
1464
+ },
1465
+ {
1466
+ "name": "MASK",
1467
+ "type": "MASK",
1468
+ "links": null
1469
+ }
1470
+ ],
1471
+ "properties": {
1472
+ "cnr_id": "comfy-core",
1473
+ "ver": "0.27.0",
1474
+ "Node name for S&R": "LoadImage"
1475
+ },
1476
+ "widgets_values": [
1477
+ "demo_1.jpg",
1478
+ "image"
1479
+ ]
1480
+ }
1481
+ ],
1482
+ "links": [
1483
+ [
1484
+ 74,
1485
+ 38,
1486
+ 0,
1487
+ 6,
1488
+ 0,
1489
+ "CLIP"
1490
+ ],
1491
+ [
1492
+ 75,
1493
+ 38,
1494
+ 0,
1495
+ 7,
1496
+ 0,
1497
+ "CLIP"
1498
+ ],
1499
+ [
1500
+ 120,
1501
+ 57,
1502
+ 0,
1503
+ 56,
1504
+ 0,
1505
+ "AUDIO_ENCODER"
1506
+ ],
1507
+ [
1508
+ 285,
1509
+ 39,
1510
+ 0,
1511
+ 80,
1512
+ 1,
1513
+ "VAE"
1514
+ ],
1515
+ [
1516
+ 363,
1517
+ 107,
1518
+ 0,
1519
+ 54,
1520
+ 0,
1521
+ "MODEL"
1522
+ ],
1523
+ [
1524
+ 522,
1525
+ 54,
1526
+ 0,
1527
+ 205,
1528
+ 0,
1529
+ "MODEL"
1530
+ ],
1531
+ [
1532
+ 526,
1533
+ 205,
1534
+ 0,
1535
+ 207,
1536
+ 3,
1537
+ "LATENT"
1538
+ ],
1539
+ [
1540
+ 533,
1541
+ 207,
1542
+ 0,
1543
+ 80,
1544
+ 0,
1545
+ "LATENT"
1546
+ ],
1547
+ [
1548
+ 580,
1549
+ 80,
1550
+ 0,
1551
+ 201,
1552
+ 0,
1553
+ "IMAGE"
1554
+ ],
1555
+ [
1556
+ 581,
1557
+ 210,
1558
+ 0,
1559
+ 214,
1560
+ 0,
1561
+ "MODEL"
1562
+ ],
1563
+ [
1564
+ 582,
1565
+ 214,
1566
+ 0,
1567
+ 207,
1568
+ 0,
1569
+ "MODEL"
1570
+ ],
1571
+ [
1572
+ 585,
1573
+ 37,
1574
+ 0,
1575
+ 107,
1576
+ 0,
1577
+ "MODEL"
1578
+ ],
1579
+ [
1580
+ 586,
1581
+ 204,
1582
+ 0,
1583
+ 210,
1584
+ 0,
1585
+ "MODEL"
1586
+ ],
1587
+ [
1588
+ 618,
1589
+ 58,
1590
+ 0,
1591
+ 223,
1592
+ 0,
1593
+ "AUDIO"
1594
+ ],
1595
+ [
1596
+ 622,
1597
+ 235,
1598
+ 0,
1599
+ 56,
1600
+ 1,
1601
+ "AUDIO"
1602
+ ],
1603
+ [
1604
+ 626,
1605
+ 223,
1606
+ 0,
1607
+ 237,
1608
+ 0,
1609
+ "AUDIO"
1610
+ ],
1611
+ [
1612
+ 627,
1613
+ 239,
1614
+ 0,
1615
+ 238,
1616
+ 0,
1617
+ "INT"
1618
+ ],
1619
+ [
1620
+ 629,
1621
+ 201,
1622
+ 0,
1623
+ 240,
1624
+ 0,
1625
+ "IMAGE"
1626
+ ],
1627
+ [
1628
+ 630,
1629
+ 235,
1630
+ 0,
1631
+ 240,
1632
+ 1,
1633
+ "AUDIO"
1634
+ ],
1635
+ [
1636
+ 643,
1637
+ 6,
1638
+ 0,
1639
+ 245,
1640
+ 0,
1641
+ "CONDITIONING"
1642
+ ],
1643
+ [
1644
+ 644,
1645
+ 7,
1646
+ 0,
1647
+ 245,
1648
+ 1,
1649
+ "CONDITIONING"
1650
+ ],
1651
+ [
1652
+ 645,
1653
+ 39,
1654
+ 0,
1655
+ 245,
1656
+ 2,
1657
+ "VAE"
1658
+ ],
1659
+ [
1660
+ 646,
1661
+ 56,
1662
+ 0,
1663
+ 245,
1664
+ 3,
1665
+ "AUDIO_ENCODER_OUTPUT"
1666
+ ],
1667
+ [
1668
+ 647,
1669
+ 241,
1670
+ 0,
1671
+ 245,
1672
+ 6,
1673
+ "IMAGE"
1674
+ ],
1675
+ [
1676
+ 648,
1677
+ 245,
1678
+ 0,
1679
+ 205,
1680
+ 1,
1681
+ "CONDITIONING"
1682
+ ],
1683
+ [
1684
+ 649,
1685
+ 245,
1686
+ 1,
1687
+ 205,
1688
+ 2,
1689
+ "CONDITIONING"
1690
+ ],
1691
+ [
1692
+ 650,
1693
+ 245,
1694
+ 2,
1695
+ 205,
1696
+ 3,
1697
+ "LATENT"
1698
+ ],
1699
+ [
1700
+ 651,
1701
+ 245,
1702
+ 0,
1703
+ 207,
1704
+ 1,
1705
+ "CONDITIONING"
1706
+ ],
1707
+ [
1708
+ 652,
1709
+ 245,
1710
+ 1,
1711
+ 207,
1712
+ 2,
1713
+ "CONDITIONING"
1714
+ ],
1715
+ [
1716
+ 653,
1717
+ 238,
1718
+ 1,
1719
+ 245,
1720
+ 8,
1721
+ "INT"
1722
+ ],
1723
+ [
1724
+ 656,
1725
+ 237,
1726
+ 0,
1727
+ 235,
1728
+ 0,
1729
+ "AUDIO"
1730
+ ],
1731
+ [
1732
+ 660,
1733
+ 247,
1734
+ 0,
1735
+ 246,
1736
+ 0,
1737
+ "AUDIO"
1738
+ ],
1739
+ [
1740
+ 661,
1741
+ 251,
1742
+ 1,
1743
+ 249,
1744
+ 0,
1745
+ "INT"
1746
+ ],
1747
+ [
1748
+ 662,
1749
+ 249,
1750
+ 0,
1751
+ 250,
1752
+ 0,
1753
+ "STRING"
1754
+ ],
1755
+ [
1756
+ 663,
1757
+ 250,
1758
+ 0,
1759
+ 6,
1760
+ 1,
1761
+ "STRING"
1762
+ ],
1763
+ [
1764
+ 664,
1765
+ 252,
1766
+ 0,
1767
+ 250,
1768
+ 1,
1769
+ "STRING"
1770
+ ]
1771
+ ],
1772
+ "groups": [
1773
+ {
1774
+ "id": 2,
1775
+ "title": "-",
1776
+ "bounding": [
1777
+ -110,
1778
+ 100,
1779
+ 2650,
1780
+ 1090
1781
+ ],
1782
+ "color": "#3f789e",
1783
+ "flags": {}
1784
+ },
1785
+ {
1786
+ "id": 3,
1787
+ "title": "-",
1788
+ "bounding": [
1789
+ -540,
1790
+ 100,
1791
+ 430,
1792
+ 490
1793
+ ],
1794
+ "color": "#3f789e",
1795
+ "flags": {}
1796
+ },
1797
+ {
1798
+ "id": 10,
1799
+ "title": "Tasks",
1800
+ "bounding": [
1801
+ -1030,
1802
+ 680,
1803
+ 920,
1804
+ 510
1805
+ ],
1806
+ "color": "#3f789e",
1807
+ "flags": {}
1808
+ }
1809
+ ],
1810
+ "definitions": {
1811
+ "subgraphs": [
1812
+ {
1813
+ "id": "6da2792c-a953-4960-a53a-ff1b5df6fe09",
1814
+ "version": 1,
1815
+ "state": {
1816
+ "lastGroupId": 10,
1817
+ "lastNodeId": 252,
1818
+ "lastLinkId": 664,
1819
+ "lastRerouteId": 0
1820
+ },
1821
+ "revision": 0,
1822
+ "config": {},
1823
+ "name": "Select Per-Line Text by Index",
1824
+ "description": "Selects one line from multiline text by zero-based index for batch or list-driven prompt workflows.",
1825
+ "inputNode": {
1826
+ "id": -10,
1827
+ "bounding": [
1828
+ -990,
1829
+ 8595,
1830
+ 128,
1831
+ 88
1832
+ ]
1833
+ },
1834
+ "outputNode": {
1835
+ "id": -20,
1836
+ "bounding": [
1837
+ 710,
1838
+ 8585,
1839
+ 128,
1840
+ 68
1841
+ ]
1842
+ },
1843
+ "inputs": [
1844
+ {
1845
+ "id": "75417d82-a934-4ac9-b667-d8dcd5a3bfb3",
1846
+ "name": "text_per_line",
1847
+ "type": "STRING",
1848
+ "linkIds": [
1849
+ 13
1850
+ ],
1851
+ "localized_name": "text_per_line",
1852
+ "pos": [
1853
+ -886,
1854
+ 8619
1855
+ ]
1856
+ },
1857
+ {
1858
+ "id": "46e69a73-1804-4ca6-9175-31445bf0be96",
1859
+ "name": "index",
1860
+ "type": "INT",
1861
+ "linkIds": [
1862
+ 14
1863
+ ],
1864
+ "localized_name": "index",
1865
+ "pos": [
1866
+ -886,
1867
+ 8639
1868
+ ]
1869
+ }
1870
+ ],
1871
+ "outputs": [
1872
+ {
1873
+ "id": "e34e8ad1-84d2-4bd2-a460-eb7de6067c10",
1874
+ "name": "selected_line",
1875
+ "type": "STRING",
1876
+ "linkIds": [
1877
+ 10
1878
+ ],
1879
+ "localized_name": "selected_line",
1880
+ "pos": [
1881
+ 734,
1882
+ 8609
1883
+ ]
1884
+ }
1885
+ ],
1886
+ "widgets": [],
1887
+ "nodes": [
1888
+ {
1889
+ "id": 1,
1890
+ "type": "PreviewAny",
1891
+ "pos": [
1892
+ -500,
1893
+ 8400
1894
+ ],
1895
+ "size": [
1896
+ 230,
1897
+ 180
1898
+ ],
1899
+ "flags": {},
1900
+ "order": 0,
1901
+ "mode": 0,
1902
+ "inputs": [
1903
+ {
1904
+ "localized_name": "source",
1905
+ "name": "source",
1906
+ "type": "*",
1907
+ "link": 1
1908
+ }
1909
+ ],
1910
+ "outputs": [
1911
+ {
1912
+ "localized_name": "STRING",
1913
+ "name": "STRING",
1914
+ "type": "STRING",
1915
+ "links": [
1916
+ 6
1917
+ ]
1918
+ }
1919
+ ],
1920
+ "properties": {
1921
+ "cnr_id": "comfy-core",
1922
+ "ver": "0.19.0",
1923
+ "Node name for S&R": "PreviewAny",
1924
+ "ue_properties": {
1925
+ "widget_ue_connectable": {},
1926
+ "input_ue_unconnectable": {}
1927
+ }
1928
+ },
1929
+ "widgets_values": [
1930
+ null,
1931
+ null,
1932
+ null
1933
+ ]
1934
+ },
1935
+ {
1936
+ "id": 2,
1937
+ "type": "RegexExtract",
1938
+ "pos": [
1939
+ -240,
1940
+ 8740
1941
+ ],
1942
+ "size": [
1943
+ 470,
1944
+ 460
1945
+ ],
1946
+ "flags": {},
1947
+ "order": 1,
1948
+ "mode": 0,
1949
+ "showAdvanced": false,
1950
+ "inputs": [
1951
+ {
1952
+ "localized_name": "string",
1953
+ "name": "string",
1954
+ "type": "STRING",
1955
+ "widget": {
1956
+ "name": "string"
1957
+ },
1958
+ "link": 13
1959
+ },
1960
+ {
1961
+ "localized_name": "regex_pattern",
1962
+ "name": "regex_pattern",
1963
+ "type": "STRING",
1964
+ "widget": {
1965
+ "name": "regex_pattern"
1966
+ },
1967
+ "link": 9
1968
+ }
1969
+ ],
1970
+ "outputs": [
1971
+ {
1972
+ "localized_name": "STRING",
1973
+ "name": "STRING",
1974
+ "type": "STRING",
1975
+ "links": [
1976
+ 10
1977
+ ]
1978
+ }
1979
+ ],
1980
+ "properties": {
1981
+ "cnr_id": "comfy-core",
1982
+ "ver": "0.19.0",
1983
+ "Node name for S&R": "RegexExtract",
1984
+ "ue_properties": {
1985
+ "widget_ue_connectable": {},
1986
+ "input_ue_unconnectable": {}
1987
+ }
1988
+ },
1989
+ "widgets_values": [
1990
+ "You are a helpful assistant.\nYou are a helpful assistant specialized in text-to-image generation.\nYou are a helpful assistant specialized in text-to-video generation.\nYou are a helpful assistant specialized in image editing.\nYou are a helpful assistant specialized in subject-to-image generation.\nYou are a helpful assistant specialized in image-to-video generation.\nYou are a helpful assistant specialized in video editing.\nYou are a helpful assistant specialized in video editing on content propagation.\nYou are a helpful assistant specialized in video editing with reference.\nYou are a helpful assistant specialized in ads insertion.\nYou are a helpful assistant for editing. You may need to adjust the subject's action or position.\nYou are a helpful assistant for editing. You might need to adjust the video's style, lighting, colors, textures, and the subject's pose or action.",
1991
+ "",
1992
+ "First Group",
1993
+ false,
1994
+ false,
1995
+ false,
1996
+ 1
1997
+ ]
1998
+ },
1999
+ {
2000
+ "id": 248,
2001
+ "type": "PrimitiveInt",
2002
+ "pos": [
2003
+ -810,
2004
+ 8400
2005
+ ],
2006
+ "size": [
2007
+ 270,
2008
+ 110
2009
+ ],
2010
+ "flags": {},
2011
+ "order": 3,
2012
+ "mode": 0,
2013
+ "inputs": [
2014
+ {
2015
+ "localized_name": "value",
2016
+ "name": "value",
2017
+ "type": "INT",
2018
+ "widget": {
2019
+ "name": "value"
2020
+ },
2021
+ "link": 14
2022
+ }
2023
+ ],
2024
+ "outputs": [
2025
+ {
2026
+ "localized_name": "INT",
2027
+ "name": "INT",
2028
+ "type": "INT",
2029
+ "links": [
2030
+ 1
2031
+ ]
2032
+ }
2033
+ ],
2034
+ "title": "Int (line index)",
2035
+ "properties": {
2036
+ "cnr_id": "comfy-core",
2037
+ "ver": "0.19.0",
2038
+ "Node name for S&R": "Int (line index)",
2039
+ "ue_properties": {
2040
+ "widget_ue_connectable": {},
2041
+ "input_ue_unconnectable": {}
2042
+ }
2043
+ },
2044
+ "widgets_values": [
2045
+ 0,
2046
+ "fixed"
2047
+ ]
2048
+ },
2049
+ {
2050
+ "id": 8,
2051
+ "type": "StringReplace",
2052
+ "pos": [
2053
+ -240,
2054
+ 8400
2055
+ ],
2056
+ "size": [
2057
+ 400,
2058
+ 280
2059
+ ],
2060
+ "flags": {},
2061
+ "order": 2,
2062
+ "mode": 0,
2063
+ "inputs": [
2064
+ {
2065
+ "localized_name": "replace",
2066
+ "name": "replace",
2067
+ "type": "STRING",
2068
+ "widget": {
2069
+ "name": "replace"
2070
+ },
2071
+ "link": 6
2072
+ }
2073
+ ],
2074
+ "outputs": [
2075
+ {
2076
+ "localized_name": "STRING",
2077
+ "name": "STRING",
2078
+ "type": "STRING",
2079
+ "links": [
2080
+ 9
2081
+ ]
2082
+ }
2083
+ ],
2084
+ "properties": {
2085
+ "cnr_id": "comfy-core",
2086
+ "ver": "0.19.0",
2087
+ "Node name for S&R": "StringReplace",
2088
+ "ue_properties": {
2089
+ "widget_ue_connectable": {},
2090
+ "input_ue_unconnectable": {}
2091
+ }
2092
+ },
2093
+ "widgets_values": [
2094
+ "^(?:[^\\n]*\\n){index}([^\\n]*)(?:\\n|$)",
2095
+ "index",
2096
+ ""
2097
+ ]
2098
+ }
2099
+ ],
2100
+ "groups": [],
2101
+ "links": [
2102
+ {
2103
+ "id": 1,
2104
+ "origin_id": 248,
2105
+ "origin_slot": 0,
2106
+ "target_id": 1,
2107
+ "target_slot": 0,
2108
+ "type": "INT"
2109
+ },
2110
+ {
2111
+ "id": 9,
2112
+ "origin_id": 8,
2113
+ "origin_slot": 0,
2114
+ "target_id": 2,
2115
+ "target_slot": 1,
2116
+ "type": "STRING"
2117
+ },
2118
+ {
2119
+ "id": 6,
2120
+ "origin_id": 1,
2121
+ "origin_slot": 0,
2122
+ "target_id": 8,
2123
+ "target_slot": 0,
2124
+ "type": "STRING"
2125
+ },
2126
+ {
2127
+ "id": 10,
2128
+ "origin_id": 2,
2129
+ "origin_slot": 0,
2130
+ "target_id": -20,
2131
+ "target_slot": 0,
2132
+ "type": "STRING"
2133
+ },
2134
+ {
2135
+ "id": 13,
2136
+ "origin_id": -10,
2137
+ "origin_slot": 0,
2138
+ "target_id": 2,
2139
+ "target_slot": 0,
2140
+ "type": "STRING"
2141
+ },
2142
+ {
2143
+ "id": 14,
2144
+ "origin_id": -10,
2145
+ "origin_slot": 1,
2146
+ "target_id": 248,
2147
+ "target_slot": 0,
2148
+ "type": "INT"
2149
+ }
2150
+ ],
2151
+ "extra": {
2152
+ "ue_links": [],
2153
+ "links_added_by_ue": []
2154
+ }
2155
+ }
2156
+ ]
2157
+ },
2158
+ "config": {},
2159
+ "extra": {
2160
+ "ds": {
2161
+ "scale": 0.6016514604754695,
2162
+ "offset": [
2163
+ 1137.0355488088276,
2164
+ 268.4959689575599
2165
+ ]
2166
+ },
2167
+ "frontendVersion": "1.45.20",
2168
+ "VHS_latentpreview": false,
2169
+ "VHS_latentpreviewrate": 0,
2170
+ "VHS_MetadataImage": true,
2171
+ "VHS_KeepIntermediate": true
2172
+ },
2173
+ "version": 0.4
2174
+ }
Workflow/audio_preparation_basic_workflow.json ADDED
@@ -0,0 +1,599 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "id": "b3e2cb52-685a-4e0a-8b0a-11e2f8de4c92",
3
+ "revision": 0,
4
+ "last_node_id": 12,
5
+ "last_link_id": 18,
6
+ "nodes": [
7
+ {
8
+ "id": 3,
9
+ "type": "TrimAudioDuration",
10
+ "pos": [
11
+ 260,
12
+ 1390
13
+ ],
14
+ "size": [
15
+ 270,
16
+ 90
17
+ ],
18
+ "flags": {},
19
+ "order": 6,
20
+ "mode": 0,
21
+ "inputs": [
22
+ {
23
+ "name": "audio",
24
+ "type": "AUDIO",
25
+ "link": 2
26
+ }
27
+ ],
28
+ "outputs": [
29
+ {
30
+ "name": "AUDIO",
31
+ "type": "AUDIO",
32
+ "links": [
33
+ 3
34
+ ]
35
+ }
36
+ ],
37
+ "properties": {
38
+ "cnr_id": "comfy-core",
39
+ "ver": "0.27.0",
40
+ "Node name for S&R": "TrimAudioDuration"
41
+ },
42
+ "widgets_values": [
43
+ 0,
44
+ 2
45
+ ]
46
+ },
47
+ {
48
+ "id": 1,
49
+ "type": "LoadAudio",
50
+ "pos": [
51
+ -90,
52
+ 1560
53
+ ],
54
+ "size": [
55
+ 280,
56
+ 140
57
+ ],
58
+ "flags": {},
59
+ "order": 0,
60
+ "mode": 0,
61
+ "inputs": [],
62
+ "outputs": [
63
+ {
64
+ "name": "AUDIO",
65
+ "type": "AUDIO",
66
+ "links": [
67
+ 1
68
+ ]
69
+ }
70
+ ],
71
+ "properties": {
72
+ "cnr_id": "comfy-core",
73
+ "ver": "0.3.54",
74
+ "Node name for S&R": "LoadAudio"
75
+ },
76
+ "widgets_values": [
77
+ "not_today.wav",
78
+ null,
79
+ null
80
+ ]
81
+ },
82
+ {
83
+ "id": 2,
84
+ "type": "TrimAudioDuration",
85
+ "pos": [
86
+ 250,
87
+ 1590
88
+ ],
89
+ "size": [
90
+ 270,
91
+ 90
92
+ ],
93
+ "flags": {},
94
+ "order": 4,
95
+ "mode": 0,
96
+ "inputs": [
97
+ {
98
+ "name": "audio",
99
+ "type": "AUDIO",
100
+ "link": 1
101
+ }
102
+ ],
103
+ "outputs": [
104
+ {
105
+ "name": "AUDIO",
106
+ "type": "AUDIO",
107
+ "links": [
108
+ 4
109
+ ]
110
+ }
111
+ ],
112
+ "properties": {
113
+ "cnr_id": "comfy-core",
114
+ "ver": "0.27.0",
115
+ "Node name for S&R": "TrimAudioDuration"
116
+ },
117
+ "widgets_values": [
118
+ 0,
119
+ 4
120
+ ]
121
+ },
122
+ {
123
+ "id": 9,
124
+ "type": "TrimAudioDuration",
125
+ "pos": [
126
+ 560,
127
+ 1140
128
+ ],
129
+ "size": [
130
+ 270,
131
+ 90
132
+ ],
133
+ "flags": {},
134
+ "order": 7,
135
+ "mode": 0,
136
+ "inputs": [
137
+ {
138
+ "name": "audio",
139
+ "type": "AUDIO",
140
+ "link": 11
141
+ }
142
+ ],
143
+ "outputs": [
144
+ {
145
+ "name": "AUDIO",
146
+ "type": "AUDIO",
147
+ "links": [
148
+ 16
149
+ ]
150
+ }
151
+ ],
152
+ "properties": {
153
+ "cnr_id": "comfy-core",
154
+ "ver": "0.27.0",
155
+ "Node name for S&R": "TrimAudioDuration"
156
+ },
157
+ "widgets_values": [
158
+ 0,
159
+ 9
160
+ ]
161
+ },
162
+ {
163
+ "id": 5,
164
+ "type": "AudioConcat",
165
+ "pos": [
166
+ 570,
167
+ 1450
168
+ ],
169
+ "size": [
170
+ 270,
171
+ 80
172
+ ],
173
+ "flags": {},
174
+ "order": 8,
175
+ "mode": 0,
176
+ "inputs": [
177
+ {
178
+ "name": "audio1",
179
+ "type": "AUDIO",
180
+ "link": 3
181
+ },
182
+ {
183
+ "name": "audio2",
184
+ "type": "AUDIO",
185
+ "link": 4
186
+ }
187
+ ],
188
+ "outputs": [
189
+ {
190
+ "name": "AUDIO",
191
+ "type": "AUDIO",
192
+ "links": [
193
+ 17
194
+ ]
195
+ }
196
+ ],
197
+ "properties": {
198
+ "cnr_id": "comfy-core",
199
+ "ver": "0.27.0",
200
+ "Node name for S&R": "AudioConcat"
201
+ },
202
+ "widgets_values": [
203
+ "after"
204
+ ]
205
+ },
206
+ {
207
+ "id": 10,
208
+ "type": "AudioAdjustVolume",
209
+ "pos": [
210
+ 250,
211
+ 1150
212
+ ],
213
+ "size": [
214
+ 270,
215
+ 60
216
+ ],
217
+ "flags": {},
218
+ "order": 5,
219
+ "mode": 0,
220
+ "inputs": [
221
+ {
222
+ "name": "audio",
223
+ "type": "AUDIO",
224
+ "link": 10
225
+ }
226
+ ],
227
+ "outputs": [
228
+ {
229
+ "name": "AUDIO",
230
+ "type": "AUDIO",
231
+ "links": [
232
+ 11
233
+ ]
234
+ }
235
+ ],
236
+ "properties": {
237
+ "cnr_id": "comfy-core",
238
+ "ver": "0.27.0",
239
+ "Node name for S&R": "AudioAdjustVolume"
240
+ },
241
+ "widgets_values": [
242
+ -4
243
+ ]
244
+ },
245
+ {
246
+ "id": 8,
247
+ "type": "LoadAudio",
248
+ "pos": [
249
+ -90,
250
+ 1150
251
+ ],
252
+ "size": [
253
+ 280,
254
+ 140
255
+ ],
256
+ "flags": {},
257
+ "order": 1,
258
+ "mode": 0,
259
+ "inputs": [],
260
+ "outputs": [
261
+ {
262
+ "name": "AUDIO",
263
+ "type": "AUDIO",
264
+ "links": [
265
+ 10
266
+ ]
267
+ }
268
+ ],
269
+ "properties": {
270
+ "cnr_id": "comfy-core",
271
+ "ver": "0.3.54",
272
+ "Node name for S&R": "LoadAudio"
273
+ },
274
+ "widgets_values": [
275
+ "Triumph_of_the_Iron.mp3",
276
+ null,
277
+ null
278
+ ]
279
+ },
280
+ {
281
+ "id": 4,
282
+ "type": "LoadAudio",
283
+ "pos": [
284
+ -90,
285
+ 1370
286
+ ],
287
+ "size": [
288
+ 290,
289
+ 140
290
+ ],
291
+ "flags": {},
292
+ "order": 2,
293
+ "mode": 0,
294
+ "inputs": [],
295
+ "outputs": [
296
+ {
297
+ "name": "AUDIO",
298
+ "type": "AUDIO",
299
+ "links": [
300
+ 2
301
+ ]
302
+ }
303
+ ],
304
+ "properties": {
305
+ "cnr_id": "comfy-core",
306
+ "ver": "0.27.0",
307
+ "Node name for S&R": "LoadAudio"
308
+ },
309
+ "widgets_values": [
310
+ "silent_5sec.wav",
311
+ null,
312
+ null
313
+ ]
314
+ },
315
+ {
316
+ "id": 6,
317
+ "type": "PreviewAudio",
318
+ "pos": [
319
+ 1290,
320
+ 1270
321
+ ],
322
+ "size": [
323
+ 270,
324
+ 90
325
+ ],
326
+ "flags": {},
327
+ "order": 10,
328
+ "mode": 0,
329
+ "inputs": [
330
+ {
331
+ "name": "audio",
332
+ "type": "AUDIO",
333
+ "link": 15
334
+ }
335
+ ],
336
+ "outputs": [
337
+ {
338
+ "name": "audio",
339
+ "type": "AUDIO",
340
+ "links": null
341
+ }
342
+ ],
343
+ "properties": {
344
+ "cnr_id": "comfy-core",
345
+ "ver": "0.27.0",
346
+ "Node name for S&R": "PreviewAudio"
347
+ },
348
+ "widgets_values": []
349
+ },
350
+ {
351
+ "id": 7,
352
+ "type": "AudioConcat",
353
+ "pos": [
354
+ 650,
355
+ 970
356
+ ],
357
+ "size": [
358
+ 270,
359
+ 80
360
+ ],
361
+ "flags": {},
362
+ "order": 3,
363
+ "mode": 0,
364
+ "inputs": [
365
+ {
366
+ "name": "audio1",
367
+ "type": "AUDIO",
368
+ "link": null
369
+ },
370
+ {
371
+ "name": "audio2",
372
+ "type": "AUDIO",
373
+ "link": null
374
+ }
375
+ ],
376
+ "outputs": [
377
+ {
378
+ "name": "AUDIO",
379
+ "type": "AUDIO",
380
+ "links": []
381
+ }
382
+ ],
383
+ "properties": {
384
+ "cnr_id": "comfy-core",
385
+ "ver": "0.27.0",
386
+ "Node name for S&R": "AudioConcat"
387
+ },
388
+ "widgets_values": [
389
+ "after"
390
+ ]
391
+ },
392
+ {
393
+ "id": 11,
394
+ "type": "AudioMerge",
395
+ "pos": [
396
+ 960,
397
+ 1290
398
+ ],
399
+ "size": [
400
+ 270,
401
+ 80
402
+ ],
403
+ "flags": {},
404
+ "order": 9,
405
+ "mode": 0,
406
+ "inputs": [
407
+ {
408
+ "name": "audio1",
409
+ "type": "AUDIO",
410
+ "link": 16
411
+ },
412
+ {
413
+ "name": "audio2",
414
+ "type": "AUDIO",
415
+ "link": 17
416
+ }
417
+ ],
418
+ "outputs": [
419
+ {
420
+ "name": "AUDIO",
421
+ "type": "AUDIO",
422
+ "links": [
423
+ 15,
424
+ 18
425
+ ]
426
+ }
427
+ ],
428
+ "properties": {
429
+ "cnr_id": "comfy-core",
430
+ "ver": "0.27.0",
431
+ "Node name for S&R": "AudioMerge"
432
+ },
433
+ "widgets_values": [
434
+ "add"
435
+ ]
436
+ },
437
+ {
438
+ "id": 12,
439
+ "type": "SaveAudioAdvanced",
440
+ "pos": [
441
+ 1290,
442
+ 1040
443
+ ],
444
+ "size": [
445
+ 270,
446
+ 136
447
+ ],
448
+ "flags": {},
449
+ "order": 11,
450
+ "mode": 4,
451
+ "inputs": [
452
+ {
453
+ "name": "audio",
454
+ "type": "AUDIO",
455
+ "link": 18
456
+ }
457
+ ],
458
+ "outputs": [
459
+ {
460
+ "name": "audio",
461
+ "type": "AUDIO",
462
+ "links": null
463
+ }
464
+ ],
465
+ "properties": {
466
+ "cnr_id": "comfy-core",
467
+ "ver": "0.27.0"
468
+ },
469
+ "widgets_values": [
470
+ "audio/ComfyUI",
471
+ "flac"
472
+ ]
473
+ }
474
+ ],
475
+ "links": [
476
+ [
477
+ 1,
478
+ 1,
479
+ 0,
480
+ 2,
481
+ 0,
482
+ "AUDIO"
483
+ ],
484
+ [
485
+ 2,
486
+ 4,
487
+ 0,
488
+ 3,
489
+ 0,
490
+ "AUDIO"
491
+ ],
492
+ [
493
+ 3,
494
+ 3,
495
+ 0,
496
+ 5,
497
+ 0,
498
+ "AUDIO"
499
+ ],
500
+ [
501
+ 4,
502
+ 2,
503
+ 0,
504
+ 5,
505
+ 1,
506
+ "AUDIO"
507
+ ],
508
+ [
509
+ 10,
510
+ 8,
511
+ 0,
512
+ 10,
513
+ 0,
514
+ "AUDIO"
515
+ ],
516
+ [
517
+ 11,
518
+ 10,
519
+ 0,
520
+ 9,
521
+ 0,
522
+ "AUDIO"
523
+ ],
524
+ [
525
+ 15,
526
+ 11,
527
+ 0,
528
+ 6,
529
+ 0,
530
+ "AUDIO"
531
+ ],
532
+ [
533
+ 16,
534
+ 9,
535
+ 0,
536
+ 11,
537
+ 0,
538
+ "AUDIO"
539
+ ],
540
+ [
541
+ 17,
542
+ 5,
543
+ 0,
544
+ 11,
545
+ 1,
546
+ "AUDIO"
547
+ ],
548
+ [
549
+ 18,
550
+ 11,
551
+ 0,
552
+ 12,
553
+ 0,
554
+ "AUDIO"
555
+ ]
556
+ ],
557
+ "groups": [
558
+ {
559
+ "id": 1,
560
+ "title": "Background",
561
+ "bounding": [
562
+ -100,
563
+ 1070,
564
+ 1000,
565
+ 230
566
+ ],
567
+ "color": "#3f789e",
568
+ "flags": {}
569
+ },
570
+ {
571
+ "id": 2,
572
+ "title": "Voice",
573
+ "bounding": [
574
+ -100,
575
+ 1300,
576
+ 1000,
577
+ 400
578
+ ],
579
+ "color": "#3f789e",
580
+ "flags": {}
581
+ }
582
+ ],
583
+ "config": {},
584
+ "extra": {
585
+ "ds": {
586
+ "scale": 1.1724484892685219,
587
+ "offset": [
588
+ 264.7782777407135,
589
+ -888.5466864012899
590
+ ]
591
+ },
592
+ "frontendVersion": "1.45.20",
593
+ "VHS_latentpreview": false,
594
+ "VHS_latentpreviewrate": 0,
595
+ "VHS_MetadataImage": true,
596
+ "VHS_KeepIntermediate": true
597
+ },
598
+ "version": 0.4
599
+ }
Workflow/silent_audio/silent_1sec.wav ADDED
Binary file (88.3 kB). View file
 
Workflow/silent_audio/silent_2sec.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eb3dabdf01168e2a7794ac09834f00173db314caf5f1185103e7279503075def
3
+ size 176478
Workflow/silent_audio/silent_3sec.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f308e4ca6a8c89a463b0b05e2a2a7fc86aa1c49b5df64d564a3468889b45c094
3
+ size 264678
Workflow/silent_audio/silent_4sec.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:54a034885f1a2f97c1c2173cb14ec662d213b47ef432fc23ec5c0df3b0cf58a5
3
+ size 352878
Workflow/silent_audio/silent_5sec.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f9b5ee11477d8006a0c28fb77d496867a7f78b63e7e9be0d493a456acb97b56d
3
+ size 441078
audio_encoders/wav2vec2_large_english_fp16.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5cb1d07df3781a98b68a1719e5c808cd6f80a60e8241dfef8616c4ef7e0e0340
3
+ size 630925720
config.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "model_type": "bernini-r"
3
+ }
video/ComfyUI__00002-audio.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a6f129b6d619ba8ad647d389bf79261dcb8a930b12604bfc791d53e934c15c58
3
+ size 3691532
video/ComfyUI__00003-audio.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b12428b6abb2c9c1ca54347ef81d053477892693c569d464abf73fa824af977e
3
+ size 2522953
video/Triumph_of_the_Iron.mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f112e39d2e697273a31967b57c31c5c41c67200ba3a7575006497f109b0fa1e0
3
+ size 744929
video/anthony.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5ba8d022a19343d0c970422abb3b196a28cc3a7c5b3f1aec145e84cf55f9092b
3
+ size 433362
video/not_today.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6659d24ff35077c85bb26a68c446454b9798642daecbec1ea86c1ec02b94e0a6
3
+ size 203370
video/scream_mono.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0b510f333c625acdc69539d4f46634d829eb6573e4b43df3ac44fd208c07f9a0
3
+ size 1073230