Nodes/GIF Toolkit/GIF Prepare / Blink Schedule (legacy alias)
ComfyUI Node

GIF Prepare / Blink Schedule (legacy alias)

An old alias of the blink-schedule node — and not the modern one

By oekobudde·Created 28 days ago·Updated 26 days ago· 1
GIF Prepare / Blink Schedule (legacy alias)
  • images
  • video_info
  • images
  • text_on_indexes
  • fps
  • frame_count
  • duration_seconds
◄max_duration_seconds6.0►
◄blink_on_seconds0.50►
◄blink_off_seconds0.50►

There's a trap here worth naming before anything else. WebexGIFPrepare is the legacy name of GIF Prepare / Blink Schedule, not of GIF Prepare / Preset. Two aliases in this pack (WebexGIFPrepare, WebexGIFPresetPrepare) point at the two older prepare classes; the current preset node - the one with the preset table and the aspect-ratio crop - has no legacy alias, because it didn't exist when the pack was still called Webex-something.

So: it loads old workflows, it trims your clip, and it does not resize anything. If you're picking nodes fresh, this isn't the one.

How it works

Behaviourally identical to GIF Prepare / Blink Schedule, since it's the same Python class registered under a second name.

It reads the source fps from the incoming VHS_VIDEOINFO dictionary - trying loaded_fps, then source_fps, falling back to 8 when neither key is present - then trims the batch to max_duration_seconds × fps frames and computes which frame indexes should be lit. The blink math converts seconds to frames at that fps with a floor of one frame per phase, builds a cycle, and marks every index where i % cycle falls inside the on-phase. Frame 0 always starts lit.

The on-indexes leave the node as a comma-separated string. Keep that in mind: GIF Text Overlay does its own blink arithmetic from its own widgets and the fps you wire into it, so this string is informational. Old workflows that appear to wire nothing from it are behaving normally.

The inputs and outputs

Inputs: images (IMAGE), video_info (VHS_VIDEOINFO, required - it can't be typed in by hand), max_duration_seconds (FLOAT, default 6.0, max 60; set 0 to keep everything), and blink_on_seconds / blink_off_seconds (FLOAT, 0.5 each by default).

Outputs: images (the trimmed batch), text_on_indexes (STRING), fps (FLOAT), frame_count (INT), duration_seconds (FLOAT). Wire fps forward to keep blink timing and VHS Video Combine's frame_rate in agreement.

Install

Comes with the pack - this is an alias inside it, not a separate download:

cd ComfyUI/custom_nodes
git clone https://github.com/oekobudde/ComfyUI-GIFToolkit.git

Or Manager → search GIF Toolkit. Restart ComfyUI afterwards. No pip dependencies ship with the pack, but the workflow needs ComfyUI-VideoHelperSuite - that's where VHS_LoadVideo and the VHS_VIDEOINFO type come from, and without it this node has no valid input to connect.

Common issues

The frames come out at full resolution. Working as designed - no resize, no fps conversion, no crop. Feed it a 1080p batch and everything downstream is 1080p. Use GIF Prepare / Preset if you want 320-pixel frames.

Duration shorter than requested. It can only cut, never extend. The ceiling is whatever VHS_LoadVideo actually delivered - its frame_load_cap defaults to 144 frames, so a long clip gets truncated at the loader before this node sees it.

Blink rhythm doesn't match the numbers you typed. It's round(seconds × fps), and the fps comes from the video info, not from you. Change the loader's force_rate and the same blink values give a different cadence.

You migrated a workflow and the node shows the old display name. That's just the label. The display name records which alias you're using; both resolve to the same code, so the output is identical either way. Idle curiosity only - but worth knowing before you "fix" a node that was already doing the right thing.

CategoryGIF Toolkit

Inputs (5)

NameTypeDefaultDescription
imagesIMAGE—
video_infoVHS_VIDEOINFO—
max_duration_secondsFLOAT6.00–60—
blink_on_secondsFLOAT0.500.05–10—
blink_off_secondsFLOAT0.500.05–10—

Outputs (5)

NameTypeDescription
imagesIMAGE—
text_on_indexesSTRING—
fpsFLOAT—
frame_countINT—
duration_secondsFLOAT—