Bizarrely, setting the prototype for onDrawForeground was resulting in
the onDrawForeground function getting clobbered if another extension
(such as Jovimetrix) adds a function to onDrawForeground, even if
the standard wrapping procedures was done. This patch fixes both this
incompatibility, and the callback being applied multiple times for each
node created
Previously, the title attribute was used to link a selected widget to
the correct spot in the documentation, but this had the side effect of
causing a tooltip to appear when the documentation itself was moused
over. Since this tooltip would block the documentation text itself and
provide no useful information to the user, this lookup information is
now stored as vhs_title attribute
If the description doesn't have any children elements when interpreted
as html, it is assumed to be plaintext and has some basic formatting
applied. New lines are replaced with a <br> tag so they function as
expected and the first line is used as a short description for the node,
which shows when the title is moused over, or when selecting the node in
the search box.
If desired, this could be expanded to apply simple markdown formatting
such as lists or titles.
To better facilitate working with audio, videos previews were changed to
unmute when moused over, but it has been requested multiple times that
an option be added to have the previews remain muted. This is now added
in two forms: A UI setting like Advanced Previews to have new previews
default to muted on creation, and a Right Click option to toggle the
mute state on individual previews.
A helper function has been added to assist in adding images to
documentation
A preceding forward slash is required when using the new ComfyUI
frontend. Since this was missing from the call to fetch files for path
widgets, they weer not functioning as expected.
Add check for null when pulling short description
Split the test description into multiple lines to clean up diffs
Stop decreasing size after an arbitrary depth
Include example of documenting widget values
In the new frontend, the DESCRIPTION field is being used for
standardized basic documentation. To keep the more advanced features
of this branch, a short human readable description can now be
derived from the full description. After initial load, the description
field is replaced from this shorter description.
Rather than adjusting font size, a transformation is applied to the div
itself, preventing reflow on zoom
The expand/collapse button is now only clickable on the text itself
Basic styling has been applied to the scrollbar when needed
The logic for determining how many subexecutions would be performed by a
Meta Batch was insufficient for all but the most narrow of cases and has
been reworked
As part of these changes, a progress bar is now displayed for Load Video
even when frame_load_cap is unset
Updated ProRes to allow transparent output when set to Profile 4. As
part of this change, pix_fmt is no longer explicitly set for ProRes, but
the expected format is automatically applied from for each profile.
Added rgba as an output pix_fmt for the nvenc formats. These have not
been tested and may not function.
Fix incorrect escape in Advanced Preview code.
When loading a workflow from before when VHS_AUDIO was swapped for
AUDIO, the input type of VideoCombine nodes would be set to VHS_AUDIO
despite this being invalid. This has now been fixed.
See #254
With the change to AUDIO, an error is now raised when audio doesn't
exist but an audio connection is used. This is necessary to ensure
correct error handling with nodes outside VHS. However, this
inconveniences those who always connect the audio input directly to
video combine. To resolve this, Video Combine now catches the thrown
error and skips embedding audio if needed.
Resolves#258
Nodes with a DESCRIPTION variable have that variable displayed as raw
html. A documentation file has been added to assist in
mocking documentation in a standardized format.
Logic to allow connecting node interaction to equivalent documentation
is partial. Currently, the hovered item is highlighted, but the intent
is to either automatically scroll to the selected region, or collapse
other regions.
By default, If an uploaded file has the same name as an already existing
file, a number is appended to the end and the new name is returned by
the endpoint. When this occurs, modified filename is now properly added
to the filelist and swapped to.
DeepFuze overrides onExecuted on every node, doesn't chain existing
callbacks, and raises an exception if the node doesn't have the expected
audio variables.
In order to prevent loading order shenanigans. This has been by fixed by
wrapping the function to not apply on VHS namespaced nodes.
See #242
The prior implementation made a best effort to continue in the event of
an error, but immediately threw an error afterwards since there was no
output from the subprocess.
As get_audio isn't called until the audio connection from a Load Video
is used, it's safe to raise an exception here and properly expose the
error message from ffmpeg as is done elsewhere.
See #250
Executable preference is
VHS_YTDL environment variable > yt-dlp > youtube-dl
Downloaded videos are cached in temp so they are not preserved between
reboots
Both Load Video (Path) and Load Audio (Path) are supported
cg-use-everywhere automatically creates links when when a graph is
executed. This is generally nice utility, but conflicts with the
paradigm of the new VAE inputs and is particularly problematic for Load
Video (where it can not be solved on the python side).
As a workaround, a wrapper is added around the graphToPrompt call that
cg-use-everywhere wraps which deletes any links from LoadVideo nodes
that do not actually exist.
The safety code to ignore the memory limit when it could not be
calculated was incorrectly applied after adding the vae changes.
They have been reapplied. See #240
Some external nodes have adopted the usage of VHS_AUDIO for user
convenience. If these nodes do not update, then a AudiotoVHSAudio node
must be added to perform the conversion. The code to check pulls up the
nodeDef and will not warn on old workflows if the target node has been
updated.
The conversion node is not automatically added. While this may be
feasible, I feel it would be overly destructive, error prone, and would
require logic for where to fit the conversion node into a workflow
visually. A gentle warning seems the safer option.
Known issues:
- need legacy node to convert from AUDIO to VHS_AUDIO
- add js to automate adding said node to workflows?
- need to parse number of channels when loading audio
Under unknown circumstances, the VAE input may be non-None even though
there is not actually a wire connected. In this circumstance, images are
still received as input and would throw an error when converted from a
dict to tensor. To resolve this, an extra check is added to make sure
images is a dict and, if not, the VAE input is overridden to None
Resolves#238