While I have previously shied away from using imageio-ffmpeg as the
default version because the included version is 4 years old and
specifically does not work with the av1 format, there have been specific
issues from people with a system version of ffmpeg that is even older.
There has been a longstanding desire to create a system for determining
the best version of ffmpeg, but this has proved a reasonably involved
task. Some version information uses git commit hashes instead of a
potentially sortable semvar and there are a large number of compile time
flags that could result in a newer binary having less functionality.
Thus a sysstem has been added that parses compile flags for desired
encoders as well as the copyright year to determine which ffmpeg version
is more feature full.
In an edge case, scan dir would throw an erro when encoutering a broken
symlink. It has been fixed to ignore these broken symlinks
Fix an edge case where the video_formats folder is overridden by
ComfyUI-AnimateDiff-Evolved if VideoHelperSuite loads first. See #87
Further README additions
I forgot to fetch before locally merging the README branch. The up to
date README is now included and has been updated with information on
output of Video Combine and the naming change to save_output
VHS_FILENAMES now includes the value of save_output and the full path of
the resulting output files.
When both VideoHelperSuite and animate-diff (not evolved) are installed,
the legacy video_upload option applied to the node causes animate-diff
to apply a second preview and upload button on our node. This is fixed
by removing the no longer used tag. fixes#58
Fix a minor indexing mistake that would cause the custom width to
apply to both width and height when "Custom" was selected.
Support loop_count with videos, fixes#83
Add support for forcing usage of ffmpeg bundled with imageio by setting
VHS_USE_IMAGEIO_FFMPEG to ease testing and as a temporary fix for #80
When saving with metadata, if an error occurred after initialization, an
empty output video would be produced which caused the without metadata
retry to fail with a less helpful error message. Now, if the pass with
metadata failed, but produced an output file, that error is raised and
the retry does not occur. This should not change the effectiveness of
the fallback for those who were experiencing the metadata issue.
Further migrations to video parameters had broken display of output
videos when an old workflow is loaded. This is fixed.
When the refresh button was clicked in ui, the custom size options of
Load Video were overwritten and lost. When the refresh button is
clicked, the custom size options are now readded properly.
Fix params being uninitialized on migrated workflows
Fix null filename when performing a right click -> save on a video
Fix edge case in paths of a specific length causing console spam
Basic support for loading urls has been added to Load Video.
Most of the work is made trivial by both ffmpeg and opencv automatically
fetching a url if it's provided instead of a path.
A more sophisticated fix for error passing from ffmpeg during preview
generation. If a request is aborted, the ffmpeg process is immediately
killed instead of being allowed to respond to stdin being closed and
waited on at the end of the with block
The toggle for saving metadata has been changed back to a boolean
instead of a combo. While I wished to provide for future compatibility,
the change broke existing workflows and there was no accommodating
implementation to load metadata saved under a different tag.
The log level for ffmpeg preview processes has been raised to fatal.
There's a good chance this will make debugging harder for users when
errors arise, but aborted requests were too common for the error
messages produced by them to be acceptable.
Format widgets for ints are now properly rounded.
Load Images had a typo prevent it's extension filter (of nothing) from
applying
Audio inputs and outputs now consistently use lowercase audio as a
description and have a format name of VHS_AUDIO. While other extensions
could share the audio type name, they would not pass functions.
Previously when using ffmpeg to load a video, care was needed to ensure
that the first frame was index 0, but the frame at 1s was the first to
appear after 1s. This should now be fixed.
The js code for load video nodes now passes the extension as part of the
format so that gifs and webps can be properly distinguished between when
deciding if an advanced preview should be loaded.
Fixed a mistake in serialization of custom height on load video nodes
Add "-b:v" flag to webm format, resolves#78
Fixes Video Combine to provide an output usable outside the ui,
a list of files produced, resolves#57
Fix error in file path safety checks across drives on windows
Fixes for preview generation when backing file has audio
Don't scale video previews above their base resolution
Implement select_every_nth for advanced previews
Fix regression with improper callback checking on Load Audio
Reorder Load Audio in node mappings to not be grouped with image nodes
Video Combine now returns a list of output files:
Partial fix for #57
Move safety checks to single shared function, added opt out by
environment variable. Easier methods are being considered
Modifications to viewvideo endpoint to work with paths instead of
standard methodology
Return an empty list of options instead of an error status for path
suggestions in an attempt to further reduce console spam.
Substantial js refactoring to simplify preview logic and
compartmentalize code that is shared between upload and path nodes
Enable path suggestions for Load Images
Add masks equal to image size if any image has masks
This causes images with masks to function as expected and those
without to remain fully opaque.
Special thanks to @miaoerduo
Fix counter regex to work with audio outputs
Fix extension not being set for animated image outputs
Reductions to extraneous preview loads
Prevent new preview code from applying to webp files
save_metadata is now a format flag
- This allows saving to different tag and hides for image formats
Implement high bit depth support
- Disabled by default, but works for images and has shown in testing to
produce objectively higher quality output than base Save Image
Fix target_size from load video not applying when 2 dimensions are set
When an input video is scaled to a new aspect ratio, it is now cropped
Removed try wrapping of load video nodes. This creates more confusion
now a system of fallbacks isn't used
A fix for parsing format_widgets when applied outside a '_pass'
Fixed missing import of logger in utils
Animated images are now included in the animated preview code
- This improves performance and allows for pausing
Cleaned up injection of code to load metadata
Switch to new path widget code on remaining nodes
Performance tuning on video preview code
Surround preview code in try block in case request is closed
- May warrant a future pass, but ffmpeg errors will still log to console
Swap lack of common path in get_path to status=403
- This was mostly made to ease future changes to common path behaviour
Simplify the value field of preview widget.
- Reduces complexity and lessens duplicate requests on first loa
Introduce ui setting for advanced previews
- Reliability is shakey, so it's better kept as opt-in for now
Previews are properly integrated and apply to Video Combine nodes
More advanced formatting code when a path is too long to display
Reduced console spam from path suggestions
A number of nodes take a path as input.
This commit gives a search box with a list of valid files and folders
It also provides support for quickly selecting from valid options by
clicking or pressing tab.
Completion options are currently only suggested for subfolders of
comfyui, but this is easily changeable.
Audio settings are now stored in video_formats
Updated video_formats with reasonable defaults for audio
A Load Audio (Path) node has been added
Audio Loads are cached with load state and only occur once.
This should remove any chance of deadlock.
Adds a system to attempt saving without metadata if an error occurs
while attempting to save with.
Fixed a minor mistake when attempting to dump non-fatal stderr output
from ffmpeg to system stderr
This ensures the error pop up in the webui contains information on what
went wrong with two minor caveats:
The error output of ffmpeg is no longer colored. This could be
re-enabled with an environment variable, but it would then need to be
manually filtered out from the webui display.
This introduces a likely insignificant chance of deadlock.
If stderr somehow becomes full without ffmpeg terminating, it could
block execution of writing data to stdin. I don't forsee a situation
where this could occur as ffmpeg is set to low verbosity.
Adds a new url endpoint for previewing videos
The intent, is that the video can be encoded on-the-fly with low quality
parameters to return a preview of the selected video time slice, it's
resolution, and frame rate, with lessened quality to reduce transmission
time.
Initial testing has a response time that is not great,
correspondingly, this may be non-viable
While having the optional arguments passed is non-trivial, there's an
easy fix to get retrieve all params sent from the client.
Substantial changes to how formats are stored on the backend to ensure
that the extra data isn't displayed in the dropdown list or upon
clicking the "Refresh" button in the ui.
Update most existing existing formats to expose options as widgets
If enabled, metadata is saved using a tempfile
Code has been simplified to as metadata length is no longer considered
and fallbacks are no longer needed
The change to remove the underscore from the end of Video Combine output
filenames uses regex to extract the digits of existing filenames, but
fails to escape the filename_prefix. This can go wrong in a bunch of
ways, but most concretely, a prefix like `video (1)` would establish an
earlier matching group and set the counter to 2, making a repeated
counter likely.
Also compiles the regex once per execution.
Combo widgets which use the first item instead of a default field are
now successfully reloaded if not defined.
Fixed a minor IOB from combo inputs having only a single element in
their definition