Simpler than expected. It requires updating two locations, but the
update can be safely delayed until the new preview is displayed for
seamless transition.
Code gets a little messy, but this should handle also handle a
hypothetical future with animated previews for concurrent execution,
while still properly cleaning up after itself once a workflow ceases
execution.
Swapping workflows still causes previews to cease display. I don't know
a clean solution for this.
Added rate information for the Wan22 vae. This is only used for the 5b
model and the only change is a slight reduction in the preview rate.
Fixed being unable to quickly update multiple frontend widget values
with tab.
Fixed an incorrect default modulus for which forced inconvenient
dimensions for the Load Image node.
The step calculated from frame rate for start_time on load video ffmpeg
nodes has now been adjusted to not have an unneeded x10 multiplier
TODO: reconsider if this creates overly undesirable breakage if VHS
frontend code is not used.
Since the subgraph utils aren't exposed from core, a small stub function
is just re implemented in VHS.
Execution state seems be robust enough to trust core to clear this
state, but it's initially set to 0 by VHS now to ensure the preview
display doesn't race the message that the node is being processed.
Unfortunately, the lack of ability to determine if a node is actually
running means swapping the active workflow once again breaks the display
of previews. I don't see a way to fix this without changes to core.
While disappointing as a maintainer, the fix never being rolled out
means this isn't a loss of functionality to end users.
Resolves#516
This functions so long as multiple nodes aren't providing latent
previews at once. I will need to take time to consider if such
functionality would even be desirable.
Does not resolve subgraphs. Graph traversal functions don't appear to be
exposed, so I'll most likely need to re-implement myself, but I need to
take the time to exhaustively verify first.
Prior ffmpeg implementation provided insufficient precision for frame
estimation and was heavier than desired. Regexes are no longer used
Round frame_rate annotation to at most 2 digits
The VHSINT and VHSFLOAT widget constructors failed to multiply the step
by 10. Since this step value is internal to VHS, this is instead fixed
by removing the x10 multiplier entirely from the logic
Integer seconds between 0 and 9 are now correctly padded in timestamps
Some nodes "hash" (actually just mtime) input files to determine if
re-execution is needed. A check has been added to not attempt this
hashing if no file exists.
Fix an incorrect bounds check in the newer frontend widget code.
Previously displaying values was a mix of naive guesswork and giving up.
This display process has been rewritten to produce output that is much
more likely to be usable even under tight width restraints.
As part of this, the ordering in which different widget components are
drawn has been reworked.
The buttons added to reset to either reset to default value, reset to a
disabled value, or indicate that one of these is currently selected,
displaying poorly depending on availability of system fonts. This is
resolved by stroking the shapes manually.
Gifs were incorrectly being loaded by a video tag when advanced previews
was set to "Input Only" (the default). The logic for when advanced
previews are used as been clarified.
Resolves#435
Parameters that determine the output quality when advanced previews are
displayed have been moved to only be set when the request if for an
advanced preview. These were ignored when the request was made to the
default /view endpoint, but created undesirable clutter
The prior disconnection logic would eagerly disconnect if the type has
changed at all. In addition to providing awful quality of life, this
was also causing issue with workflows that contain an unbatch node being
saved at all.
The code for type cloning has undergone a substantial rewrite to
properly check link validity and to propogate link events
Resolves#432
Several nodes, like Load Video FFmpeg and Load Audio have a widgets that
take a time in seconds.
These are now handled by an updated widget that will display times as
hour:minutes:seconds and allow entry by hour:minutes:seconds
SetWidgetConfig is usable on widget options despite the type mismatch.
This provides a cleaner solution than a blind
Object.getOwnPropertySymbols call.
The prior code of parsing width traces all the way back to f63a0f78
I no longer recall the purpose of the slice, but parsing element
information to determine sizing is inherently flawed. An element width
will not exist until a preview has loaded. Instead, the element size is
back calculated from the node size.
The prior fix to respect rendering threshold had a number of mistakes.
Foremost, a typo in naming prevented it from applying at all. Path
widgets perform rendering separately and need an independent fix. The
comparison has additionally been changed to greater than or equals. This
is most noticeable when low_quality_zoom_threshold is set to 1.0
See #412