Spaces:
Sleeping
Sleeping
from ..log import log | |
class MTB_AnimationBuilder: | |
"""Simple maths for animation.""" | |
def INPUT_TYPES(cls): | |
return { | |
"required": { | |
"total_frames": ("INT", {"default": 100, "min": 0}), | |
# "fps": ("INT", {"default": 12, "min": 0}), | |
"scale_float": ("FLOAT", {"default": 1.0, "min": 0.0}), | |
"loop_count": ("INT", {"default": 1, "min": 0}), | |
"raw_iteration": ("INT", {"default": 0, "min": 0}), | |
"raw_loop": ("INT", {"default": 0, "min": 0}), | |
}, | |
} | |
RETURN_TYPES = ("INT", "FLOAT", "INT", "BOOLEAN") | |
RETURN_NAMES = ("frame", "0-1 (scaled)", "count", "loop_ended") | |
CATEGORY = "mtb/animation" | |
FUNCTION = "build_animation" | |
DESCRIPTION = """ | |
# Animation Builder | |
Check the | |
[wiki page](https://github.com/melMass/comfy_mtb/wiki/nodes-animation-builder) | |
for more info. | |
- This basic example should help to understand the meaning of | |
its inputs and outputs thanks to the [debug](nodes-debug) node. | |
![](https://github.com/melMass/comfy_mtb/assets/7041726/2b5c7e4f-372d-4494-9e73-abb2daa7cb36) | |
- In this other example Animation Builder is used in combination with | |
[Batch From History](https://github.com/melMass/comfy_mtb/wiki/nodes-batch-from-history) | |
to create a zoom-in animation on a static image | |
![](https://github.com/melMass/comfy_mtb/assets/7041726/77d37da1-0a8e-4519-a493-dfdef7f755ea) | |
## Inputs | |
| name | description | | |
| ---- | :----------:| | |
| total_frames | The number of frame to queue (this is multiplied by the `loop_count`)| | |
| scale_float | Convenience input to scale the normalized `current value` (a float between 0 and 1 lerp over the current queue length) | | |
| loop_count | The number of loops to queue | | |
| **Reset Button** | resets the internal counters, although the node is though around using its queue button it should still work fine when using the regular queue button of comfy | | |
| **Queue Button** | Convenience button to run the queues (`total_frames` * `loop_count`) | | |
""" | |
def build_animation( | |
self, | |
total_frames=100, | |
# fps=12, | |
scale_float=1.0, | |
loop_count=1, # set in js | |
raw_iteration=0, # set in js | |
raw_loop=0, # set in js | |
): | |
frame = raw_iteration % (total_frames) | |
scaled = (frame / (total_frames - 1)) * scale_float | |
# if frame == 0: | |
# log.debug("Reseting history") | |
# PromptServer.instance.prompt_queue.wipe_history() | |
log.debug(f"frame: {frame}/{total_frames} scaled: {scaled}") | |
return (frame, scaled, raw_loop, (frame == (total_frames - 1))) | |
__nodes__ = [MTB_AnimationBuilder] | |