xusijie
Clean branch for HF push
06ba7ea
{
"workflow_meta": {
"id": "video_editing_pipeline",
"name": "Video Editing Workflow",
"description": "Automated video editing pipeline node map, including pro/normal nodes"
},
"nodes": [
{
"id": "load_media",
"name": "Load Media",
"kind": "load_media",
"pro": false,
"description": "Loads and indexes input media. Entry point with no dependencies; required by all downstream operations.",
"dependencies": [],
"next_nodes": [
"split_shots"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Automatic mode; skip: Skip mode; default: Default mode",
"default": "auto"
}
],
"output_schema": [
{
"name": "media",
"type": "List[Media]",
"description": "List of media objects with metadata"
}
]
},
{
"id": "search_media",
"name": "Search Media",
"kind": "search_media",
"pro": false,
"description": "Search media from external sources (e.g., Pexels).",
"dependencies": [],
"next_nodes": [
"load_media"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Automatically search media from pexels; skip: skip search; default: skip search",
"default": "auto"
},
{
"name": "search_keyword",
"type": "String",
"description": "Keywords of the media the user wants to obtain",
"default": "scenery"
},
{
"name": "video_number",
"type": "Integer",
"description": "The number of videos the user wants to obtain",
"default": 5
},
{
"name": "photo_number",
"type": "Integer",
"description": "The number of images the user wants to obtain",
"default": 0
},
{
"name": "orientation",
"type": "Enum",
"options": [
"landscape",
"portrait"
],
"description": "landscape: wider horizontally; portrait: higher vertically",
"default": "landscape"
},
{
"name": "min_video_duration",
"type": "Integer",
"description": "The shortest duration of footage requested by the user (seconds)",
"default": 1
},
{
"name": "max_video_duration",
"type": "Integer",
"description": "The longest duration of footage requested by the user (seconds)",
"default": 30
}
],
"output_schema": [
{
"name": "media",
"type": "List[Media]",
"description": "Retrieved media objects"
}
]
},
{
"id": "split_shots",
"name": "Split Shots",
"kind": "split_shots",
"pro": false,
"description": "Automatically segment videos into shots based on scene changes; treat images as single shots.",
"dependencies": [
"load_media"
],
"next_nodes": [
"understand_clips"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Automatically segment shots based on scene changes, treat images as single shots; skip: Do not segment shots; default: Use default segmentation method",
"default": "auto"
},
{
"name": "min_shot_duration",
"type": "Integer",
"description": "Segmented shots must not be shorter than this duration (milliseconds)",
"default": 1000
},
{
"name": "max_shot_duration",
"type": "Integer",
"description": "If a single shot exceeds this duration, force segmentation (milliseconds)",
"default": 10000
}
],
"output_schema": [
{
"name": "clip_captions",
"type": "List[Clip]",
"description": "List of clips after splitting shots"
},
{
"name": "overall",
"type": "Dict[String,String]",
"description": "Overall summary/metadata (key-value)"
}
]
},
{
"id": "understand_clips",
"name": "Understand Clips",
"kind": "understand_clips",
"pro": false,
"description": "Generate descriptions/captions for each clip based on media content.",
"dependencies": [
"split_shots"
],
"next_nodes": [
"filter_clips",
"recommend_script_template"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Generate descriptions based on media content; skip: Do not generate descriptions; default: Use default description generation method",
"default": "auto"
}
],
"output_schema": [
{
"name": "clip_captions",
"type": "List[Clip]",
"description": "List of clips after understanding clips"
},
{
"name": "overall",
"type": "Dict[String,String]",
"description": "Overall summary/metadata (key-value)"
}
]
},
{
"id": "filter_clips",
"name": "Filter Clips",
"kind": "filter_clips",
"pro": false,
"description": "Filter clips based on user requirements.",
"dependencies": [
"understand_clips"
],
"next_nodes": [
"group_clips"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Filter clips based on user requirements; skip: Skip filtering; default: Use default filtering method",
"default": "auto"
},
{
"name": "user_request",
"type": "String",
"description": "User's requirements for clip filtering; if none provided, formulate one based on materials and other editing requirements.",
"default": ""
}
],
"output_schema": [
{
"name": "clip_captions",
"type": "List[Clip]",
"description": "List of clips"
},
{
"name": "overall",
"type": "Dict[String,String]",
"description": "Overall summary/metadata (key-value)"
}
]
},
{
"id": "group_clips",
"name": "Group Clips",
"kind": "group_clips",
"pro": false,
"description": "Organize clips into narrative groups and arrange playback order.",
"dependencies": [
"filter_clips"
],
"next_nodes": [
"generate_script"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Organize clips in a logical order based on narrative flow and user's sequencing requirements; skip: Skip sorting; default: Use default ordering method",
"default": "auto"
},
{
"name": "user_request",
"type": "String",
"description": "User's requirements for media organization order; if none provided, arrange in a logical narrative sequence following standard conventions.",
"default": ""
}
],
"output_schema": [
{
"name": "groups",
"type": "List[GroupClips]",
"description": "List of clip groups with ordering and summaries"
}
]
},
{
"id": "generate_script",
"name": "Generate Script",
"kind": "generate_script",
"pro": false,
"description": "Generate script/subtitles for each group; supports passing a custom_script override (subtitle_units removed).",
"dependencies": [
"group_clips"
],
"next_nodes": [
"generate_voiceover",
"recommend_text"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Generate appropriate script based on media content and user's script requirements; skip: Skip, do not add subtitles; default: Use default script",
"default": "auto"
},
{
"name": "user_request",
"type": "String",
"description": "User's requirements for the script.",
"default": ""
},
{
"name": "custom_script",
"type": "Dict[String,Any]",
"description": "If user has specific character-level editing requirements for script/title, pass the edited custom script and title through this parameter. Format should be based on the original script generation output format but with the subtitle_units field removed. In this case, mode must use `auto`, other modes are prohibited.",
"default": {}
}
],
"output_schema": [
{
"name": "group_scripts",
"type": "List[GroupScript]",
"description": "Group-level script content including subtitle units"
},
{
"name": "title",
"type": "Optional[String]",
"description": "Optional generated title"
}
]
},
{
"id": "recommend_script_template",
"name": "Recommend Script Template",
"kind": "recommend_script_template",
"pro": false,
"description": "Recommend/select a copywriting template based on material content and user's requirements. (Output schema not defined in the provided schema file.)",
"dependencies": [
"understand_clips"
],
"next_nodes": [],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Select an appropriate copywriting template based on the material content and user's requirements for voiceover style; skip: Skip;",
"default": "auto"
},
{
"name": "user_request",
"type": "String",
"description": "User's specific requirements for the script style.",
"default": ""
},
{
"name": "filter_include",
"type": "Dict[String,List[String]]",
"description": "Positive filter conditions. Multiple dimensions are combined with AND, multiple values within the same dimension are combined with OR. Supported dimensions: tags (one or more of [Life, Food, Beauty, Entertainment, Travel, Tech, Business, Vehicle, Health, Family, Pets, Knowledge]).",
"default": {}
},
{
"name": "filter_exclude",
"type": "Dict[String,List[String]]",
"description": "Negative filter conditions. Items matching these conditions will be excluded. Supported dimensions: tags, id.",
"default": {}
}
],
"output_schema": []
},
{
"id": "generate_voiceover",
"name": "Generate Voiceover",
"kind": "generate_voiceover",
"pro": false,
"description": "Generate voiceover/narration items (e.g., TTS) for each group.",
"dependencies": [
"generate_script"
],
"next_nodes": [
"select_bgm",
"plan_timeline"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Generate appropriate voiceover based on media content and user's voice requirements; skip: Skip voiceover; default: Use default voiceover",
"default": "auto"
},
{
"name": "user_request",
"type": "String",
"description": "User's requirements for voiceover.",
"default": ""
}
],
"output_schema": [
{
"name": "voiceover",
"type": "List[Voiceover]",
"description": "Voiceover list"
}
]
},
{
"id": "select_bgm",
"name": "Select BGM",
"kind": "select_bgm",
"pro": false,
"description": "Select appropriate background music (BGM) based on material content and user requirements; supports include/exclude filters.",
"dependencies": [
"generate_script"
],
"next_nodes": [
"recommend_transition",
"plan_timeline"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Select appropriate music based on media content and user's music requirements; skip: Do not use music; default: Use default music",
"default": "auto"
},
{
"name": "user_request",
"type": "String",
"description": "User's requirements for background music.",
"default": ""
},
{
"name": "filter_include",
"type": "Dict[String,List[Union[String,Integer]]]",
"description": "Positive filter conditions. Supported dimensions: mood [Dynamic, Chill, Happy, Sorrow, Romantic, Calm, Excited, Healing, Inspirational]; scene [Vlog, Travel, Relaxing, Emotion, Transition, Outdoor, Cafe, Evening, Scenery, Food, Date, Club]; genre [Pop, BGM, Electronic, R&B/Soul, Hip Hop/Rap, Rock, Jazz, Folk, Classical, Chinese Style]; lang [bgm, en, zh, ko, ja]; id (int).",
"default": {}
},
{
"name": "filter_exclude",
"type": "Dict[String,List[Union[String,Integer]]]",
"description": "Negative filter conditions. Items matching these conditions will be excluded. Supported dimensions: mood, scene, genre, lang, id.",
"default": {}
}
],
"output_schema": [
{
"name": "bgm",
"type": "List[BGM]",
"description": "BGM list"
}
]
},
{
"id": "recommend_transition",
"name": "Recommend Transition",
"kind": "recommend_transition",
"pro": false,
"description": "Recommend transitions (e.g., fade in/out) at beginning and end.",
"dependencies": [
"select_bgm"
],
"next_nodes": [
"render_video"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: add fade in and fade out transitions at beginning and end; skip: Do not use transitions; default: Use default transitions",
"default": "auto"
},
{
"name": "duration",
"type": "Integer",
"description": "Duration of the transition in milliseconds",
"default": 1000
}
],
"output_schema": [
{
"name": "mode",
"type": "Enum",
"description": "auto / skip / default mode (output model is BaseInput)"
}
]
},
{
"id": "recommend_text",
"name": "Recommend Text",
"kind": "recommend_text",
"pro": false,
"description": "Recommend subtitle font style/color based on user's requirements; supports include filters.",
"dependencies": [
"generate_script"
],
"next_nodes": [
"render_video"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Select appropriate font style and color based on user's subtitle font style requirements; default: Use default font",
"default": "auto"
},
{
"name": "user_request",
"type": "String",
"description": "User's requirements for font style",
"default": ""
},
{
"name": "filter_include",
"type": "Dict[String,List[Union[String,Integer]]]",
"description": "Positive filter conditions. Supported dimensions: class [Creative, Handwriting, Calligraphy, Basic].",
"default": {}
}
],
"output_schema": [
{
"name": "mode",
"type": "Enum",
"description": "auto / skip / default mode (output model is BaseInput)"
}
]
},
{
"id": "plan_timeline",
"name": "Plan Timeline",
"kind": "plan_timeline",
"pro": false,
"description": "Plan timeline tracks for video, subtitles, voiceover, and BGM; optionally sync transitions with BGM beats.",
"dependencies": [
"group_clips",
"generate_script",
"generate_voiceover",
"select_bgm"
],
"next_nodes": [
"render_video"
],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Automatic mode; skip: Skip mode; default: Default mode",
"default": "auto"
},
{
"name": "use_beats",
"type": "Boolean",
"description": "Whether clip transitions should sync with BGM beats",
"default": true
}
],
"output_schema": [
{
"name": "tracks",
"type": "List[TimelineTracks]",
"description": "Timeline track collection"
}
]
},
{
"id": "render_video",
"name": "Render Video",
"kind": "render_video",
"pro": false,
"description": "Render/export the final video with canvas, subtitle, audio, and encoding parameters. (Output schema not defined in the provided schema file.)",
"dependencies": [
"plan_timeline"
],
"next_nodes": [],
"input_schema": [
{
"name": "mode",
"type": "Enum",
"options": [
"auto",
"skip",
"default"
],
"description": "auto: Automatic mode; skip: Skip mode; default: Default mode",
"default": "auto"
},
{
"name": "aspect_ratio",
"type": "Optional[String]",
"description": "Canvas aspect ratio override: one of 16:9, 4:3, 1:1, 3:4, 9:16; auto if unset.",
"default": null
},
{
"name": "output_max_dimension_px",
"type": "Optional[Integer]",
"description": "Maximum output size in pixels (longest side); defaults to 1080 and works with the aspect ratio.",
"default": null
},
{
"name": "clip_compose_mode",
"type": "String",
"description": "How to fit media into the canvas: 'padding' keeps aspect ratio and fills empty areas; 'crop' center-crops media to match the canvas aspect ratio.",
"default": "crop"
},
{
"name": "bg_color",
"type": "Tuple[Integer,Integer,Integer] | List[Integer] | Null",
"description": "Background color for canvas padding, specified as an (R, G, B) tuple (no alpha channel).",
"default": [
0,
0,
0
]
},
{
"name": "crf",
"type": "Integer",
"description": "CRF value (10–30), lower = better quality, larger file",
"default": 23
},
{
"name": "font_color",
"type": "Tuple[Integer,Integer,Integer,Integer]",
"description": "Font color, RGBA format (R, G, B, A), values range 0-255",
"default": [
255,
255,
255,
255
]
},
{
"name": "font_size",
"type": "Integer",
"description": "Font size in pixels. Recommended range: 28–120.",
"default": 40
},
{
"name": "margin_bottom",
"type": "Integer",
"description": "Bottom margin for subtitles in pixels. Defaults to 80; valid range: 40–600.",
"default": 80
},
{
"name": "stroke_width",
"type": "Integer",
"description": "Text stroke width (px), typically 0–8",
"default": 2
},
{
"name": "stroke_color",
"type": "Tuple[Integer,Integer,Integer,Integer]",
"description": "Text stroke color in RGBA format",
"default": [
0,
0,
0,
255
]
},
{
"name": "bgm_volume_scale",
"type": "Float",
"description": "Background music volume multiplier, range 0.0–3.0 (1.0 = default volume)",
"default": 1.0
},
{
"name": "tts_volume_scale",
"type": "Float",
"description": "TTS volume multiplier, range 0.0–3.0 (1.0 = default volume)",
"default": 1.0
},
{
"name": "include_video_audio",
"type": "Boolean",
"description": "Whether to include the original video audio track",
"default": false
}
],
"output_schema": []
}
]
}