{ "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": [] } ] }