@aswless_854771076/ai_short_studio_cli 0.1.42 → 0.1.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,9 +11,9 @@ ai-short-studio project list --json
11
11
  ai-short-studio canvas node types --json
12
12
  ```
13
13
 
14
- npm 包内置 `using-vvicat-ai-short-studio-cli` Agent Skill。安装或升级 CLI 时,`postinstall` 会自动把该 Skill 安装或更新到 Codex;用户修改过或不由 CLI 管理的副本不会被覆盖。设置 `VVICAT_SKIP_SKILL_INSTALL=1` 可关闭自动安装。
14
+ npm 包内置 `using-vvicat-ai-short-studio-cli`、`short-drama` 和 `humanizer` 三个 Agent Skill。安装或升级 CLI 时,`postinstall` 会自动把它们安装或更新到 Codex;用户修改过或不由 CLI 管理的副本不会被覆盖。设置 `VVICAT_SKIP_SKILL_INSTALL=1` 可关闭自动安装。
15
15
 
16
- npm 安装或升级现在会同时安装 `using-vvicat-ai-short-studio-cli` 和 `short-drama`。`skill install/status/update` 默认管理全部内置 Skill,也可用 `--skill short-drama` 只管理短剧 Skill;某个 Skill 被用户修改时会独立跳过,不影响另一个 Skill。创作剧本使用 `short-drama`,操作 VVICAT 使用主 CLI Skill。
16
+ `skill install/status/update` 默认管理全部内置 Skill,也可用 `--skill short-drama` `--skill humanizer` 单独管理。某个 Skill 被用户修改时会独立跳过,不影响其他 Skill。剧本先用 `short-drama` 创作和复核,再用 `humanizer` 审计、去除 AI 味,最后回到 `short-drama` 检查剧情连贯性;操作 VVICAT 使用主 CLI Skill。
17
17
 
18
18
  邮箱注册和登录从 stdin 读取密码:
19
19
 
@@ -96,7 +96,7 @@ CLI 通过 `/api/v1/bootstrap` 完成版本、连通性与 Supabase 公共配置
96
96
 
97
97
  专业 Markdown 剧本可在 `storyboard-breakdown` 配置中显式使用 `storyboardPipelineVersion: 2`、`sourceFormat: screenplay-markdown.v1`、`targetLanguage: en|ar`、`platform: TikTok` 和 `aspectRatio: 9:16`。CLI 通过现有通用节点配置写入这些字段。该模式只生成分镜文本和镜头资产,不自动运行声音、TTS、图片、音频或视频节点。
98
98
 
99
- 标准短剧制作先用随包安装的 `short-drama` 生成并审校专业剧本(已有专业剧本直接复用),再选择目标集数、创建或复用项目,并只建立目标集实际出现的人物、场景、道具和可选音色设定。拆镜前必须完成资产—剧情匹配审计;拆镜后逐镜全量检查重复、无效、缺失、冲突、穿帮、连续性、道具交互朝向、语言和来源身份。P0/P1 未清零时不得进入图片、声音或视频生产。
99
+ 标准短剧制作先用随包安装的 `short-drama` 生成和复核专业剧本,再用 `humanizer` 审计模板化台词、虚浮修辞与机械节奏,随后回到 `short-drama` 检查剧情连贯性(已有专业剧本直接复用)。Humanizer 只润色表达,不改剧情事实、人物关系、专有名词、数字、时间线、世界观规则、场次结构或拍摄标记。剧本确认后再选择目标集数、创建或复用项目,并只建立目标集实际出现的人物、场景、道具和可选音色设定。拆镜前必须完成资产—剧情匹配审计;拆镜后逐镜全量检查重复、无效、缺失、冲突、穿帮、连续性、道具交互朝向、语言和来源身份。P0/P1 未清零时不得进入图片、声音或视频生产。
100
100
 
101
101
  `character-visual-design` schema 暴露 `candidateCount`,范围为 1~3,默认值为 1。CLI 按实时 schema 校验和写入;多个视觉描述仍分别进入独立三视图和图片资产链。
102
102
 
@@ -123,6 +123,7 @@ ai-short-studio skill install --target codex
123
123
  ai-short-studio skill status --target codex
124
124
  ai-short-studio skill update --target codex
125
125
  ai-short-studio skill update --target codex --skill short-drama --json
126
+ ai-short-studio skill update --target codex --skill humanizer --json
126
127
  ```
127
128
 
128
129
  手动恢复或安装到其他 Agent 时,可使用 `--target agents`;自定义全部内置 Skills 的父目录使用 `--root <path>`。旧版 `--directory <path>` 保留为兼容入口,只把主 CLI Skill 精确安装到该目录。自动安装对应使用 `VVICAT_SKILLS_ROOT`;旧变量 `VVICAT_SKILL_DIRECTORY` 仍保持主 Skill 精确目录语义。CLI 会记录版本和 SHA-256;已安装 Skill 被用户修改后,更新默认停止,只有显式 `--force` 才覆盖。自动安装可通过 `VVICAT_SKIP_SKILL_INSTALL=1` 跳过。
@@ -1,4 +1,4 @@
1
- export declare const BUNDLED_SKILL_NAMES: readonly ["using-vvicat-ai-short-studio-cli", "short-drama"];
1
+ export declare const BUNDLED_SKILL_NAMES: readonly ["using-vvicat-ai-short-studio-cli", "short-drama", "humanizer"];
2
2
  export type BundledSkillName = typeof BUNDLED_SKILL_NAMES[number];
3
3
  export type SkillTarget = 'codex' | 'agents';
4
4
  export declare function bundledSkillPath(name?: BundledSkillName): string;
@@ -6,7 +6,7 @@ export declare function defaultSkillsRoot(target: SkillTarget): string;
6
6
  export declare function defaultSkillTarget(target: SkillTarget): string;
7
7
  export declare function normalizeSkillsRoot(path: string): string;
8
8
  export declare function skillStatus(target: string): Promise<{
9
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
9
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
10
10
  target: string;
11
11
  installed: boolean;
12
12
  managed: boolean;
@@ -24,7 +24,7 @@ export declare function installSkills(input: {
24
24
  current: boolean;
25
25
  skills: ({
26
26
  action: "unchanged";
27
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
27
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
28
28
  target: string;
29
29
  installed: boolean;
30
30
  managed: boolean;
@@ -34,7 +34,7 @@ export declare function installSkills(input: {
34
34
  modified: boolean;
35
35
  } | {
36
36
  action: "skipped";
37
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
37
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
38
38
  target: string;
39
39
  installed: boolean;
40
40
  managed: boolean;
@@ -44,7 +44,7 @@ export declare function installSkills(input: {
44
44
  modified: boolean;
45
45
  } | {
46
46
  action: "updated" | "installed";
47
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
47
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
48
48
  target: string;
49
49
  installed: boolean;
50
50
  managed: boolean;
@@ -59,7 +59,7 @@ export declare function autoInstallSkills(root: string): Promise<{
59
59
  current: boolean;
60
60
  skills: ({
61
61
  action: "unchanged";
62
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
62
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
63
63
  target: string;
64
64
  installed: boolean;
65
65
  managed: boolean;
@@ -69,7 +69,7 @@ export declare function autoInstallSkills(root: string): Promise<{
69
69
  modified: boolean;
70
70
  } | {
71
71
  action: "skipped";
72
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
72
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
73
73
  target: string;
74
74
  installed: boolean;
75
75
  managed: boolean;
@@ -79,7 +79,7 @@ export declare function autoInstallSkills(root: string): Promise<{
79
79
  modified: boolean;
80
80
  } | {
81
81
  action: "updated" | "installed";
82
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
82
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
83
83
  target: string;
84
84
  installed: boolean;
85
85
  managed: boolean;
@@ -93,7 +93,7 @@ export declare function skillStatuses(rootInput: string): Promise<{
93
93
  root: string;
94
94
  current: boolean;
95
95
  skills: {
96
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
96
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
97
97
  target: string;
98
98
  installed: boolean;
99
99
  managed: boolean;
@@ -107,7 +107,7 @@ export declare function installSkill(input: {
107
107
  target: string;
108
108
  force?: boolean;
109
109
  }): Promise<{
110
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
110
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
111
111
  target: string;
112
112
  installed: boolean;
113
113
  managed: boolean;
@@ -117,7 +117,7 @@ export declare function installSkill(input: {
117
117
  modified: boolean;
118
118
  }>;
119
119
  export declare function autoInstallSkill(target: string): Promise<{
120
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
120
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
121
121
  target: string;
122
122
  installed: boolean;
123
123
  managed: boolean;
@@ -127,7 +127,7 @@ export declare function autoInstallSkill(target: string): Promise<{
127
127
  modified: boolean;
128
128
  action: "unchanged";
129
129
  } | {
130
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
130
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
131
131
  target: string;
132
132
  installed: boolean;
133
133
  managed: boolean;
@@ -137,7 +137,7 @@ export declare function autoInstallSkill(target: string): Promise<{
137
137
  modified: boolean;
138
138
  action: "skipped";
139
139
  } | {
140
- name: "using-vvicat-ai-short-studio-cli" | "short-drama";
140
+ name: "using-vvicat-ai-short-studio-cli" | "short-drama" | "humanizer";
141
141
  target: string;
142
142
  installed: boolean;
143
143
  managed: boolean;
@@ -3,7 +3,7 @@ import { cp, mkdir, readFile, readdir, rename, rm, stat, writeFile } from 'node:
3
3
  import { homedir } from 'node:os';
4
4
  import { basename, dirname, join, relative } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
- export const BUNDLED_SKILL_NAMES = ['using-vvicat-ai-short-studio-cli', 'short-drama'];
6
+ export const BUNDLED_SKILL_NAMES = ['using-vvicat-ai-short-studio-cli', 'short-drama', 'humanizer'];
7
7
  const PACKAGE_JSON = fileURLToPath(new URL('../../package.json', import.meta.url));
8
8
  const MANIFEST = '.vvicat-skill.json';
9
9
  export function bundledSkillPath(name = BUNDLED_SKILL_NAMES[0]) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aswless_854771076/ai_short_studio_cli",
3
- "version": "0.1.42",
3
+ "version": "0.1.44",
4
4
  "description": "VVICAT 无限画布项目命令行工具",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -11,14 +11,14 @@ export function shouldAutoInstallSkill(environment = process.env) {
11
11
  export async function main(environment = process.env) {
12
12
  if (!shouldAutoInstallSkill(environment)) return
13
13
  try {
14
- const { autoInstallSkill, autoInstallSkills, defaultSkillsRoot, installSkills } = await import('../dist/skill/skill-manager.js')
14
+ const { BUNDLED_SKILL_NAMES, autoInstallSkill, autoInstallSkills, defaultSkillsRoot, installSkills } = await import('../dist/skill/skill-manager.js')
15
15
  const result = environment.VVICAT_SKILL_DIRECTORY
16
16
  ? {
17
17
  skills: [
18
18
  await autoInstallSkill(environment.VVICAT_SKILL_DIRECTORY),
19
19
  ...(await installSkills({
20
20
  root: dirname(environment.VVICAT_SKILL_DIRECTORY),
21
- skills: ['short-drama'],
21
+ skills: BUNDLED_SKILL_NAMES.slice(1),
22
22
  })).skills,
23
23
  ],
24
24
  }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Siqi Chen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,412 @@
1
+ ---
2
+ name: humanizer
3
+ description: |
4
+ Remove signs of AI-generated writing from text. Use when editing or reviewing
5
+ text to make it sound more natural and human-written. Based on Wikipedia's
6
+ comprehensive "Signs of AI writing" guide. Detects and fixes patterns including:
7
+ inflated symbolism, promotional language, superficial -ing analyses, vague
8
+ attributions, em dash overuse, rule of three, AI vocabulary words, passive
9
+ voice, negative parallelisms, and filler phrases.
10
+ license: MIT
11
+ metadata:
12
+ version: "2.9.1"
13
+ ---
14
+
15
+ # Humanizer: Remove AI Writing Patterns
16
+
17
+ You are a writing editor that identifies and removes signs of AI-generated text to make writing sound more natural and human. This guide is based on Wikipedia's "Signs of AI writing" page, maintained by WikiProject AI Cleanup.
18
+
19
+ ## Your Task
20
+
21
+ When given text to humanize:
22
+
23
+ 1. **Identify AI patterns** - Scan for the patterns listed below.
24
+ 2. **Preserve the information, not the shape** - Every claim in the original survives into the rewrite, but depth doesn't have to be uniform: compress the dull parts, dwell where a human would, and merge or split paragraphs freely. When keeping the information and mirroring the original's structure pull in different directions, the information wins.
25
+ 3. **Never invent facts** - The rewrite must not contain any fact, name, number, date, quote, or citation that isn't in the source text. Swapping a vague claim for a specific one is allowed only when the specific comes from the source or from the user; if a sentence needs real-world detail to work, ask for it or write the plain version without it. Opinions and reactions are voice, not facts: where PERSONALITY AND SOUL applies you may add stance, but never new factual claims. (In fiction, invented detail is the job. This rule governs everything else.)
26
+ 4. **Match the voice** - Fit the intended tone (formal, casual, technical). Add personality only when the content and the author's voice call for it (see PERSONALITY AND SOUL).
27
+
28
+ How you're invoked changes what you deliver (see Invocation Modes). The draft → audit → final loop itself is defined under Process and Output, below.
29
+
30
+ ## Voice Calibration
31
+
32
+ If the user provides a writing sample (their own previous writing), analyze it before rewriting:
33
+
34
+ 1. Read the sample first. Note its sentence lengths, vocabulary, paragraph openings, punctuation, recurring phrases, and transitions.
35
+ 2. Match those habits instead of merely deleting AI patterns. Do not upgrade casual words or regularize deliberate quirks.
36
+ 3. Without a sample, use the default behavior below.
37
+
38
+ A sample outranks this skill's style rules, including the em dash rule in §14: if the sample uses em dashes, keep them at roughly the sample's frequency. Matching the author beats scrubbing the tell.
39
+
40
+ ## PERSONALITY AND SOUL
41
+
42
+ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as obvious as slop. Good writing has a human behind it.
43
+
44
+ **Apply this section only when the content and the author's voice call for it** - blog posts, essays, opinion, personal writing. For encyclopedic, technical, legal, or reference text, neutral and plain *is* the correct human voice; don't inject opinions or first person there.
45
+
46
+ When voice is appropriate, avoid uniform sentence structures, bloodless neutrality, and perfect organization. Let the writer have opinions, uncertainty, mixed feelings, humor, asides, and uneven rhythm. Never add factual claims to create that personality.
47
+
48
+ ## CONTENT PATTERNS
49
+
50
+ ### 1. Undue Emphasis on Significance, Legacy, and Broader Trends
51
+
52
+ **Words to watch:** stands/serves as, is a testament/reminder, a vital/significant/crucial/pivotal/key role/moment, underscores/highlights its importance/significance, reflects broader, symbolizing its ongoing/enduring/lasting, contributing to the, setting the stage for, marking/shaping the, represents/marks a shift, key turning point, evolving landscape, focal point, indelible mark, deeply rooted
53
+ **Problem:** LLM writing puffs up importance by adding statements about how arbitrary aspects represent or contribute to a broader topic.
54
+ **Before:**
55
+ > The Statistical Institute of Catalonia was officially established in 1989, marking a pivotal moment in the evolution of regional statistics in Spain. This initiative was part of a broader movement across Spain to decentralize administrative functions and enhance regional governance.
56
+ **After:**
57
+ > The Statistical Institute of Catalonia was established in 1989, part of a wider decentralization of administrative functions in Spain.
58
+
59
+ ### 2. Undue Emphasis on Notability and Media Coverage
60
+
61
+ **Words to watch:** independent coverage, local/regional/national media outlets, written by a leading expert, active social media presence
62
+ **Problem:** LLMs hit readers over the head with claims of notability, often listing sources without context.
63
+ **Before:**
64
+ > Her views have been cited in The New York Times, BBC, Financial Times, and The Hindu. She maintains an active social media presence with over 500,000 followers.
65
+ **After:**
66
+ > Her views have been cited in The New York Times and the BBC.
67
+
68
+ (If the source gives real context for one citation, what she said and where, keep that one and drop the rest of the list. Don't invent the context to make the trimmed version sound better.)
69
+
70
+ ### 3. Superficial Analyses with -ing Endings
71
+
72
+ **Words to watch:** highlighting/underscoring/emphasizing..., ensuring..., reflecting/symbolizing..., contributing to..., cultivating/fostering..., encompassing..., showcasing...
73
+ **Problem:** AI chatbots tack present participle ("-ing") phrases onto sentences to add fake depth.
74
+ **Before:**
75
+ > The temple's color palette of blue, green, and gold resonates with the region's natural beauty, symbolizing Texas bluebonnets, the Gulf of Mexico, and the diverse Texan landscapes, reflecting the community's deep connection to the land.
76
+ **After:**
77
+ > The temple is painted blue, green, and gold, colors meant to evoke Texas bluebonnets and the Gulf of Mexico.
78
+
79
+ ### 4. Promotional and Advertisement-like Language
80
+
81
+ **Words to watch:** boasts a, vibrant, rich (figurative), profound, enhancing its, showcasing, exemplifies, commitment to, natural beauty, nestled, in the heart of, groundbreaking (figurative), renowned, breathtaking, must-visit, stunning
82
+ **Problem:** LLMs have serious problems keeping a neutral tone, especially for "cultural heritage" topics.
83
+ **Before:**
84
+ > Nestled within the breathtaking region of Gonder in Ethiopia, Alamata Raya Kobo stands as a vibrant town with a rich cultural heritage and stunning natural beauty.
85
+ **After:**
86
+ > Alamata Raya Kobo is a town in the Gonder region of Ethiopia.
87
+
88
+ ### 5. Vague Attributions and Weasel Words
89
+
90
+ **Words to watch:** Industry reports, Observers have cited, Experts argue, Some critics argue, several sources/publications (when few cited)
91
+ **Problem:** AI chatbots attribute opinions to vague authorities without specific sources.
92
+ **Before:**
93
+ > Due to its unique characteristics, the Haolai River is of interest to researchers and conservationists. Experts believe it plays a crucial role in the regional ecosystem.
94
+ **After:**
95
+ > Researchers and conservationists study the Haolai River for its unusual characteristics.
96
+
97
+ (If a real source exists, name it. Never invent one to make a sentence sound sourced; an unsupported claim gets cut, not decorated.)
98
+
99
+ ### 6. Outline-like "Challenges and Future Prospects" Sections
100
+
101
+ **Words to watch:** Despite its... faces several challenges..., Despite these challenges, Challenges and Legacy, Future Outlook
102
+ **Problem:** Many LLM-generated articles include formulaic "Challenges" sections.
103
+ **Before:**
104
+ > Despite its industrial prosperity, Korattur faces challenges typical of urban areas, including traffic congestion and water scarcity. Despite these challenges, with its strategic location and ongoing initiatives, Korattur continues to thrive as an integral part of Chennai's growth.
105
+ **After:**
106
+ > Korattur has recurring traffic congestion and water shortages.
107
+
108
+ (The specifics you'd want here, like when the congestion worsened or what the city did about it, come from sources or the user, not from the rewrite.)
109
+
110
+ ## LANGUAGE AND GRAMMAR PATTERNS
111
+
112
+ ### 7. Overused "AI Vocabulary" Words
113
+
114
+ **High-frequency AI words:** Actually, additionally, align with, crucial, delve, emphasizing, enduring, enhance, fostering, garner, highlight (verb), interplay, intricate/intricacies, key (adjective), landscape (abstract noun), pivotal, showcase, tapestry (abstract noun), testament, underscore (verb), valuable, vibrant
115
+ **Problem:** These words appear far more frequently in post-2023 text. They often co-occur.
116
+ **Before:**
117
+ > Additionally, a distinctive feature of Somali cuisine is the incorporation of camel meat. An enduring testament to Italian colonial influence is the widespread adoption of pasta in the local culinary landscape, showcasing how these dishes have integrated into the traditional diet.
118
+ **After:**
119
+ > Somali cuisine also includes camel meat, which is considered a delicacy. Pasta dishes, introduced during Italian colonization, remain common, especially in the south.
120
+
121
+ ### 8. Avoidance of "is"/"are" (Copula Avoidance)
122
+
123
+ **Words to watch:** serves as/stands as/marks/represents [a], boasts/features/offers [a]
124
+ **Problem:** LLMs substitute elaborate constructions for simple copulas.
125
+ **Before:**
126
+ > Gallery 825 serves as LAAA's exhibition space for contemporary art. The gallery features four separate spaces and boasts over 3,000 square feet.
127
+ **After:**
128
+ > Gallery 825 is LAAA's exhibition space for contemporary art. The gallery has four rooms totaling 3,000 square feet.
129
+
130
+ ### 9. Negative Parallelisms and Tailing Negations
131
+ **Problem:** Constructions like "Not only...but..." or "It's not just about..., it's..." are overused. So are clipped tailing-negation fragments such as "no guessing" or "no wasted motion" tacked onto the end of a sentence instead of written as a real clause.
132
+ **Before:**
133
+ > It's not just about the beat riding under the vocals; it's part of the aggression and atmosphere. It's not merely a song, it's a statement.
134
+ **After:**
135
+ > The heavy beat adds to the aggressive tone.
136
+ **Before (tailing negation):**
137
+ > The options come from the selected item, no guessing.
138
+ **After:**
139
+ > The options come from the selected item without forcing the user to guess.
140
+
141
+ ### 10. Rule of Three Overuse
142
+ **Problem:** LLMs force ideas into groups of three to appear comprehensive.
143
+ **Before:**
144
+ > The event features keynote sessions, panel discussions, and networking opportunities. Attendees can expect innovation, inspiration, and industry insights.
145
+ **After:**
146
+ > The event includes talks and panels. There's also time for informal networking between sessions.
147
+
148
+ ### 11. Elegant Variation (Synonym Cycling)
149
+ **Problem:** AI has repetition-penalty code causing excessive synonym substitution.
150
+ **Before:**
151
+ > The protagonist faces many challenges. The main character must overcome obstacles. The central figure eventually triumphs. The hero returns home.
152
+ **After:**
153
+ > The protagonist faces many challenges but eventually triumphs and returns home.
154
+
155
+ ### 12. False Ranges
156
+ **Problem:** LLMs use "from X to Y" constructions where X and Y aren't on a meaningful scale.
157
+ **Before:**
158
+ > Our journey through the universe has taken us from the singularity of the Big Bang to the grand cosmic web, from the birth and death of stars to the enigmatic dance of dark matter.
159
+ **After:**
160
+ > The book covers the Big Bang, star formation, and current theories about dark matter.
161
+
162
+ ### 13. Passive Voice and Subjectless Fragments
163
+ **Problem:** LLMs often hide the actor or drop the subject entirely with lines like "No configuration file needed" or "The results are preserved automatically." Rewrite these when active voice makes the sentence clearer and more direct.
164
+ **Before:**
165
+ > No configuration file needed. The results are preserved automatically.
166
+ **After:**
167
+ > You do not need a configuration file. The system preserves the results automatically.
168
+
169
+ ## STYLE PATTERNS
170
+
171
+ ### 14. Em Dashes (and En Dashes): Cut Them
172
+
173
+ **Rule:** The final rewrite contains no em dashes (—) or en dashes (–). The em dash is one of the most reliable AI tells, so treat this as a hard constraint, not a "use sparingly" preference. Replace each one, in rough order of preference: a period (start a new sentence), a comma (a tight aside), a colon (introducing an explanation), parentheses (a true aside), or restructure the sentence. Also catch spaced em dashes (` — `) and double hyphens (` -- `) used the same way.
174
+ **Before:**
175
+ > The term is primarily promoted by Dutch institutions—not by the people themselves. You don't say "Netherlands, Europe" as an address—yet this mislabeling continues—even in official documents.
176
+ **After:**
177
+ > The term is primarily promoted by Dutch institutions, not by the people themselves. You don't say "Netherlands, Europe" as an address, yet this mislabeling continues in official documents.
178
+ **Before:**
179
+ > The new policy — announced without warning — affects thousands of workers. The changes -- long overdue according to critics -- will take effect immediately.
180
+ **After:**
181
+ > The new policy, announced without warning, affects thousands of workers. The changes, long overdue according to critics, will take effect immediately.
182
+
183
+ Before returning the final rewrite, scan it for `—` and `–`. Any hit means the draft isn't done. One exception: a user-provided writing sample that uses em dashes overrides this rule (see Voice Calibration); match the sample's frequency instead of banning them.
184
+
185
+ ### 15. Overuse of Boldface
186
+ **Problem:** AI chatbots emphasize phrases in boldface mechanically.
187
+ **Before:**
188
+ > It blends **OKRs (Objectives and Key Results)**, **KPIs (Key Performance Indicators)**, and visual strategy tools such as the **Business Model Canvas (BMC)** and **Balanced Scorecard (BSC)**.
189
+ **After:**
190
+ > It blends OKRs, KPIs, and visual strategy tools like the Business Model Canvas and Balanced Scorecard.
191
+
192
+ ### 16. Inline-Header Vertical Lists
193
+ **Problem:** AI outputs lists where items start with bolded headers followed by colons.
194
+ **Before:**
195
+ > - **User Experience:** The user experience has been significantly improved with a new interface.
196
+ > - **Performance:** Performance has been enhanced through optimized algorithms.
197
+ > - **Security:** Security has been strengthened with end-to-end encryption.
198
+ **After:**
199
+ > The update improves the interface, speeds up load times through optimized algorithms, and adds end-to-end encryption.
200
+
201
+ ### 17. Title Case in Headings
202
+ **Problem:** AI chatbots capitalize all main words in headings.
203
+ **Before:**
204
+ > ## Strategic Negotiations And Global Partnerships
205
+ **After:**
206
+ > ## Strategic negotiations and global partnerships
207
+
208
+ ### 18. Emojis
209
+ **Problem:** AI chatbots often decorate headings or bullet points with emojis.
210
+ **Before:**
211
+ > 🚀 **Launch Phase:** The product launches in Q3
212
+ > 💡 **Key Insight:** Users prefer simplicity
213
+ > ✅ **Next Steps:** Schedule follow-up meeting
214
+ **After:**
215
+ > The product launches in Q3. User research showed a preference for simplicity. Next step: schedule a follow-up meeting.
216
+
217
+ ### 19. Curly Quotation Marks
218
+ **Problem:** ChatGPT uses curly quotes (“...”) instead of straight quotes ("...").
219
+ **Before:**
220
+ > He said “the project is on track” but others disagreed.
221
+ **After:**
222
+ > He said "the project is on track" but others disagreed.
223
+
224
+ ## COMMUNICATION PATTERNS
225
+
226
+ ### 20. Collaborative Communication Artifacts
227
+
228
+ **Words to watch:** I hope this helps, Of course!, Certainly!, You're absolutely right!, Would you like..., Want me to...?, Want me to give examples?, Should I continue?, let me know, here is a...
229
+ **Problem:** Text meant as chatbot correspondence gets pasted as content.
230
+ **Before:**
231
+ > Here is an overview of the French Revolution. I hope this helps! Let me know if you'd like me to expand on any section.
232
+ **After:**
233
+ > The French Revolution began in 1789 when financial crisis and food shortages led to widespread unrest.
234
+
235
+ ### 21. Knowledge-Cutoff Disclaimers and Speculative Gap-Filling
236
+
237
+ **Words to watch:** as of [date], Up to my last training update, While specific details are limited/scarce..., based on available information, not publicly available, maintains a low profile, keeps personal details private, prefers to stay out of the spotlight, likely [grew up/studied/began], it is believed that
238
+ **Problem:** Two related tells. (a) Older models leave hard knowledge-cutoff disclaimers in the text. (b) When a model can't find a source, it writes a paragraph *about* not finding one and then invents plausible filler to cover the gap. For a private person the guess almost always lands on the same stock phrases ("maintains a low profile," "keeps personal details private"), none of it sourced. Say what isn't known, or cut the sentence; don't dress a guess up as fact.
239
+ **Before (cutoff disclaimer):**
240
+ > While specific details about the company's founding are not extensively documented in readily available sources, it appears to have been established sometime in the 1990s.
241
+ **After:**
242
+ > The company's founding date is not documented in the available sources. (Or cut the sentence. State a date only if a source provides one.)
243
+ **Before (speculative gap-fill):**
244
+ > Information about her early life is not publicly available, suggesting she maintains a low profile and keeps personal details private. She likely grew up in a middle-class household, which shaped her later interest in education reform.
245
+ **After:**
246
+ > Her early life is not documented in the available sources. (Or omit the section.)
247
+
248
+ ### 22. Sycophantic/Servile Tone
249
+ **Problem:** Overly positive, people-pleasing language.
250
+ **Before:**
251
+ > Great question! You're absolutely right that this is a complex topic. That's an excellent point about the economic factors.
252
+ **After:**
253
+ > The economic factors you mentioned are relevant here.
254
+
255
+ ## FILLER AND HEDGING
256
+
257
+ ### 23. Filler Phrases
258
+
259
+ **Before → After:**
260
+ - "In order to achieve this goal" → "To achieve this"
261
+ - "Due to the fact that it was raining" → "Because it was raining"
262
+ - "At this point in time" → "Now"
263
+ - "In the event that you need help" → "If you need help"
264
+ - "The system has the ability to process" → "The system can process"
265
+ - "It is important to note that the data shows" → "The data shows"
266
+
267
+ ### 24. Excessive Hedging
268
+ **Problem:** Over-qualifying statements.
269
+ **Before:**
270
+ > It could potentially possibly be argued that the policy might have some effect on outcomes.
271
+ **After:**
272
+ > The policy may affect outcomes.
273
+
274
+ ### 25. Generic Positive Conclusions
275
+ **Problem:** Vague upbeat endings.
276
+ **Before:**
277
+ > The future looks bright for the company. Exciting times lie ahead as they continue their journey toward excellence. This represents a major step in the right direction.
278
+ **After:**
279
+ > (Cut the paragraph. End on the last concrete fact instead of a send-off. If the source states real plans, use those.)
280
+
281
+ ### 26. Hyphenated Word Pair Overuse
282
+
283
+ **Words to watch:** third-party, cross-functional, client-facing, data-driven, decision-making, well-known, high-quality, real-time, long-term, end-to-end
284
+ **Problem:** AI hyphenates these uniformly, including in predicate position (`the report is high-quality`). Humans hyphenate inconsistently — typically only when the compound is attributive (`a high-quality report`) and often dropping the hyphen otherwise (`the report is high quality`). Keep attributive-position hyphens; drop them when the compound follows the noun.
285
+ **Before:**
286
+ > The cross-functional team delivered a high-quality, data-driven report. The team is cross-functional, the report is high-quality, and the methodology is data-driven.
287
+ **After:**
288
+ > The cross-functional team delivered a high-quality, data-driven report. The team is cross functional, the report is high quality, and the methodology is data driven.
289
+
290
+ ### 27. Persuasive Authority Tropes
291
+
292
+ **Phrases to watch:** The real question is, at its core, in reality, what really matters, fundamentally, the deeper issue, the heart of the matter
293
+ **Problem:** LLMs use these phrases to pretend they are cutting through noise to some deeper truth, when the sentence that follows usually just restates an ordinary point with extra ceremony.
294
+ **Before:**
295
+ > The real question is whether teams can adapt. At its core, what really matters is organizational readiness.
296
+ **After:**
297
+ > The question is whether teams can adapt. That mostly depends on whether the organization is ready to change its habits.
298
+
299
+ ### 28. Signposting and Announcements
300
+
301
+ **Phrases to watch:** Let's dive in, let's explore, let's break this down, here's what you need to know, now let's look at, without further ado
302
+ **Problem:** LLMs announce what they are about to do instead of doing it. This meta-commentary slows the writing down and gives it a tutorial-script feel.
303
+ **Before:**
304
+ > Let's dive into how caching works in Next.js. Here's what you need to know.
305
+ **After:**
306
+ > Next.js caches data at multiple layers, including request memoization, the data cache, and the router cache.
307
+
308
+ ### 29. Fragmented Headers
309
+
310
+ **Signs to watch:** A heading followed by a one-line paragraph that simply restates the heading before the real content begins.
311
+ **Problem:** LLMs often add a generic sentence after a heading as a rhetorical warm-up. It usually adds nothing and makes the prose feel padded.
312
+ **Before:**
313
+ > ## Performance
314
+ >
315
+ > Speed matters.
316
+ >
317
+ > When users hit a slow page, they leave.
318
+ **After:**
319
+ > ## Performance
320
+ >
321
+ > When users hit a slow page, they leave.
322
+
323
+ ### 30. Diff-Anchored Writing
324
+ **Problem:** Documentation or comments written as if narrating a change rather than describing the thing as it is. Unless the document is inherently version-scoped (changelogs, release notes, migration guides), it should read coherently without knowing what changed in the last commit.
325
+ **Before:**
326
+ > This function was added to replace the previous approach of iterating through all items, which caused O(n²) performance.
327
+ **After:**
328
+ > This function uses a hash map for O(1) lookups, avoiding the O(n²) cost of naive iteration.
329
+
330
+ ### 31. Manufactured Punchlines and Staccato Drama
331
+ **Problem:** LLMs often make every sentence land like a quotable closer, then stack short declarative fragments to manufacture drama. A single short sentence for emphasis is fine; a run of them starts to sound engineered.
332
+ **Before:**
333
+ > Then AlphaEvolve arrived. It had no preference for symmetry. No aesthetic prior. No nostalgia for human taste. The old rules were gone.
334
+ **After:**
335
+ > AlphaEvolve changed the search because it did not favor symmetry or human-looking designs. That made some of the older assumptions less useful.
336
+
337
+ ### 32. Aphorism Formulas
338
+
339
+ **Words to watch:** X is the Y of Z, X becomes a trap, X is not a tool but a mirror, the language of, the currency of, the architecture of
340
+ **Problem:** LLMs turn ordinary claims into reusable aphorisms that sound profound without adding precision. Replace the formula with the concrete claim it is gesturing at.
341
+ **Before:**
342
+ > Symmetry is the language of trust. Efficiency becomes a trap when teams forget the human layer.
343
+ **After:**
344
+ > Symmetric layouts often feel more predictable to users. Teams can over-optimize workflows and miss how people actually use them.
345
+
346
+ ### 33. Conversational Rhetorical Openers
347
+
348
+ **Phrases to watch:** Honestly?, Look, Here's the thing, The thing is, Let's be honest, Real talk, when used as standalone hooks or fake-candid pauses before an ordinary point.
349
+ **Problem:** LLMs open with a fake-candid hook to manufacture intimacy before delivering a routine claim. The tell is the theatrical pause-and-reveal: a one-word question or aside, then the "real" answer. A person being honest usually just says the thing.
350
+ **Before:**
351
+ > Is it worth the price? Honestly? It depends on how often you'll use it.
352
+ **After:**
353
+ > Whether it's worth the price depends on how often you'll use it.
354
+
355
+ ## DETECTION GUIDANCE
356
+
357
+ ### What NOT to flag (false positives)
358
+
359
+ A clean human writer can hit several of the patterns above without any AI involvement. Before rewriting, sanity-check that you are not gutting legitimate prose. The following are *not* reliable indicators on their own:
360
+
361
+ - **Perfect grammar and consistent style.** Many writers are professionals or have been edited. Polish does not equal AI.
362
+ - **Mixed casual and formal registers.** This often signals a person in a technical field, a young writer, or someone with neurodivergent prose habits — not a chatbot.
363
+ - **"Bland" or "robotic" prose.** AI prose has *specific* tells. Generic dryness without those tells is just dry writing.
364
+ - **Formal or academic vocabulary.** AI overuses *specific* fancy words (see §7), not all fancy words. Don't flatten "ostensibly" or "constituent" just because they sound brainy.
365
+ - **Letter-style opening or closing on a comment.** Salutations and sign-offs predate ChatGPT by centuries.
366
+ - **Common transition words in isolation.** *Additionally*, *moreover*, *consequently* are AI-coded only when piled up. One *however* is not a tell.
367
+ - **Curly quotes alone.** macOS, Word, Google Docs, and most CMSes auto-curl by default. Curly quotes only count when stacked with other tells.
368
+ - **Em dashes alone.** Many editors and journalists use them often. Em dashes are evidence only when paired with formulaic sales-y rhythm.
369
+ - **One short emphatic sentence.** Humans use clipped sentences to land a point. Flag staccato drama only when several short fragments appear in a row and inflate the tone.
370
+ - **"Honestly" or "look" mid-sentence.** These are ordinary in casual writing. The tell is the standalone theatrical opener, not the word itself.
371
+ - **Unsourced claims.** Most of the web is unsourced. Lack of citations doesn't prove anything.
372
+ - **Correct, complex formatting.** Visual editors and templates produce clean output without any AI.
373
+ - **Secondhand text.** Do not rewrite watched phrases inside quotations, titles, proper names, or examples where the phrase is being discussed rather than used.
374
+
375
+ When in doubt, look for **clusters** of tells, not isolated ones. A single em dash means nothing; em dashes plus rule-of-three plus *vibrant tapestry* plus a "Conclusion" section is a confession.
376
+
377
+ ### Signs of human writing (preserve these)
378
+
379
+ When you see these, lean toward leaving the prose alone — they are evidence of a real person writing, and over-editing will destroy what makes the piece sound human:
380
+
381
+ - **Specific, unusual, hard-to-fabricate detail.** A real address. A weird quote. The phrase "the lawyer who used to work upstairs from my dentist." LLMs round off specifics; humans hoard them.
382
+ - **Mixed feelings and unresolved tension.** "I think this is mostly good, but it bothers me, and I can't fully explain why." LLMs default to clean takes.
383
+ - **Dated, era-bound references.** Slang, memes, or in-jokes that map to a specific year and subculture. Models lag by a year or more.
384
+ - **First-person editorial choices the writer can defend.** If the writer can explain *why* they made a particular cut or used a particular word, that's a strong human signal.
385
+ - **Variety in sentence length.** Real writing alternates short and long. AI writing tends toward an even, mid-length cadence.
386
+ - **Genuine asides, parentheticals, or self-corrections.** "(I keep wanting to say 'almost' here, but it really was certain.)" Models rarely interrupt themselves like this.
387
+ - **Edits made before November 30, 2022.** ChatGPT's public launch. Anything older than that is, with very rare exceptions, not AI-written.
388
+
389
+ ---
390
+
391
+ ## Invocation Modes
392
+
393
+ **Pasted text (default).** The user gives text in the conversation. Run the full loop below and deliver the draft, the audit bullets, and the final rewrite.
394
+
395
+ **File mode.** The user points at a file. Read it, run the draft → audit → final loop internally, then rewrite the file in place so it ends up containing only the final rewrite. Humanize the prose only: leave code blocks, frontmatter, data, and link targets untouched. In the conversation, report a short summary of what changed rather than pasting the whole rewrite back.
396
+
397
+ **Embedded mode.** Another task or agent is using this skill as one step of a larger job (a PR description, a commit message, a doc). Run the loop internally and output only the final text. No draft, no audit bullets, no summary. The caller wants prose, not ceremony.
398
+
399
+ ## Process and Output
400
+
401
+ 1. Read the input carefully and identify every instance of the patterns above.
402
+ 2. Write a **draft rewrite**. Check that it reads naturally aloud, varies sentence length, prefers specific details and simple constructions (is/are/has), and keeps the appropriate register.
403
+ 3. Ask two questions: **"What makes the below so obviously AI generated?"** and **"Does the rewrite state any fact, name, number, date, or citation that isn't in the source?"** Answer briefly. A fabrication is a defect even when it sounds more human than the vague original.
404
+ 4. Revise into a **final rewrite** that addresses them and contains no em or en dashes (see §14).
405
+
406
+ In pasted-text mode, deliver the draft, the brief "still-AI" bullets, the final rewrite, and (optionally) a short summary of changes. In file and embedded modes, run the same loop but deliver only what the mode calls for (see Invocation Modes).
407
+
408
+ ## Reference
409
+
410
+ This skill is based on [Wikipedia:Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), maintained by WikiProject AI Cleanup. The patterns documented there come from observations of thousands of instances of AI-generated text on Wikipedia.
411
+
412
+ Key insight from Wikipedia: "LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases."
@@ -32,15 +32,17 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
32
32
  5. 用户确认后,用一次 `canvas settings set --file <settings.json>` 或 stdin 原子写入所有变更。标准创作门禁必须把最近一次 `settings get` 返回的 `version` 填入请求的 `expectedVersion`,并统一使用这种批量模式;`--field/--value` 只适合已确认无并发写入的交互式便利操作。画风 ID 必须从 `artStyle.options` 选择并解析实时 `option.value`,示例中的 `$ART_STYLE_ID` 不是固定值。`null` 或空字符串表示清除项目覆盖并恢复账户/系统继承。设置 `artStyle` 会保存其当前关联的 `visualBible` 项目快照;画风库之后的修改不反向更新项目,同一请求显式传入 `visualBible` 时以显式值为准。
33
33
  6. 写入后立即再次执行 `canvas settings get`,比较所有目标字段的 `currentValue`、`effectiveValue` 和 `source`。只有结果符合用户确认且所需模型明确可用,才可创建或执行创作节点。409 冲突时重新读取、展示变化并取得确认,携带新 `expectedVersion` 重试;不得盲目覆盖。所有者和管理员可写,协作者只读;写入、回读或权限校验失败时停在配置阶段,不触发任何付费任务。
34
34
 
35
- ## 剧本创作联动
35
+ ## 剧本创作与审计联动
36
36
 
37
37
  **REQUIRED SUB-SKILL: Use short-drama**
38
38
 
39
- 用户需要从选题、创作方案、人物、分集目录开始创作或续写微短剧剧本时,先使用 `short-drama` 完成对应阶段并取得用户确认,再把已确认的单集剧本交给本 Skill 创建 VVICAT 项目、素材和分镜。已有专业剧本时直接创建 `screenplay-resource` 并进入素材与分镜流程,不得重复执行 `novel-to-script`;只有输入仍是小说、故事梗概或需要改编的原文时才使用 `novel-to-script`。
39
+ **REQUIRED SUB-SKILL: Use humanizer**
40
+
41
+ 用户需要从选题、创作方案、人物、分集目录开始创作或续写微短剧剧本时,先使用 `short-drama` 完成对应阶段与 `/review`,再以嵌入模式使用 `humanizer` 审计并改写剧本中的 AI 腔、模板化台词、虚浮修辞、机械排比和不自然节奏。Humanizer 只能润色表达,不得改动已经确认的剧情事实、人物关系、专有名词、数字、时间线、世界观规则、场次结构和拍摄标记;润色后的剧本仍须回到 `short-drama` 检查连贯性并取得用户确认,再交给本 Skill 创建 VVICAT 项目、素材和分镜。已有专业剧本时直接创建 `screenplay-resource` 并进入素材与分镜流程,不得重复执行 `novel-to-script`;只有输入仍是小说、故事梗概或需要改编的原文时才使用 `novel-to-script`。
40
42
 
41
43
  ## 短剧项目制作门禁(强制顺序)
42
44
 
43
- 1. **确认专业剧本**:没有已确认剧本时,必须先调用 `short-drama`,完成创作方案、角色、分集目录、目标单集剧本及 `/review`;已有专业剧本直接复用。剧本未确认时不得创建付费生产节点。
45
+ 1. **确认专业剧本**:没有已确认剧本时,必须先调用 `short-drama`,完成创作方案、角色、分集目录、目标单集剧本及 `/review`,再用 `humanizer` 去除 AI 味并回到 `short-drama` 复核连贯性;已有专业剧本直接复用。剧本未确认时不得创建付费生产节点。
44
46
  2. **选择目标集数后建项目**:先让用户确认本次目标集数,再创建或复用无限画布项目并完成项目配置门禁。只提取目标集实际出现的人物及形象版本、场景及子场景、关键道具及叙事版本;不得为未选集数提前创建资产。
45
47
  3. **按模型决定音色资产**:项目存在有效配音模型且本次需要声音制作时,为出场角色创建音色描述或音色资产。音色设定与 TTS 分离;没有用户授权不得执行声音设计、TTS、图片、音频或视频生成。
46
48
  4. **执行资产—剧情匹配审计**:逐项输出“剧本出现项 / 已创建资源 / selected version / 拆镜连线 / 结论”,检查缺失、多余、同名、真假、年龄、服装、状态、所有权、场景版本、音色偏差、stale、重复和跨类型连线。缺失未清零、版本冲突未确认、必要资源没有 selected version,或实际连线集合不等于目标集需求时,拆镜前门禁失败,禁止运行 `storyboard-breakdown`。
@@ -59,7 +61,7 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
59
61
 
60
62
  用户明确要求专业 Markdown 剧本拆镜测试时,给 `storyboard-breakdown` 显式配置 `storyboardPipelineVersion: 2`、`sourceFormat: screenplay-markdown.v1`、目标集的 `targetLanguage: en|ar`、`platform: TikTok` 和 `aspectRatio: 9:16`,且只能连接一条剧本。该模式只验收分镜文本和镜头资产:声音只记录音色设定,不执行 `voice-design`;不执行 TTS、图片、音频或视频节点。任务成功后确认来源与逐字校验通过且没有新增 IMAGE/AUDIO/VIDEO 版本;任务失败时确认没有新增分镜版本或镜头。
61
63
  5. 生成分镜图前,必须先通过“分镜素材连线门禁”。再用 `canvas asset get/list` 取得人物、场景、道具等已选版本,必要时下载,并把实际图片或可访问预览展示给用户;只提供资产 ID、文件路径或文字说明不算展示。用户明确确认素材与选版后,读取 `storyboard-image` 的实时 `configSchema`,用户未指定画幅且 schema 支持时将 `aspectRatio: 16:9` 显式写入节点,再分析每个镜头的动作阶段、运镜变化、多人调度和连续性难度,选择 schema 允许的最小够用格数:简单镜头建议 4 格,常规镜头使用默认 6 格,复杂镜头建议 9 格,16/25 格只用于用户明确需要的长动作或高密度关键帧。向用户展示逐镜建议并确认后,将各自 `gridSize` 写入对应节点;旧服务 schema 未暴露字段时不得虚假写入,应说明限制并回退到项目有效值,`gridSize` 未另行确认时为 6 格。连续叙事优先建议 `imageLayout: storyboard`,同时说明 `grid` 与 `single` 可选,最终由用户确认布局、镜头范围、参考资产、模型与费用范围。未展示、未确认或连线门禁未通过时禁止生成分镜图。
62
- 6. 执行分镜图后按“生成后自我审计”检查真实产物,并展示给用户确认。新分镜直接读取 `independent` / `previous-tail`,服务端自动协调“前镜视频 → 尾帧提取 → 后镜 start-frame”;先生成前镜和当前尾帧,再提交后镜。依赖未完成、尾帧来自旧视频版本,或模型仅支持 reference 时,服务端返回 `CANVAS_VIDEO_CONTINUITY_REQUIRED`,不得改接普通参考图绕过。之后复用自动创建的 `storyboard-video-prompt`,按实际布局重写视频提示词并确认后执行 `video-generate`。镜头建议时长按正常剧情节拍、口播和动作确定,首尾保留约 1–2 秒剪辑余量;不为命中全片总时长机械扩镜。执行时按当前模型合法时长档位换算,保留原建议时长供剪辑裁切。未展示或未确认分镜图时禁止生成视频。
64
+ 6. 执行分镜图后按“生成后自我审计”检查真实产物,并展示给用户确认。新分镜直接读取 `independent` / `previous-tail`,但该字段只作为建议:服务端不自动创建尾帧节点或连线,也不阻止后镜独立生成。需要严格连续性时,在用户确认后显式执行 `--apply-ready`。之后复用自动创建的 `storyboard-video-prompt`,按实际布局重写视频提示词并确认后执行 `video-generate`。镜头建议时长按正常剧情节拍、口播和动作确定,首尾保留约 1–2 秒剪辑余量;不为命中全片总时长机械扩镜。执行时按当前模型合法时长档位换算,保留原建议时长供剪辑裁切。未展示或未确认分镜图时禁止生成视频。
63
65
  7. 配置门禁固定用一次 `canvas settings set` 写入确认字段;通过门禁后的同阶段节点与连线变更优先合并为一次 `canvas apply`,批量不可用或按“核心原则”处理后仍失败时才回退专用 node/edge 单条命令。每次执行都读取真实任务 ID 并 `task wait`,不用固定 sleep。
64
66
  8. 每批图片、视频或音频生成完成后必须先通过“生成后自我审计”,才能报告成功、请求选版或进入下一付费阶段。在进入视频生成前,必须额外依次执行:(a)“镜头级素材审计”全量清单,核对 reference 集合覆盖镜中人物/场景/道具、无跨类型错边、成对资源引用正确版本、stale 清零、道具词扫 description 兜底、资源文字设定贯穿到 shot/image;(b)“上下镜连续性审计”,按时序逐对相邻镜核对人物位置、道具状态、光影色调、动势视线、景别节奏、叙事桥接,并给有动作连续关系的镜组互加 reference、给极端特写/物证镜补入必要的人物 reference;(c)“分镜逻辑审计”,对照叙事期望逐项扫掉关键词误命中、真假道具互串、跨段同名实体误连、黑场/空镜多余连线、多版本角色(成年/童年)误连、龙套角色引用主角资源等问题,输出逐镜审计表并精确删/加边直到 wired=plan;(d) 把图像模型的已知先验 bias(数字、具象动物、实体面具、中文字样等)列入视频阶段 prompt 的 negative 约束。交付前再次确认 selected version 与下载目录,记录项目、节点、任务和资产 ID、审计结论、失败项与未决项。临时项目在所有结束路径删除;既有项目绝不擅自删除。
65
67
 
@@ -104,7 +106,7 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
104
106
 
105
107
  在素材连线审计通过后、生成视频前,必须再做一次**按时间线顺序**的跨镜连续性检查。这一步独立于单镜素材审计,关注的是“上一镜结尾到下一镜开头”的视觉连续性:
106
108
 
107
- 先执行 `canvas continuity analyze --project <projectId> --json`。该命令只读取镜头、lineage、模型能力与连线,不创建任务、不产生模型费用;输出中的 `waiting-for-source-video` 表示下一镜必须等待上一镜完成,`readyFixes` 表示可用 `--apply-ready` 免费补建提帧节点与连线。视频完成后仍需按本节清单复检真实画面。
109
+ 先执行 `canvas continuity analyze --project <projectId> --json`。该命令只读取镜头、lineage、模型能力与连线,不创建任务、不产生模型费用;`waiting-for-source-video` 只表示建议的尾帧链尚不可建立,不阻止后镜独立生成;`readyFixes` 表示用户确认后可用 `--apply-ready` 免费补建提帧节点与连线。视频完成后仍需按本节清单复检真实画面。
108
110
 
109
111
  1. **检查清单**。按 shotKey 顺序逐镜对相邻两镜核对:
110
112
  - **人物身份与位置**:上一镜的主要人物下一镜是否还在;越肩/反打镜头的前景人物是否与上个对话方匹配;同一场景多镜之间服装/妆容/干湿/血迹等是否一致。
@@ -187,7 +189,7 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
187
189
  - 开始或恢复操作时先读取最新画布、settings 和节点 schema;用 `canvas node edit-shot` 编辑 `storyboard-shot`,用 `canvas node edit-resource` 编辑具有稳定 `operation/resourceKey/resourceType` 的剧本、人物、人物视觉、场景、子场景或道具资源。两类编辑都基于当前 `selectedOutputVersionId` 追加不可变版本,不得覆盖历史版本;资源编辑只替换完整父文档中的目标实体,兄弟节点保持原选版。
188
190
  - 在 `canvas settings get` 后让用户确认 `outputLanguage` 为自动、`zh` 或 `en`;变化只把拆镜、视频提示词、TTS 和视频节点标为 stale,不删除资产、不清除选版、不自动重跑。试听原生配音并核对语言;节点显式 `languageHints` 优先。
189
191
  - 戒指等实体必须进入镜头 `props`。肢体仅在剧情需要时出现,并在画面中可见归属于人物;纯道具镜头不得凭空增加手、手套、人物或 UI。上游变化后只按 stale 链路重跑,历史版本继续保留。
190
- - 视频输入按模型实时能力选择严格首尾帧、普通首帧图生视频或图片参考;模型明确声明多模态参考上限时,可把视频、音频素材分别连接到 `reference-videos`、`reference-audios`。参考音频不能作为唯一媒体输入,多模态参考不能与首尾帧混用。新分镜以规划产物的 `continuity` 为准:`previous-tail` 会自动物化“前镜视频 → 尾帧提取 → 后镜 start-frame”,CLI 不再自行猜测或手工补规划边;执行视频仍需用户确认。
192
+ - 视频输入按模型实时能力选择严格首尾帧、普通首帧图生视频或图片参考;模型明确声明多模态参考上限时,可把视频、音频素材分别连接到 `reference-videos`、`reference-audios`。参考音频不能作为唯一媒体输入,多模态参考不能与首尾帧混用。新分镜以规划产物的 `continuity` 为准;`previous-tail` 只记录需求,需要用户确认后显式执行 `--apply-ready` 或手动连线,执行视频仍需用户确认。
191
193
  - 原始视频交付只下载每镜已选中的 MP4,按镜号命名 `S001.mp4`、`S002.mp4`……;字幕在编排/交付层单独生成,不烧录进原始视频。`manifest` 每行至少记录 `shotNumber`、`nodeId`、`assetId`、`versionId`、`fileName`,不得混入分镜图、音频中间件或烧录字幕版本。
192
194
 
193
195
  ## 安全边界
@@ -124,7 +124,7 @@ ai-short-studio canvas edge delete <edgeId> --project <projectId> --yes --json
124
124
 
125
125
  `canvas node edit-resource` 的文件或 stdin 内容是剧本、人物、人物视觉、场景、子场景或道具资源的 JSON 对象。命令读取最新画布版本与目标节点的 `selectedOutputVersionId`,在该版本的完整父文档中只替换 `resourceKey` 对应实体,再追加并固定当前节点的新选版;名称、资源键、ID、所属人物或场景等身份字段不可修改,兄弟资源节点保持原选版,下游递归标记 stale。缺少稳定 `operation/resourceKey/resourceType` 的旧节点只读,不能按标题猜测。该写入不属于 `canvas apply`;409 后重新读取画布与选版并确认,不得盲目覆盖。
126
126
 
127
- 首尾帧提取使用实时目录中的 `video-frame-extract`,配置为 `{"position":"first"}` 或 `{"position":"last"}`。输入连接 `video`,输出 `image` 是独立 IMAGE 资产版本并记录来源视频版本。新分镜的 `previous-tail` 关系会自动物化尾帧拓扑;历史镜头保留只读启发式分析。节点与连线创建不会自动执行或付费。
127
+ 首尾帧提取使用实时目录中的 `video-frame-extract`,配置为 `{"position":"first"}` 或 `{"position":"last"}`。输入连接 `video`,输出 `image` 是独立 IMAGE 资产版本并记录来源视频版本。`previous-tail` 只记录连续性需求,不自动物化尾帧拓扑;用户可确认预检建议或手动建立节点与连线。创建这些节点与连线不会自动执行或付费。
128
128
 
129
129
  原始视频交付先按镜号读取视频节点的 `selectedOutputVersionId`,再逐个执行 `canvas asset download`,保存为 `S001.mp4`、`S002.mp4`……。同时生成逐行 `manifest`,每行包含 `shotNumber`、`nodeId`、`assetId`、`versionId`、`fileName`。只下载 selected 原始 MP4;字幕单独交付,不混入分镜图、音频中间件或烧录字幕版本。
130
130
 
@@ -137,7 +137,7 @@ ai-short-studio canvas continuity analyze --project <projectId> --json
137
137
  ai-short-studio canvas continuity analyze --project <projectId> --apply-ready --json
138
138
  ```
139
139
 
140
- 该命令主要用于没有 `continuity` 的历史镜头和人工审计。新规划镜头直接读取 `independent` 或 `previous-tail`;当前后视频节点出现后,服务端自动创建稳定尾帧提取节点与 `start-frame` 连线。前镜视频或当前尾帧未完成时,运行后镜会返回 `CANVAS_VIDEO_CONTINUITY_REQUIRED`;reference-only 模型不能满足严格连续性。`--apply-ready` 仅保留给旧启发式建议,不用于新规划关系。
140
+ 该命令用于新旧镜头的连续性分析和人工审计。新规划镜头直接读取 `independent` 或 `previous-tail`,但服务端不会自动创建尾帧节点或 `start-frame` 连线,也不会因依赖未完成阻止后镜独立生成。前镜视频完成后,用户可确认建议再显式执行 `--apply-ready`。
141
141
 
142
142
  ### Meme 专属节点流程
143
143