Embeddr Load Video
Turn a video in your library into frames ComfyUI can work with
- images
- frame_count
Load Video is how a video stored in your Embeddr library becomes a batch of frames inside ComfyUI. It pulls the file down from your server, decodes it with OpenCV, and hands you an IMAGE tensor you can feed into anything frame-based - img2img on every frame, AnimateDiff-style processing, frame interpolation, you name it. Given that video models are the heaviest lift in the ecosystem, having your source clips already organized in a library and one node away from the sampler is a genuinely nice workflow.
The input is a plain image_id string (yes, that's the actual field name - it's the video's ID, the naming is just legacy). Type the ID in and you're set.
The frame controls - this is where the node earns its keep
Six knobs that let you shape exactly which frames you get, straight from the source:
frame_load_cap- stop after N frames (0 = all). A video is often way more frames than you need; cap it and your VRAM thanks you.skip_first_frames- skip the opening frames, which are usually junk.select_every_nth- load every Nth frame. Default 1 (every frame); set 3 and you get a third of the frames, which is the classic cheap temporal decimation for long clips.force_rate- force a playback FPS (0 = original). Mostly metadata, but handy if downstream assumes a rate.custom_width/custom_height- resize, 0 = original. Set one and the other scales to match aspect ratio; set both and it uses them directly.
The interplay matters: skip_first_frames and select_every_nth are applied in sequence during the read loop, and frame_load_cap stops the whole thing once you've collected enough. If you want the first 100 frames, every 2nd frame: skip=0, nth=2, cap=100.
Outputs are images (the frame batch) and frame_count (an INT with how many you got - the second output is easy to ignore and genuinely useful for logging or batching logic).
The dependency gotcha nobody warns you about
This node imports cv2 (OpenCV). The pack's declared Python dependency is only requests - the author assumes OpenCV is already in your ComfyUI environment. Usually it is, because the frontend bundles it or you've installed another pack that needed it. But on a minimal install this node can fail at import time with a ModuleNotFoundError: No module named 'cv2'. The fix is one line:
pip install opencv-python-headless
(run it in the same Python environment as your ComfyUI - if you're in a venv, activate it first). That single missing dependency is the most likely reason this node fails while the rest of the pack works.
Install & the rest
Shared pack setup: embeddr serve running, pack via ComfyUI Manager or a release into custom_nodes, restart ComfyUI. The video is downloaded from your server via /api/v1/images/{id}/file, so a big clip is a big download each time - there's a cache class but it's not populated for video, so expect network cost on every run.
Failure modes: bad ID → empty 64×64 image and frame_count 0 (not a crash, so watch for it), server down → same. And no audio: the code deliberately skips audio extraction, so if you need the soundtrack, get it elsewhere. It's a frame loader, and it's good at that.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image_id | STRING | — | |
| frame_load_cap | INT | 00–100000 | Stop loading after this many frames (0=all) |
| skip_first_frames | INT | 00–10000 | Skip this many frames at the start |
| select_every_nth | INT | 11–100 | Load every Nth frame |
| force_rate | INT | 00–120 | Force playback FPS (0=original) |
| custom_width | INT | 00–4096 | Resize width (0=original) |
| custom_height | INT | 00–4096 | Resize height (0=original) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| frame_count | INT | — |