Giter Club home page Giter Club logo

comfyui-astralanimator's Introduction

ComfyUI-AstralAnimator

A custom node for ComfyUI that enables smooth, keyframe-based animations for image generation. Create dynamic sequences with control over motion, zoom, rotation, and easing effects. Ideal for AI-assisted animation and video content creation.

Astral

Features

  • Seamless integration with ComfyUI
  • Keyframe-based animation system
  • Control over X and Y motion, zoom, and rotation
  • Various easing functions for smooth transitions
  • Batch processing for efficient animation generation
  • Compatible with different sampling methods and schedulers

Installation

  1. Ensure you have ComfyUI installed and set up on your system.
  2. Clone this repository into your ComfyUI custom_nodes directory:
    cd ComfyUI/custom_nodes
    git clone https://github.com/your-username/ComfyUI-AstralAnimator.git
  3. Restart ComfyUI or reload custom nodes.

Usage

  1. In the ComfyUI interface, locate the "AstralAnimator" node under the "animation" category.
  2. Connect the required inputs:
    • model: Your chosen AI model
    • vae: VAE for encoding/decoding
    • positive/negative: Your conditioning inputs
    • image: The starting image for your animation
  3. Set the animation parameters:
    • frame_count: Number of frames to generate
    • x_motion/y_motion: Movement along X and Y axes
    • zoom: Zoom factor (use values around 1.0 for subtle effects)
    • rotation: Rotation angle per frame
    • denoise_min/denoise_max: Range for denoising strength
    • easing_type: Choose from various easing functions for smooth transitions
  4. Connect the output to a display or save node to view or export your animation.

Example Workflow

[Include a screenshot or diagram of an example ComfyUI workflow using AstralAnimator]

Parameters Explanation

  • x_motion/y_motion: Pixels to move per frame. Positive values move right/down, negative left/up.
  • zoom: Values > 1 zoom in, < 1 zoom out. Use values close to 1 for subtle effects.
  • rotation: Degrees to rotate per frame. Positive is clockwise, negative counterclockwise.
  • denoise_min/denoise_max: Controls the strength of the AI's influence on each frame.
  • easing_type: Determines how the motion accelerates or decelerates over time.

Tips for Best Results

  • Start with small values for motion, zoom, and rotation to achieve smooth animations.
  • Experiment with different easing types to find the right feel for your animation.
  • Use a higher frame count for smoother transitions, but be aware of increased processing time.
  • The seed parameter can be used to maintain consistency across frames or create variations.

Contributing

Contributions to ComfyUI-AstralAnimator are welcome! Please feel free to submit pull requests, create issues or spread the word.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Acknowledgments

  • Thanks to the ComfyUI team for creating an excellent platform for AI image generation.
  • Inspired by the Deforum project for Stable Diffusion.

comfyui-astralanimator's People

Contributors

shmuelronen avatar comfy-pr-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar Mark avatar toyxyz avatar Eric avatar Nymph avatar Razvan B. avatar will-gao avatar  avatar  avatar  avatar  avatar  avatar

Watchers

Kostas Georgiou avatar  avatar

Forkers

comfynodeprs

comfyui-astralanimator's Issues

Error at Astral Animator

I get this error when reaches Astral Animator

Error occurred when executing AstralAnimator:

'NoneType' object is not callable

File "H:\DEV\Stable-diffusion\ComfyUI\execution.py", line 152, in recursive_execute
output_data, output_ui = get_output_data(obj, input_data_all)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\execution.py", line 82, in get_output_data
return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI-0246\utils.py", line 381, in new_func
res_value = old_func(*final_args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\execution.py", line 75, in map_node_over_list
results.append(getattr(obj, func)(**slice_dict(input_data_all, i)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI-AstralAnimator\main.py", line 70, in animate
samples = comfy.sample.sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative, latent["samples"],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\comfyui-resharpen\resharpen.py", line 37, in sample_center
return SAMPLE(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI-Impact-Pack\modules\impact\sample_error_enhancer.py", line 9, in informative_sample
return original_sample(*args, **kwargs) # This code helps interpret error messages that occur within exceptions but does not have any impact on other operations.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI-AnimateDiff-Evolved\animatediff\sampling.py", line 410, in motion_sample
return orig_comfy_sample(model, noise, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet\adv_control\sampling.py", line 92, in acn_sample
return orig_comfy_sample(model, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet\adv_control\utils.py", line 112, in uncond_multiplier_check_cn_sample
return orig_comfy_sample(model, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\sample.py", line 43, in sample
samples = sampler.sample(noise, positive, negative, cfg=cfg, latent_image=latent_image, start_step=start_step, last_step=last_step, force_full_denoise=force_full_denoise, denoise_mask=noise_mask, sigmas=sigmas, callback=callback, disable_pbar=disable_pbar, seed=seed)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI_smZNodes\smZNodes.py", line 1447, in KSampler_sample
return _KSampler_sample(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\samplers.py", line 829, in sample
return sample(self.model, noise, positive, negative, cfg, self.device, sampler, sigmas, self.model_options, latent_image=latent_image, denoise_mask=denoise_mask, callback=callback, disable_pbar=disable_pbar, seed=seed)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\ComfyUI_smZNodes\smZNodes.py", line 1470, in sample
return _sample(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\samplers.py", line 729, in sample
return cfg_guider.sample(noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\samplers.py", line 716, in sample
output = self.inner_sample(noise, latent_image, device, sampler, sigmas, denoise_mask, callback, disable_pbar, seed)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\samplers.py", line 695, in inner_sample
samples = sampler.sample(self, sigmas, extra_args, callback, noise, latent_image, denoise_mask, disable_pbar)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\samplers.py", line 600, in sample
samples = self.sampler_function(model_k, noise, sigmas, extra_args=extra_args, callback=k_callback, disable=disable_pbar, **self.extra_options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Conda\envs\comfy\Lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\k_diffusion\sampling.py", line 163, in sample_euler_ancestral
callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised})
File "H:\DEV\Stable-diffusion\ComfyUI\comfy\samplers.py", line 598, in
k_callback = lambda x: callback(x["i"], x["denoised"], x["x"], total_steps)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\DEV\Stable-diffusion\ComfyUI\custom_nodes\comfyui-resharpen\resharpen.py", line 27, in hijack_callback
return original_callback(step, x0, x, total_steps)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.