video.effects
Operation: video.effects
Category: video
Tags: ffmpeg, video, effects, filters
Apply FFmpeg filter effects to clips (zoompan, color, sharpen)
Runtime
Section titled “Runtime”Type: Native (built-in)
Timeout: 300s
Retries: 3 (ExponentialWithJitter)
Inputs
Section titled “Inputs”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
clips | JSON | Yes | — | Array of clip objects with ‘path’ and optional ‘effects’ |
Outputs
Section titled “Outputs”| Name | Type | Description |
|---|---|---|
clips | JSON | Clip objects with updated paths after effects applied |
clip_count | Number | Number of clips processed |
Default Configuration
Section titled “Default Configuration”{ "default_effects": "eq=contrast=1.1:brightness=0.02:saturation=1.2,unsharp=5:5:0.5"}Individual Effect Parameters
Section titled “Individual Effect Parameters”When used in declarative workflow YAMLs, you can pass individual parameters instead of a raw FFmpeg filter string:
| Parameter | Type | Default | Description |
|---|---|---|---|
brightness | Number | 1.0 | Brightness multiplier (1.0 = unchanged, >1.0 = brighter) |
contrast | Number | 1.05 | Contrast multiplier (1.0 = unchanged, >1.0 = more contrast) |
saturation | Number | 1.1 | Saturation multiplier (1.0 = unchanged, >1.0 = more vivid) |
effects: op: video.effects params: brightness: "{{brightness}}" contrast: "{{contrast}}" saturation: "{{saturation}}" inputs: video_url: composite.urlThis is used in the ai-shorts, text-to-video, and video/research-to-shorts workflows as a color grading pass between ffmpeg.composite and ffmpeg.caption_overlay.
import { WorkflowBuilder } from "@fabric-platform/sdk";
const workflow = new WorkflowBuilder("my-workflow") .node("video-effects", "tool", (n) => n.config({ operation: "video.effects", // ... node-specific config }) ) .build();from fabric_platform import FabricClient
fabric = FabricClient(api_key="fab_xxx")
wf_id = fabric.upsert_workflow("my-workflow", nodes=[ { "key": "video-effects", "kind": "tool", },])use fabric_sdk::FabricClient;
let client = FabricClient::new("https://gofabric.dev", api_key)?;
let wf_id = client.upsert_workflow("my-workflow", serde_json::json!({ "nodes": [{ "key": "video-effects", "kind": "tool" }]})).await?;curl -X POST https://gofabric.dev/v1/workflow-definitions \ -H "Authorization: Bearer $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "my-workflow", "nodes": [{ "key": "video-effects", "kind": "tool" }] }'