cawcut-vn

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

CawCut VN

CawCut VN

The single entry point for every local VN action. The skill owns the VN conversation and sequencing — whether to open a lightweight preview or build a rough cut — and the
cawcut vn
CLI owns draft file generation and app launching.
Skill files are English-only. Match the user's language in live replies via
reply_language
, but keep this file and its references in English.
所有本地 VN 操作的唯一入口。该 skill 负责 VN 对话与流程编排——无论是打开轻量级预览,还是构建粗剪——而
cawcut vn
CLI 负责生成草稿文件和启动应用。
Skill 文件仅限英文。 在实时回复中通过
reply_language
匹配用户的语言,但此文件及其参考资料必须保持英文。

References

参考资料

  • Read references/capabilities.md before proposing an edit. It is the authority for supported
    cawcut vn
    operations, flags, and editing limits. Never promise an effect that is absent there.
  • Read references/install.md only when packaging, opening, installing, or troubleshooting delivery to the VN app.
Never edit VN JSON by hand. Use only documented
cawcut vn
commands.
  • 在提出编辑方案前,读取 references/capabilities.md。该文件是受支持的
    cawcut vn
    操作、参数和编辑限制的权威依据。绝不能承诺其中不存在的能力。
  • 仅在打包、打开、安装或排查向 VN 应用交付问题时,才读取 references/install.md。
绝不要手工编辑 VN JSON。仅使用有文档说明的
cawcut vn
命令。

Refusing what VN cannot do

拒绝 VN 无法完成的内容

