Turn any source video into a 60-second narrative reel with HOOK → WHAT IT DOES → HOW TO USE → CALL TO ACTION arc. Cuts land on full-stop boundaries (whisper-large-v3). Window picks come from Qwen2.5-VL-7B reading both frames and transcript. Render is sentence-bounded ffmpeg with voice EQ + sidechain-ducked BGM. 30 credits per reel ≈ $0.03 — 2× cheaper than OpusClip ($0.10) and 1.7× cheaper than Vizard ($0.05).
curl -X POST https://api.pixelapi.dev/v1/video/auto-reel \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "source_url=https://youtu.be/abcdef12345" \
-F "aspect=16:9" \
-F "bgm=calm" \
-F "include_logo=true"
# Response:
# {
# "generation_id": "74c886c9-1247-44f4-aaa0-4de49ba6b32b",
# "status": "queued",
# "credits_used": 30,
# "estimated_seconds": 150,
# "poll_url": "https://api.pixelapi.dev/v1/video/auto-reel/74c886c9-..."
# }
curl -X POST https://api.pixelapi.dev/v1/video/auto-reel \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "source=@my_long_talk.mp4" \
-F "aspect=9:16" \
-F "bgm=calm"
curl https://api.pixelapi.dev/v1/video/auto-reel/$GEN_ID \
-H "Authorization: Bearer YOUR_API_KEY"
# Once "status": "done", an output_url field appears.
curl -o my_reel.mp4 \
https://api.pixelapi.dev/v1/video/auto-reel/$GEN_ID/download \
-H "Authorization: Bearer YOUR_API_KEY"
import requests, time
key = "YOUR_API_KEY"
hdrs = {"Authorization": f"Bearer {key}"}
# 1. Submit
r = requests.post("https://api.pixelapi.dev/v1/video/auto-reel",
headers=hdrs,
data={"source_url": "https://youtu.be/abcdef12345",
"aspect": "16:9", "bgm": "calm",
"include_logo": "true"})
gen_id = r.json()["generation_id"]
# 2. Poll
while True:
s = requests.get(f"https://api.pixelapi.dev/v1/video/auto-reel/{gen_id}",
headers=hdrs).json()
if s["status"] == "done":
break
if s["status"] == "error":
raise RuntimeError(s["error"])
time.sleep(8)
# 3. Download
mp4 = requests.get(s["output_url"], headers=hdrs)
open("reel.mp4", "wb").write(mp4.content)
print(f"saved {len(mp4.content)} bytes; picks={s['picks']}")
import fs from "node:fs";
const KEY = process.env.PIXELAPI_KEY;
const headers = { Authorization: `Bearer ${KEY}` };
// Submit
const fd = new FormData();
fd.append("source_url", "https://youtu.be/abcdef12345");
fd.append("aspect", "16:9");
fd.append("bgm", "calm");
const r = await fetch("https://api.pixelapi.dev/v1/video/auto-reel",
{ method: "POST", headers, body: fd }).then(r => r.json());
// Poll
let s; do {
await new Promise(r => setTimeout(r, 8000));
s = await fetch(`https://api.pixelapi.dev/v1/video/auto-reel/${r.generation_id}`,
{ headers }).then(r => r.json());
} while (s.status !== "done" && s.status !== "error");
// Download
const mp4 = await fetch(s.output_url, { headers });
fs.writeFileSync("reel.mp4", Buffer.from(await mp4.arrayBuffer()));
| Field | Type | Required | Description |
|---|---|---|---|
source_url | string | One of | YouTube URL or direct mp4 URL. |
source | file | One of | mp4 upload, ≤ 100 MB. |
aspect | string | no | 16:9 (default), 9:16, 1:1. |
bgm | string | no | calm (default), epic, none. |
language | string | no | Whisper language hint (e.g. en, hi). Auto-detects when blank. |
include_logo | bool | no | Append PixelAPI logo bumper at end (default true). |
{
"generation_id": "74c886c9-1247-44f4-aaa0-4de49ba6b32b",
"status": "done",
"output_url": "https://api.pixelapi.dev/v1/video/auto-reel/74c886c9-.../download",
"duration_seconds": 56.13,
"picks": [
{ "start_cue": 1, "end_cue": 3, "start_s": 0.0, "end_s": 12.80, "dur_s": 12.80, "role": "HOOK" },
{ "start_cue": 8, "end_cue": 11, "start_s": 42.46, "end_s": 57.58, "dur_s": 15.12, "role": "WHAT_IT_DOES" },
{ "start_cue": 12, "end_cue": 17, "start_s": 57.58, "end_s": 72.64, "dur_s": 15.06, "role": "HOW_TO_USE" },
{ "start_cue": 26, "end_cue": 32, "start_s": 108.96, "end_s": 123.26,"dur_s": 14.30, "role": "CALL_TO_ACTION" }
],
"timings": { "transcribe_s": 54.3, "vlm_pick_s": 1.5, "render_s": 41.1, "total_s": 144.8 }
}
| Provider | Cheapest paid tier | Cost per reel (~2-min source) | Story-arc cuts? | Sentence-bounded? |
|---|---|---|---|---|
| OpusClip Starter | $15/mo for 150 credits | ~$0.10 | No (engagement clips) | No |
| Munch Candy Bar | $23/mo for 100 min | ~$0.46 | No | Approx |
| Vizard Creator | $20/mo for 800 min | ~$0.05 | No | No |
| Pictory Standard | $25/mo for 200 min | ~$0.25 | No | No |
| Klap Starter | $29/mo | — | No | No |
| Submagic Starter | $16/mo | — | No | Yes (captions only) |
| PixelAPI Reel Director | Pay-as-you-go | $0.03 | Yes (HOOK→WHAT→HOW→CTA) | Yes (whisper-large-v3) |
99 languages via whisper-large-v3 transcription, including English, Hindi, Marathi, Tamil, Bengali, Spanish, Mandarin, Arabic, French, German, Japanese, Korean, Portuguese. Pass language=hi to force a hint, or leave blank to auto-detect.
Up to 30 minutes / 100 MB. We pick 4 windows in the [8s, 16s] range, total ≈ 45–65s.
Not yet — but the response includes the picks so you can replay or remix them yourself. We're considering a preview_only param for future.
calm is the current default — a cinematic, sidechain-friendly score. epic is more dramatic. none ships voice-only audio.
Uploads are deleted after 24h. Output reels are retained 30 days for redownload. See privacy policy.