Nodes/ComfyUI-EvTexture/EvTexture Video Upscale
ComfyUI Node

EvTexture Video Upscale

EvTexture's Event-Driven 4x, the Node the Pack Exists For

By tocubed·Created 2 years ago·Updated 2 years ago· 18
EvTexture Video Upscale
  • images
  • events
  • model
  • images
fps

EvTexture's Event-Driven 4x, the Node the Pack Exists For

This is the payoff. EVTLoadEvTextureModel gives you a model, EVTVideoToEvents gives you an event stream, and EVTTextureUpscaleVideo combines them with your frames and hands back a 4x-upscaled clip.

Why you'd bother

Video upscaling is the least-settled of the three upscaling jobs - more pixels, more detail, and more pixels over time are different problems, and the last one is where per-frame image upscalers fall apart, shimmering on fine repeating texture because consecutive frames can't agree. The mainstream answers (FlashVSR, SeedVR2, NVIDIA's hardware path) all work from frames alone. EvTexture makes a different bet, and it's an interesting one: it's an ICML 2024 model from USTC that conditions on event data - per-pixel brightness-change information that doesn't exist in an ordinary video, so the pack synthesizes it with a simulated event camera. The events act as a texture-hint channel that tells the model where things changed between frames, and that's the whole idea.

Honest status check: this is a research model wrapped in a thin, single-commit custom node, and the community footprint is tiny - you can count the substantive discussions of it on all of Reddit on one hand. The people who use it tend to be video folks upscaling generated clips; the one consistent account in the wild pairs it with Wan 2.1 output. It's a real technique you can run at home, not a mainstream answer. Expect to fiddle.

How it works

Under the hood the node packages your event stream into bidirectional voxel grids - five temporal bins, run both forward and backward - then runs the EvTexture network: SPyNet does optical-flow alignment across frames, a UNet "texture enhancement" module reads the event voxels to find where detail should be strengthened, the result propagates through the clip, and two 2x pixel-shuffle stages produce the 4x total. VRAM is handled for you through ComfyUI's own model management, which estimates the footprint and frees memory before the run so a long clip doesn't OOM you.

The inputs and output

  • images (IMAGE) - your frames. Remember the sweet spot: this model was trained on low-res input (roughly 64–256 px) dense with detail. Feed it 720p directly and you're off-model.
  • events (EVT_EVENTS) - from EVTVideoToEvents.
  • model (EVTEXTURE_MODEL) - from EVTLoadEvTextureModel; the Vimeo90K checkpoint for anything larger than the small stuff.
  • fps (FLOAT) - must match the fps you gave EVTVideoToEvents. The events are timestamped against it; a mismatch lets timestamps drift out of alignment with frames.

Output: images (IMAGE) - same frame count as the input, every frame 4x wider and taller. Wire it into VHS_VideoCombine or your usual video-save node.

Install and the one workflow trick that matters

cd ComfyUI/custom_nodes
git clone https://github.com/tocubed/ComfyUI-EvTexture

or ComfyUI Manager → "ComfyUI-EvTexture", restart, and remember the weights are a separate download into models/upscale_models. The trick from the README: run RIFE (or any frame interpolator) on your source first to raise the fps. More intermediate frames means the event simulator catches more motion, which means more texture hints here - a 2x interpolation before this node is the difference between "decent" and "oh, that's what it can do."

Common issues

If output looks mushy, don't blame the upscaler first - check your events with EVTEventsToImage (a sparse stream means weak hints) and confirm the fps matches between the event and upscale nodes. If it's artefacty on larger input, you're outside the training sweet spot; downscale the source or switch to the Vimeo90K checkpoint. And set your expectations: this is a fixed-4x, low-res-focused research wrapper, not a one-click Topaz replacement. When it works it's genuinely neat, but it earns that neatness with setup.

CategoryEVTexture

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE
eventsEVT_EVENTS
modelEVTEXTURE_MODEL
fpsFLOAT

Outputs (1)

NameTypeDescription
imagesIMAGE