yt-dlp Downloads
How RenderIO downloads public platform videos with yt-dlp, maps input URLs to output files, and combines downloads with FFmpeg processing.
yt-dlp Downloads
RenderIO supports two source types:
- Direct file URLs use
input_filesand run through the FFmpeg command endpoints. - Public platform URLs use
input_urlsand run through the yt-dlp endpoints.
Use yt-dlp downloads when the source is a public YouTube, TikTok, Instagram, X/Twitter, Reddit, Vimeo, Twitch, Facebook, or other yt-dlp-supported URL instead of a direct media file you already host.
Only public content is supported. RenderIO does not bypass DRM, paywalls, private accounts, or content that requires a login. You are responsible for making sure your use complies with the source platform's terms and applicable law.
Command type
yt-dlp jobs are stored as YTDLP_COMMAND commands. They use the same async lifecycle as FFmpeg jobs:
- Submit a public video URL and receive a
command_id. - Poll
GET /api/v1/commands/:commandIdor wait for a webhook. - Read the final file URL from
output_files.<key>.storage_url.
Status values are always uppercase: QUEUED, PROCESSING, SUCCESS, or FAILED.
Endpoint choices
| Endpoint | Use it when | Output |
|---|---|---|
POST /api/v1/ytdlp-download | You only need the downloaded source video. | RenderIO creates output keys from your input_urls keys. |
POST /api/v1/run-ytdlp-command | You need to download then transcode, trim, resize, extract audio, or create thumbnails with FFmpeg. | You define output_files and reference them in ffmpeg_command. |
Input URL aliases
Every yt-dlp request uses input_urls instead of input_files:
{
"input_urls": {
"in_video": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
}Alias rules match the rest of RenderIO:
- Input URL keys must start with
in_. - Keys can contain letters, numbers, and underscores.
- For download-only jobs,
in_videobecomesout_videoin the response. - For download-plus-process jobs, your
ffmpeg_commandmust reference every defined input and output alias with{{double_braces}}.
Download-only output mapping
POST /api/v1/ytdlp-download does not accept ffmpeg_command or output_files. RenderIO creates output keys from the input aliases:
| Input key | Output URL path |
|---|---|
in_video | output_files.out_video.storage_url |
in_clip | output_files.out_clip.storage_url |
in_source | output_files.out_source.storage_url |
For predictable tracking, one URL per command is easiest. The API also accepts multiple input_urls entries, with one output key per input key.
Download and process output mapping
POST /api/v1/run-ytdlp-command can download a public platform URL and immediately run FFmpeg on it:
{
"input_urls": {
"in_video": "https://www.tiktok.com/@user/video/7123456789"
},
"ffmpeg_command": "-i {{in_video}} -vn -c:a libmp3lame -q:a 2 {{out_audio}}",
"output_files": {
"out_audio": "audio.mp3"
}
}{
"input_urls": {
"in_video": "https://www.tiktok.com/@user/video/7123456789"
},
"ffmpeg_command": "-i <<in_video>> -vn -c:a libmp3lame -q:a 2 <<out_audio>>",
"output_files": {
"out_audio": "audio.mp3"
}
}When the command reaches SUCCESS, the MP3 URL is available at output_files.out_audio.storage_url.
If you omit ffmpeg_command, /api/v1/run-ytdlp-command behaves like a simple download endpoint.
Platform support
RenderIO runs yt-dlp on managed infrastructure. yt-dlp supports thousands of extractors, and its supported sites list changes as platforms change.
The practical rule: if the content is public and yt-dlp can extract it, RenderIO can queue it. If a platform changes its markup, format selection, or access checks, the command may temporarily fail until extractor support catches up.
Plan access
Video downloads are available during trials and on the Growth plan or higher. Requests from plans without download access return 403.
Related pages
- Download Videos with yt-dlp -- full walkthrough and recipes
- Download Video API reference -- raw download endpoint
- Download + Process API reference -- yt-dlp plus FFmpeg endpoint
- File Aliases -- naming rules for
in_andout_keys