Pixabay Video Gallery
Stock video clips as URLs, right inside your graph
- video_url
- info
Once you start building real video workflows in ComfyUI - LTX-Video, Wan, whatever you're chaining this month - you run into the same wall: you need actual footage to start from, and fetching it means leaving the canvas. The Pixabay Video Gallery node (class PixabayVideoNode) is the sibling of PixabayImageNode in the two-node ComfyUI_Pixabay_Gallery pack, and it gives you a browseable Pixabay stock-video search directly in the node body. Click a clip, pick a resolution, queue, and out comes a real download URL plus the full metadata.
It's the video equivalent of the image node: royalty-free stock footage, no model files, no GPU work. Reach for it when a workflow needs an input clip or a reference - a starting frame for image-to-video, a motion reference, or a placeholder plate you'll swap for a generated one later. It does the "find footage" part so you can spend your energy on the part ComfyUI is actually for.
How it works
Same architecture as the image node, with one honest difference: it never downloads the video. The UI is a custom widget (search box, language/type/category/order dropdowns, and a resolution selector), backed by the same local server route that proxies your Pixabay API key. When you click a card, the selection is POSTed to /pixabay_gallery/set_video, which writes a selected_video.json file containing the clip's data and your chosen resolution.
At queue time, get_selected_video() reads that file and walks the resolution list from your pick downward - tiny → small → medium → large - grabbing the first tier that actually has a URL. So if you asked for small and that clip only ships tiny and large, you silently get large. It's a small thing, but it means you basically never get an empty result from a resolution mismatch. Like the image node, IS_CHANGED keys off the data file's mtime, so picking a new clip re-runs the node on the next queue without any prodding.
The outputs that matter
Both are strings, straight from the schema:
video_url- the direct URL for your chosen resolution. This is a URL, not a tensor, so don't expect to wire it into something that wants video frames. The README's guidance is to connect it to aShow Textnode or anything that accepts a video URL.info- aSTRINGwith the clip's full metadata as JSON (tags, uploader, dimensions, all of it).
In the node UI, the Resolution dropdown is the control you'll actually touch. Tiny is fine for previews and lightweight tests; Large is what you want if you're using the footage as a serious input. There's also a favorites star, same as the image node.
Installing it
Identical to the image node, because it's the same pack - one install, one config, both nodes appear:
cd ComfyUI/custom_nodes
git clone https://github.com/Firetheft/ComfyUI_Pixabay_Gallery
pip install requests
Then grab a free key from the Pixabay API docs and put it in ComfyUI/custom_nodes/ComfyUI_Pixabay_Gallery/config.json:
{
"pixabay_api_key": "YOUR_PIXABAY_API_KEY_HERE"
}
Restart ComfyUI. (ComfyUI Manager also works - search "ComfyUI_Pixabay_Gallery".) No model downloads, no heavy dependencies; requests and aiohttp are already present in nearly every ComfyUI environment.
Where people get burned
- The gallery errors on load - that's the missing or placeholder API key again, same failure as the image node. Set it, restart.
video_urlcomes out empty. If you queue with nothing selected you get an empty string andinfosaying "No video selected." Pick a card first.- The URL alone doesn't do much. ComfyUI's built-in video nodes generally want local files, so a bare URL is mostly useful when something downstream can fetch or display it, or when you just want the link in a
Show Textnode. Don't expect the node to bring the video into your graph as frames - it won't. - Licensing. Pixabay footage is royalty-free and usable without attribution, which is perfect for placeholders and tests. If it's going into something commercial, read the Pixabay Content License terms yourself rather than trusting a blog post - that's on you, not the node.
The resolution-fallback logic is the quietly smart bit, and not having to keep a browser open while you hunt for a clip is genuinely nice. It's a utility node with a narrow job, but for stock-footage-driven video workflows, it's the fastest path from "I need footage" to "I have a URL in my graph."
Inputs (0)
No inputs
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| info | STRING | — |