P-Video-2-Pro
Fewer knobs, smaller canvases, a speed/quality switch doing the work
- frameImages
- video
What "Pro" means here, and what it doesn't
P-Video-2-Pro is Pruna AI's quality tier of their video model, served through Runware. Pruna AI you may know from their optimization work - PrunaVAED, a drop-in faster VAE decoder for LTX-2.3, was ported into ComfyUI by kijai almost immediately and did well in the community. Their own generator, though, has almost no community track record yet, so go in expecting to do your own evaluation.
The counterintuitive part: Pro has a narrower widget set than the plain P-Video-2 node, and a lower resolution ceiling. Where P-Video-2 goes up to 1080p with a 24/48 fps choice, audio input and a draft mode, Pro tops out at 768p and trades all of that for two things: a recipe switch, and a finer prompt-expansion dial.
The inputs
positivePrompt is required. frameImages is the only image socket - feed it a frame for image-to-video, or leave it empty for text-to-video. That's the whole input surface: no audio reference, no fps, no audio-in-output toggle.
size gives you seventeen options: None (model default), 480p (from input), 768p (from input), then 480p and 768p at six aspect ratios each - 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 1:1. Default is 768p (~16:9). The (from input) entries pass the shape decision to your frame image, which is the right call when you're animating a photo you don't want to crop.
Then the two dials that are the reason to pick this node:
settings.mode-speed(default) orquality. This is the generation recipe, so it changes the whole computation, not a cosmetic detail. Iterate inspeed, commit toqualityfor the final take. It's the closest thing to draft mode this tier has.settings.promptUpsampling-off,turbo(default) ormax, described as "Prompt expansion before generation."offis your reproducibility setting,turbois the daily driver,maxis for the shot you've already agreed on and want the model to gild.
Also on the node: duration is a plain INT from 5 to 15 seconds (no toggle games here - the number you see is the number you get), seed (0 to 2147483647), numberResults up to 4 variations, outputFormat (MP4/WEBM/MOV), outputQuality 20–99, the safety group with safety.checkContent and safety.mode (fast/full), and the ttl toggle gating ttl_value.
Output: one video, natively typed, ready for Save Video.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Or ComfyUI Manager → search Runware → install → restart. Dependencies: runware-sdk>=1.6.5, pillow, soundfile. There are no model files to fetch - the pack ships node schemas and the model runs remotely. Get a key at runware.ai/api-keys, then set it via ComfyUI Settings → Runware API key, the RUNWARE_API_KEY env var, or runware auth login. The title bar shows the cost of each call once it's done.
Where people get burned
Expecting Pro to be the bigger version of P-Video-2. It isn't. If your deliverable is 1080p, or you need the audio input, or you want fps 48, you want the non-Pro node. Pro is about the recipe, not the pixel count.
Leaving prompt upsampling on while debugging wording. turbo is the default and it rewrites your prompt. When a change to your prompt seems to do nothing, or when a seed stops reproducing, that's usually why - set it to off and re-test.
Feeding a local MP4-shaped mental model to a cloud node. frameImages takes a real IMAGE socket, so a local frame is fine; but anything URL-based, host it first. And nothing in this node touches your GPU.
Getting a file path back instead of a VIDEO. On older ComfyUI builds the pack falls back to returning the saved file path, because it can only construct the native VIDEO type when the comfy_api video class is present. The mp4 is in your output folder either way (runware_<id>.mp4); update ComfyUI, restart and re-queue to get the proper socket.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| frameImagesopt | IMAGE | — | |
| sizeopt | COMBO | 768p (~16:9) | Output size. Only one of resolution or dimensions is sent. |
| seedopt | INT | 00–2147483647 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| durationopt | INT | 55–15 | Length of the generated video in seconds. The total number of frames produced is determined by duration multiplied by the model's frame rate (fps). |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| settings.modeopt | COMBO | speed | Generation recipe. |
| settings.promptUpsamplingopt | COMBO | turbo | Prompt expansion before generation. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. Increases total generation time. |
| safety.modeopt | COMBO | fast | Safety checking mode for video generation. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | MP4 | File format for the generated video. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |