Spaces:
Running
Running
# ComfyUI-VideoHelperSuite | |
Nodes related to video workflows | |
## I/O Nodes | |
### Load Video | |
Converts a video file into a series of images | |
- video: The video file to be loaded | |
- force_rate: Discards or duplicates frames as needed to hit a target frame rate. Disabled by setting to 0. This can be used to quickly match a suggested frame rate like the 8 fps of AnimateDiff. | |
- force_size: Allows for quick resizing to a number of suggested sizes. Several options allow you to set only width or height and determine the other from aspect ratio. | |
- frame_load_cap: The maximum number of frames which will be returned. This could also be thought of as the maximum batch size. | |
- skip_first_frames: How many frames to skip from the start of the video after adjusting for a forced frame rate. By incrementing this number by the frame_load_cap, you can easily process a longer input video in parts. | |
- select_every_nth: Allows for skipping a number of frames without considering the base frame rate or risking frame duplication. Often useful when working with animated gifs | |
A path variant of the Load Video node exists that allows loading videos from external paths | |
![step](https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/b5fc993c-5c9b-4608-afa4-48ae2e1380ef) | |
![resize](https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/assets/4284322/98d2e78e-1c44-443c-a8fe-0dab0b5947f3) | |
If [Advanced Previews](#advanced-previews) is enabled in the options menu of the web ui, the preview will reflect the current settings on the node. | |
### Load Image Sequence | |
Loads all image files from a subfolder. Options are similar to Load Video. | |
- image_load_cap: The maximum number of images which will be returned. This could also be thought of as the maximum batch size. | |
- skip_first_images: How many images to skip. By incrementing this number by image_load_cap, you can easily divide a long sequence of images into multiple batches. | |
- select_every_nth: Allows for skipping a number of images between every returned frame. | |
A path variant of Load Image sequence also exists. | |
### Video Combine | |
Combines a series of images into an output video | |
If the optional audio input is provided, it will also be combined into the output video | |
- frame_rate: How many of the input frames are displayed per second. A higher frame rate means that the output video plays faster and has less duration. This should usually be kept to 8 for AnimateDiff, or matched to the force_rate of a Load Video node. | |
- loop_count: How many additional times the video should repeat | |
- filename_prefix: The base file name used for output. | |
- You can save output to a subfolder: `subfolder/video` | |
- Like the builtin Save Image node, you can add timestamps. `%date:yyyy-MM-ddThh:mm:ss%` might become 2023-10-31T6:45:25 | |
- format: The file format to use. Advanced information on configuring or adding additional video formats can be found in the [Video Formats](#video-formats) section. | |
- pingpong: Causes the input to be played back in the reverse to create a clean loop. | |
- save_output: Whether the image should be put into the output directory or the temp directory. | |
Returns: a `VHS_FILENAMES` which consists of a boolean indicating if save_output is enabled and a list of the full filepaths of all generated outputs in the order created. Accordingly `output[1][-1]` will be the most complete output. | |
Depending on the format chosen, additional options may become available, including | |
- crf: Describes the quality of the output video. A lower number gives a higher quality video and a larger file size, while a higher number gives a lower quality video with a smaller size. Scaling varies by codec, but visually lossless output generally occurs around 20. | |
- save_metadata: Includes a copy of the workflow in the ouput video which can be loaded by dragging and dropping the video, just like with images. | |
- pix_fmt: Changes how the pixel data is stored. `yuv420p10le` has higher color quality, but won't work on all devices | |
### Load Audio | |
Provides a way to load standalone audio files. | |
- seek_seconds: An optional start time for the audio file in seconds. | |
## Latent/Image Nodes | |
A number of utility nodes exist for managing latents. For each, there is an equivalent node which works on images. | |
### Split Batch | |
Divides the latents into two sets. The first `split_index` latents go to ouput A and the remainder to output B. If less then `split_index` latents are provided as input, all are passed to output A and output B is empty. | |
### Merge Batch | |
Combines two groups of latents into a single output. The order of the output is the latents in A followed by the latents in B. | |
If the input groups are not the same size, the node provides options for rescaling the latents before merging. | |
### Select Every Nth | |
The first of every `select_every_nth` input is passed and the remainder are discarded | |
### Get Count | |
### Duplicate Batch | |
## Video Previews | |
Load Video (Upload), Load Video (Path), Load Images (Upload), Load Images (Path) and Video Combine provide animated previews. | |
Nodes with previews provide additional functionality when right clicked | |
- Open preview | |
- Save preview | |
- Pause preview: Can improve performance with very large videos | |
- Hide preview: Can improve performance, save space | |
- Sync preview: Restarts all previews for side-by-side comparisons | |
### Advanced Previews | |
Advanced Previews must be manually enabled by clicking the settings gear next to Queue Prompt and checking the box for VHS Advanced Previews. | |
If enabled, videos which are displayed in the ui will be converted with ffmpeg on request. This has several benefits | |
- Previews for Load Video nodes will reflect the settings on the node such as skip_first_frames and frame_load_cap | |
- This makes it easy to select an exact portion of an input video and sync it with outputs | |
- It can use substantially less bandwidth if running the server remotely | |
- It can greatly improve the browser performance by downsizing videos to the in ui resolution, particularly useful with animated gifs | |
- It allows for previews of videos that would not normally be playable in browser. | |
- Can be limited to subdirectories of ComyUI if `VHS_STRICT_PATHS` is set as an environment variable. | |
This fucntionality is disabled since it comes with several downsides | |
- There is a delay before videos show in the browser. This delay can become quite large if the input video is long | |
- The preview videos are lower quality (The original can always be viewed with Right Click -> Open preview) | |
## Video Formats | |
Those familiar with ffmpeg are able to add json files to the video_formats folders to add new output types to Video Combine. | |
Consider the following example for av1-webm | |
```json | |
{ | |
"main_pass": | |
[ | |
"-n", "-c:v", "libsvtav1", | |
"-pix_fmt", "yuv420p10le", | |
"-crf", ["crf","INT", {"default": 23, "min": 0, "max": 100, "step": 1}] | |
], | |
"audio_pass": ["-c:a", "libopus"], | |
"extension": "webm", | |
"environment": {"SVT_LOG": "1"} | |
} | |
``` | |
Most configuration takes place in `main_pass`, which is a list of arguments that are passed to ffmpeg. | |
- `"-n"` designates that the command should fail if a file of the same name already exists. This should never happen, but if some bug were to occur, it would ensure other files aren't overwritten. | |
- `"-c:v", "libsvtav1"` designates that the video should be encoded with an av1 codec using the new SVT-AV1 encoder. SVT-AV1 is much faster than libaom-av1, but may not exist in older versions of ffmpeg. Alternatively, av1_nvenc could be used for gpu encoding with newer nvidia cards. | |
- `"-pix_fmt", "yuv420p10le"` designates the standard pixel format with 10-bit color. It's important that some pixel format be specified to ensure a nonconfigurable input pix_fmt isn't used. | |
`audio pass` contains a list of arguments which are passed to ffmpeg when audio is passed into Video Combine | |
`extension` designates both the file extension and the container format that is used. If some of the above options are omitted from `main_pass` it can affect what default options are chosen. | |
`environment` can optionally be provided to set environment variables during execution. For av1 it's used to reduce the verbosity of logging so that only major errors are displayed. | |
`input_color_depth` effects the format in which pixels are passed to the ffmpeg subprocess. Current valid options are `8bit` and `16bit`. The later will produce higher quality output, but is experimental. | |
Fields can be exposed in the webui as a widget using a format similar to what is used in the creation of custom nodes. In the above example, the argument for `-crf` will be exposed as a format widget in the webui. Format widgets are a list of up to 3 terms | |
- The name of the widget that will be displayed in the web ui | |
- Either a primitive such as "INT" or "BOOLEAN", or a list of string options | |
- A dictionary of options | |