p-video
Pay-per-second video generation with no GPU — but the output is a URL, not a file
- image
- video_url
PrunaVideo (p-video) is the pack's hosted video generator: give it a prompt, optionally an image to animate, and it returns a video - generated on Pruna's servers, billed by the second. This is the node that makes the whole "no GPU" pitch land hardest, because local video is where the VRAM pain is worst. Running something like LTX or Wan locally means multi-gigabyte models, careful memory juggling, and a graphics card that feels inadequate. Here you get 5 seconds of video for about a dime and none of that.
But read that first sentence again: it returns a video, and the node's output is a STRING - a URL, not a file. That's the practical quirk that catches everyone. The README is blunt about it: you pass video_url to a video preview or download node that can fetch from a URL, or grab the link yourself. Core ComfyUI expects a file path for its built-in video preview, so a bare string output won't just show a preview on its own - you need a node in the graph that can pull a video from a URL before you can watch or save it. Sort that wiring out first, or the first run feels broken when it isn't.
What you set
prompt- text description of the video, multiline.duration- seconds,1to20, default5.resolution-720por1080p, default720p.aspect_ratio-16:9,9:16,4:3,3:4,3:2,2:3,1:1; default16:9.draft- boolean, off by default. Draft mode is faster and cheaper per the README - the obvious choice for iteration, full quality for finals.api_key- Pruna key orPRUNA_API_KEY.image(optional) - connect an IMAGE to animate it (image-to-video) instead of generating from scratch.
Output: video_url, a STRING.
How it works
Text-to-video, it POSTs the prompt, duration, resolution, aspect ratio and draft flag to /v1/predictions and polls until the job finishes. Image-to-video, it first uploads your image to Pruna's files API and adds the returned URL to the payload - same upload mechanism as the pack's edit and upscale nodes. Either way the response's generation_url becomes the string that comes out of the node, so the graph hands you a link to a video Pruna is hosting rather than the video itself.
Install
ComfyUI Manager → search ComfyUI Pruna API → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/PrunaAI/comfyui-pruna-api
pip install -r comfyui-pruna-api/requirements.txt
Requirements are only requests and Pillow; a key from the Pruna developer portal is the actual gatekeeper.
Where people get burned
- Pricing scales with everything: 720p is $0.02/sec (draft off) or $0.005/sec (draft on); 1080p doubles both to $0.04/sec and $0.01/sec. A default 5-second 720p run is $0.10 - and a 20-second 1080p non-draft run is $0.80. One expensive queue is a lot of cheap ones.
- The STRING output trips people up - you need a URL-fetching preview/download node in the graph, or you'll be copy-pasting links from the console.
- Jobs can take a while - video is the slowest thing in the pack, and the node polls up to five minutes before giving up with "Pruna job did not complete within 300s."
- The usual key errors apply: "No Pruna API key provided", 401/403 for a bad key.
The verdict: genuinely the easiest way to generate video inside ComfyUI if you own no GPU and no patience for local setup. Just budget for it and wire a URL download node ahead of time - the moment of "wait, where's my video?" is avoidable.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| duration | INT | 51–20 | — |
| resolution | COMBO | 720p | 2 options: 720p, 1080p |
| aspect_ratio | COMBO | 16:9 | 7 options: 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, +1 |
| draft | BOOLEAN | false | — |
| api_key | STRING | — | |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |