Playbook Video (External)
A URL becomes frames — if opencv is installed
- default_value
- images
Playbook Video downloads a video from a URL, decodes it, and returns the frames as a batched IMAGE. That's the whole job - and it's the node in this pack most likely to surprise you on install, because it needs opencv (the cv2 module), and nothing in the pack's install files declares it.
Context first: this is an "External" node in Playbook Nodes, the ComfyUI side of Playbook3D's cloud 3D render service. When a workflow runs on their platform, a video you've dropped into the web UI (as a URL) becomes frames in your graph - the plumbing for their video/sequence features. Locally it works the same way: point it at a direct video URL, get frames out. It's the video sibling of Playbook Image, with frame-sampling controls bolted on.
The inputs that matter
- default_url - the video URL. Must start with
httpfor the node to even attempt a download. - frame_load_cap - max frames to keep, default 0 (no cap, up to 1000).
- skip_first_frames - drop this many frames from the start.
- select_every_nth - keep every Nth frame, default 1 (every frame).
- default_value - an
IMAGEused as the fallback when there's no valid URL or the download fails. - id and label - the usual external-node metadata, inert locally.
Output is images, a [frames, height, width, channels] tensor. The mechanism: stream the video to a temp file, open it with OpenCV's VideoCapture, walk the frames applying skip/every-nth/cap, convert BGR to RGB, normalize, and stack. If anything fails and no fallback is wired, you get None.
Install - read this before you run
The pack install is the usual:
cd ComfyUI/custom_nodes
git clone https://github.com/playbook3d/playbook3d-comfyui-nodes
But this node imports cv2, and there is no requirements.txt in the pack - ComfyUI does not ship OpenCV by default in every build. If you get an ImportError: No module named 'cv2' at load or first run, install it yourself:
pip install opencv-python
then restart ComfyUI. Everything else this node needs (requests, torch, numpy) is already there. No API key needed for the node itself - it only talks to whatever URL you give it.
Troubleshooting
Two classic failures. The missing-opencv import error above is the big one - solve it with the pip install. The second is silently getting your default_value back because the URL isn't a direct file link (a page URL instead of an .mp4, or a server that blocks scripts like requests). The node checks only that the URL starts with http, so a redirect-to-login or a 403 hands you the fallback with a console message, not an error box. Frame order follows the video's own timeline, so there's no filename-sort trap here like the sequence nodes. And mind the memory math: a long video with frame_load_cap at 0 and select_every_nth at 1 is a huge batch - cap it or subsample, or ComfyUI will thank you later.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| id | STRING | Node ID | — |
| label | STRING | Node Label | — |
| frame_load_cap | INT | 00–1000 | — |
| skip_first_frames | INT | 00–1000 | — |
| select_every_nth | INT | 11–1000 | — |
| default_valueopt | IMAGE | — | |
| default_urlopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |