一键导入
workflow-builder
Create or edit Montaj workflows. Reasons about step dependencies to produce a workflow JSON with correct `needs` fields for parallel execution.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Create or edit Montaj workflows. Reasons about step dependencies to produce a workflow JSON with correct `needs` fields for parallel execution.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
You MUST use this whenever the user asks for video editing work. Use it when video-related tasks are brought up. Editing, analyzing video, or transcribing videos
Find and download real images from the web — people, logos, brand/event stills, B-roll — to add as overlay image cards or project assets. Load when the prompt asks to source or insert images (e.g. 'add a photo of X', 'find images of the IPO', 'pull a shot of the factory').
Agent-authored workflow task: analyze transcripts across all clips, pick ONE best take per script section, discard all others. Load this when you hit montaj/select_takes in a workflow.
Write a custom JSX overlay component and add it to the project's overlay track.
Agent-authored workflow task: transcribe-and-sample one long-form horizontal source, pick N self-contained clip windows, and fan each out into its own vertical (9:16) clip project with the chosen framing. Load this when you hit montaj/find_clips in a workflow.
The shared vocabulary that domain skills use to name Montaj operations. Domain skills phrase every Montaj interaction as one of these verbs; an interface skill defines how each verb is actually performed. Load this to learn the canonical verbs before authoring or reading a domain skill.
| name | workflow-builder |
| description | Create or edit Montaj workflows. Reasons about step dependencies to produce a workflow JSON with correct `needs` fields for parallel execution. |
A Montaj workflow is a JSON file in workflows/ that defines which steps to run and their dependencies. Workflows with correct needs fields enable the agent to parallelise independent steps automatically — significantly reducing total execution time.
This skill guides you through creating or editing a workflow that is both correct and maximally parallel.
Before reasoning about dependencies, know what each step reads and produces:
| Step | Reads | Produces |
|---|---|---|
probe | original clip | metadata JSON |
snapshot | original clip | contact sheet image |
transcribe | original clip | transcript JSON + SRT |
rm_fillers | original clip + transcript | cleaned video |
waveform_trim | any video | trimmed video |
rm_nonspeech | any video | trimmed video |
trim | any video | trimmed video |
cut | any video | trimmed video (or trim spec with --spec) — supports --cuts '[[s,e],...]' for multiple sections in one pass |
caption | transcript + cleaned video | caption track data |
normalize | any video | normalized video |
resize | any video | resized video |
extract_audio | any video | audio file |
concat | multiple videos | joined video |
fetch | — | downloaded video file |
pacing | any video | pacing analysis JSON |
jump_cut_detect | any video | issues JSON |
Work through this conversationally. The output is a workflow JSON file saved to workflows/<name>.json.
Ask: "What is this workflow for? Walk me through the kind of edit it should produce."
Listen for:
Based on the goal, propose which steps should be included. Confirm with the user before proceeding.
Example for a standard social reel:
probe, snapshot, transcribe, rm_fillers, waveform_trim, caption, overlays, resize
For each step, ask: "What does this step need as input?"
Apply these rules:
Steps that read the original clip directly (no deps):
probe, snapshot, transcribe, fetchSteps that depend on transcript:
rm_fillers needs transcribe (uses transcript to locate fillers)caption needs transcribe (uses word timings)Steps that depend on a prior cleaned video:
waveform_trim, rm_nonspeech — if the user wants them to run on an already-cleaned clip (e.g. after rm_fillers), add that step as a needcaption — if it should caption the cleaned video (not the original), add the last cleaning step as a neednormalize, resize — chain after whatever the last video-producing step isSteps that depend on both transcript AND a cleaned video:
caption commonly needs both transcribe AND the last cleaning step (e.g. waveform_trim)Steps that have no downstream deps:
probe, snapshot, pacing, jump_cut_detect — analysis-only, no other step needs their outputGroup the steps by execution wave — steps in the same wave have all their needs met at the same time:
Wave 1: [all steps with no needs]
Wave 2: [all steps whose needs are only in wave 1]
Wave 3: [all steps whose needs are in waves 1-2]
...
Show the waves to the user: "Here's how the execution will look:"
Wave 1 (parallel): probe, snapshot, transcribe
Wave 2: rm_fillers (needs transcribe)
Wave 3: waveform_trim (needs rm_fillers)
Wave 4: caption (needs transcribe + waveform_trim)
Wave 5: overlays (needs caption)
Wave 6: resize (needs overlays)
Ask: "Does this look right? Any steps you'd reorder or change?"
{
"name": "<workflow-name>",
"description": "<one-line description>",
"steps": [
{ "id": "probe", "uses": "montaj/probe" },
{ "id": "snapshot", "uses": "montaj/snapshot" },
{ "id": "transcribe", "uses": "montaj/transcribe", "params": { "model": "base.en" } },
{ "id": "fillers", "uses": "montaj/rm_fillers", "needs": ["transcribe"], "params": { "model": "base.en" } },
{ "id": "silence", "uses": "montaj/waveform_trim","needs": ["fillers"], "params": { "threshold": "-30", "min-silence": 0.3 } },
{ "id": "caption", "uses": "montaj/caption", "needs": ["transcribe", "silence"], "params": { "style": "word-by-word" } },
{ "id": "overlays", "uses": "montaj/overlay", "needs": ["caption"], "params": { "style": "auto" } },
{ "id": "resize", "uses": "montaj/resize", "needs": ["overlays"], "params": { "ratio": "9:16" } }
]
}
Rules for the JSON:
needs field entirely (not "needs": [])id must be unique within the workflow — use the step name, or <name>-<n> if the same step appears twiceuses format: montaj/<step-name>Save to workflows/<name>.json.
Read the file back and confirm the wave structure one more time. Then: "Workflow saved to workflows/<name>.json. To use it, set "workflow": "<name>" in your project config or pass --workflow <name> to montaj run."
When the user wants to add a step:
needs based on what it readsneeds should now include the new step (i.e. does any downstream step need the new step's output?)Fastest possible clean + caption (max parallelism):
Wave 1: probe, snapshot, transcribe
Wave 2: rm_fillers (needs transcribe)
Wave 3: waveform_trim (needs rm_fillers)
Wave 4: caption (needs transcribe + waveform_trim), normalize (needs waveform_trim)
Wave 5: resize (needs caption + normalize)
Multi-clip reel (clip-level swarm):
Per-clip steps (fan-out — run as parallel subagents per clip):
probe, transcribe, rm_fillers, waveform_trim, resize
Fan-in step:
concat (needs all per-clip resize outputs)
Post-concat:
caption, overlays, normalize
For multi-clip projects, indicate the fan-in boundary in the workflow description so the agent knows where to swarm.
Analysis-only workflow (no editing):
Wave 1 (all parallel): probe, snapshot, transcribe, pacing, jump_cut_detect
No deps — everything reads the original clip and produces analysis data.