Input Staging
By default, Xora stages every input: it copies your file from the URL you provide into engine storage, then processes from that copy. This is reliable for any HTTPS origin.
For hosts that support HTTP byte-range requests (most CDNs, S3/R2 presigned URLs, and many file servers), you can set stageInput: false to skip staging. ffmpeg reads your original URL directly, which is often much faster for lightweight jobs like extract audio or thumbnails.
When to use stageInput: false
Section titled “When to use stageInput: false”| Good candidates | Keep default (true or omit) |
|---|---|
| extractAudio, thumbnail, webReady, proxy | Unknown or flaky origins |
| Long transcodes from range-capable CDNs | Origins without Accept-Ranges: bytes |
| Large files you already host on S3/R2 | When you need a durable copy in engine storage |
API usage
Section titled “API usage”Add stageInput: false to any job body (recipe or ffmpeg):
curl -X POST https://api.xora.sh/v1/jobs \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "mode": "recipe", "input": { "url": "https://cdn.example.com/interview.mp4" }, "output": { "format": "mp3" }, "recipe": { "name": "extractAudio" }, "stageInput": false }'await fetch('https://api.xora.sh/v1/jobs', { method: 'POST', headers: { Authorization: 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({ mode: 'recipe', input: { url: 'https://cdn.example.com/interview.mp4' }, output: { format: 'mp3' }, recipe: { name: 'extractAudio' }, stageInput: false, }),});requests.post( "https://api.xora.sh/v1/jobs", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "mode": "recipe", "input": {"url": "https://cdn.example.com/interview.mp4"}, "output": {"format": "mp3"}, "recipe": {"name": "extractAudio"}, "stageInput": False, },)With presets
Section titled “With presets”Store stageInput in the preset body, or override it when running the preset:
{ "presetId": "preset_abc123", "input": { "url": "https://cdn.example.com/video.mp4" }, "stageInput": false}Job pipeline effect
Section titled “Job pipeline effect”stageInput | Origin supports ranges | Steps |
|---|---|---|
true (default) | any | probe → stage_input → transcode |
false | yes | probe → transcode (direct URL) |
false | no | probe → stage_input → transcode (fallback) |
Parallel chunk jobs (long transcodes) also benefit: chunk workers range-read your URL instead of a staged copy when staging is skipped.
Related
Section titled “Related”- Extract Audio — common use case for
stageInput: false - Job Lifecycle — states and progress
- Presets — save
stageInputin preset definitions