Commit Graph
261 Commits
Author SHA1 Message Date
Austin Mroz c017071cc3 Wan22 vae rate info, frontend fixes
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.
2025-08-07 08:40:00 -05:00
Austin Mroz f1c513a563 Fix node reference missed from refactor 2025-07-26 22:27:57 -05:00
Austin Mroz eb36470be4 Fix missed step multiplier adjustment
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.
2025-07-26 15:54:58 -05:00
Austin Mroz 253251fa5c Fix latent preview race cond, subgraphs interop
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.
2025-07-26 12:20:14 -05:00
Austin Mroz f01332d42c Fix animated latent previews
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.
2025-07-26 01:38:31 -05:00
Austin Mroz 229642349b Merge FFV1 2025-07-25 01:18:00 -05:00
Austin Mroz a3d66b6736 Merge upload-progress 2025-07-24 21:59:59 -05:00
Austin Mroz 7a50ec7ec8 Use PyAV for querrying videos, Round frame est
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
2025-07-23 02:54:49 -05:00
Austin Mroz f76436dcf2 Remove step multiplier, further timestamp fixes
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
2025-07-22 01:16:39 -05:00
Hoernchen f1698cbd92 add ffv1 support
FFV1 is a nice lossless format that allows recovering the original images for postprocessing. It is nowadays specified for MP4 containers as well, but ffmpeg support was only added in nov '24: https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/0b8c9cf5b490a0231949ab3c6d797462ae001730 so for now MKV is enough.
2025-07-21 23:03:36 +02:00
Austin Mroz 9e963ff5ed Add progress bar to uploads
Resolves #507
2025-07-13 20:59:47 -05:00
Austin Mroz dc98c8be65 Fix hashing nonexistant files, widget rounding
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.
2025-06-22 17:16:31 -05:00
Austin Mroz 66e95e9471 Marginal path display improvements 2025-06-03 15:43:02 -05:00
Austin Mroz 7b26c04c8a Apply Max/Min to VHSINT, initial value in VHSFLOAT 2025-06-03 14:17:35 -05:00
Austin Mroz 688b796e58 Remove inheritance of VHS widgets from builtins
Resolves #484

Fix truncation of trailing 0 when displaying values
2025-06-02 21:24:03 -05:00
Austin Mroz a5946e88a2 More robust animated latent preview tracking 2025-05-23 11:17:49 -05:00
Austin Mroz a20beefa20 Rework widget display to properly measure text
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.
2025-05-23 01:09:31 -05:00
Austin Mroz 63bfea3d74 Clean up mouse interaction,
Also modifies angle of disable icon
2025-05-22 01:54:41 -05:00
Austin Mroz d5ba30a754 Stroke widget buttons manually
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.
2025-05-21 17:09:22 -05:00
Austin Mroz 2ab65b9c4c Cleanup timestamp widget conversion code 2025-05-21 16:15:56 -05:00
Austin Mroz 0d5b445a70 Fix connections to format widgets 2025-05-12 15:50:18 -05:00
Austin Mroz 001a508cb5 Allow drag drop on upload nodes.
Fix out of date IS_CHANGED methods for Load Audio nodes

fix incorrect parens in preview code. The string "0" is truthy.
2025-05-06 16:43:14 -05:00
Austin Mroz a7ce59e381 Fix Use Everywhere compatibility 2025-04-26 15:27:20 -05:00
Austin Mroz 69ef6d4edc Merge pointer fix 2025-04-18 12:21:44 -05:00
filtered 7ed4f6c510 Remove deprecated litegraph param
Unnecessary parameter will be removed in a future release, and brough inline with all other CanvasPointer callbacks.
2025-04-18 21:30:59 +10:00
Austin Mroz 87f73c7dbb Fix misplaced parens
Resolves #460
2025-04-09 13:03:24 -05:00
Austin Mroz df55f01d1d Float rounding fixes
Backend preview code will now accept floats and convert or truncate as
needed.

