Spaces:
Running
on
Zero
Running
on
Zero
| #-----------------------------------------------------------------------------------------------------------# | |
| # 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 |