multimodalart's picture
Squashing commit
4450790 verified
raw
history blame
4.17 kB
#-----------------------------------------------------------------------------------------------------------#
# 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