-
Notifications
You must be signed in to change notification settings - Fork 67
/
functions_animation.py
105 lines (85 loc) · 4.08 KB
/
functions_animation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#-----------------------------------------------------------------------------------------------------------#
# CR Animation Nodes by RockOfFire and Akatsuzi https://github.com/Suzie1/CR-Animation-Nodes
# for ComfyUI https://github.com/comfyanonymous/ComfyUI
#-----------------------------------------------------------------------------------------------------------#
#-----------------------------------------------------------------------------------------------------------#
# FUNCTIONS
#-----------------------------------------------------------------------------------------------------------#
def keyframe_scheduler(schedule, schedule_alias, current_frame):
# Initialise
schedule_lines = list()
previous_params = ""
# Loop through the schedule to find lines with matching schedule_alias
for item in schedule:
alias = item[0]
if alias == schedule_alias:
schedule_lines.extend([(item)])
# Loop through the filtered lines
for i, item in enumerate(schedule_lines):
# Get alias and schedule line
alias, line = item
# Skip empty lines
if not line.strip():
print(f"[Warning] Skipped blank line at line {i}")
continue
# Get parameters from the tuples
frame_str, params = line.split(',', 1)
frame = int(frame_str)
# Strip spaces at start of params
params = params.lstrip()
# Return the params
if frame < current_frame:
previous_params = params
continue
if frame == current_frame:
previous_params = params
else:
params = previous_params
return params
# Continue using the final params after the last schedule line has been evaluated
return previous_params
def prompt_scheduler(schedule, schedule_alias, current_frame):
# Initialise
schedule_lines = list()
previous_prompt = ""
previous_keyframe = 0
#print(schedule, schedule_alias, current_frame)
# Loop through the schedule to find lines with matching schedule_alias
for item in schedule:
alias = item[0]
if alias == schedule_alias:
schedule_lines.extend([(item)])
# Loop through the filtered lines
for i, item in enumerate(schedule_lines):
# Get alias and schedule line
alias, line = item
# Get parameters from the tuples
frame_str, prompt = line.split(',', 1)
frame_str = frame_str.strip('\"')
frame = int(frame_str)
# Strip leading spaces and quotes
prompt = prompt.lstrip()
prompt = prompt.replace('"', '')
# Return the parameters
if frame < current_frame:
previous_prompt = prompt
previous_keyframe = frame
#print(f"[Debug] frame < current_frame, frame {frame}, current frame {current_frame}")
#print(f"[Debug] frame < current_frame, prompt {prompt}")
continue
if frame == current_frame:
next_prompt = prompt
next_keyframe = frame
previous_prompt = prompt
previous_keyframe = frame
#print(f"[Debug] frame = current_frame, frame {frame}, current frame {current_frame}, next keyframe {next_keyframe}")
#print(f"[Debug] frame = current_frame, prompt {prompt}")
else:
next_prompt = prompt
next_keyframe = frame
prompt = previous_prompt
#print(f"[Debug] frame > current_frame, frame {frame}, current frame {current_frame}, next keyframe {next_keyframe}")
#print(f"[Debug] frame > current_frame, next prompt {next_prompt}")
return prompt, next_prompt, previous_keyframe, next_keyframe
# Continue using the final params after the last schedule line has been evaluated
return previous_prompt, previous_prompt, previous_keyframe, previous_keyframe