← Visual SandboxCONTENT HISTORY
WHAT CHANGED
Update to Visual Sandbox
Snapshot Nov 5, 2026 · 01:19 UTC · version 1.0.8
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Visual Sandbox and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Prompt and run Pruna AI's P-Video family well. `video/p-video` is the cheapest video model in Visual Sandbox, with a built-in `draft` toggle that drops cost ~4×, and two newer tiers sit above it. Trigger whenever the user is about to call `vsb run video/p-video*` or asks \"cheapest video model\", \"draft video\", \"iterate fast\", or \"lots of video variations\". Always ask the user **draft or standard** before running. Pairs with the parent [`vsb-video`](../vsb-video/SKILL.md) skill for the async + poll pattern.\n",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 280
}
],
"name": "vsb-p-video",
"skill_md_contents": "---\nname: vsb-p-video\nrenamed_from: p-video\ndescription: >\n Prompt and run Pruna AI's P-Video family well. `video/p-video` is the\n cheapest video model in Visual Sandbox, with a built-in `draft` toggle that\n drops cost ~4×, and two newer tiers sit above it. Trigger whenever the user\n is about to call `vsb run video/p-video*` or asks \"cheapest video model\",\n \"draft video\", \"iterate fast\", or \"lots of video variations\". Always ask the\n user **draft or standard** before running.\n Pairs with the parent [`vsb-video`](../vsb-video/SKILL.md) skill for the async +\n poll pattern.\nlicense: Proprietary. See LICENSE for the terms.\n---\n\n# P-Video (Pruna AI)\n\nCheapest video model in the catalog. Fast iteration. Two-mode runtime via the\n`draft` boolean — flip it on for previews, off when you're locking the shot.\n\n## Which P-Video tier\n\nThree generation tiers now share this family. Price alone no longer picks one.\n\n| Pick | When |\n|---|---|\n| `video/p-video` | Bulk prompt exploration. Its draft rate is still the lowest in the whole catalog. No audio of any kind. |\n| `video/p-video-2` | The clip has to talk, or needs 1080p, 48 fps, a last frame, or a run past 15s. It writes native speech with lip-sync from dialogue in the prompt, and also takes an audio track to drive motion. |\n| `video/p-video-2-pro` | The best Pruna picture. Silent: no audio in, no audio out, and 768p is the ceiling. |\n\nPeople who talk, with one voice across shots: `video/p-video-2 --image <still>\n--audio <ElevenLabs line>` is the cheapest path. The clip runs as long as the\naudio, so `--duration` has no effect; pad the line with silence to the shot\nlength. Say in the prompt that the person speaks. Compare it with the other\npaths in [`vsb-video` → People who talk](../vsb-video/SKILL.md#people-who-talk-pick-the-sound-path-before-you-spend) before you\nspend.\n\nThree more slugs in the family transform a clip you already have rather than\ngenerate one, and they are covered in [`vsb-video`](../vsb-video/SKILL.md):\n`video/p-video-edit`, `video/p-video-replace`, `video/p-video-animate`, plus\n`video/p-video-avatar` for a photo that speaks a typed script.\n\nRead the parent [`vsb-video`](../vsb-video/SKILL.md) skill first for the universal\nasync + poll + cancel pattern. This skill only adds p-video–specific behavior.\n\nPrompt craft — slot formula, narration pattern, DO/DON'T — lives in the\nsibling [`vsb-p-video-prompting`](../vsb-p-video-prompting/SKILL.md) skill. Load it\nbefore writing any prompt.\n\nVerify the live schema before assuming fields:\n\n```bash\nvsb schema video/p-video --json\nvsb pricing video/p-video --json\n```\n\n## Always ask first: draft or standard?\n\nBefore running, ask the user which mode they want. Don't guess.\n\n```\nDraft (cheap, fast — for iteration) or standard (final-quality render)?\n```\n\n| Mode | `--draft` | 720p | 1080p | When to pick |\n|------|-----------|------|-------|--------------|\n| **Draft** | `true` | $0.00625/s | $0.0125/s | Trying out a prompt. Exploring 5–10 variations. Storyboards. Anything you'd re-run. |\n| **Standard** | `false` | $0.025/s | $0.05/s | Locking the final shot. Delivering to client. The shot you'll post. |\n\nA 5s 720p draft ≈ $0.03. The same shot at standard = $0.125 (4×). Use draft\nto land the prompt + composition, then run **the exact same args with\n`--draft false`** once to lock the final.\n\n## Pricing reference\n\nWhat you pay (verify live with `vsb pricing video/p-video --json`):\n\n| Resolution | Mode | $/s |\n|------------|------|-----|\n| 720p | draft on | $0.00625 |\n| 720p | draft off | $0.025 |\n| 1080p | draft on | $0.0125 |\n| 1080p | draft off | $0.05 |\n\nPer-second billing. `--duration` is integer 1–10 (default 5).\n\n## Input modes\n\nP-Video accepts three independent conditioning signals — combine freely.\n\n| Field | Meaning |\n|-------|---------|\n| `prompt` | Required. Scene + motion description. |\n| `image` | Optional first-frame for image-to-video. |\n| `audio` | Optional audio track — motion syncs to the sound. Useful for music videos and lip-sync-ish work. |\n\nPass `image` and/or `audio` only when you actually want that conditioning.\nWith no image, it's text-to-video. With one, it's image-to-video. With audio,\nthe model tries to match motion to the audio's tempo / dynamics.\n\nOther knobs:\n\n- `aspect_ratio`: `16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 1:1` (default `16:9`).\n Match the source image when seeding — most video models silently crop\n mismatched aspects (see parent [`vsb-video`](../vsb-video/SKILL.md) skill).\n- `resolution`: `720p | 1080p` (default `720p`).\n- `fps`: `24 | 48` (default `24`). Bump to 48 only for high-motion shots\n that need slow-mo or smooth pans — 24fps is the default cinematic feel.\n- `prompt_upsampling`: bool, default `true`. Let the model rewrite the\n prompt internally for better adherence. Leave on unless you have a very\n specific phrasing you need preserved verbatim.\n- `seed`: optional int, for reproducibility across runs.\n\n## Why pick p-video over seedance / veo / kling\n\n- **Cheapest path to a watchable video** — draft 720p at $0.005/s is ~16×\n cheaper than veo-3.1, ~5× cheaper than seedance-2.\n- **Looser content moderation than ByteDance** — observed in practice:\n prompts / images that trip Seedance's safety filter (anything human-subject\n + selfie-style) often go through on p-video. If a Seedance run returns\n `\"Your input was flagged by the model's safety filter\"`, re-try the same\n inputs on p-video before rewriting the prompt.\n- **Direct draft/standard toggle in one slug** — no need to swap models\n between fast and final passes; same UUID, same schema, just flip the\n bool.\n\nReach for veo-3.1 when you need top-tier motion + lighting realism, kling\nfor brush-style motion control, seedance for ByteDance's particular video\naesthetic.\n\n## Worked examples\n\nAll examples use `--async` + status poll — video runs take 30s–3min. See\n[`vsb-video`](../vsb-video/SKILL.md) for the polling helper.\n\n### Text-to-video, draft (iteration)\n\n```bash\nJOB=$(vsb run video/p-video \\\n --prompt \"A street vendor in Bangkok grilling skewers under a neon sign, smoke curling up, slow camera push-in\" \\\n --aspect_ratio 16:9 \\\n --resolution 720p \\\n --duration 5 \\\n --draft true \\\n --async --json | jq -r '.job_id')\n```\n\n### Same shot, locked in (standard)\n\n```bash\nJOB=$(vsb run video/p-video \\\n --prompt \"A street vendor in Bangkok grilling skewers under a neon sign, smoke curling up, slow camera push-in\" \\\n --aspect_ratio 16:9 \\\n --resolution 720p \\\n --duration 5 \\\n --draft false \\\n --async --json | jq -r '.job_id')\n```\n\nIdentical args, only `--draft` flipped. Use the same `--seed` across both\nruns if you want the standard render to match the draft composition.\n\n### Image-to-video (first-frame seed)\n\n```bash\nURL=$(vsb upload ./still.jpg --json | jq -r '.url')\nJOB=$(vsb run video/p-video \\\n --prompt \"She holds the phone steady, mouths a few words, free hand finishes tucking hair behind ear\" \\\n --image \"$URL\" \\\n --aspect_ratio 9:16 \\\n --resolution 720p \\\n --duration 4 \\\n --draft true \\\n --async --json | jq -r '.job_id')\n```\n\nAlways pass `--aspect_ratio` matching the source image. P-Video defaults\nto `16:9` and will crop a 9:16 selfie if you forget.\n\n### Audio-conditioned (motion to sound)\n\n```bash\nURL=$(vsb upload ./still.jpg --json | jq -r '.url')\nAUDIO=$(vsb upload ./beat.mp3 --json | jq -r '.url')\nJOB=$(vsb run video/p-video \\\n --prompt \"Subject dances in place, gentle body sway, head bobs to the beat\" \\\n --image \"$URL\" \\\n --audio \"$AUDIO\" \\\n --aspect_ratio 9:16 \\\n --duration 6 \\\n --draft true \\\n --async --json | jq -r '.job_id')\n```\n\n## Quirks\n\n- **`default_cost_unit` reports `\"image\"` in the registry** — ignore it.\n P-Video bills per *second*, like every other video model. Trust the\n pricing tiers, not the unit field.\n- **`prompt_upsampling: true` is the default** — if a prompt you wrote is\n being ignored or rewritten, pass `--prompt_upsampling false` to force\n literal interpretation.\n- **`duration` is integer, not float.** Enum is `1..10`.\n- **`fps: 48` is for slow-mo / smooth motion only.** Most UGC and\n cinematic work stays at 24.\n"
}SHA-256 of public snapshot: 63f908e1f2365f277aada1820fe9e709c4b2b2e4b53d5e3cc1a15f0f70488981