@ignix-social/creator 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -2
- package/dist/box-kit/comfyui/locks/linux-x64.txt +2409 -0
- package/dist/box-kit/comfyui/locks/macos-arm64.txt +2243 -0
- package/dist/box-kit/comfyui/locks/windows-x64.txt +2322 -0
- package/dist/box-kit/comfyui/recast/LICENSE-WAN.txt +201 -0
- package/dist/box-kit/comfyui/recast/people.py +115 -0
- package/dist/box-kit/comfyui/recast/persons.py +90 -0
- package/dist/box-kit/comfyui/recast/prep.py +204 -0
- package/dist/box-kit/comfyui/recast/wan_pose_draw.py +1368 -0
- package/dist/box-kit/comfyui/recast/wan_pose_utils.py +1160 -0
- package/dist/box-kit/comfyui/recast/wan_utils.py +227 -0
- package/dist/box-kit/comfyui/workflows/infinitetalk.v1.json +94 -0
- package/dist/box-kit/comfyui/workflows/wan22-i2v-14b.v1.json +112 -0
- package/dist/box-kit/comfyui/workflows/wan22-i2v.v1.json +62 -0
- package/dist/cli.cjs +23811 -0
- package/dist/core.cjs +63459 -0
- package/dist/sfx-kit/achievement.wav +0 -0
- package/dist/sfx-kit/applause.wav +0 -0
- package/dist/sfx-kit/aww.wav +0 -0
- package/dist/sfx-kit/boing.wav +0 -0
- package/dist/sfx-kit/bonk.wav +0 -0
- package/dist/sfx-kit/boo.wav +0 -0
- package/dist/sfx-kit/boom.wav +0 -0
- package/dist/sfx-kit/camera-shutter.wav +0 -0
- package/dist/sfx-kit/cash-register.wav +0 -0
- package/dist/sfx-kit/cheer.wav +0 -0
- package/dist/sfx-kit/clap-hit.wav +0 -0
- package/dist/sfx-kit/click.wav +0 -0
- package/dist/sfx-kit/clock-tick.wav +0 -0
- package/dist/sfx-kit/coffee-pour.wav +0 -0
- package/dist/sfx-kit/coin.wav +0 -0
- package/dist/sfx-kit/coins.wav +0 -0
- package/dist/sfx-kit/correct.wav +0 -0
- package/dist/sfx-kit/countdown-beep.wav +0 -0
- package/dist/sfx-kit/crickets.wav +0 -0
- package/dist/sfx-kit/ding.wav +0 -0
- package/dist/sfx-kit/door-bell.wav +0 -0
- package/dist/sfx-kit/door-knock.wav +0 -0
- package/dist/sfx-kit/error.wav +0 -0
- package/dist/sfx-kit/flash.wav +0 -0
- package/dist/sfx-kit/gasp.wav +0 -0
- package/dist/sfx-kit/glitch.wav +0 -0
- package/dist/sfx-kit/heartbeat.wav +0 -0
- package/dist/sfx-kit/honk.wav +0 -0
- package/dist/sfx-kit/impact.wav +0 -0
- package/dist/sfx-kit/laugh.wav +0 -0
- package/dist/sfx-kit/level-up.wav +0 -0
- package/dist/sfx-kit/message-received.wav +0 -0
- package/dist/sfx-kit/message-sent.wav +0 -0
- package/dist/sfx-kit/notification.wav +0 -0
- package/dist/sfx-kit/ooh.wav +0 -0
- package/dist/sfx-kit/page-turn.wav +0 -0
- package/dist/sfx-kit/paper-crumple.wav +0 -0
- package/dist/sfx-kit/pen-write.wav +0 -0
- package/dist/sfx-kit/phone-vibrate.wav +0 -0
- package/dist/sfx-kit/pop-clean.wav +0 -0
- package/dist/sfx-kit/pop.wav +0 -0
- package/dist/sfx-kit/punch.wav +0 -0
- package/dist/sfx-kit/record-scratch.wav +0 -0
- package/dist/sfx-kit/reverse-cymbal.wav +0 -0
- package/dist/sfx-kit/rimshot.wav +0 -0
- package/dist/sfx-kit/riser-short.wav +0 -0
- package/dist/sfx-kit/sad-trombone.wav +0 -0
- package/dist/sfx-kit/scroll.wav +0 -0
- package/dist/sfx-kit/slide-whistle.wav +0 -0
- package/dist/sfx-kit/snap.wav +0 -0
- package/dist/sfx-kit/sparkle.wav +0 -0
- package/dist/sfx-kit/splat.wav +0 -0
- package/dist/sfx-kit/squeak.wav +0 -0
- package/dist/sfx-kit/stamp.wav +0 -0
- package/dist/sfx-kit/stomp.wav +0 -0
- package/dist/sfx-kit/sub-drop.wav +0 -0
- package/dist/sfx-kit/success.wav +0 -0
- package/dist/sfx-kit/swipe.wav +0 -0
- package/dist/sfx-kit/swoosh-down.wav +0 -0
- package/dist/sfx-kit/swoosh-up.wav +0 -0
- package/dist/sfx-kit/tap.wav +0 -0
- package/dist/sfx-kit/tape-stop.wav +0 -0
- package/dist/sfx-kit/thud.wav +0 -0
- package/dist/sfx-kit/timer-end.wav +0 -0
- package/dist/sfx-kit/toggle.wav +0 -0
- package/dist/sfx-kit/typing-mobile.wav +0 -0
- package/dist/sfx-kit/typing-slow.wav +0 -0
- package/dist/sfx-kit/typing.wav +0 -0
- package/dist/sfx-kit/whoosh-fast.wav +0 -0
- package/dist/sfx-kit/whoosh-heavy.wav +0 -0
- package/dist/sfx-kit/whoosh-soft.wav +0 -0
- package/dist/sfx-kit/wow.wav +0 -0
- package/dist/sfx-kit/wrong.wav +0 -0
- package/dist/sfx-kit/zipper.wav +0 -0
- package/dist/sfx-kit/zoom-in.wav +0 -0
- package/package.json +32 -4
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved.
|
|
2
|
+
# Modified by Ignix (2026-10-05) for Ignix Creator: file renamed, unchanged. Apache-2.0 (see LICENSE-WAN.txt).
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import math
|
|
6
|
+
import random
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
def get_mask_boxes(mask):
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
mask: [h, w]
|
|
14
|
+
Returns:
|
|
15
|
+
|
|
16
|
+
"""
|
|
17
|
+
y_coords, x_coords = np.nonzero(mask)
|
|
18
|
+
x_min = x_coords.min()
|
|
19
|
+
x_max = x_coords.max()
|
|
20
|
+
y_min = y_coords.min()
|
|
21
|
+
y_max = y_coords.max()
|
|
22
|
+
bbox = np.array([x_min, y_min, x_max, y_max]).astype(np.int32)
|
|
23
|
+
return bbox
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def get_aug_mask(body_mask, w_len=10, h_len=20):
|
|
27
|
+
body_bbox = get_mask_boxes(body_mask)
|
|
28
|
+
|
|
29
|
+
bbox_wh = body_bbox[2:4] - body_bbox[0:2]
|
|
30
|
+
w_slice = np.int32(bbox_wh[0] / w_len)
|
|
31
|
+
h_slice = np.int32(bbox_wh[1] / h_len)
|
|
32
|
+
|
|
33
|
+
for each_w in range(body_bbox[0], body_bbox[2], w_slice):
|
|
34
|
+
w_start = min(each_w, body_bbox[2])
|
|
35
|
+
w_end = min((each_w + w_slice), body_bbox[2])
|
|
36
|
+
# print(w_start, w_end)
|
|
37
|
+
for each_h in range(body_bbox[1], body_bbox[3], h_slice):
|
|
38
|
+
h_start = min(each_h, body_bbox[3])
|
|
39
|
+
h_end = min((each_h + h_slice), body_bbox[3])
|
|
40
|
+
if body_mask[h_start:h_end, w_start:w_end].sum() > 0:
|
|
41
|
+
body_mask[h_start:h_end, w_start:w_end] = 1
|
|
42
|
+
|
|
43
|
+
return body_mask
|
|
44
|
+
|
|
45
|
+
def get_mask_body_img(img_copy, hand_mask, k=7, iterations=1):
|
|
46
|
+
kernel = np.ones((k, k), np.uint8)
|
|
47
|
+
dilation = cv2.dilate(hand_mask, kernel, iterations=iterations)
|
|
48
|
+
mask_hand_img = img_copy * (1 - dilation[:, :, None])
|
|
49
|
+
|
|
50
|
+
return mask_hand_img, dilation
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def get_face_bboxes(kp2ds, scale, image_shape, ratio_aug):
|
|
54
|
+
h, w = image_shape
|
|
55
|
+
kp2ds_face = kp2ds.copy()[23:91, :2]
|
|
56
|
+
|
|
57
|
+
min_x, min_y = np.min(kp2ds_face, axis=0)
|
|
58
|
+
max_x, max_y = np.max(kp2ds_face, axis=0)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
initial_width = max_x - min_x
|
|
62
|
+
initial_height = max_y - min_y
|
|
63
|
+
|
|
64
|
+
initial_area = initial_width * initial_height
|
|
65
|
+
|
|
66
|
+
expanded_area = initial_area * scale
|
|
67
|
+
|
|
68
|
+
new_width = np.sqrt(expanded_area * (initial_width / initial_height))
|
|
69
|
+
new_height = np.sqrt(expanded_area * (initial_height / initial_width))
|
|
70
|
+
|
|
71
|
+
delta_width = (new_width - initial_width) / 2
|
|
72
|
+
delta_height = (new_height - initial_height) / 4
|
|
73
|
+
|
|
74
|
+
if ratio_aug:
|
|
75
|
+
if random.random() > 0.5:
|
|
76
|
+
delta_width += random.uniform(0, initial_width // 10)
|
|
77
|
+
else:
|
|
78
|
+
delta_height += random.uniform(0, initial_height // 10)
|
|
79
|
+
|
|
80
|
+
expanded_min_x = max(min_x - delta_width, 0)
|
|
81
|
+
expanded_max_x = min(max_x + delta_width, w)
|
|
82
|
+
expanded_min_y = max(min_y - 3 * delta_height, 0)
|
|
83
|
+
expanded_max_y = min(max_y + delta_height, h)
|
|
84
|
+
|
|
85
|
+
return [int(expanded_min_x), int(expanded_max_x), int(expanded_min_y), int(expanded_max_y)]
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def calculate_new_size(orig_w, orig_h, target_area, divisor=64):
|
|
89
|
+
|
|
90
|
+
target_ratio = orig_w / orig_h
|
|
91
|
+
|
|
92
|
+
def check_valid(w, h):
|
|
93
|
+
|
|
94
|
+
if w <= 0 or h <= 0:
|
|
95
|
+
return False
|
|
96
|
+
return (w * h <= target_area and
|
|
97
|
+
w % divisor == 0 and
|
|
98
|
+
h % divisor == 0)
|
|
99
|
+
|
|
100
|
+
def get_ratio_diff(w, h):
|
|
101
|
+
|
|
102
|
+
return abs(w / h - target_ratio)
|
|
103
|
+
|
|
104
|
+
def round_to_64(value, round_up=False, divisor=64):
|
|
105
|
+
|
|
106
|
+
if round_up:
|
|
107
|
+
return divisor * ((value + (divisor - 1)) // divisor)
|
|
108
|
+
return divisor * (value // divisor)
|
|
109
|
+
|
|
110
|
+
possible_sizes = []
|
|
111
|
+
|
|
112
|
+
max_area_h = int(np.sqrt(target_area / target_ratio))
|
|
113
|
+
max_area_w = int(max_area_h * target_ratio)
|
|
114
|
+
|
|
115
|
+
max_h = round_to_64(max_area_h, round_up=True, divisor=divisor)
|
|
116
|
+
max_w = round_to_64(max_area_w, round_up=True, divisor=divisor)
|
|
117
|
+
|
|
118
|
+
for h in range(divisor, max_h + divisor, divisor):
|
|
119
|
+
ideal_w = h * target_ratio
|
|
120
|
+
|
|
121
|
+
w_down = round_to_64(ideal_w)
|
|
122
|
+
w_up = round_to_64(ideal_w, round_up=True)
|
|
123
|
+
|
|
124
|
+
for w in [w_down, w_up]:
|
|
125
|
+
if check_valid(w, h, divisor):
|
|
126
|
+
possible_sizes.append((w, h, get_ratio_diff(w, h)))
|
|
127
|
+
|
|
128
|
+
if not possible_sizes:
|
|
129
|
+
raise ValueError("Can not find suitable size")
|
|
130
|
+
|
|
131
|
+
possible_sizes.sort(key=lambda x: (-x[0] * x[1], x[2]))
|
|
132
|
+
|
|
133
|
+
best_w, best_h, _ = possible_sizes[0]
|
|
134
|
+
return int(best_w), int(best_h)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def resize_by_area(image, target_area, keep_aspect_ratio=True, divisor=64, padding_color=(0, 0, 0)):
|
|
138
|
+
h, w = image.shape[:2]
|
|
139
|
+
try:
|
|
140
|
+
new_w, new_h = calculate_new_size(w, h, target_area, divisor)
|
|
141
|
+
except:
|
|
142
|
+
aspect_ratio = w / h
|
|
143
|
+
|
|
144
|
+
if keep_aspect_ratio:
|
|
145
|
+
new_h = math.sqrt(target_area / aspect_ratio)
|
|
146
|
+
new_w = target_area / new_h
|
|
147
|
+
else:
|
|
148
|
+
new_w = new_h = math.sqrt(target_area)
|
|
149
|
+
|
|
150
|
+
new_w, new_h = int((new_w // divisor) * divisor), int((new_h // divisor) * divisor)
|
|
151
|
+
|
|
152
|
+
interpolation = cv2.INTER_AREA if (new_w * new_h < w * h) else cv2.INTER_LINEAR
|
|
153
|
+
|
|
154
|
+
resized_image = padding_resize(image, height=new_h, width=new_w, padding_color=padding_color,
|
|
155
|
+
interpolation=interpolation)
|
|
156
|
+
return resized_image
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def padding_resize(img_ori, height=512, width=512, padding_color=(0, 0, 0), interpolation=cv2.INTER_LINEAR):
|
|
160
|
+
ori_height = img_ori.shape[0]
|
|
161
|
+
ori_width = img_ori.shape[1]
|
|
162
|
+
channel = img_ori.shape[2]
|
|
163
|
+
|
|
164
|
+
img_pad = np.zeros((height, width, channel))
|
|
165
|
+
if channel == 1:
|
|
166
|
+
img_pad[:, :, 0] = padding_color[0]
|
|
167
|
+
else:
|
|
168
|
+
img_pad[:, :, 0] = padding_color[0]
|
|
169
|
+
img_pad[:, :, 1] = padding_color[1]
|
|
170
|
+
img_pad[:, :, 2] = padding_color[2]
|
|
171
|
+
|
|
172
|
+
if (ori_height / ori_width) > (height / width):
|
|
173
|
+
new_width = int(height / ori_height * ori_width)
|
|
174
|
+
img = cv2.resize(img_ori, (new_width, height), interpolation=interpolation)
|
|
175
|
+
padding = int((width - new_width) / 2)
|
|
176
|
+
if len(img.shape) == 2:
|
|
177
|
+
img = img[:, :, np.newaxis]
|
|
178
|
+
img_pad[:, padding: padding + new_width, :] = img
|
|
179
|
+
else:
|
|
180
|
+
new_height = int(width / ori_width * ori_height)
|
|
181
|
+
img = cv2.resize(img_ori, (width, new_height), interpolation=interpolation)
|
|
182
|
+
padding = int((height - new_height) / 2)
|
|
183
|
+
if len(img.shape) == 2:
|
|
184
|
+
img = img[:, :, np.newaxis]
|
|
185
|
+
img_pad[padding: padding + new_height, :, :] = img
|
|
186
|
+
|
|
187
|
+
img_pad = np.uint8(img_pad)
|
|
188
|
+
|
|
189
|
+
return img_pad
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def get_frame_indices(frame_num, video_fps, clip_length, train_fps):
|
|
193
|
+
|
|
194
|
+
start_frame = 0
|
|
195
|
+
times = np.arange(0, clip_length) / train_fps
|
|
196
|
+
frame_indices = start_frame + np.round(times * video_fps).astype(int)
|
|
197
|
+
frame_indices = np.clip(frame_indices, 0, frame_num - 1)
|
|
198
|
+
|
|
199
|
+
return frame_indices.tolist()
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def get_face_bboxes(kp2ds, scale, image_shape):
|
|
203
|
+
h, w = image_shape
|
|
204
|
+
kp2ds_face = kp2ds.copy()[1:] * (w, h)
|
|
205
|
+
|
|
206
|
+
min_x, min_y = np.min(kp2ds_face, axis=0)
|
|
207
|
+
max_x, max_y = np.max(kp2ds_face, axis=0)
|
|
208
|
+
|
|
209
|
+
initial_width = max_x - min_x
|
|
210
|
+
initial_height = max_y - min_y
|
|
211
|
+
|
|
212
|
+
initial_area = initial_width * initial_height
|
|
213
|
+
|
|
214
|
+
expanded_area = initial_area * scale
|
|
215
|
+
|
|
216
|
+
new_width = np.sqrt(expanded_area * (initial_width / initial_height))
|
|
217
|
+
new_height = np.sqrt(expanded_area * (initial_height / initial_width))
|
|
218
|
+
|
|
219
|
+
delta_width = (new_width - initial_width) / 2
|
|
220
|
+
delta_height = (new_height - initial_height) / 4
|
|
221
|
+
|
|
222
|
+
expanded_min_x = max(min_x - delta_width, 0)
|
|
223
|
+
expanded_max_x = min(max_x + delta_width, w)
|
|
224
|
+
expanded_min_y = max(min_y - 3 * delta_height, 0)
|
|
225
|
+
expanded_max_y = min(max_y + delta_height, h)
|
|
226
|
+
|
|
227
|
+
return [int(expanded_min_x), int(expanded_max_x), int(expanded_min_y), int(expanded_max_y)]
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"1": {
|
|
3
|
+
"class_type": "UNETLoader",
|
|
4
|
+
"inputs": {
|
|
5
|
+
"unet_name": "Wan2_1-I2V-14B-480p_fp8_e4m3fn_scaled_KJ.safetensors",
|
|
6
|
+
"weight_dtype": "default"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"2": {
|
|
10
|
+
"class_type": "LoraLoaderModelOnly",
|
|
11
|
+
"inputs": {
|
|
12
|
+
"model": ["1", 0],
|
|
13
|
+
"lora_name": "lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensors",
|
|
14
|
+
"strength_model": 1
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"3": {
|
|
18
|
+
"class_type": "CLIPLoader",
|
|
19
|
+
"inputs": {
|
|
20
|
+
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
|
|
21
|
+
"type": "wan",
|
|
22
|
+
"device": "default"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"4": { "class_type": "VAELoader", "inputs": { "vae_name": "Wan2_1_VAE_bf16.safetensors" } },
|
|
26
|
+
"5": {
|
|
27
|
+
"class_type": "ModelPatchLoader",
|
|
28
|
+
"inputs": { "name": "wan2.1_infiniteTalk_single_fp16.safetensors" }
|
|
29
|
+
},
|
|
30
|
+
"6": {
|
|
31
|
+
"class_type": "AudioEncoderLoader",
|
|
32
|
+
"inputs": { "audio_encoder_name": "wav2vec2-chinese-base_fp16.safetensors" }
|
|
33
|
+
},
|
|
34
|
+
"7": { "class_type": "LoadImage", "inputs": { "image": "{{image}}" } },
|
|
35
|
+
"8": { "class_type": "LoadAudio", "inputs": { "audio": "{{audio}}" } },
|
|
36
|
+
"9": {
|
|
37
|
+
"class_type": "AudioEncoderEncode",
|
|
38
|
+
"inputs": { "audio_encoder": ["6", 0], "audio": ["8", 0] }
|
|
39
|
+
},
|
|
40
|
+
"10": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["3", 0], "text": "{{prompt}}" } },
|
|
41
|
+
"11": { "class_type": "ConditioningZeroOut", "inputs": { "conditioning": ["10", 0] } },
|
|
42
|
+
"12": {
|
|
43
|
+
"class_type": "WanInfiniteTalkToVideo",
|
|
44
|
+
"inputs": {
|
|
45
|
+
"mode": "single_speaker",
|
|
46
|
+
"model": ["2", 0],
|
|
47
|
+
"model_patch": ["5", 0],
|
|
48
|
+
"positive": ["10", 0],
|
|
49
|
+
"negative": ["11", 0],
|
|
50
|
+
"vae": ["4", 0],
|
|
51
|
+
"width": "{{width}}",
|
|
52
|
+
"height": "{{height}}",
|
|
53
|
+
"length": "{{frames}}",
|
|
54
|
+
"start_image": ["7", 0],
|
|
55
|
+
"audio_encoder_output_1": ["9", 0],
|
|
56
|
+
"motion_frame_count": 9,
|
|
57
|
+
"audio_scale": 1
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"13": { "class_type": "KSamplerSelect", "inputs": { "sampler_name": "euler" } },
|
|
61
|
+
"14": {
|
|
62
|
+
"class_type": "CFGGuider",
|
|
63
|
+
"inputs": { "model": ["12", 0], "positive": ["12", 1], "negative": ["12", 2], "cfg": 1 }
|
|
64
|
+
},
|
|
65
|
+
"15": {
|
|
66
|
+
"class_type": "BasicScheduler",
|
|
67
|
+
"inputs": { "model": ["12", 0], "scheduler": "normal", "steps": 6, "denoise": 1 }
|
|
68
|
+
},
|
|
69
|
+
"16": { "class_type": "RandomNoise", "inputs": { "noise_seed": "{{seed}}" } },
|
|
70
|
+
"17": {
|
|
71
|
+
"class_type": "SamplerCustomAdvanced",
|
|
72
|
+
"inputs": {
|
|
73
|
+
"noise": ["16", 0],
|
|
74
|
+
"guider": ["14", 0],
|
|
75
|
+
"sampler": ["13", 0],
|
|
76
|
+
"sigmas": ["15", 0],
|
|
77
|
+
"latent_image": ["12", 3]
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"18": { "class_type": "VAEDecode", "inputs": { "samples": ["17", 0], "vae": ["4", 0] } },
|
|
81
|
+
"19": {
|
|
82
|
+
"class_type": "CreateVideo",
|
|
83
|
+
"inputs": { "images": ["18", 0], "fps": 25, "audio": ["8", 0] }
|
|
84
|
+
},
|
|
85
|
+
"20": {
|
|
86
|
+
"class_type": "SaveVideo",
|
|
87
|
+
"inputs": {
|
|
88
|
+
"video": ["19", 0],
|
|
89
|
+
"filename_prefix": "creator/out",
|
|
90
|
+
"format": "auto",
|
|
91
|
+
"codec": "auto"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"1": {
|
|
3
|
+
"class_type": "UNETLoader",
|
|
4
|
+
"inputs": {
|
|
5
|
+
"unet_name": "wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
|
|
6
|
+
"weight_dtype": "default"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"2": {
|
|
10
|
+
"class_type": "UNETLoader",
|
|
11
|
+
"inputs": {
|
|
12
|
+
"unet_name": "wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
|
|
13
|
+
"weight_dtype": "default"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"3": {
|
|
17
|
+
"class_type": "LoraLoaderModelOnly",
|
|
18
|
+
"inputs": {
|
|
19
|
+
"model": ["1", 0],
|
|
20
|
+
"lora_name": "wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors",
|
|
21
|
+
"strength_model": 1
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"4": {
|
|
25
|
+
"class_type": "LoraLoaderModelOnly",
|
|
26
|
+
"inputs": {
|
|
27
|
+
"model": ["2", 0],
|
|
28
|
+
"lora_name": "wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors",
|
|
29
|
+
"strength_model": 1
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"5": { "class_type": "ModelSamplingSD3", "inputs": { "model": ["3", 0], "shift": 5 } },
|
|
33
|
+
"6": { "class_type": "ModelSamplingSD3", "inputs": { "model": ["4", 0], "shift": 5 } },
|
|
34
|
+
"7": {
|
|
35
|
+
"class_type": "CLIPLoader",
|
|
36
|
+
"inputs": {
|
|
37
|
+
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
|
|
38
|
+
"type": "wan",
|
|
39
|
+
"device": "default"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"8": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["7", 0], "text": "{{prompt}}" } },
|
|
43
|
+
"9": {
|
|
44
|
+
"class_type": "CLIPTextEncode",
|
|
45
|
+
"inputs": {
|
|
46
|
+
"clip": ["7", 0],
|
|
47
|
+
"text": "static, frozen, blurry, low quality, jpeg artifacts, distorted, deformed hands, extra fingers, warped face, flicker, jitter, camera shake, new people entering, hands entering the frame, new objects appearing, text, subtitles, watermark, logo"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"10": { "class_type": "VAELoader", "inputs": { "vae_name": "Wan2_1_VAE_bf16.safetensors" } },
|
|
51
|
+
"11": { "class_type": "LoadImage", "inputs": { "image": "{{image}}" } },
|
|
52
|
+
"12": {
|
|
53
|
+
"class_type": "WanImageToVideo",
|
|
54
|
+
"inputs": {
|
|
55
|
+
"positive": ["8", 0],
|
|
56
|
+
"negative": ["9", 0],
|
|
57
|
+
"vae": ["10", 0],
|
|
58
|
+
"width": "{{width}}",
|
|
59
|
+
"height": "{{height}}",
|
|
60
|
+
"length": "{{frames}}",
|
|
61
|
+
"batch_size": 1,
|
|
62
|
+
"start_image": ["11", 0]
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"13": {
|
|
66
|
+
"class_type": "KSamplerAdvanced",
|
|
67
|
+
"inputs": {
|
|
68
|
+
"model": ["5", 0],
|
|
69
|
+
"add_noise": "enable",
|
|
70
|
+
"noise_seed": "{{seed}}",
|
|
71
|
+
"steps": 4,
|
|
72
|
+
"cfg": 1,
|
|
73
|
+
"sampler_name": "euler",
|
|
74
|
+
"scheduler": "simple",
|
|
75
|
+
"positive": ["12", 0],
|
|
76
|
+
"negative": ["12", 1],
|
|
77
|
+
"latent_image": ["12", 2],
|
|
78
|
+
"start_at_step": 0,
|
|
79
|
+
"end_at_step": 2,
|
|
80
|
+
"return_with_leftover_noise": "enable"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"14": {
|
|
84
|
+
"class_type": "KSamplerAdvanced",
|
|
85
|
+
"inputs": {
|
|
86
|
+
"model": ["6", 0],
|
|
87
|
+
"add_noise": "disable",
|
|
88
|
+
"noise_seed": 0,
|
|
89
|
+
"steps": 4,
|
|
90
|
+
"cfg": 1,
|
|
91
|
+
"sampler_name": "euler",
|
|
92
|
+
"scheduler": "simple",
|
|
93
|
+
"positive": ["12", 0],
|
|
94
|
+
"negative": ["12", 1],
|
|
95
|
+
"latent_image": ["13", 0],
|
|
96
|
+
"start_at_step": 2,
|
|
97
|
+
"end_at_step": 10000,
|
|
98
|
+
"return_with_leftover_noise": "disable"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"15": { "class_type": "VAEDecode", "inputs": { "samples": ["14", 0], "vae": ["10", 0] } },
|
|
102
|
+
"16": { "class_type": "CreateVideo", "inputs": { "images": ["15", 0], "fps": 24 } },
|
|
103
|
+
"17": {
|
|
104
|
+
"class_type": "SaveVideo",
|
|
105
|
+
"inputs": {
|
|
106
|
+
"video": ["16", 0],
|
|
107
|
+
"filename_prefix": "creator/out",
|
|
108
|
+
"format": "auto",
|
|
109
|
+
"codec": "auto"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"1": {
|
|
3
|
+
"class_type": "UNETLoader",
|
|
4
|
+
"inputs": { "unet_name": "wan2.2_ti2v_5B_fp16.safetensors", "weight_dtype": "default" }
|
|
5
|
+
},
|
|
6
|
+
"2": {
|
|
7
|
+
"class_type": "CLIPLoader",
|
|
8
|
+
"inputs": {
|
|
9
|
+
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
|
|
10
|
+
"type": "wan",
|
|
11
|
+
"device": "default"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"3": { "class_type": "VAELoader", "inputs": { "vae_name": "wan2.2_vae.safetensors" } },
|
|
15
|
+
"4": { "class_type": "ModelSamplingSD3", "inputs": { "model": ["1", 0], "shift": 8 } },
|
|
16
|
+
"5": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["2", 0], "text": "{{prompt}}" } },
|
|
17
|
+
"6": {
|
|
18
|
+
"class_type": "CLIPTextEncode",
|
|
19
|
+
"inputs": {
|
|
20
|
+
"clip": ["2", 0],
|
|
21
|
+
"text": "static, frozen, blurry, low quality, jpeg artifacts, distorted, deformed hands, extra fingers, warped face, flicker, jitter, camera shake, new people entering, hands entering the frame, new objects appearing, text, subtitles, watermark, logo"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"7": { "class_type": "LoadImage", "inputs": { "image": "{{image}}" } },
|
|
25
|
+
"8": {
|
|
26
|
+
"class_type": "Wan22ImageToVideoLatent",
|
|
27
|
+
"inputs": {
|
|
28
|
+
"vae": ["3", 0],
|
|
29
|
+
"width": "{{width}}",
|
|
30
|
+
"height": "{{height}}",
|
|
31
|
+
"length": "{{frames}}",
|
|
32
|
+
"batch_size": 1,
|
|
33
|
+
"start_image": ["7", 0]
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"9": {
|
|
37
|
+
"class_type": "KSampler",
|
|
38
|
+
"inputs": {
|
|
39
|
+
"model": ["4", 0],
|
|
40
|
+
"positive": ["5", 0],
|
|
41
|
+
"negative": ["6", 0],
|
|
42
|
+
"latent_image": ["8", 0],
|
|
43
|
+
"seed": "{{seed}}",
|
|
44
|
+
"steps": 20,
|
|
45
|
+
"cfg": 5,
|
|
46
|
+
"sampler_name": "uni_pc",
|
|
47
|
+
"scheduler": "simple",
|
|
48
|
+
"denoise": 1
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"10": { "class_type": "VAEDecode", "inputs": { "samples": ["9", 0], "vae": ["3", 0] } },
|
|
52
|
+
"11": { "class_type": "CreateVideo", "inputs": { "images": ["10", 0], "fps": 24 } },
|
|
53
|
+
"12": {
|
|
54
|
+
"class_type": "SaveVideo",
|
|
55
|
+
"inputs": {
|
|
56
|
+
"video": ["11", 0],
|
|
57
|
+
"filename_prefix": "creator/out",
|
|
58
|
+
"format": "auto",
|
|
59
|
+
"codec": "auto"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|