Fix updateParameter callbacks using out of date, unbounded values
2025-04-05 04:11:07 -05:00
Austin Mroz 972c87da57 Fix incorrect preview logic for gifs
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
2025-03-28 11:32:11 -05:00
Austin Mroz 0a3b1eb433 Improve cloneType disconnection logic
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
2025-03-26 12:09:00 -05:00
Austin Mroz d3e3c2e6b4 Merge removal of native metadata parsing 2025-03-23 22:33:10 -05:00
Austin Mroz 546359d436 Add additional null check to audio link migration 2025-03-23 22:32:20 -05:00
Austin Mroz 0d5870a4ce Fix padding of seconds term 2025-03-23 22:32:00 -05:00
Austin Mroz c338a1e572 Display frame rate annotation when force_rate is 0 2025-03-19 16:00:12 -05:00
Austin Mroz 2fbbd53e62 Fix incorrect seconds padding, remove callback 2025-03-18 17:42:51 -05:00
Austin Mroz 93ae745f22 Add timestamp widget
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
2025-03-18 17:25:40 -05:00
Austin Mroz e661ee7f3f Set start_time step to be single frame.
This is simple and low cost to implement since video information is
already being queried.
2025-03-18 12:59:01 -05:00
Austin Mroz 718af34bc2 Use setWidgetConfig on options
SetWidgetConfig is usable on widget options despite the type mismatch.
This provides a cleaner solution than a blind
Object.getOwnPropertySymbols call.
2025-03-17 15:57:57 -05:00
Austin Mroz 53c406679d Use node size to calculate target preview width
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.
2025-03-14 02:28:53 -05:00
Austin Mroz e44b3565c7 Allow dragging node from VHS preview widgets
See #414
2025-03-14 02:28:49 -05:00
Austin Mroz 73418575ca Fix low quality rendering threshold
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
2025-03-11 16:44:15 -05:00
Tommie ea525bfbd6 Fix input mime type for Matroska files
Fixes .mkv files not showing in the file upload window
2025-03-11 16:24:04 -05:00
Austin Mroz 28eb44c13c Pass mouse events for animated latent previews
Resolves #414
2025-03-11 14:45:59 -05:00
Austin Mroz 25c31ca79e Respect low quality rendering threshold
Resolves #412
2025-03-11 14:45:59 -05:00
Austin Mroz 626cb249d1 Remove parsing of native video metadata
Core has staged a more robust implementation for parsing video metadata.

Once this been rolled out, it should be used instead of the `good
enough` implementation used by VHS.
2025-02-28 17:23:01 -06:00
Austin Mroz 51aa43368d Add documentation for Select Latest, prune timeout
The code for querying video information is an async function. Rather
than adding a setTimeout call, the function is simply called, but never
awaited.

Remove experimental from unbatch description
2025-02-25 17:26:46 -06:00
Austin Mroz 532de499f6 Select Latest poc
Adds a new node to select the most recently modified file of a target
folder. This can be used to automate using the output of one execution
as the input for another. In order to allow frontend values to properly
update, this is implemented as a virtual node, skeleton node def is
included due to difficulty with setting up the node as fully virtual.
This will likely be revisited in the future.

Add an optional length argument to path trimming. The original 30
character length estimate seems to no longer be accurate which results
in text overlapping. A more thorough investigation and fix will come
later.

Update experimental designation on nodes.
2025-02-25 12:24:12 -06:00
Austin Mroz 23ebe28091 Fix persisting output previews across reloads
Preview updates on message. This nonsense of wrapping outputs is not
useful.
2025-02-25 12:24:12 -06:00
Austin Mroz 2c25b8b538 Minor cleanup
video_query data is deleted when a new preview is loaded. This ensures
old query information doesn't persist on failed load.

Call onRemove on removed output format widgets. This doesn't matter for
any existing formats, but swapping to app.widgets allows for arbitrary
widgets to be included in formats which may require it.

Remove the app argument from the VHSFLOAT and VHSINT widget
constructors. These constructors aren't actually used, but this change
brings there functionality closer in line with the upstream sentiment.
2025-02-24 12:06:27 -06:00
Austin Mroz 514de7fe2e Add video source information to context menu
Inspired by the change to core image preview nodes. Information for a
video source is now displayed in the context menu for nodes with a
preview.
2025-02-24 12:06:27 -06:00
Austin Mroz f2c905aaed Make numeric format widgets annotated, tab safety
Format widgets which are numbers are now converted to be annotated
widgets. This ensures they have full access to VHS QoL in the future
even though none can make use of this functionality at present.

Sequential widget prompting with now check that the subsequent widget
has a mouse function before blindly calling, but is also lmited to only
annotated numbers for now. The distinction makes no difference for
existing nodes, but adds an additional layer of safety.
2025-02-24 12:06:27 -06:00