source.ingest
Operation: source.ingest
Category: source
Tags: video, download, yt-dlp
Download a video via yt-dlp or accept a file upload
Runtime
Section titled “Runtime”Type: Native (built-in)
Timeout: 300s
Retries: 3 (ExponentialWithJitter)
Inputs
Section titled “Inputs”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | String | No | — | YouTube/social media URL to download |
file | String | No | — | Local file path or HTTP URL |
Outputs
Section titled “Outputs”| Name | Type | Description |
|---|---|---|
path | String | Local file path of ingested video |
url | Asset | file:// URL |
duration_secs | Number | Video duration in seconds |
format | String | Container format |
Default Configuration
Section titled “Default Configuration”{ "format": "mp4", "max_resolution": "1080p"}import { WorkflowBuilder } from "@fabric-platform/sdk";
const workflow = new WorkflowBuilder("my-workflow") .node("source-ingest", "tool", (n) => n.config({ operation: "source.ingest", // ... node-specific config }) ) .build();from fabric_platform import FabricClient
fabric = FabricClient(api_key="fab_xxx")
wf_id = fabric.upsert_workflow("my-workflow", nodes=[ { "key": "source-ingest", "kind": "tool", },])use fabric_sdk::FabricClient;
let client = FabricClient::new("http://localhost:3001", api_key)?;
let wf_id = client.upsert_workflow("my-workflow", serde_json::json!({ "nodes": [{ "key": "source-ingest", "kind": "tool" }]})).await?;curl -X POST http://localhost:3001/v1/workflow-definitions \ -H "Authorization: Bearer $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "my-workflow", "nodes": [{ "key": "source-ingest", "kind": "tool" }] }'Example
Section titled “Example”{ "key": "ingest-video", "operation": "source.ingest", "inputs": [{ "name": "url", "path": "$context.video_url" }], "outputs": [ { "name": "path", "path": "$context.source_path" }, { "name": "duration_secs", "path": "$context.source_duration" } ]}Common Errors
Section titled “Common Errors”No url or file input provided
Section titled “No url or file input provided”Cause: Neither the url nor file input was bound to a context value
Fix: Bind either url (for YouTube/social URLs) or file (for direct file paths/HTTP URLs) in your node inputs
yt-dlp not found
Section titled “yt-dlp not found”Cause: The source.ingest node needs yt-dlp installed for YouTube/social media URLs
Fix: Install yt-dlp (pip install yt-dlp) or use direct HTTP URLs instead