Nodes/ComfyUI-PainterNodes/Painter Load Video
ComfyUI Node

Painter Load Video

The loader that cuts your clip to what the model will actually eat

By princepainter·Created 9 months ago·Updated 10 days ago· 205
Painter Load Video
  • force_rate
  • custom_width
  • custom_height
  • frame_load_cap
  • start_frame
  • IMAGE
  • audio
  • video_info
◄video▾►
◄formatH3►

Almost every "my video workflow won't run" post is the same post: you have a clip, and the model you want to feed it refuses to eat it. Wan wants 16fps and frames in a 4k+1 rhythm. H3 wants 24fps, dimensions in multiples of 32, and frame counts shaped like 17k+5. Your source is a 60fps phone clip at 1920x1080, which is wrong in three different ways at once.

Painter Load Video is the loader that does that arithmetic for you. It's the author's stripped-down take on the VHS Load Video idea - the pack's README thanks the VHS and kijai codebases directly - and it keeps the good part (ffmpeg decoding, a format preset that snaps your clip to the target model) while dropping the parts a beginner never touches: no batch manager, no VAE input, no mask output. It's a pipe, not a control panel.

What you get out of it

Three outputs, and the first one is the point: IMAGE (the decoded frame batch), audio (the soundtrack, as a standard AUDIO), and video_info (a VHS_VIDEOINFO-shaped dict of source and loaded dimensions, fps, frame counts and durations). The audio output is what makes this interesting in 2026 - an H3 or LTX workflow wants a soundtrack to go with the clip, and having the loader hand it to you means you don't have to demux it separately.

The optional format dropdown is the feature. Each preset carries a target rate, a dimension multiple, and a frame-count rule:

| preset | target fps | dim multiple | frames loaded | |---|---|---|---| | None | source | source | all | | LTXV | 24 | 32 | 8k+1 | | Hunyuan | 24 | 16 | 4k+1 | | Wan | 16 | 8 | 4k+1 | | H3 | 24 | 32 | 17k+5 |

H3 is the default, and it's the one you want if you're feeding MiniMax H3 nodes. Pick Wan and load a 130-frame clip? You get 129 - the loader trims to the nearest legal count rather than erroring later inside the sampler where the message is useless.

The inputs a beginner actually sets

video is a dropdown of files sitting in ComfyUI/input - the widget also accepts uploads, so drag your clip in there rather than copying files by hand. Then force_rate (0 means keep the source rate; anything else re-samples through ffmpeg's fps filter), and here's the thing worth internalising: forcing 60fps down to 24 doesn't preserve motion speed, it drops frames. If your clip suddenly looks sped up, that's why.

custom_width and custom_height default to 0 (keep source). Set only one and the node preserves the aspect ratio and centre-crops rather than stretching. frame_load_cap (0 = everything) and start_frame give you the window; both count in loaded frames for the cap and source frames for the start.

The five numeric fields use a custom widget that prints the source fps and the frames you're about to load, and the preview re-renders against your current settings - you can see the crop and the trim before you run the graph instead of after.

How it works

Frames come out of an ffmpeg rawvideo pipe, decoded at 16-bit RGBA and alpha-stripped to RGB, and a memory budget caps how many get held in RAM. The audio is deferred - nothing is extracted until something downstream actually reads the AUDIO socket, so a graph that only uses the video doesn't pay for an audio pass. Then the preset's frame rule trims the tail. That's the whole node.

Install

Search PainterNodes in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterNodes
cd ComfyUI-PainterNodes
pip install -r requirements.txt

Then restart ComfyUI. The pack's requirements are unusually light - soundfile and numpy - but note what isn't installed for you: this node shells out to ffmpeg. It looks for imageio_ffmpeg first, then ffmpeg on PATH, and you can point it anywhere with the PAINTER_FFMPEG_PATH environment variable if you keep a specific build around.

Where people get burned

"no ffmpeg executable was found." Neither the bundled Python ffmpeg nor a system one is visible. Install ffmpeg, or set PAINTER_FFMPEG_PATH to the binary.

Long clips eat all your RAM. The frame budget that limits how many frames get buffered is computed with psutil, which is not in requirements.txt. Without it the budget becomes effectively unlimited, and a long 4K clip will happily try to sit in memory. pip install psutil into ComfyUI's environment is a cheap insurance policy.

Your dropdown is empty. The combo only lists files in ComfyUI/input, sorted. Use the widget's upload button.

"too few frames for the selected format." You asked for a clip shorter than the preset's minimum legal count - with H3 that means fewer than 5 frames. Trim upstream, or set format to None when you genuinely want raw frames.

Bumping the pack changed your workflow. This is a personal, fast-moving pack (version numbers in node names are variants, not upgrades, and the changelog shows nodes being deleted outright). Pin a commit and re-test after updating.

CategoryPainterNodes

Inputs (7)

NameTypeDefaultDescription
videoCOMBO0 options:
force_ratePAINTER_NUMBER00–120—
custom_widthPAINTER_NUMBER00–8192—
custom_heightPAINTER_NUMBER00–8192—
frame_load_capPAINTER_NUMBER00–1000000000—
start_framePAINTER_NUMBER00–1000000000—
formatoptCOMBOH35 options: None, LTXV, Hunyuan, Wan, H3

Outputs (3)

NameTypeDescription
IMAGEIMAGE—
audioAUDIO—
video_infoVHS_VIDEOINFO—