“Extreme cinematic close-up of a beautiful young woman experiencing deep, raw emotion. Her expression slowly shifts from quiet sorrow to intense cathartic crying — realistic skin texture with visible pores, subtle muscle twitches, glistening tears forming in her eyes and rolling down her cheeks, red-rimmed eyes with natural blinking and micro-expressions of pain and release. Soft dramatic side lighting with gentle rim light highlighting the tears, very shallow depth of field, slight emotional camera push-in during the emotional peak, photorealistic, 8K, intricate skin and eye details, filmic color grading, subtle film grain.”
PrunaAI's fast video generation model with built-in draft mode for rapid creative iteration, supporting text-to-video, image-to-video, and audio-to-video in a single endpoint
Details
p-video
Starting from
Prices shown are in USD
Full pricing detailsProviders & Pricing (1)
P-Video is available exclusively through Replicate, starting at $0.02/video.
All modes
replicate/p-video
P-Video API Async video generation
https://api.lumenfall.ai/v1
p-video
Code Examples
Text to Video
/v1/videos/generations# Step 1: Submit video generation request
VIDEO_ID=$(curl -s -X POST \
https://api.lumenfall.ai/v1/videos \
-H "Authorization: Bearer $LUMENFALL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "p-video",
"prompt": "",
"size": "1024x1024"
}' | jq -r '.id')
echo "Video ID: $VIDEO_ID"
# Step 2: Poll for completion
while true; do
RESULT=$(curl -s \
https://api.lumenfall.ai/v1/videos/$VIDEO_ID \
-H "Authorization: Bearer $LUMENFALL_API_KEY")
STATUS=$(echo $RESULT | jq -r '.status')
echo "Status: $STATUS"
if [ "$STATUS" = "completed" ]; then
echo $RESULT | jq -r '.output.url'
break
elif [ "$STATUS" = "failed" ]; then
echo $RESULT | jq -r '.error.message'
break
fi
sleep 5
done
const BASE_URL = 'https://api.lumenfall.ai/v1';
const API_KEY = 'YOUR_API_KEY';
// Step 1: Submit video generation request
const submitRes = await fetch(`${BASE_URL}/videos`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'p-video',
prompt: '',
size: '1024x1024'
})
});
const { id: videoId } = await submitRes.json();
console.log('Video ID:', videoId);
// Step 2: Poll for completion
while (true) {
const pollRes = await fetch(`${BASE_URL}/videos/${videoId}`, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
const result = await pollRes.json();
if (result.status === 'completed') {
console.log('Video URL:', result.output.url);
break;
} else if (result.status === 'failed') {
console.error('Error:', result.error.message);
break;
}
await new Promise(r => setTimeout(r, 5000));
}
import requests
import time
BASE_URL = "https://api.lumenfall.ai/v1"
API_KEY = "YOUR_API_KEY"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Step 1: Submit video generation request
response = requests.post(
f"{BASE_URL}/videos",
headers=HEADERS,
json={
"model": "p-video",
"prompt": "",
"size": "1024x1024"
}
)
video_id = response.json()["id"]
print(f"Video ID: {video_id}")
# Step 2: Poll for completion
while True:
result = requests.get(
f"{BASE_URL}/videos/{video_id}",
headers=HEADERS
).json()
if result["status"] == "completed":
print(f"Video URL: {result['output']['url']}")
break
elif result["status"] == "failed":
print(f"Error: {result['error']['message']}")
break
time.sleep(5)
Image to Video
/v1/videos/generationsParameter Normalization
How we handle parameters across different providers
Not every provider speaks the same language. When you send a parameter, we handle it in one of four ways depending on what the model supports:
| Behavior | What happens | Example |
|---|---|---|
passthrough |
Sent as-is to the provider | style, quality |
renamed |
Same value, mapped to the field name the provider expects | prompt |
converted |
Transformed to the provider's native format | size |
emulated |
Works even if the provider has no concept of it | n, response_format |
Parameters we don't recognize pass straight through to the upstream API, so provider-specific options still work.
P-Video Benchmarks
P-Video is ranked #2 in Text-to-Video with an Elo of 1115 on the Lumenfall Arena, where real users pick the better image in blind comparisons. These rankings are based on 2 blind-vote competitions.
Text-to-Video Landscape
Elo vs Cost
Elo vs Speed
Speed data is still warming up
We only have enough recent requests for Grok Imagine Video (386ms average).
Competition Results
Uncategorized
“Hyper-realistic cinematic video of an elegant young woman in a flowing white silk dress dancing gracefully in heavy pouring rain at night on a neon-lit Tokyo street. Her long wet hair whips dramatically in the wind, the dress clings and flows with realistic fabric and water physics, raindrops splash and create perfect reflections of pink and blue neon signs on the wet pavement. Subtle emotional expression of freedom mixed with melancholy on her face, water droplets on skin and eyelashes catching the light. Smooth dynamic orbiting camera with slight cinematic handheld feel, dramatic volumetric lighting with god rays piercing through the rain, photorealistic, 8K, film grain, shallow depth of field, anamorphic lens flare.”
P-Video FAQ
How much does P-Video cost?
P-Video starts at $0.02 per video through Lumenfall. Pricing varies by provider. Lumenfall does not add any markup to provider pricing.
How do I use P-Video via API?
You can use P-Video through Lumenfall's OpenAI-compatible API. Send requests to the unified endpoint with model ID "p-video". Code examples are available in Python, JavaScript, and cURL.
Which providers offer P-Video?
P-Video is available through Replicate on Lumenfall. Lumenfall automatically routes requests to the best available provider.
Try P-Video in Playground
Generate images with custom prompts — no API key needed.