references/capabilities.md
— its Not supported list and Common refusals table — is the boundary. Check the user's request against it before proposing a style or plan, say the refusal out loud in the user's language then, and never absorb it silently into a finished draft.
  • Name the missing capability plainly ("
    cawcut vn
    cannot remove or mute the audio a source video already carries — no flag does that"), never with a hedge.
  • Never let a refusal read as done: no success report for an effect the CLI never applied, no describing the source media as if it had been altered, no hand-edited JSON to fake it.
  • Offer the closest supported behaviour, or say the media must be prepared outside this skill and re-supplied as a local file. If nothing close exists, refuse outright instead of substituting another effect, and list whatever is left unimplemented in the edit plan (phase 7).
references/capabilities.md
中的 Not supported 列表和 Common refusals 表格划定了能力边界。在提出风格或方案之前,先对照用户请求进行检查,并立即用用户的语言明确说明拒绝原因。绝不能将未实现的内容悄悄吸收到已完成的草稿中。
  • 明确说出缺少的能力(例如:“
    cawcut vn
    无法移除或静音源视频自带的声音——没有任何参数支持此操作”),绝不能含糊其辞。
  • 绝不能让拒绝看起来像已经完成:不能为 CLI 从未应用的效果报告成功,不能将源媒体描述成已被修改,也不能通过手工编辑 JSON 来伪造效果。
  • 提供最接近的受支持行为;或者说明媒体必须在此 skill 之外准备完成,并重新作为本地文件提供。如果没有任何接近的受支持方案,就直接拒绝,不要擅自替换为其他效果;并在编辑方案(阶段 7)中列出所有未实现的内容。

Asking the user

询问用户

AskUserQuestion
is for choices, so every call needs at least two viable options. One option is not a question — state it in prose and carry on, never padding it with a placeholder. Skip the call when the user or an upstream skill already settled the answer, and use a numbered text menu only when the tool is unavailable or the choice exceeds its cap.
AskUserQuestion
用于提供选项,因此每次调用都必须包含至少两个可行选项。只有一个选项不算问题——应直接用文字说明并继续执行,绝不能用一个占位选项来凑数。如果用户或上游 skill 已经确定了答案,则跳过调用;仅当工具不可用或选项数量超过其上限时,才使用编号文本菜单。

Bootstrap

初始化

Run this silently before the first
cawcut
operation in an AI session:
  1. If a
    cawcut
    command already succeeded in this session, skip bootstrap.
  2. Otherwise run only
    cawcut upgrade check --json
    . If an update is available, run
    cawcut upgrade
    . If the command is missing, ask the user to install it with
    npm install -g @ubnt/cawcut
    .
  3. Never run
    cawcut auth login
    ; VN operations are local.
在一个 AI session 中首次执行
cawcut
操作前,静默完成以下步骤:
  1. 如果本 session 中已经成功执行过
    cawcut
    命令,则跳过初始化。
  2. 否则,仅运行
    cawcut upgrade check --json
    。如果有可用更新,则运行
    cawcut upgrade
    。如果找不到命令,则请用户通过
    npm install -g @ubnt/cawcut
    安装。
  3. 绝不运行
    cawcut auth login
    ;VN 操作完全在本地执行。

Workflow

工作流

Follow the phases in order. Reuse facts already established by the user or an upstream skill; do not ask the same question twice.
严格按顺序执行各个阶段。复用用户或上游 skill 已经提供的事实;不要重复询问同一个问题。

0. Choose the VN action

0. 选择 VN 操作

This skill is the only place that decides what to do with VN, regardless of where the media came from:
  • The user invokes it directly (
    /cawcut-vn
    or an equivalent request) and supplies their own local image/video/audio files to edit. This is a first-class path, not a fallback — do not wait for or require an upstream skill's output.
  • An upstream skill (
    cawcut-generate
    ,
    cawcut-app-run
    ,
    cawcut-avatar-video
    ,
    cawcut-ad-video
    ) hands off unconditionally after delivering generated media — it does not pre-filter or ask its own VN menu.
  1. Run
    cawcut vn status
    — see
    references/capabilities.md
    for exactly what counts as "usable".
  2. If an upstream skill or the user already stated the action (preview-only, or editing), skip the question below and jump straight to the matching branch — this is the same decide-once guard used for every other handoff.
  3. Otherwise ask with
    AskUserQuestion
    , localized to
    reply_language
    :
    • When VN is usable, offer three choices: open a VN preview and import now (recommended for a quick look), enter the editing flow (build a rough cut), not needed.
    • When VN is not usable (not installed, or below
      VN_MIN_VERSION
      ), omit the preview choice — offer only enter the editing flow and not needed. Do not offer a choice that cannot succeed.
Branches:
  • Preview and import (only reachable when VN is usable): run
    cawcut vn import <path_1> <path_2> ... --title "<name>" --open
    with every supplied local path. Reuse a name the conversation already established (the user named the project, or an upstream skill delivered a titled result); otherwise name it yourself from what the files are. Keep it to a few words — this is the label VN shows in its project list, not a description. Report the project URL and asset count. Stop — do not continue into the editing phases below.
  • Not needed: end without running any
    cawcut vn
    command.
  • Enter the editing flow: continue to phase 1. This branch never depends on VN being installed — drafting and validating a rough cut is fully local and does not launch the app.
无论媒体来自哪里,该 skill 都是唯一决定如何处理 VN 的地方:
  • 用户直接调用它(
    /cawcut-vn
    或等效请求),并提供要编辑的本地图片、视频或音频文件。这是一条一等路径,而不是降级方案——不要等待或要求上游 skill 的输出。
  • 上游 skill(
    cawcut-generate
    、
    cawcut-app-run
    、
    cawcut-avatar-video
    或
    cawcut-ad-video
    )在交付生成的媒体后,无条件将任务移交给本 skill;它不会预先筛选媒体,也不会询问自己的 VN 菜单。
  1. 运行
    cawcut vn status
    ——关于什么才算“可用”,请严格按照
    references/capabilities.md
    判断。
  2. 如果上游 skill 或用户已经说明操作类型(仅预览或编辑),则跳过下面的问题,直接进入对应分支——这与其他所有移交流程使用同一套“只决定一次”保护机制。
  3. 否则,使用
    AskUserQuestion
    并按照
    reply_language
    本地化提问:
    • VN 可用时,提供三个选项:打开 VN 预览并立即导入(推荐,适合快速查看)、进入编辑流程(构建粗剪)、不需要。
    • VN 不可用时(未安装,或版本低于
      VN_MIN_VERSION
      ),不要提供预览选项——仅提供进入编辑流程和不需要。不要提供无法成功的选项。
分支:
  • 预览并导入(仅在 VN 可用时进入):运行
    cawcut vn import <path_1> <path_2> ... --title "<name>" --open
    ,并传入每个已提供的本地路径。复用对话中已经确定的名称(用户已命名项目,或上游 skill 交付了带标题的结果);否则,根据文件内容自行命名。名称应保持简短——它是 VN 在项目列表中显示的标签,而不是描述。报告项目 URL 和素材数量。然后停止,不要继续进入下面的编辑阶段。
  • 不需要:结束操作,不运行任何
    cawcut vn
    命令。
  • 进入编辑流程:继续执行阶段 1。此分支不依赖 VN 是否安装——草稿的创建和验证完全在本地进行,不会启动应用。

1. Inventory the supplied media

1. 清点所提供的媒体

Before creating or changing a project:
  • Resolve every supplied path and classify it as image, video, music, or sound effect. Record known video and audio durations and meaningful content/order cues from the conversation, an upstream generation result when present, filenames, or available local inspection tools. Never invent unseen content.
  • Identify missing, unreadable, duplicate, or unsupported files immediately. Note here which videos carry their own soundtrack, and check the user's request against the refusal list while the inventory is fresh — an unsupported ask must be turned down now, not discovered at build time.
  • Summarize the usable inventory to the user when it affects the edit.
  • Do not generate replacement media. If generation is required, hand off to
    cawcut-generate
    or
    cawcut-app-run
    , then resume with their output paths.
在创建或修改项目之前:
  • 解析每个已提供的路径,并将其分类为图片、视频、音乐或音效。记录对话、上游生成结果(如有)、文件名或可用的本地检查工具所提供的已知视频和音频时长,以及有意义的内容和顺序线索。绝不能虚构未见过的内容。
  • 立即识别缺失、无法读取、重复或不受支持的文件。在此记录哪些视频自带音轨,并在清单仍清晰时对照拒绝列表检查用户请求——不受支持的请求必须立即拒绝,不能等到构建时才发现。
  • 当媒体清单会影响编辑方式时,向用户总结可用素材。
  • 不要生成替代媒体。如果需要生成内容,则移交给
    cawcut-generate
    或
    cawcut-app-run
    ,然后使用其输出路径继续。

2. Confirm the project shape

2. 确认项目形态

For a new project, explicitly ask the user to choose
9:16
,
16:9
, or
1:1
. Recommend one from the stated destination, but do not create the project until the user chooses. Also establish the title, intended platform/use, and target duration when they are not already known.
For a copy of an existing draft, preserve its aspect ratio unless the user asks for a new project; the CLI cannot change an existing draft's ratio in place.
对于新项目,明确要求用户选择
9:16
、
16:9
或
1:1
。可以根据既定目标推荐一个比例,但在用户选择之前不要创建项目。如果标题、目标平台/用途和目标时长尚不明确,也应一并确认。
对于现有草稿的副本,除非用户要求创建新项目,否则保留其宽高比;CLI 无法原地更改现有草稿的宽高比。

3. Recommend feasible editing styles

3. 推荐可行的剪辑风格

Style

风格

Use the inventory and intended use to recommend a style. Offer the recommended option first and at most two meaningful alternatives:
  • Clean narrative — chronological or semantic order, longer readable shots, restrained
    dissolve
    transitions. Use
    fade-black
    or
    fade-white
    only when a transition through color is intended. Fits explanatory or product footage.
  • Rhythm montage — shorter usable video ranges, stronger supported transitions, and planned music/SFX cues. Offer only when enough varied footage exists; beat detection and automatic beat sync are not supported.
  • Photo story — paced still images and
    dissolve
    transitions. Fits image-heavy sets.
Adapt these rather than forcing a label. Keep every proposal within the capability reference: no manual crop/reframe, overlays, speed ramps, styled typography, audio fades, or other unsupported operations.
Before continuing, use
AskUserQuestion
to let the user select the editing style, unless they already named or clearly described one. Put the recommended style first and label it recommended. Do not silently choose a style from the inventory or defer this choice to the final plan approval — but offer only styles this inventory can actually support, and when just one fits, say so in prose instead of firing a one-option question (see Asking the user).
根据媒体清单和预期用途推荐风格。先提供推荐选项,最多再提供两个有意义的替代方案:
  • 清晰叙事——按时间顺序或语义顺序排列,使用持续时间较长且易于理解的镜头,以及克制的
    dissolve
    转场。只有在需要通过颜色过渡时才使用
    fade-black
    或
    fade-white
    。适合讲解类或产品类素材。
  • 节奏蒙太奇——使用较短的视频片段范围、更强的受支持转场,并规划音乐和音效提示。仅在有足够且差异丰富的素材时提供;不支持节拍检测和自动节拍同步。
  • 照片故事——按节奏排列静态图片并使用
    dissolve
    转场。适合图片较多的素材集。
应根据实际情况调整上述风格,不要强行套用标签。每个方案都必须符合能力参考文档的限制:不得包含手动裁剪/重构画幅、叠加层、速度渐变、样式化排版、音频淡入淡出或其他不受支持的操作。
继续之前,使用
AskUserQuestion
让用户选择剪辑风格,除非用户已经指定或清楚描述了某种风格。将推荐风格放在首位,并标记为推荐。绝不能根据媒体清单擅自选择风格,也不能将这一决定推迟到最终方案审批时;但只能提供当前素材实际支持的风格。如果只有一种风格适用,应直接用文字说明,而不是发起只有一个选项的问题(参见询问用户)。

Canvas fill mode and transitions

画布填充模式和转场

Follow
references/capabilities.md
for
--scale-mode
and transition naming — apply it, do not restate its reasoning here: default to
fill
, and only switch to
fit
when the user explicitly wants the complete source frame kept visible (call out the resulting letterbox/pillarbox space in the edit plan). Do not infer
fit
merely because the source and project ratios look similar — inspect their actual pixel ratios. Always name the exact canonical transition type; never write or invoke the deprecated
fade
alias.
A transition belongs to a boundary, not a clip (see capabilities.md → Transition model). Resolve "a transition on clip X" to X → X+1 and always write it that way. Never use
add-clip --transition
; append every clip first, then set each boundary with
set-transition --index N
.
关于
--scale-mode
和转场命名,请遵循
references/capabilities.md
——直接执行即可,无需在此重复说明理由:默认使用
fill
;仅当用户明确希望完整显示源画面时才切换为
fit
,并在编辑方案中指出由此产生的黑边或pillarbox留白。不要仅因源素材和项目的比例看起来相近就推断应使用
fit
——应检查它们的实际像素比例。始终使用准确的规范转场类型;绝不能使用或调用已弃用的
fade
别名。
转场属于边界,而不是单个片段(参见 capabilities.md → Transition model)。将“在片段 X 上添加转场”解析为 X → X+1,并始终按此方式书写。绝不能使用
add-clip --transition
;先添加所有片段,再通过
set-transition --index N
设置每个边界。

4. Resolve music and sound effects

4. 处理音乐和音效

Treat background music and sound effects as separate decisions.
  • If neither is supplied and the user has not requested silence, ask whether they want to provide local BGM, local sound effects, both, or neither.
  • If one category is supplied, ask only about the missing category when it would materially improve the chosen style.
  • If the user wants audio, wait for exact local paths. This skill does not find, download, or generate audio by itself.
  • Plan audio timing only after the visual sequence and approximate duration are known. Do not claim automatic beat alignment.
  • When an audio source is longer than the intended placement, select and show a source range using
    --trim-start
    /
    --trim-end
    (see
    references/capabilities.md
    for exact trim /
    --duration
    semantics).
  • Added audio never replaces audio the source clips already carry. When any supplied video has its own soundtrack and the user expects their BGM to replace it, refuse that part here (see Refusing what VN cannot do) and state in the plan that both tracks will play together.
将背景音乐和音效视为两个独立决策。
  • 如果两者都未提供,而且用户没有要求静音,询问用户希望提供本地 BGM、本地音效、两者都提供,还是都不提供。
  • 如果已经提供其中一类,仅在缺失的那一类能够实质性提升所选风格时进行询问。
  • 如果用户需要音频,等待其提供准确的本地路径。此 skill 不会自行查找、下载或生成音频。
  • 仅在明确视觉序列和大致时长后再规划音频时序。不得声称能够自动对齐节拍。
  • 当音频源比预期放置位置更长时,使用
    --trim-start
    /
    --trim-end
    选择并展示源范围(准确的裁剪和
    --duration
    语义参见
    references/capabilities.md
    )。
  • 添加的音频绝不能替换源片段自带的声音。如果任何已提供的视频自带音轨,而用户期望用 BGM 替换它,则在此拒绝该部分(参见拒绝 VN 无法完成的内容),并在方案中说明两条音轨会同时播放。

5. Resolve text

5. 处理文字

A supplied
.srt
is a separate path.
When the user hands over one or more
.srt
files, do not ask the questions below — those cues already carry their own wording and timings. Confirm only the placement (whether to shift the whole block with
--at
), show the cue count and the resulting time span in the edit plan, and import with
add-srt
. Never retype, re-time, or re-word the cues, and never split a file into individual
add-text
calls.
Ask whether the user wants text on this edit — this is a plain opt-in question and belongs in the flow the same way phase 4 asked about music and sound effects. Use
AskUserQuestion
once the visual sequence and style are settled: Add text / No text. Skip the question only when the user already requested text or supplied text content earlier in the conversation.
If they decline, do not ask again — move on to phase 6 with no text.
If they opt in (or already requested text), gather only what implementing it needs: content, timing, and type (title/subtitle/caption). Do not invent wording, timing, or type the user has not given or approved — asking whether they want text at all is not the same as proposing what it should say.
Text is an overlay and never extends the main-track or project duration. Infer the intended placement from the user's wording; do not append an end-card clip by default:
  • "during the final N seconds", "in the video's last N seconds", or equivalent means overlay the text on the existing final visual clip;
  • "for N seconds after all shots", "append a standalone end card", or equivalent explicitly sequential wording means append a separate N-second visual clip, then place the text over that clip;
  • when the wording could mean either, ask one focused timing question before presenting the edit plan instead of choosing silently.
Only the second case authorizes an extra main-track clip. Never satisfy an explicit "after all shots" request by shortening or covering the preceding shot. Because the CLI cannot create a solid-color clip, require a supplied end-card image or hand off its generation when that separate clip is requested.
所提供的
.srt
对应一条独立路径。
当用户提供一个或多个
.srt
文件时,不要询问以下问题——这些字幕提示已经包含各自的文字和时间信息。只需确认放置方式(是否使用
--at
平移整个字幕块),在编辑方案中展示提示数量和最终时间跨度,然后使用
add-srt
导入。绝不能重新录入、重新计时或改写提示,也绝不能将一个文件拆分成多个
add-text
调用。
询问用户是否要在此次编辑中加入文字——这是一个简单的选择加入问题,其处理方式与阶段 4 询问音乐和音效相同。在视觉序列和风格确定后,使用
AskUserQuestion
一次:添加文字 / 不添加文字。仅当用户已经要求添加文字,或此前在对话中提供过文字内容时,才跳过此问题。
如果用户拒绝,不要再次询问——直接进入阶段 6,并且不添加文字。
如果用户选择加入(或此前已经要求),只收集实现文字所必需的信息:内容、时间和类型(标题/字幕/说明文字)。绝不能虚构用户未提供或未批准的文字、时间和类型——询问是否需要文字,并不等于可以擅自提出文字内容。
文字是叠加层,绝不会延长主时间线或项目时长。根据用户的表述推断预期放置方式;默认不要在末尾附加片尾片段:
  • “在最后 N 秒内”“在视频最后 N 秒内”或类似表述,表示将文字叠加在现有的最后一个视觉片段上;
  • “在所有镜头结束后持续 N 秒”“附加独立片尾卡”或类似明确表示顺序关系的表述,表示添加一个独立的 N 秒视觉片段,再将文字叠加在该片段上;
  • 如果表述可能同时指这两种含义,应在展示编辑方案前提出一个针对性的时序问题,不得擅自选择。
只有第二种情况才允许添加额外的主时间线片段。绝不能通过缩短或遮盖前一个镜头来满足明确的“所有镜头结束后”要求。由于 CLI 无法创建纯色片段,因此当用户要求独立片尾片段时,必须要求其提供片尾图片,或将图片生成任务移交给其他流程。

Font selection

字体选择

Every text type has a default font and point size (see
references/capabilities.md
), but once text is confirmed, ask about the font too — do not leave it silent. Skip straight to resolving the font when the user already named or described one; otherwise use
AskUserQuestion
with:
  1. Use the default (Recommended) — the type's own default font and point size; leave
    --font
    /
    --font-file
    /
    --font-size
    unset.
  2. Show me some recommendations — run
    cawcut vn fonts --json
    and offer up to 4 candidates (label = family + style, closest to the chosen edit style first and marked (Recommended)).
  3. I'll provide my own font — a font name, or a local file path via the tool's free-text "Other" option (pass it to
    --font-file
    ).
Pass the user's point size through unchanged — it is the number VN's Font Size box shows, never a canvas-relative basis. Font flag semantics and portability are in
references/capabilities.md
. Whenever the edit plan includes text, list its font and point size (phase 7).
每种文字类型都有默认字体和默认磅值(参见
references/capabilities.md
),但确认需要文字后,也必须询问字体选择——不要对此保持沉默。如果用户已经指定或描述了字体,直接进入字体确认环节;否则使用
AskUserQuestion
提供以下选项:
  1. 使用默认值(推荐)——使用该类型自己的默认字体和默认磅值;不设置
    --font
    /
    --font-file
    /
    --font-size
    。
  2. 查看一些推荐项——运行
    cawcut vn fonts --json
    ,并提供最多 4 个候选项(标签 = 字体家族 + 样式;与所选剪辑风格最接近的排在首位,并标记为 (推荐))。
  3. 我会提供自己的字体——提供字体名称,或通过工具的自由文本“Other”选项提供本地文件路径(传给
    --font-file
    )。
原样传递用户给出的磅值——它就是 VN 的 Font Size 输入框所显示的数值,绝不是相对于画布的基准。字体参数语义和可移植性参见
references/capabilities.md
。只要编辑方案包含文字,就必须列出其字体和磅值(阶段 7)。

6. Confirm the cover

6. 确认封面

For a new project, explicitly confirm the cover choice before presenting the edit plan unless the user already specified it:
  • a supplied PNG used as an explicit photo cover via
    set-cover
    ;
  • another local PNG the user will provide; or
  • VN's automatic first-frame cover.
Use
AskUserQuestion
for this choice. Recommend a suitable supplied image when one clearly represents the project; otherwise recommend the automatic first frame. Do not confuse a timeline opening shot with an explicit VN cover.
对于新项目,除非用户已经指定封面,否则在展示编辑方案前明确确认封面选择:
  • 通过
    set-cover
    使用某个已提供 PNG 作为明确的照片封面;
  • 使用用户稍后提供的另一个本地 PNG;或
  • 使用 VN 自动生成的首帧封面。
使用
AskUserQuestion
让用户选择。如果某张已提供的图片能够清晰代表项目,则优先推荐该图片;否则推荐自动首帧封面。不要将时间线的开场镜头与明确的 VN 封面混为一谈。

7. Present the edit plan and wait for approval

7. 展示编辑方案并等待批准

Before running
init
,
add-clip
,
add-audio
,
add-sound-effect
,
add-text
,
add-srt
, or
set-transition
, show a concrete plan containing:
  • project title, aspect ratio, selected style, cover choice, and estimated total duration;
  • ordered shots with source path and image duration or video trim range;
  • each transition as an explicit boundary
    N → N+1: <type> (<duration>s)
    , never attached to a single clip;
  • only when text was explicitly requested: title/subtitle/caption content with start time, duration, font, and point size (the same number VN's text panel shows in its Font Size box);
  • for a supplied
    .srt
    : the file name, cue count, any cues the parser will skip, the resulting time span, and any
    --at
    shift;
  • BGM and SFX paths with timeline start, source trim range, duration, and volume;
  • every request this plan does not implement, as a named refusal or a simplification — including one already refused earlier in the conversation. Never let an unimplemented effect sit in the plan as if it were covered.
A compact timeline table is preferred for multi-shot edits. After showing the complete plan, always use
AskUserQuestion
for the generation confirmation
; do not ask for approval only in prose. Offer these choices, localized to the user's language:
  1. Create from this plan (Recommended) — approve the displayed plan and begin draft generation.
  2. Revise the plan — collect the requested changes, update the full plan, and call
    AskUserQuestion
    again.
  3. Cancel — stop without creating or modifying a draft.
Only the first choice authorizes phase 8. Do not treat silence, an unrelated reply, or a previously stated general request to “make a video” as approval. This gate is important because the CLI appends clips and does not support delete, reorder, or in-place clip editing.
在运行
init
、
add-clip
、
add-audio
、
add-sound-effect
、
add-text
、
add-srt
或
set-transition
之前,展示一份具体方案,其中包括:
  • 项目标题、宽高比、所选风格、封面选择和预计总时长;
  • 按顺序排列的镜头,包括源路径以及图片时长或视频裁剪范围;
  • 每个转场都明确写为边界
    N → N+1: <type> (<duration>s)
    ,绝不能挂在单个片段上;
  • 仅当用户明确要求文字时,列出标题/字幕/说明文字的内容、开始时间、时长、字体和磅值(与 VN 文字面板的 Font Size 输入框显示相同的数值);
  • 对于已提供的
    .srt
    ,列出文件名、提示数量、解析器将跳过的任何提示、最终时间跨度以及任何
    --at
    平移;
  • BGM 和 SFX 的路径、时间线开始位置、源裁剪范围、时长和音量;
  • 此方案未实现的每项请求,明确列为拒绝或简化处理——包括对话中此前已经拒绝的内容。绝不能让未实现的效果在方案中表现得像是已经涵盖。
对于多镜头编辑,优先使用紧凑的时间线表格。展示完整方案后,始终使用
AskUserQuestion
确认是否生成
;不要只用文字询问批准。按照用户的语言提供以下选项:
  1. 根据此方案创建(推荐)——批准已展示的方案并开始生成草稿。
  2. 修改方案——收集所要求的更改,更新完整方案,然后再次调用
    AskUserQuestion
    。
  3. 取消——停止操作,不创建或修改草稿。
只有第一个选项才能授权进入阶段 8。不得将沉默、无关回复,或此前笼统提出的“制作视频”请求视为批准。此确认关卡非常重要,因为 CLI 只能追加片段,不支持删除、重排或原地编辑片段。

8. Build and verify the rough cut

8. 构建并验证粗剪

After approval:
  1. Initialize the draft, or copy an existing draft with
    init --from
    .
  2. Add clips in approved order, using video source trim where planned.
  3. Apply the approved explicit cover when selected. Add BGM and SFX with the approved timeline start and source trim, then set every approved transition with
    set-transition --index N
    (never
    add-clip --transition
    ). Add text only when it was explicitly requested and included in the approved plan, and import an approved
    .srt
    with
    add-srt
    rather than replaying its cues through
    add-text
    .
  4. Run
    show --json
    , compare the result against the approved plan, and correct any discrepancy that the CLI can express safely. A transition discrepancy is always correctable in place with
    set-transition
    (
    --type none
    to clear) — never rebuild the draft for a transition. If correction requires removing, retiming, replacing, or reordering a clip, create a fresh draft from the approved plan.
  5. Run
    validate
    . Do not report completion until it passes. Never silently drop a failed asset or substitute an unsupported effect.
获得批准后:
  1. 初始化草稿,或使用
    init --from
    复制现有草稿。
  2. 按批准顺序添加片段,并对视频应用方案中指定的源裁剪。
  3. 如果选择了明确封面,则应用已批准的封面。添加 BGM 和 SFX,并设置已批准的时间线开始位置和源裁剪;随后使用
    set-transition --index N
    设置每个已批准的转场(绝不能使用
    add-clip --transition
    )。仅当用户明确要求文字且文字包含在已批准方案中时才添加文字;导入已批准的
    .srt
    时使用
    add-srt
    ,而不是通过
    add-text
    重新创建其提示。
  4. 运行
    show --json
    ,将结果与已批准方案进行比较,并纠正 CLI 能够安全表达的任何差异。转场差异始终可以通过
    set-transition
    原地纠正(使用
    --type none
    清除)——绝不能仅因转场问题而重建草稿。如果纠正操作需要移除、重新计时、替换或重排片段,则根据已批准方案创建全新草稿。
  5. 运行
    validate
    。在验证通过前不得报告完成。绝不能悄悄丢弃失败的素材,也绝不能替换成不受支持的效果。

9. Ask whether to open VN

9. 询问是否打开 VN

Only after
show
matches the plan and
validate
passes, run
cawcut vn status
again — do not reuse the phase 0 result, since the user may have installed or upgraded VN since then (or phase 0 never checked it, because they went straight into editing).
  • VN usable: tell the user the rough cut is complete and ask whether to open it in VN now.
    • Yes: run
      cawcut vn project pack --open --project <dir>
      . If the open fails, the CLI prints why and points at a route that works on that platform — relay that rather than retrying the same command.
    • No: run
      cawcut vn project pack --project <dir>
      so the
      .vn
      deliverable is still ready without launching the app.
  • VN not usable: skip the question — there is no working choice to offer. Run
    cawcut vn project pack --project <dir>
    directly, and mention the VN download/upgrade link as an optional aside.
Report the draft directory,
.vn
path, duration, clip/audio/text counts, and any deliberate simplifications. Do not open VN before this final choice.
仅当
show
的结果与方案一致且
validate
通过后,才再次运行
cawcut vn status
——不要复用阶段 0 的结果,因为用户可能在此期间安装或升级了 VN(或者用户直接进入编辑流程,导致阶段 0 从未检查过 VN)。
  • **VN 可用:**告知用户粗剪已完成,并询问是否现在在 VN 中打开。
    • **是:**运行
      cawcut vn project pack --open --project <dir>
      。如果打开失败,CLI 会打印原因并指出该平台上可行的处理方式——如实转达,不要重复执行同一条命令。
    • **否:**运行
      cawcut vn project pack --project <dir>
      ,使
      .vn
      交付文件准备好但不启动应用。
  • **VN 不可用:**跳过询问,因为此时没有可行选项。直接运行
    cawcut vn project pack --project <dir>
    ,并可顺带提供 VN 下载/升级链接。
报告草稿目录、
.vn
路径、时长、片段/音频/文字数量,以及所有有意做出的简化。在用户完成最终选择前,不要打开 VN。

Handoff boundaries

移交边界

  • Media can arrive two ways: the user supplies their own local files directly (treat this as the normal case, not an edge case), or an upstream skill hands off its generated output. When it is the latter, trust its valid paths, reuse any settled aspect, intent, or audio decisions, and trust a pre-decided action (preview vs. editing) instead of re-asking phase 0. In either case, still present the edit plan before timeline mutation.
  • A request to only preview a few files, with no rough cut, is phase 0's preview-and-import branch — it stays inside this workflow, it does not hand off elsewhere.
  • Keep commands, flags, and paths in English; converse in
    reply_language
    .
  • 媒体有两种来源:用户直接提供自己的本地文件(应视为正常情况,而不是边缘情况),或者由上游 skill 移交其生成的输出。对于后者,信任其有效路径,复用已经确定的宽高比、意图或音频决策,并信任预先决定的操作类型(预览还是编辑),不要再次询问阶段 0 的问题。无论属于哪种情况,在修改时间线之前仍须展示编辑方案。
  • 如果用户只想预览少量文件而不制作粗剪,应进入阶段 0 的“预览并导入”分支——此流程仍在此工作流内部完成,不会移交给其他地方。
  • 命令、参数和路径保持英文;对话则使用
    reply_language
    。