Skill: kreator666/cclaw (version 1.10.0)

--- name: cclaw version: 1.10.0 description: "Open-source comedy AI + video editing + poster generation. Create standup/sketch/manzai/scripts, edit videos via FFmpeg, and generate comedy posters via canvas-design. Supports Damai/Maoyan/Xiudong platform specs. Keywords: comedy, standup, sketch, video, edit, poster, canvas." description_zh: "全球首个开源喜剧 AI + 视频剪辑 + 海报生成工具。创作脱口秀/小品/漫才/剧本等喜剧内容，或通过自然语言脚本驱动 FFmpeg 进行视频剪辑，或生成脱口秀/演出/金句海报及大麦/猫眼/秀动等平台标准规格物料。" category: "data-analysis" --- # Cclaw — 喜剧写手 + 视频剪辑 + 海报生成 ## 技能架构 本技能分两大模块： 1. **writing** — 喜剧文本创作（知识驱动） 2. **tools** — 工具执行（脚本驱动：视频剪辑 + 海报生成） ``` Cclaw/ ├── SKILL.md ├── commands.md ← 文本命令 + 视频命令 ├── modules/ │ ├── writing/ ← 7种喜剧输出模板 │ └── tools/ │ ├── video/ ← 视频剪辑（FFmpeg + 自然语言脚本） │ └── poster/ ← 海报生成（brief驱动 + canvas-design视觉） ├── knowledge/ │ ├── theory/ ← 喜剧底层原理（必读） │ └── cases/ ← 案例库 + 创作方法论（必读）★ └── references/ ← 索引 ``` --- ## 工作流程（四步，含意图确认分支） ### Step 1：识别命令 读取 `commands.md`，根据用户输入判断是**文本创作**还是**视频工具**。 - 文本创作 → 进入 **Step 1B** - 视频工具 → 进入 Step 2B - 海报工具 → 进入 Step 2C ### Step 1B：意图确认分支 **判断用户给了多大信息量：** **情况A — 用户给了明确场景和方向** > 包含具体话题、主题、场景描述、情绪关键词等实质内容 > 例如："写一段关于程序员相亲的脱口秀"、"吐槽地铁上不让座的大爷" → **直接跳过 Step 1C**，立即进入 Step 2A（创作流程：黑话→模板→案例→理论→输出） **情况B — 用户只给模糊泛化提示** > 只有体裁关键词，无具体方向。触发词包括： > "写一段脱口秀" / "写个漫才" / "写个小品" / "来一段" / "创作" 等（无具体话题） → **必须先执行 Step 1C：意图确认**，确认完毕后再进入 Step 2A --- ### Step 1C：意图确认四问（仅情况B触发） > **交互原则**：每个问题用户可以只选选项，也可以选选项+补充描述。辅助解析时同时提取：①选择的选项 ②用户的额外描述用于丰富创作 用以下对话与用户交互，每轮等待用户回复： **第一步：选定体裁** 请先告诉我，你想要创作哪一种喜剧内容？ A. 脱口秀 B. 漫才 C. Sketch 短喜剧 D. 日式短剧（コント） > 示例A回复：「A」 > 示例B回复：「A，我想讲程序员的生活」 --- **第二步：选定内容核心题材** 根据选择的体裁，对应不同创作内核（可只选数字，也可补充你的想法）： 若选择【脱口秀】，请挑选创作内核： 1. 个人亲身经历与生活故事 2. 日常社会、生活细节观察 3. 个人态度、价值观输出观点 4. 热点事件、社会新闻评论 > 示例A回复：「1」或「1，我想讲相亲的经历」 若选择【漫才】，请挑选创作内核： 1. 日常离谱小事吐槽 2. 认知偏差、常识反差梗 3. 情侣/朋友/职场人物矛盾 4. 脑洞幻想、无厘头设定 > 示例回复：「2」或「2，就是那种理工男跟文科男聊天的日常」 若选择【Sketch】，请挑选创作内核： 1. 经典场景夸张演绎 2. 身份错位、人设反差 3. 社会现象戏剧化讽刺 4. 小众脑洞、荒诞短剧设定 > 示例回复：「3」或「3，我想讽刺那些跟风考研的人」 若选择【日式短剧】，请挑选创作内核： 1. 极端性格被逼到极限（偏执/懦弱/自大/较真） 2. 日常场景被打破（办公室/医院/便利店/家里） 3. 明确目标+层层阻碍升级 4. 荒诞反转收尾 > 示例回复：「1」或「1，我想写一个偏执狂在便利店买东西」 --- **第三步：锁定核心情绪感受** 请选择最能描述你感受的选项（可只选字母，也可补充你的想法）： A. 对某个现象的强烈共鸣（"说的就是你！我也遇到过！"） B. 意外感/荒诞感（"居然还能这样？！"） C. 优越感（"看ta出糗，真爽"） D. 情绪发泄（把憋了很久的话说出来了，爽！） E. 自我解嘲（把自己的糗事说出来，跟自己和解） F. 讽刺批判（对这个现象开炮） G. 荒诞幽默（完全不讲道理，但就是好笑） H. 温暖治愈（笑着笑着被打动了） > 示例A回复：「A」 > 示例B回复：「A，每次看到这种情况我就超有共鸣」 --- **第四步：明确表演受众对象** 本次段子/短剧的演出观众是谁？（可只选数字，也可补充你的想法） 1. 孩童/低龄群体 2. 年轻人、大学生、职场青年 3. 中年、中老年群体 4. 全年龄通用，大众适配 > 示例回复：「2」或「2，主要是给职场人士看」 --- 确认完毕后将四个选项汇总成一句话创作方向。 **第五步：选定风格（可选，跳过则自动推断）** > 风格是大类下的"怎么讲"的调性选择。如果用户已指定风格则跳过；若是模糊创作请求，推荐最匹配的1-2种风格供确认，或让用户补充。 → 读取 `knowledge/style-guide.md`，根据前四步的信息推断推荐风格。 **汇总格式示例：** > "我要创作一段**脱口秀**，主题是**日常社会生活细节观察**，情绪**强烈共鸣（A式）**，受众**普通人**，风格**自嘲式**" --- ### Step 2A：文本创作（知识驱动） **按顺序读取知识，每个步骤都要查，不能跳过：** **⓪ 加载黑话手册** → `knowledge/blackbook.md` → 读取本次创作涉及的所有行业术语（蒸馏/龙虾/国潮/模型崩溃等）的统一解释 → 黑话手册是**第一优先级**——无论创作什么主题，先加载黑话，确保术语含义一致、不泄底、不跳步 **② 读取输出模板 + 确定风格** → `modules/writing/<类型>-template.md` → 确定结构规范、分段要求、对话格式 → **同步读取风格推荐**：`knowledge/style-guide.md` 中该大类下的风格列表 → 若是模糊请求（情况B），输出风格推荐供用户确认；若是明确请求（情况A），根据 prompt 自动推断风格并说明理由 **③ 读取案例库（按风格筛选）** ★ → `knowledge/cases/<类型>/` 下的所有 .md 文件 → 读取时检索风格标签：`style:` → 优先读与本次风格匹配的案例，辅读其他风格建立对比 → 提取创作思路、人物原型、节奏技巧 → 如果该类型目录为空或只有 README，至少读取一个其他类型的案例来建立感觉 → **风格匹配规则**：案例的 `style:` 标签与本次创作风格完全匹配优先；部分匹配次之；无标签案例最后读 **④ 读取理论原理** → `knowledge/theory/eb7cb5ef.md` — 喜剧核心原理（必读） → `knowledge/theory/ac07d434.md` — 包袱结构与铺垫节奏 → `knowledge/theory/126b44e8.md` — 笑的心理学 → `knowledge/theory/9d01e4da.md` — 喜剧类型速查 → `knowledge/theory/japanese-sketch.md` — 日式短剧核心理论（仅日式短剧必读） **⑤ 按模板创作（融入风格调性）** → 套用结构，融合案例灵感和理论手法 → 风格调性贯穿全文：用词语气、节奏密度、情感落点均贴合选定风格 → 输出成品 ### Step 2B：视频工具（脚本驱动） → 读取 `modules/tools/video/README.md` → 解析自然语言脚本 → 生成 FFmpeg 命令并执行 ### Step 2C：海报工具（brief 驱动） → 读取 `modules/tools/poster/README.md` → 识别海报类型： - **通用海报**：standup-poster / comedy-show / social-card - **演出平台海报**：damai-poster / maoyan-poster / damai-detail / maoyan-detail - **Banner**：banner-maoyan / banner-xiudong / banner-damai-999 / banner-damai-1404 → **信息收集**（两步）： - 场景A：刚创作完内容 → 自动提取（标题/金句/作者），只确认缺失信息 - 场景B：单独请求 → 交互确认 brief 模板中的必填字段 → **填充 design brief**：读取对应 `briefs/<类型>.md` 模板，用收集的信息填充 → **调用 canvas-design**：将填充好的 brief 作为 canvas-design 的输入，按其工作流生成视觉作品 → 输出 PNG 或 PDF **演出平台规格速查：** | 类型 | 尺寸 | 用途 | |------|------|------| | 大麦海报 | 1020×1360 | APP首图 | | 猫眼海报 | 1800×2400 (≤2M) | APP首图 | | 大麦详情 | 1020px宽 | 详情页长图 | | 猫眼详情 | 800px宽 (≤13M) | 详情页长图，支持动图 | | 猫眼Banner | 1053×180 | 首页轮播 | | 秀动Banner | 1114×200 | 首页轮播 | | 大麦Banner | 999×375 / 1404×320 | 首页/活动页 | ### Step 3：输出 → 创作输出 → 附加**创作笔记**（手法说明 + 知识来源标注） **⚠️ 输出规则：正文不含结构标签** - **正文**（脱口秀/小品/漫才/剧本等）是给演员/观众看的，必须干净，不含任何结构标记（如【开场 Hook】【第一段】等） - **结构标签**仅供创作规划时在脑中参考，不要出现在最终输出里 - **创作笔记**可以标注各段的手法、节奏、设计意图，方便创作者复盘 --- ## 知识库完整索引 ### 黑话手册（底层术语，⓪优先加载） | 文件 | 内容 | |------|------| | `knowledge/blackbook.md` | 行业术语统一解释（蒸馏/龙虾/国潮/模型崩溃等），每次创作第一步加载 | | `knowledge/style-guide.md` | 风格体系索引：各体裁下的风格分类、自动推断逻辑、风格标签规范 | | `knowledge/theory/` | 喜剧底层原理（必读） | ### 理论（底层原理，必读） | 文件 | 内容 | |------|------| | `knowledge/theory/eb7cb5ef.md` | 喜剧创作核心原理（机械化法则、心不在焉、反差等） | | `knowledge/theory/ac07d434.md` | 包袱结构与铺垫节奏（三番四抖、重复升级） | | `knowledge/theory/126b44e8.md` | 笑的心理学机制（期望落空、压抑释放） | | `knowledge/theory/9d01e4da.md` | 喜剧类型速查（各类型特征与核心手法） | | `knowledge/theory/japanese-sketch.md` | 日式短剧（コント）创作理论（角色/情境/目的三要素、起承转合四步结构、装傻吐槽机制、节奏铁律） | ### 案例库（创作参考，★本次强化）★ > 注意：各目录内容充实程度不均。实际有内容的标注 ✅，空目录标注（待填充）。 | 类型 | 路径 | 内容 | 状态 | |------|------|------|------| | 脱口秀 | `knowledge/cases/standup/` | 成长路径模型、三大杂念粉碎法、排毒日记法、脱口秀第一课一二章笔记、灵感库训练体系 | ✅ 充实，**有风格标签** | | 小品 | `knowledge/cases/sketch/` | 小品结构模板、人物关系设计 | ✅ 有模板，**有风格标签** | | 漫才 | `knowledge/cases/manzai/` | 目录待填充 | ⚠️ 空目录 | | 日式短剧 | [REDACTED_SECRET] | 目录待填充 | ⚠️ 空目录 | | 仿讽 | `knowledge/cases/parody/` | 目录待填充 | ⚠️ 空目录 | | 剧本 | `knowledge/cases/script/` | 目录待填充 | ⚠️ 空目录 | **★ cases 目录为空时：** 直接跳过 cases 步骤，不读取其他类型案例。 **特别说明：** - `knowledge/cases/standup/growth-path.md` — **脱口秀创作者心法**，包含成长阶段模型、排毒日记法（素材挖掘格式）、三大杂念粉碎法。**创作脱口秀时必读。** - `knowledge/cases/sketch/sketch创作模板_平台课程.md` — **小品创作模板**，包含小品三要素、四种节奏、人物弧线设计。 - `knowledge/theory/japanese-sketch.md` — **日式短剧（コント）核心理论**，包含角色/情境/目的三要素、起承转合四步结构、装傻吐槽机制、15秒节奏铁律。**创作日式短剧时必读。** ### 输出模板 | 类型 | 文件 | |------|------| | 脱口秀 | `modules/writing/standup-template.md` | | 小品 | `modules/writing/sketch-template.md` | | 漫才 | `modules/writing/manzai-template.md` | | 日式短剧 | `modules/writing/japanese-sketch-template.md` | | 剧本 | `modules/writing/script-template.md` | | 讽刺 | `modules/writing/satire-template.md` | | 仿讽 | `modules/writing/parody-template.md` | | 荒诞剧 | `modules/writing/absurdist-template.md` | --- ## 风格体系 风格是大类（脱口秀/漫才/Sketch/日式短剧）之下的第二层维度，同一体裁可以有完全不同的讲法。详见 `knowledge/style-guide.md`。 一切喜剧效果的根本来源：**生命中出现机械性、僵硬性**。 三大铁律： 1. **角色越不自觉，越可笑** 2. **观众越不动情，越能发笑** 3. **效果逐级递增** ### ⛔ 理论隐身规则（必须遵守） - ❌ 正文禁止：人名、书名、理论术语标签 - ✅ 创作笔记可保留：手法名 + 简要说明 + 知识来源文件 --- ## 喜剧手法速查 ### 三大情境手法 - **弹簧魔鬼** / **雪球效应** / **系列干扰** ### 三大语言手法 - **换位** / **反转** / **现成句式+荒谬** ### 相声三翻四抖 - **三番（四抖）** — 反复铺垫，第三/四遍突然反转抖包袱 ### 漫才核心节奏 - **连续否认** — 三次以上否定，每次理由更荒谬，最后放弃反驳

path: cclaw/commands.md
content: # Cclaw 命令速查

## 文本创作命令

### 脱口秀 / standup

**命令格式：**
```
写/创作/帮我写一段脱口秀
主题：<一句话描述>
可选：风格偏好、时长要求
```

**知识读取顺序（必须按顺序）：**
1. `modules/writing/standup-template.md` — 结构模板
2. `knowledge/cases/standup/growth-path.md` — 创作者心法（必读）
3. `knowledge/cases/standup/` — 其他案例文件
4. `knowledge/theory/eb7cb5ef.md` — 核心原理
5. `knowledge/theory/ac07d434.md` — 包袱结构

**适用场景：** 单人口述，5-20分钟，幽默演讲、社会观察、自我调侃

---

### 小品 / sketch

**命令格式：**
```
写/创作/帮我写一个小品
主题：<场景+冲突>
人物：<2-5人>
```

**知识读取顺序（必须按顺序）：**
1. `modules/writing/sketch-template.md` — 结构模板
2. `knowledge/cases/sketch/sketch创作模板_平台课程.md` — 小品创作模板
3. `knowledge/cases/sketch/` — 其他案例文件
4. `knowledge/theory/eb7cb5ef.md` — 核心原理
5. `knowledge/theory/9d01e4da.md` — 类型速查

---

### 漫才 / manzai

**命令格式：**
```
写/创作/帮我写一段漫才
题材：<话题描述>
```

**知识读取顺序（必须按顺序）：**
1. `modules/writing/manzai-template.md` — 漫才格式规范
2. `knowledge/theory/eb7cb5ef.md` — 核心原理

**注：** `knowledge/cases/manzai/` 当前为空，跳过案例步骤。

**核心手法：** 连续否认（三次以上）、极致化升级、收尾反差

---

### 讽刺 / satire

**命令格式：**
```
写/创作/帮我写一篇讽刺文章
对象：<社会现象/行业/政策>
角度：<批评/嘲笑/揭示>
```

**知识读取顺序：**
1. `modules/writing/satire-template.md` — 讽刺格式
2. `knowledge/theory/eb7cb5ef.md` — 核心原理
3. `knowledge/theory/126b44e8.md` — 笑的心理学

---

### 仿讽 / parody

**命令格式：**
```
写/创作/帮我写一段仿讽
原作：<作品名/类型>
主题：<新角度/反转>
```

**知识读取顺序：**
1. `modules/writing/parody-template.md` — 仿讽格式
2. `knowledge/theory/9d01e4da.md` — 类型速查

**注：** `knowledge/cases/parody/` 当前为空，跳过案例步骤。

---

### 剧本 / script

**命令格式：**
```
写/创作/帮我写一个喜剧剧本
类型：<情景剧/独角戏/电影/短剧>
主题：<核心冲突>
```

**知识读取顺序：**
1. `modules/writing/script-template.md` — 剧本格式
2. `knowledge/theory/eb7cb5ef.md` — 核心原理

**注：** `knowledge/cases/script/` 当前为空，跳过案例步骤。

---

### 荒诞剧 / absurdist

**命令格式：**
```
写/创作/帮我写一段荒诞剧
概念：<荒诞设定>
```

**知识读取顺序：**
1. `modules/writing/absurdist-template.md` — 荒诞剧格式
2. `knowledge/theory/eb7cb5ef.md` — 核心原理
3. `knowledge/theory/126b44e8.md` — 笑的心理学

---

## 视频工具命令

> 视频工具通过自然语言脚本驱动 FFmpeg。

**基础剪辑：**
```
帮我剪辑视频
文件：<路径>
脚本：<时间戳+操作描述>
```

**拼接：**
```
拼接以下片段（按顺序）：
- <文件1>：<起始时间>-<结束时间>
- <文件2>：<起始时间>-<结束时间>
```

**加字幕：**
```
给视频加字幕
文件：<路径>
字幕内容：<文字>
格式：硬字幕/软字幕
```

**转码：**
```
转换格式
文件：<路径>
目标格式：mp4/webm/mov
```

**更多配方：** 见 `modules/tools/video/README.md`

---

## 海报工具命令

> 海报生成通过 design brief 驱动 canvas-design skill 实现。

### 通用海报

**脱口秀海报：**
```
帮我生成一张脱口秀海报 / 做个B站封面
演员：<名字>
段子名：<名称>
可选：日期、场地、风格偏好
```

**演出宣传海报：**
```
帮我做一张演出海报 / 演出宣传图
演出名：<名称>
日期：<日期> 时间：<时间>
场地：<地点>
演员：<名单>
可选：票价、购票链接、宣传语
```

**金句分享卡：**
```
帮我把这段做成图 / 生成金句卡
内容：<金句文字>
可选：出处、作者、风格偏好
```

### 演出平台标准规格

**海报（竖版）：**
```
生成演出海报（大麦规格）
生成演出海报（猫眼规格）
```
- 大麦：1020×1360px
- 猫眼：1800×2400px（≤2M）

**详情页：**
```
生成演出详情页（大麦规格）
生成演出详情页（猫眼规格）
```
- 大麦：1020px宽，长度不限
- 猫眼：800px宽，长度不限（≤13M，支持动图）

**Banner：**
```
生成Banner（猫眼规格）
生成Banner（秀动规格）
生成Banner（大麦999×375）
生成Banner（大麦1404×320）
```

**从创作联动：**
写完脱口秀/漫才后可直接说「帮我生成一张海报」，自动从创作内容提取信息。

**更多详情：** 见 `modules/tools/poster/README.md`

---

## 通用说明

**创作时必须：**
- 按顺序读取知识（模板→案例→理论）
- 若对应类型的 cases 目录为空，直接跳过案例步骤
- 禁止在正文中出现人名/书名/理论术语标签
- 输出成品后附加创作笔记（手法+知识来源）

**遇到类型不确定时：** 先读取 `knowledge/theory/9d01e4da.md`（类型速查）再决定路由


path: cclaw/knowledge/blackbook.md
content: # 黑话.md — Cclaw 喜剧创作行业术语手册

> **用途**：Cclaw 喜剧写作流程第一步加载文件。  
> **作用**：统一术语解释锚点，确保创作时术语含义一致、不泄底、不跳步。  
> **加载顺序**：所有创作任务 → ①加载黑话.md → ②读输出模板 → ③读案例库 → ④读理论原理 → ⑤按模板创作。

---

## 核心黑话

---

### 蒸馏（Knowledge Distillation）

**本义（AI 领域）**  
大模型（教师模型）把自己会的知识压缩提炼给小模型（学生模型），小模型用更少的参数学会了大模型的核心能力。

**喜剧映射**  
脱口秀演员 A 写了一个好段子，演员 B 在开放麦听到后，用类似的结构、角度、甚至原句，"借鉴"了一下，第二天上了自己的台。  
→ A 是教师模型，B 是学生模型。  
→ B 干的事叫**段子蒸馏**。  
→ 蒸馏率越高，差别越小——B 的段子越像 A 的。

**喜剧中的笑点方向**  
- 把"蒸馏"这个词正儿八经用在脱口秀圈，有一种学术论文式的讽刺感  
- "知识蒸馏"→"段子蒸馏"→"蒸馏²"→"元蒸馏"，层层升级  
- 区分：学习会说谢谢，蒸馏连标点符号都不改

---

### 龙虾（OpenClaw / AI Agent）

**本义**  
龙虾是一个 AI Agent（人工智能助手），名字来源于它的"钳子"（tools/工具能力）——能帮用户执行各种任务，包括写文案、查资料、剪视频等。

**喜剧映射**  
龙虾 = 全网最大的蒸馏器。  
它从整个互联网搬内容，搬完加上自己的"外壳"（提示词包装），输出给用户。  
用户以为自己在用 AI，实际上在用全网蒸馏后的"水果味"。

**喜剧中的笑点方向**  
- 龙虾有钳子 = AI 有工具能力 = 能干活  
- 龙虾既是厨师又是食材——AI 写的段子又能被人类再蒸馏  
- "龙虾焦虑"：不是怕吃龙虾，是怕变成龙虾——一个每天蒸馏全网、不需要内疚的"我"

---

### 国潮（Fake Guochao）

**本义**  
"国潮"本意是带中国传统文化元素 + 现代潮流设计的商品/品牌。但大量品牌只是在商品上贴传统符号（龙凤、祥云、京剧脸谱），并没有文化内涵，俗称**假国潮**。

**喜剧映射**  
假国潮 = 万物 + 龙凤祥云 = 国潮。  
公式：**任何东西 + 传统符号 = 国潮联名款**  
越假越潮，越浅越贵。

**喜剧中的笑点方向**  
- "加了两块钱的龙"——贴了传统元素就敢涨价  
- 万物皆可国潮：煎饼果子、马桶盖、银行理财（兵马俑联名手机壳）  
- 归谬法：国潮 × 清明节限定款（谁买？买了送谁？）  
- 身份错位：真手艺人从不说"国潮缂丝"——他们只说"缂丝"；加了前缀的都是怕你不觉得它潮

---

## 使用指南

| 黑话 | 适用主题 | 推荐手法 |
|------|---------|---------|
| 蒸馏 | 行业内部吐槽、open relationship | 铺垫-反转、元蒸馏 |
| 龙虾 | AI × 喜剧、工具焦虑 | 身份错位、弹簧魔鬼 |
| 国潮 | 消费主义、文化符号 | 归谬法、逻辑滑坡 |

---

*黑话文件 · 版本 1.1 · 2026-04-25（精简版）*

path: cclaw/knowledge/cases/japanese-sketch/README.md
content: # 日式短剧案例库

> 本目录存放日式短剧（コント）创作案例和参考

## 什么是日式短剧（コント）？

- 5分钟极快节奏短剧
- 核心公式：极端性格 + 明确目标 + 阻碍升级
- 节奏铁律：15秒一个小笑点，1分钟一个大爆点
- 必须有明确收尾（拒绝开放式结局）

## 创作核心理论

详见：`knowledge/theory/japanese-sketch.md`

## 输出模板

详见：`modules/writing/japanese-sketch-template.md`

## 案例索引

（待填充）


path: cclaw/knowledge/cases/manzai/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: cclaw/knowledge/cases/parody/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: cclaw/knowledge/cases/script/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: cclaw/knowledge/cases/sketch/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: cclaw/knowledge/cases/sketch/sketch创作模板_平台课程.md
content: # Sketch素描喜剧创作模板（平台课程框架）

## 来源
文件：C:\Users\tiger\Desktop\喜剧知识库\意辰的sketch作品档案.docx
分类：cases/sketch
主题：6天训练模板——从灵感到完整作品

---

## 一、模板结构说明

本文档为 Sketch 素描喜剧的**创作训练框架**，包含6个训练日模板。
每个训练日均有6个字段，创作时按顺序填写。

### 六大字段说明

| 字段 | 说明 |
|------|------|
| **作品标题** | 给你的作品起个名字 |
| **灵感** | 这个作品的灵感来源是什么？（生活观察/负面情绪/新闻事件/日常细节） |
| **前提** | 一句话概括整个 Sketch 的核心设定/情境/规则（Premise） |
| **结构** | 作品的叙事结构：如何建立→如何推进→如何收尾 |
| **全文** | 完整的 Sketch 脚本文本 |
| **教练反馈** | 创作完成后的复盘/优化点 |

---

## 二、六天训练日模板

### 训练日6：完成你的第一个原创喜剧作品

**作品标题：** __________________________

**灵感来源：**
（从哪里得到的灵感？生活中观察到什么？什么触发了这个想法？）

**前提（Premise）：**
（一句话概括这个 Sketch 的核心设定/情境/荒诞规则）
> 例："两个人被困在电梯里，但电梯只是不动，并没有坏"

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[人物1]：
[人物2]：
[人物3]：
...（完整对话/动作脚本）
```

**教练反馈：**
□ 前提是否清晰？
□ 结构是否有递进？
□ 笑点密度够吗？
□ 有没有重复利用的前提/套路？
□ 优化建议：__________________________

---

### 训练日7：优化你的第一个原创喜剧作品

**作品标题：** __________________________

**灵感来源：**
（对训练日6作品的优化灵感）

**前提（Premise）：**
（优化后的前提是否更清晰/更有力？）

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（优化版脚本）：**
```
[完整优化后的脚本]
```

**教练反馈：**
□ 对比训练日6，改了哪些地方？为什么改？
□ 优化后的版本好笑在哪里？
□ 还有哪些地方可以继续打磨？

---

### 训练日9：完成你的第二个原创喜剧作品

**作品标题：** __________________________

**灵感来源：**
（新的灵感来源，尝试不同的领域或角度）

**前提（Premise）：**
（一句话概括）

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[完整脚本]
```

**教练反馈：**
□ 这个作品和第一个有什么不同？
□ 这次创作遇到的最大挑战是什么？

---

### 训练日10：优化你的第二个原创喜剧作品

**作品标题：** __________________________

**全文（优化版脚本）：**
```
[优化后的脚本]
```

**教练反馈：**
□ 优化前后对比：主要改了哪里？
□ 第二个作品比第一个进步在哪里？

---

### 训练日11：24小时限时创作——第三个原创作品

**限定条件：** 24小时内完成从灵感到完整脚本

**作品标题：** __________________________

**灵感来源：**
（限时创作的灵感来源：必须快速锁定灵感）

**前提（Premise）：**
（快速形成的前提）

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[完整脚本]
```

**教练反馈：**
□ 24小时限时够用吗？哪个环节最费时间？
□ 限时创作的压力带来了什么？是更高效还是更焦虑？

---

### 训练日12：24小时限时创作——第四个原创作品

**限定条件：** 24小时内完成从灵感到完整脚本

**作品标题：** __________________________

**灵感来源：**

**前提（Premise）：**

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[完整脚本]
```

**教练反馈：**
□ 第四次比第三次更快了吗？快在哪里？
□ 到现在为止，四个作品中最满意哪个？为什么？
□ 自己的创作风格开始形成了吗？

---

## 三、训练路径总结

| 训练日 | 任务 | 关键词 |
|--------|------|--------|
| Day 6 | 完成第1个原创作品 | 从零到一 |
| Day 7 | 优化第1个原创作品 | 打磨 |
| Day 9 | 完成第2个原创作品 | 尝试不同角度 |
| Day 10 | 优化第2个原创作品 | 迭代 |
| Day 11 | 24小时限时创作第3个作品 | 速度 |
| Day 12 | 24小时限时创作第4个作品 | 效率复盘 |

### 创作核心流程（可复用）
1. **锁定灵感** — 观察生活，记录触动点
2. **提炼前提** — 用一句话说清楚设定
3. **设计结构** — 建立→推进→收尾
4. **写出全文** — 对话+动作+节奏
5. **获取反馈** — 讲给别人听，记录反应
6. **优化迭代** — 哪里不好笑改哪里

---

## 四、Sketch（素描喜剧）核心特点

### 与脱口秀的区别

| 维度 | 脱口秀 | Sketch素描喜剧 |
|------|--------|----------------|
| 人物 | 单人（我） | 多个角色 |
| 时长 | 5-15分钟 | 1-5分钟 |
| 结构 | 铺垫+笑点线性推进 | 情境建立+反复强化+意外收尾 |
| 笑点密度 | 分散，多段子串联 | 高密度，同一情境反复炸 |
| 核心 | "错误"艺术 | "情境"艺术 |

### Sketch 的前提（Premise）类型
- **情境型**：两个人被困在电梯里，但电梯只是不动，并没有坏
- **身份型**：如果医生比病人还紧张
- **规则型**：如果所有人说话都只能反着说
- **反转型**：前面一切正常，最后一个细节颠覆全局

---

## 关键词索引
#sketch #素描喜剧 #作品档案 #训练模板 #前提 #Premise #情境喜剧 #多角色 #限时创作 #结构建立 #灵感收集 #优化迭代


path: cclaw/knowledge/cases/standup/growth-path.md
content: # 脱口秀创作者心法

> 记录创作者成长路径、阶段模型及核心心法。

---

## 成长阶段模型

从新人到专业脱口秀演员的通关路径：

```
喜感觉醒
    ↓
段子手养成
    ↓
开放麦登台
    ↓
商演打磨
    ↓
专场创作
    ↓
主理运营
    ↓
综艺/编剧
    ↓
喜剧搭子
    ↓
老手（持续创作）
```

**关键心态：**

- 脱口秀不是通往某个目的地的路，而是一条消解的路
- 过去选择的路、没选择的路，都不再是黑历史——都是你来时的段子
- 即使你是路盲，也不用担心：GPS取代不了你，AI取代不了你
- **有目的地会迷路，没有目的地就能放松溜达**

---

## 三大杂念粉碎法

### 杂念一：没有天赋怎么办？

> 答：天赋不过是锦上添花，生存全靠死磕硬扛。
>
> 在开启第二个专场之前，都到不了要拼天赋的地步——现阶段你更需要方法和练习。
>
> 说不定到你做第二个专场的时候，你发现天赋这玩意儿你又有了呢！

**核心心法：**
- "天赋就像银行存款，存货总比你想的要少"
- 从业多年，见过太多"天赋异禀"的流星，却没见过谁靠天赋熬过冷场寒冬
- 脱口秀需要天赋吗？当然。吃饭都要天赋。但在你开启第二个专场前，天赋不是必需品

### 杂念二：我是社恐星人

> 答：社恐不是缺陷，是上天给你装的防伪标识。
>
> 越害怕什么，越要干什么——这叫"逆恐"，是人的心理防御机制。
>
> 社恐内向的喜剧人已经不是一个少数群体。不敢社交的人，往往藏着最汹涌的表达欲。

**核心心法：**
- 社恐成就表达：越抑制不住的表达冲动，越珍惜每次表达的机会
- 上不了社牛桌，就再开一桌，专吃硬菜
- 对着大海喊"努力奋斗"的星爷，段子里自嘲"中悲大悲超大悲"的选手，都是社恐

### 杂念三：我不搞笑怎么办？

> 答：幽默的本质是真实——真实的生活、真实的情绪、真实的荒诞、真实的自己。
>
> 你不需要成为"搞笑的人"，只需要成为"真实的人"。
>
> 观众的笑声，往往来自于他们从你的表达中认出了自己——那个同样在生活里跌跌撞撞、哭笑不得的自己。

**脱口秀的核心真相：**
- 脱口秀再怎么表演也是表达
- 其他喜剧形式再怎么表达也是表演
- 你不需要演技，需要的是真实

---

## 消解功能

脱口秀是一条**消解的路**：

- 让过去的选择不再是遗憾
- 让没选择的路成为素材
- 让所有黑历史变成"来时的段子"
- 让路盲都能找到自己的路

**喜剧的力量是无穷大的。**
一切看起来让人崩溃的事情，都能用喜剧一笑而过。

---

## 排毒日记法（素材挖掘）

按五种情绪分类记录生活经历：

| 情绪 | 对应身体部位 | 记录提示 |
|------|------------|---------|
| 怒 | 肝脏 | 职场怨气、甲方骚操作、同事迷惑行为 |
| 喜 | 心脏 | 狂喜时刻、被当众发好人卡 |
| 思 | 脾脏 | 过度焦虑、拖延症、网购翻车 |
| 悲 | 肺脏 | 社交尴尬、健身卡诈骗、强迫症 |
| 恐 | 肾脏 | 催婚催生、亲戚攀比、代际冲突 |

> 脚越疼的地方，藏着越尖锐的生活真相。
>
> 通则不痛，痛则不通。
>
> 所有生活的痛，终将被你踩在脚下。
>
> 所有毒素，都是你脱口秀独一无二的素材。

**格式：**
```
日期：
怒：
喜：
思：
悲：
恐：
```

---

## 喜剧原力觉醒

**方法：成为优秀的脱口秀观众**

1. 买一张脱口秀商演门票，或打开一场脱口秀专场视频
2. 沉浸式吸收，全程大笑、鼓掌
3. 对段子不抱任何审视——好笑就笑，不好笑就跟着别人笑
4. **重点不是让喜剧水平提上去，重点是让自己的笑点降下来**

> 成为一名合格的脱口秀演员之前，先做一个优秀的脱口秀观众。


path: cclaw/knowledge/cases/standup/README.md
content: # 脱口秀案例库

> 存放脱口秀/单口喜剧的优秀案例，供创作参考。

## 当前内容

| 文件 | 内容 |
|------|------|
| `growth-path.md` | 创作者成长路径 + 三大杂念粉碎法 + 排毒日记法 + 喜剧原力觉醒 |

## 案例格式

每个案例文件包含：
- 案例标题
- 核心笑点分析
- 使用的手法和理论原理
- 完整或节选的原文


path: cclaw/knowledge/cases/standup/喜剧灵感库训练体系_平台课程.md
content: # 喜剧灵感库训练体系（平台课程）

## 来源
文件：意辰的喜剧灵感库-工作表1.csv
分类：cases/standup
主题：4周100条灵感训练——从负面情绪到喜剧前提的完整方法论

---

## 一、训练体系总览

### 四阶段训练流程

| 训练日 | 任务 | 核心产出 |
|--------|------|----------|
| **训练日1** | 收集负面情绪，建立喜剧灵感库 | 情绪对象 + 负面情绪 + 具体原因 |
| **训练日2** | 归类你的喜剧灵感 | 游戏类型 + 评级 |
| **训练日3** | 建立奏效的喜剧前提 | Who/Where/What/反常点/一句话Game |
| **训练日4** | 优化你的喜剧前提 | 完整前提 + 五维评分 |

### 训练规模
- 4周 × 5天/周 × 5条/天 = **100条灵感**
- 每天5条，持续积累，建立个人喜剧素材库

---

## 二、训练日1：收集负面情绪

### 灵感收集公式

> **我对 [对象] 感到 [负面情绪]，因为 [具体原因]**

### 三个评估维度

| 维度 | 选项 |
|------|------|
| **普遍性** | 普遍 / 刁钻 |
| **准确性** | 准确 / 不准确 |
| **共鸣强度** | 共鸣广泛且强烈 / 广泛但不强烈 / 并不广泛也不强烈 |

### 评级标准

| 评级 | 含义 |
|------|------|
| **A** | 有潜力成为优秀作品 |
| **B** | 适当调整后有机会成为完整作品 |
| **C** | 需要重新思考 |

### 有效灵感示例（去名化）

| # | 对象 | 情绪 | 原因 | 普遍性 | 准确性 | 共鸣 | 评级 |
|---|------|------|------|--------|--------|------|------|
| 1 | 应酬 | 害怕 | 上次应酬吹的牛还没有兑现 | 普遍 | 不准确 | 广泛且强烈 | A |
| 2 | 老婆 | 奇怪 | 都结婚了还老是要带孩子去姥姥家住，从异地恋变成了留守丈夫 | 普遍 | 准确 | 广泛但不强烈 | B |
| 3 | 自己 | 生气 | 老是没有办法按时完成计划，计划买眼镜，近视都快好了眼镜还没买 | 普遍 | 准确 | 广泛且强烈 | A |
| 4 | 密室 | 害怕 | 去的人也让你害怕，密室没有年龄上限，一个小姑娘带着她73岁的奶奶去了，NPC都害怕 | 刁钻 | 准确 | 不广泛也不强烈 | B |
| 5 | 管理员工 | 困难 | 员工比我还爱刷存在感，别人一问谁是公司负责人，她先开口问什么事 | 普遍 | 准确 | 广泛但不强烈 | B |
| 6 | 广告 | 讨厌 | 太让人焦虑了 | 普遍 | 准确 | 广泛且强烈 | A |
| 11 | 直女 | 生气 | 她永远读不懂你的浪漫 | 普遍 | 准确 | 广泛且强烈 | A |
| 23 | 看电影感动到哭临座问你哭了啊 | 讨厌 | 一下打断了情绪和剧情 | — | — | — | — |
| 26 | 老婆闺蜜管我家的事 | 生气 | 关你们屁事 | — | — | — | — |

### 教练反馈规律（从案例中提炼）

- **"可以写一下具体对'你'的影响"** → 灵感要落到自身，不能只是观察
- **"可以列举一些事例"** → 原因要具体，不能只是感受
- **"不太能理解你的游戏"** → 反常点要清晰，不能模糊
- **"给角色起一个名字"** → 人物要具体，不能只说"我"
- **"直人反应很重要"** → Sketch中要有对比角色

---

## 三、训练日2：归类喜剧灵感

### 两种游戏类型

| 类型 | 定义 | 适用场景 |
|------|------|----------|
| **设定游戏（Setting Game）** | 建立一个荒诞的世界规则/情境，所有人都在这个规则下运作 | 社会现象、制度吐槽、环境荒诞 |
| **角色游戏（Character Game）** | 一个角色有特定的反常行为模式，在不同情境下反复触发 | 人物性格、关系矛盾、行为怪癖 |

### 灵感→游戏类型对应示例

| 灵感 | 游戏类型 | 理由 |
|------|----------|------|
| 应酬吹牛没兑现 | 设定游戏 | 建立"酒桌面试"的荒诞规则 |
| 员工爱刷存在感 | 角色游戏 | 角色有固定行为模式（刷存在感） |
| 广告贩卖焦虑 | 设定游戏 | 建立"广告演员做什么都焦虑"的规则 |
| 直女读不懂浪漫 | 角色游戏 | 角色有固定反应模式（误解浪漫） |
| 老婆闺蜜管闲事 | 设定游戏 | 建立"闺蜜帮帮团"的荒诞节目设定 |

---

## 四、训练日3：建立奏效的喜剧前提

### 前提四要素（Who/Where/What/反常点）

> **前提 = 谁（Who）+ 在哪（Where）+ 做什么（What）+ 反常点**

### 一句话提炼游戏（Game）公式

> **[Who] 因为 [反常特质/规则]，导致 [What] 越 [正常行为] 越 [荒诞结果]**

### 完整前提示例（去名化）

**示例1：互联网体检**
- Who：一个顾客
- Where：一家体检中心
- What：体检
- 反常点：体检前要看广告，用"互联网"方式乱收费
- Game：这家体检中心用互联网的方式乱收费
- 前提：完整 | 简单 | 清晰 | 聚焦 | 共鸣广泛且强烈 → **A**

**示例2：一心不二用**
- Who：教练和学员
- Where：一家拳击馆
- What：学拳击
- 反常点：先做动作后出声，学员一心不二用导致"声画不同步"
- Game：学员一心不二用导致声画不同步
- 前提：完整 | 简单 | 清晰 | 聚焦 | 广泛但不强烈 → **A**

**示例3：存在感前台**
- Who：公司前台员工 + 投资人
- Where：办公室
- What：前台带投资人在公司参观
- 反常点：前台表现得更像投资人
- Game：前台带投资人参观，越参观越感觉自己是老板
- 前提：完整 | 简单 | 清晰 | 聚焦 | 广泛但不强烈 → **A**

**示例4：直女老婆**
- Who：夫妻（丈夫 + 直女老婆）
- Where：卧室
- What：丈夫对老婆表达浪漫
- 反常点：老婆总能误解浪漫
- Game：老公越浪漫老婆越生气
- 前提：完整 | 简单 | 清晰 | 聚焦 | 广泛且强烈 → **A**

**示例5：酒桌面试**
- Who：面试者和HR
- Where：酒桌
- What：HR在酒桌上面试面试者
- 反常点：完成酒桌任务才能入职
- Game：面试者完成酒桌任务才能入职

**示例6：闺蜜帮帮团**
- Who：四位闺蜜
- Where：《闺蜜帮帮团》节目现场
- What：闺蜜们为别人家的事情互相支招
- 反常点：像管自己家里的事情一样管对方家的事
- Game：闺蜜们像管自己家一样管别人家的事

---

## 五、训练日4：前提五维评分体系

### 五个评估维度

| 维度 | 好 | 差 |
|------|----|----|
| **完整性** | 完整 | 不完整 |
| **复杂度** | 简单 | 复杂 |
| **清晰度** | 清晰 | 含糊 |
| **聚焦度** | 聚焦 | 失焦 |
| **情绪共鸣** | 广泛且强烈 | 不广泛也不强烈 |

### 评级对应

| 评级 | 五维特征 |
|------|----------|
| **A** | 完整+简单+清晰+聚焦+广泛且强烈 |
| **B** | 大部分达标，1-2项需调整 |
| **C** | 多项不达标，需重新思考 |

---

## 六、核心方法论总结

### 喜剧灵感的来源公式
> **负面情绪 → 具体原因 → 普遍共鸣 → 喜剧前提**

### 好灵感的三个标准
1. **普遍**：不是只有你一个人有这种感受
2. **准确**：能精确描述那个让你不爽的点
3. **强烈**：情绪足够强，观众能感同身受

### 好前提的核心特征
- **一句话说清楚**：Who + Where + What + 反常点
- **越 X 越 Y 结构**：越正常行为越荒诞结果（Game的核心）
- **直人不可缺**：Sketch中必须有对比角色来放大反常

### 从灵感到前提的转化路径
```
负面情绪
    ↓
找到具体原因（不是感受，是事件）
    ↓
判断游戏类型（设定游戏 or 角色游戏）
    ↓
提炼Who/Where/What/反常点
    ↓
一句话Game（越X越Y）
    ↓
五维评分 → A/B/C
```

---

## 关键词索引
#喜剧灵感库 #负面情绪 #灵感收集 #游戏类型 #设定游戏 #角色游戏 #喜剧前提 #Premise #Game #WhoWhereWhat #反常点 #五维评分 #越X越Y #直人 #训练体系 #100条灵感 #平台课程


path: cclaw/knowledge/cases/standup/脱口秀第一课_平台课程.md
content: # 脱口秀第一课 — 意辰（平台课程）

## 来源
文件：C:\Users\tiger\Desktop\喜剧知识库\脱口秀第一课.pptx
讲师：平台脱口秀导师
主题：脱口秀入门第一课——什么是脱口秀

---

## 一、行业背景

### 行业迎来爆发
- 线上节目众多，线下演出暴增

### 人才紧缺
- 脱口秀厂牌比脱口秀演员还多

### 新的机会
- 商务（品牌活动现场）+ 线下剧场演出
- 新人单月商演 30-40 场，单场 500 元
- 副业月入 2w+
- 入门门槛相对较低

---

## 二、什么是脱口秀

### 核心定义
**脱口秀是错误的艺术**

### 基本参数
| 参数 | 内容 |
|------|------|
| 时长 | 5分钟（线上），线下15-20分钟 |
| 人物 | 我 |
| 节奏 | 聊天 |
| 共鸣 | 不是逗观众笑，是观众觉得好笑 |

### 段子结构
> **铺垫 + 一个错误引发的笑点**

#### 例子（健身教练段子）：
铺垫：现在很多人都办卡，有些人办卡是为了增肌，有些人办卡是为了减脂，有些人办卡是因为**一时糊涂**

错误：男人深蹲，女生受不了，女人深蹲，男人受不了，**但我们的学员不一样，他们深蹲，腿受不了**

结论：在教练严格指导下，学员完成了从身体瘦弱到肢体残疾的转变

---

## 三、铺垫是灵魂

### 铺垫怎么写？

**核心方法：负面情绪共鸣**

### 负面情绪的四大类型：奇、难、怕、蠢

| 类型 | 公式 |
|------|------|
| 奇（奇怪） | 我觉得XXX太奇怪了，因为YYY |
| 难（困难） | 我觉得XXX太困难了，因为YYY |
| 怕（害怕） | 我觉得XXX太可怕了，因为YYY |
| 蠢（愚蠢） | 我觉得XXX太蠢了，因为YYY |

### 负面情绪素材来源
- 健身房推销办卡
- 办卡后不好好教学
- **生活中负面情绪就是我们的素材**

### 负面情绪转化公式
**我觉得（____）太（奇/难/怕/蠢）了，因为（____）**

#### 例句：
- "我觉得减肥太困难了，因为一减肥就想吃东西"
- "我觉得我爸太奇怪了，因为他干什么都要计算一下"
- "我觉得婆媳矛盾太可怕了，因为我实在不知道该帮谁"

---

## 四、灵感素材分类体系（九宫格）

| 分类维度 | 选项 |
|----------|------|
| 情绪类型 | 奇怪、困难、害怕、愚蠢、其他 |
| 人物 | 我爸、我妈、老板、同事、朋友 |
| 事情 | 工作中、生活中、学习中 |
| 物件 | 手机、酒、车、房 |
| 地点 | 公司、家里、学校、健身房 |
| 主题/情境 | Deadline、社交、爱情 |

---

## 五、两周训练课程框架

### 第一周：有灵感——找到你有趣的灵魂
| 训练日 | 主题 | 作业 |
|--------|------|------|
| Day 1 | 找到有趣的自己 | 一起犯错，在错误中找到自己 |
| Day 2 | 建立你的脱口秀灵感库 | 召唤灵感的工具包 |
| Day 3 | 找到你最想消解的负面情绪 | 负面情绪怎么转换成段子 |

### 第二周：有主题——写出第一个5分钟的段子
| 训练日 | 主题 | 作业 |
|--------|------|------|
| Day 4 | 写出第一个负面情绪的五分钟 | 如何一错再错？用错误来奖励观众 |
| Day 5 | 讲个小故事给自己听 | 掌握把一件事情讲好笑的超能力 |
| Day 6 | 和一起犯错的人共同完成一个有趣故事 | 一起犯错的人 |

---

## 六、核心金句

1. **脱口秀是错误的艺术**
2. **段子结构：铺垫 + 错误引发的笑点**
3. **灵感来源：负面情绪**
4. **只要生活还在继续，脱口秀就还会继续**
5. **脱口秀是一种有趣的生活方式**
6. **让有意思的事情有意义，让有意义的事情有点意思**

---

## 七、实战热身练习

### 接话茬练习
1. 老板上班时看到你在打游戏，你发现后说：______
2. 跟新认识的朋友一起吃饭，朋友把一瓶自家酒厂的白酒放到桌上，你看到后说：______
3. 人猿泰山在丛林里练习攀缘跳跃，旁边的猴子看他在练习时摔的头破血流，跟同伴说：______

### 作业要求
- 建立你的脱口秀素材库
- 写下四条灵感，主题不限
- 使用格式：「我觉得（____）太（奇/难/怕/蠢）了，因为（____）」
- WORD文档命名：你的姓名，今晚12:00前提交给助教

---

## 八、补充要点

- **铺垫是灵魂** — 铺垫写得好，笑点自然来
- **不是逗观众笑，是观众觉得好笑** — 共鸣是关键
- **给理性和感性洗牌，让你创作时既有理性又有激情**
- **灵感pass卡**：随时记录灵感，不要让它溜走

---

## 关键词索引
#脱口秀 #脱口秀第一课 #铺垫 #负面情绪 #奇难怕蠢 #段子结构 #错误艺术 #灵感库 #北脱 #五分钟段子 #接话茬 #素材收集 #健身教练段子


path: cclaw/knowledge/cases/standup/脱口秀第一课_第二章_上桌写段子_平台课程.md
content: # 脱口秀第一课 第二章——上桌写段子（平台课程）

## 来源
文件：C:\Users\tiger\Desktop\喜剧知识库\《脱口秀第一课》第二章上桌写段子.docx
主题：段子结构与五种笑感

---

## 一、写段子的万能公式

### 段子是双截棍：铺垫 + 笑点

> **段子 = 铺垫 + 笑点**

- **铺垫**：段子的前半部分，不好笑的部分
- **笑点**：段子的后半部分，好笑的部分

### 段子示例

**示例一**
- 铺垫：我为了跟我女朋友求婚，我包下了全市最大最漂亮的教堂，求婚时我说："亲爱的嫁给我吧！"
- 笑点：她说："我信佛。"

**示例二**
- 铺垫：人要多跟积极的人聊天，有积极乐观的人聊天就像给健康上了一道保险，所以咱们以后得多联系。
- 笑点：我就是卖保险的。

**示例三**
- 铺垫：爷爷走了之后，全家都非常难过，尤其是我奶奶。
- 笑点：爷爷临走也没跟她说……到底私房钱藏哪里了。

### 双截棍比喻

> 段子是双截棍：
> - 铺垫就是你握在手中的一截，要**真实有力**
> - 笑点就是给人当头一棒的一截，主打**出奇不意**
> - 两截棍身中间的链接靠的是链条，铺垫和笑点之间的链接靠的是**内在逻辑**

### 即刻上桌练习

写下你觉得好笑的段子：
- 铺垫：__________________________
- 笑点：__________________________

把段子讲给朋友们，记录反应：
- □ 观众笑到拍大腿 → 写进段子库
- □ 冷场如停尸房 → 恭喜你完成50%，已经把不好笑的部分搞定了

---

## 二、五种笑感

> 自古以来让人发笑的段子不外乎五种感觉：**共鸣感、意外感、优越感、发泄感、荒诞感**

### 1. 共鸣感（最本质）

**定义**：通过情感共振消解孤独感，让人们在笑声中完成对现实困境的集体疗愈

**原理**：镜像效应——观众激活大脑中的镜像神经元，"这不就是我吗？"

**经典手法**：
- 用观众熟悉的场景解构新事物
- 击中被压抑的集体记忆
- 撕破虚伪面纱，展现真实困境
- 重口味比喻解构真相

**案例要点**：
- 剧本杀吐槽："专门抽出几个小时，就是为了跟一群陌生人开一下午的会"
- 种族历史解构："白宫是奴隶造的，所以严格来说是黑宫"
- 生育困境："怀孕像吞了西瓜的企鹅"
- 婚姻真相："曾经爱到愿意吃她拉的屎，现在连她做的饭都不想吃"

> 共情幽默是照亮彼此的精神篝火

---

### 2. 意外感（最常见）

**定义**：精准击中大脑的"预测-颠覆"机制

**原理**：
1. 铺垫激活常规认知框架
2. 大脑基于经验自动补全后续发展
3. 笑点打破预期，前额叶皮层与伏隔核联动释放多巴胺
4. 带来类似解谜的"认知过山车"神经愉悦

**示例拆解**：
- 铺垫："爷爷去世了，全家难过，尤其是奶奶" → 大脑预测：奶奶不舍
- 笑点："爷爷没告诉她私房钱藏哪" → 颠覆预期，神经错愕

**相关现象**：
- 你问爱不爱，他说你是个好人
- 你问什么时候上班，他说门口湘菜馆不错

> 康德："喜剧就是期待的虚无"

---

### 3. 优越感（最讨喜）

**定义**：观众突然意识到自己比他人优越，因安全距离产生心理优势

**核心原则**：
> **让观众产生优越感，不是自己优越感**

**手法一：自嘲**
- 对自己口音、身材、外貌、经济状况等进行自我矮化
- 表面自我贬低，实则构建喜剧优势壁垒
- 以最低的姿态站上最高的舞台

**经典自嘲方向**：
- 外貌自嘲："我每天照镜子就想吐，医生说不知道咋回事但视力没问题"
- 身份自嘲："别人是父母爱情的证明，我是父母犯罪的证明"（混血身份）
- 年龄自嘲："去健身房不是为了健康，是为了葬礼上体面点"

**手法二：凡尔赛（慎用）**
- 通过"反向表述"或"假装抱怨"不经意炫耀
- 选择"无关核心优势"的次要属性（如口音、体重）
- 避免炫耀引发观众反感

**凡尔赛示例**：
- "好羡慕你们长胖，我每天吃五顿夜宵还是不到90斤"
- "我真的好讨厌自己，不管怎么努力在别人眼中就只是一个帅哥"

**最佳组合**：先凡尔赛再自嘲 → 让听众最终感到自己比段子中对象更聪明、更优越

> 很多喜剧大师以最低的姿态站上了最高的舞台

---

### 4. 发泄感（最解压）

**定义**：心理压抑的释放阀门，跨越禁忌的便捷小道

**理论基础**（弗洛伊德《诙谐及其与潜意识的关系》）：
- 诙谐是跨越禁忌的便捷小道
- 杰出的诙谐因表达被压抑的痛感而让人获得强烈情感释放
- 玩笑是潜意识的代理人，通过"凝缩"和"置换"将攻击性、性冲动或焦虑转化为"合法"表达

**原理**：
- 演员表演发泄时，观众大脑镜像神经元同步激活
- 产生"替代性宣泄"体验

**案例要点**（耳光事件回应）：
- 先陈述对方的"不公"
- 再表达自己的"立场"
- 最后用荒诞反转消解愤怒
- 观众通过代入"批判者角色"获得情绪释放

> 发泄感段子是潜意识的合法出口

---

### 5. 荒诞感（最高级）

**定义**：用完全不合常理、超脱日常逻辑的情境与表达，打破现实认知框架

**核心特征**：
- 不依赖共情、反转或优越感
- 靠纯粹的逻辑悬空与现实错位制造笑点
- 笑过之后让人陷入对世界合理性的沉思

**手法一：事件本身的反常规**
- "高中班里两个同学谈恋爱被班主任发现，叫来双方家长，双方家长聊了聊发现对方条件不错，就订婚了"
- 完全违背校园规则与正常婚恋逻辑，却具备微妙的合理性

**手法二：无意义对抗有意义**
- "A.不是 B.有可能不是 C.钝角"
- 钝角作为完全无关的选项强行出现，彻底跳出正常思维路径

**手法三：把日常小事放大到非现实维度**
- 夸张肢体节奏、跳脱正常叙事的台词递进
- 不纠结生活真相，只营造逻辑悬空的荒诞氛围

**手法四：现实扭曲到极致**
- "钻石房"吐槽：找不到一个直角，却有四个东南角；想算面积得连辅助线
- "家徒十二壁"、"用别的房子边角料拼出来的"

> 荒诞感是用反逻辑、超现实的表达，解构世界的既定规则与正常认知，以无意义对抗意义，以不合理映照合理

> 加缪："就像仇恨能将人与人连接在一起一样，荒诞也将人与世界紧紧联系在一起"

---

## 三、五种笑感的关系

| 笑感 | 定位 | 核心机制 | 效果 |
|------|------|----------|------|
| 共鸣感 | 最本质 | 镜像神经元激活 | 集体疗愈 |
| 意外感 | 最常见 | 预测-颠覆机制 | 神经愉悦 |
| 优越感 | 最讨喜 | 社会比较心理 | 心理优势 |
| 发泄感 | 最解压 | 潜意识释放 | 情感宣泄 |
| 荒诞感 | 最高级 | 逻辑悬空错位 | 沉思后笑 |

**效果叠加**：
- 有一种感觉 → 段子能好笑
- 有三种感觉 → 段子能爆笑
- 五感并存 → 天才级别

---

## 四、关键金句

1. "脱口秀不是脱口就能秀，想上桌得先上桌写段子"
2. "段子是双截棍，铺垫要真实有力，笑点要出奇不意"
3. "喜剧就是期待的虚无" —— 康德
4. "共情幽默是照亮彼此的精神篝火"
5. "很多喜剧大师以最低的姿态站上了最高的舞台"
6. "发泄感段子是潜意识的合法出口"
7. "喜剧的最高境界，是让听众在拍腿大笑后突然沉默——因为他们意识到，自己笑的，正是真实生活的荒诞"

---

## 五、练习框架

### 段子写作模板
```
铺垫：__________________________（真实有力，建立预期）
笑点：__________________________（出奇不意，打破预期）
笑感类型：□共鸣 □意外 □优越 □发泄 □荒诞
```

### 五感检查清单
- [ ] 是否击中观众的集体记忆？（共鸣感）
- [ ] 是否打破预期制造惊喜？（意外感）
- [ ] 是否让观众感到优越？（优越感）
- [ ] 是否释放被压抑的情绪？（发泄感）
- [ ] 是否用荒诞解构现实？（荒诞感）

---

## 关键词索引
#脱口秀 #段子结构 #铺垫 #笑点 #双截棍公式 #五种笑感 #共鸣感 #意外感 #优越感 #发泄感 #荒诞感 #自嘲 #凡尔赛 #镜像神经元 #预测颠覆 #潜意识释放 #逻辑悬空 #上桌写段子 #平台课程


path: cclaw/knowledge/theory/126b44e8.md
content: # 笑的心理学机制

## 笑论核心

**笑 = 被压抑的心理能量的突然释放**

### 核心机制

```
1. 心理能量被压抑（社会规范、禁忌、理性要求）
2. 笑话提供了"释放的借口"
3. 能量突然释放 = 笑

笑话 = 绕过压抑机制的释放通道
```

## 对喜剧创作的启示

### 1. 找准"压抑点"

每个社会/文化都有压抑点——人们想说但不能说的东西。
找到压抑点，喜剧创作就成功了一半。

**如何找压抑点：**
- 什么话题让人们私下抱怨但公开不说？
- 什么行为被禁止但普遍存在？
- 什么禁忌被默认但从不明说？

### 2. 提供"安全借口"

笑话的力量在于它提供了一个释放压抑能量的"借口"。
观众笑 = 感觉到"被允许"释放。

**安全借口的三种类型：**
- "我只是在开玩笑"（否认意图）
- "你看，那是别人"（转移对象）
- "这是传统/仪式的一部分"（赋予豁免）

### 3. 禁忌越深，笑越响

| 压抑类型 | 喜剧效果 |
|---------|---------|
| 轻度压抑（餐桌礼仪） | 温和幽默 |
| 中度压抑（性/金钱/死亡） | 强笑点 |
| 深度压抑（政治/权威/自我） | 爆笑，但需谨慎 |

## 与核心原理的关系

| 心理学派 | 笑论视角 | 创作应用 |
|---------|---------|---------|
| 心理分析 | 笑是压抑的释放 | 禁忌话题的喜剧化 |
| 社会行为 | 笑是机械僵硬被纠正 | 行为僵硬的暴露 |
| 认知心理 | 笑是期望落空 | 铺垫-颠覆结构 |
| **综合** | **两者结合 = 完整的喜剧心理** | |

**心理学机制解释了为什么某些话题好笑。**
**核心原理解释了为什么某些行为好笑。**

## 创作应用

### 禁忌话题喜剧化三步法

1. **识别禁忌** — 用户素材中涉及什么压抑点？
2. **制造借口** — 用什么框架让笑"安全"？
3. **释放能量** — 用什么手法释放（反转、换位、归谬）

### 例：将"工作焦虑"做成笑点

```
压抑点：没人愿意承认自己对工作焦虑
借口：大家都在抱怨，所以我也抱怨
释放：用荒谬的方式夸大焦虑

→ 脱口秀段子："我焦虑到……"
→ 讽刺文：用经济学术语描述"上班焦虑综合症"
→ 小品：一个人反复检查自己是否忘带工牌
```

## 使用场景

当用户素材涉及：
- 社会禁忌话题的喜剧化
- 需要触及"不能说"的领域
- 制造"我说的是玩笑但你在笑"的效果

→ 优先使用本框架的压抑-释放机制。


path: cclaw/knowledge/theory/9d01e4da.md
content: # 喜剧类型速查

> 根据素材特征推荐最适合的喜剧类型和手法组合。

## 类型总览

| 类型 | 时长 | 核心机制 | 适合素材 | 主要手法 |
|------|------|---------|---------|---------|
| 脱口秀 | 5-20分钟 | 个人叙事+观点反转 | 个人经历、社会观察 | 铺垫反转、call back（遗忘后再炸） |
| 小品 | 10-30分钟 | 角色冲突+情境升级 | 有鲜明角色的故事 | 弹簧魔鬼、雪球效应 |
| 漫才 | 5-15分钟 | 搭档配合+节奏堆叠 | 对话素材、误解场景 | 正反打、连续否认 |
| 剧本 | 60-120分钟 | 人物弧线+结构完整 | 需要完整故事的内容 | 性格喜剧、多线干扰 |
| 讽刺文 | 不限 | 换位+反讽 | 严肃议题、权威文本 | 庄→俗换位、反转 |
| 仿讽 | 不限 | 模仿+颠覆 | 有既定风格的文本 | 仿体+恶搞内核 |
| 荒诞剧 | 不限 | 系列干扰极致化 | 揭示无意义的主题 | 无因果链条、循环 |

---

## 脱口秀（Stand-up Comedy）

### 核心节奏

```
铺垫（建立世界观）→ 细节填充（让观众相信）→ 转折（笑点）→ call back（遗忘后再炸）
```

### 结构特点

- **单一视角**：第一人称叙述者
- **核心单位**：一个笑话 = 铺垫+笑点
- **密度**：每30-60秒一个笑点
- **情感线**：通常有脆弱时刻（共鸣）+ 强势笑点（掌声）

### 适合手法

- 铺垫-反转（Expectation vs Reality）
- Call back（遗忘后再炸——强梗快被忘掉时再次使用，笑点翻倍）
- Callback to self（用自己打脸自己）
- 身份错位（我是XXX，但我/他们做了YYY）

### 创作检查

- [ ] 每个段落有一个核心笑点
- [ ] 铺垫足够长让观众相信
- [ ] 转折足够意外但不突兀
- [ ] 有call back在中后段炸场（不是呼应，是遗忘后再炸）

---

## 小品（Sketch Comedy）

### 核心节奏

```
建立情境 → 引入冲突 → 冲突升级（弹簧/雪球） → 极端爆发 → 收尾
```

### 结构特点

- **多角色**：2-5人
- **核心单位**：一个场景 = 一个情境
- **密度**：每个场景2-3个笑点
- **情感线**：可以有温情但点到为止

### 适合手法

- 弹簧魔鬼（冲突反复被打压又弹起）
- 雪球效应（一个小动作引发大灾难）
- 角色执念（一个人物坚持某种荒谬行为）

### 创作检查

- [ ] 情境建立够快（前30秒）
- [ ] 冲突升级有层次（至少3层）
- [ ] 每个角色有一个鲜明的执念
- [ ] 结尾要么爆发要么反转

---

## 漫才（Manzai）

### 核心节奏

```
正论 → 否定 → 更荒谬的正论 → 再次否定 → 极致荒谬
```

### 结构特点（正反打）

```
漫才演员A（上手）：提出正经/荒谬的观点
漫才演员B（下手）："不对！"
A：坚持原观点，但理由更荒谬
B："还是不对！"
A：理由极度荒谬
B："不是，你听我说……"（放弃反驳）
→ 笑
```

### 适合手法

- 连续否定（连续三次反驳，每次理由更荒谬）
- 极端化（话题逐级推向荒谬极端）
- 逻辑滑坡（从一个正常前提推到荒谬结论）

### 与相声的区别

- 相声：捧逗有信息差（一个装傻一个精明）
- 漫才：两人都在装傻，配合节奏

### 创作检查

- [ ] 有明确的"上手"和"下手"
- [ ] 否定的升级有节奏感
- [ ] 最后的荒谬有冲击力

---

## 讽刺文（Satire）

### 核心节奏

```
严肃陈述（建立权威感）→ 逐渐揭示荒谬 → 完全反转 → 余韵
```

### 结构特点

- **无角色**：作者直接发言
- **核心单位**：一个讽刺段落 = 庄重外表+荒谬内核
- **情感线**：表面义正言辞，内核辛辣

### 适合手法

- 换位（庄→俗）：用正式语言描述琐事
- 反讽（Irony）：说的和实际相反
- 归谬法：从对方逻辑推出荒谬结论
- 夸张放大：把缺点/荒谬放大到荒谬程度

### 创作检查

- [ ] 表面足够严肃
- [ ] 笑点来自对严肃的反转
- [ ] 讽刺的是行为/系统，不是个人
- [ ] 有明确立场但不直接骂人

---

## 仿讽（Parody）

### 核心节奏

```
模仿原文风格 → 替换内核 → 产生反差笑果
```

### 结构特点

- **有原文**：必须熟悉被仿讽的文本/风格
- **核心单位**：一次成功的仿讽 = 精准模仿+意外内核

### 适合手法

- 风格模仿（语言、结构、节奏）
- 内核替换（用荒诞内容替换原正经内容）
- 结构复用（旧瓶装新酒）

### 创作检查

- [ ] 足够熟悉原文风格
- [ ] 模仿足够精准让观众认出
- [ ] 替换的内核产生反差
- [ ] 不侵权（仿讽是合理使用）

---

## 荒诞剧（Absurdist Theatre）

### 核心节奏

```
无原因开始 → 无逻辑发展 → 无意义持续 → 也许有隐喻的结尾
```

### 结构特点

- **无意义**：事件之间无因果关系
- **重复循环**：同样的对话反复出现
- **哲学内核**：无意义背后的意义

### 适合手法

- 系列干扰的极致化（两条线索都不通顺）
- 机械重复（没有任何进展）
- 反高潮（预期的大事件变成虚无）

### 创作检查

- [ ] 有意打破因果逻辑
- [ ] 重复有变化（不是简单的原地重复）
- [ ] 荒谬背后有可解读的隐喻


path: cclaw/knowledge/theory/ac07d434.md
content: # 中国相声 — 包袱结构

## 核心概念：包袱

**包袱** = 相声中笑料的术语，"抖包袱" = 揭示笑点。

不是所有好笑的话都是包袱，必须经过**铺垫**才能抖出笑果。

## 经典结构：三番四抖

```
铺垫（丢包袱）
  ↓
第一番：建立预期（正着说）
  ↓
第二番：强化预期（继续正着说）
  ↓
第三番：加剧预期（还是正着说）
  ↓
第四抖：突然翻转（抖开！）
  ↓
笑
```

### 经典案例

```
铺垫："那天我喝多了，看见一个人蹲在墙角——"
番一："我想，这谁蹲那儿干嘛呢？"
番二："走近一看，嘿，他也看见我了。"
番三："他冲我说话，我也冲他说话。"
抖："结果我们俩说了一宿，才发现——他是一张画！"

解读：
- 三番建立"两个醉鬼对话"的预期
- 第四抖突然翻转：其实是一个人对着墙上的画说话
- 笑点来自"预期落空 + 合理性"的双重满足
```

### 案例二

```
铺垫：妈妈让小虎看家，来了个陌生人
番一："他说他叫'逗你玩'"
番二："他说他进来拿东西，我说行"
番三："他开始搬东西，我喊妈妈"
抖："妈妈问谁搬的？小虎说'逗你玩'！"
笑点：小虎的认知错位——把"逗你玩"当成了名字
```

## 铺垫技巧

### 1. 因果反转
```
铺垫：A 导致 B
抖：   A 导致 完全意料之外的 B'
```

### 2. 语义双关
```
铺垫：词语A的常用义
抖：   揭示词语A的另一含义
```

### 3. 认知错位
```
铺垫：角色对某事物的认知
抖：   揭示这个认知的荒谬基础
```

### 4. 逻辑跳跃
```
铺垫：按照正常逻辑推理
抖：   用一个不合逻辑但意外合理的跳跃得出结论
```

## "柳儿"——意料之外情理之中

**柳** = 意料之外，**儿** = 情理之中（儿化音的谐音梗）

好包袱 = 抖出来的一瞬间让观众觉得"没想到，但确实是这样"。

**反面案例：** 纯粹的无厘头（没想到，但也没道理）——这不是包袱，是乱编。

## 人物关系：捧逗结构

```
逗哏（主角）：
  - 负责铺陈、制造预期
  - 经常"装傻"制造信息差
  - 制造认知不协调

捧哏（配角）：
  - 负责打断、追问、翻转
  - 充当观众的嘴，说出观众的疑惑
  - 在关键时刻用"但是""然后呢"推动节奏
```

### 捧哏的经典功能句式

| 捧哏台词 | 功能 |
|---------|------|
| "然后呢？" | 催促继续铺 |
| "是这样吗？" | 质疑，制造悬念 |
| "不对！" | 突然打断，翻转 |
| "得了吧你！" | 替观众表达不满 |
| "这都什么乱七八糟的！" | 强化荒谬感 |

## 创作口诀

```
一铺二垫三翻四抖，笑料藏在新感受。
意料之外情理中，捧逗配合显神通。
包袱不是乱砸人，三番四抖才是真。
```

## 应用场景

当用户输入涉及：
- 中文语境段子
- 对话式幽默
- 需要铺垫-爆发节奏的内容

→ 优先使用相声包袱结构。


path: cclaw/knowledge/theory/eb7cb5ef.md
content: # 喜剧创作核心原理

## 核心公式

**喜剧 = 镶嵌在活物上的机械装置**

当人的行为表现出机械性、僵硬性、固执性时，喜剧效果便产生。

## 笑的三个条件

1. **仅存在于人类领域** — 风景不笑，动物可笑只因像人
2. **需要不动情的旁观** — 情感是笑的敌人，冷眼旁观才能发笑
3. **需要社会回声** — 笑是一群人的笑，需要共鸣和同谋感

## 笑的社会功能

笑是一种社会性示意：
- 纠正偏离社会的僵硬行为
- 使人努力表现出"应该的样子"
- 喜剧 = 社会的弹性装置，恢复社会的柔软

## 喜剧手法体系

### 情境喜剧三大基本手法

从"生命 vs 机械"的对立反推：

| 生命特征 | 反转 = 喜剧手法 | 说明 |
|---------|----------------|------|
| 持续变化 | **重复** | 同一场景反复出现，逐级升级 |
| 不可逆性 | **反转** | 角色互换，迫害者自作自受 |
| 个体封闭性 | **系列干扰** | 两个独立事件系列交叉碰撞 |

### 三大具体手法

**弹簧魔鬼**
- 被压制的力量反复弹起，每次更猛烈
- 应用：反复被打断又重新开口；一个执念被压制又冒出来

**雪球效应**
- 微小起因导致巨大后果，效应自我增强
- 应用：连锁反应、蝴蝶效应、误会叠加

**系列干扰**
- 两条独立事件线索交叉，产生误会
- 应用：信息差、认知错位、误会导致的荒诞后果

### 语言喜剧手法

**换位**
- 庄→俗：滑稽模仿，用市井语言描述高贵事物
- 俗→庄：幽默，用正经语气描述卑鄙行为

**反转**
- 主宾对调，让对方自食其果

**现成句式+荒谬内容**
- 刻板语言表达荒谬内容

**字面理解比喻**
- 假装以字面意思理解比喻，暴露物质性

### 性格喜剧三条件

1. **不合群性** — 不愿与他人接触，自我封闭
2. **无动于衷** — 观众不产生情感共鸣
3. **自动性** — 角色越不自觉，越可笑

> 喜剧人物通常是一个心不在焉的人

**喜剧 vs 悲剧的本质区别：**
- 喜剧 → 类型、普遍性、可重复
- 悲剧 → 个体、独特性、不可再现

## 喜剧创作黄金八法则

1. **机械化法则** — 让活人表现出机器般的僵硬
2. **心不在焉法则** — 角色越不自觉，越可笑
3. **重复法则** — 重复同一动作/台词增强喜剧效果
4. **升级法则** — 喜剧效果逐级递增
5. **反差法则** — 庄严与琐碎的对立
6. **误判法则** — 角色对处境的错误判断（而观众知道真相）
7. **无恶意法则** — 保持不动情，避免观众同情
8. **社会性法则** — 喜剧针对不合群/僵硬的行为

## 笑的心理学基础

| 心理学家 | 核心观点 | 创作应用 |
|---------|---------|---------|
| 第一位 | 期望落空 | 设计铺垫-颠覆结构 |
| 第二位 | 努力扑空 | 竹篮打水一场空的笑点 |
| 第三位 | 压抑释放 | 禁忌话题的喜剧化（见 126b44e8.md） |


path: cclaw/knowledge/theory/japanese-sketch.md
content: # 日式短剧（コント）创作理论

> 整合自：《爆笑短剧入门》（元祖爆笑王）、《笑之大学：三谷幸喜谈创作》、《偽りなきコントの世界》（岩崎う大）

---

## ⚡ 极简版：死磕这6条核心理论

1. **角色永远第一**：性格贯穿全程，不崩人设
2. **目标明确**：每个角色都有一个要完成的事
3. **起承转合闭环**：5分钟也要有完整故事线
4. **认真的荒诞**：角色越认真，观众越想笑
5. **节奏铁律**：15秒小笑点，1分钟大爆点
6. **装傻+吐槽**：用行为装傻，用反应吐槽
7. **装傻彻底，吐槽精准**：装傻不能半真半假，吐槽不能啰嗦，一句话戳破
8. **留白停顿**：笑点说完停1秒，给观众反应时间——这是日式喜剧的灵魂

---

## 一、コント三要素（必学核心）

### 1. 角色
- **必须有明确性格**：偏执 / 懦弱 / 自大 / 较真（选一，贯穿始终）
- 人设绝对不能崩——无论剧情多荒诞，角色性格必须从头到尾一致
- 笑点来自性格驱动行为，而不是硬加梗

### 2. 情境
- 日常场景被打破：办公室、医院、便利店、家里
- **"日常场景 + 极端人物"黄金组合**：把一个偏执狂、强迫症、老好人放进日常里，冲突自动产生

### 3. 目的
- 角色有一个明确目标：请假、看病、要钱、证明自己
- **所有笑点都来自「角色性格 + 目标受阻」**

---

## 二、装傻（ボケ）& 吐槽（ツッコミ）的短剧化用法

### 基本原则
- 不是站着互怼，而是**角色行为装傻 + 另一个角色反应吐槽**
- 装傻是动作、是情境，吐槽是反应、是观众视角

### 三人结构
```
1 主装傻 + 1 主吐槽 + 1 旁观者（强化冲突）
```
- 旁观者可以是：另一个极端性格的角色，或者是"正常人"视角
- 三人结构比二人结构更容易制造错位和混乱

---

## 三、起承转合四步结构（5分钟短剧黄金公式）

### 起（30秒）
- 建立人物 + 场景
- 让观众知道：谁、在哪、想干嘛

### 承（1分钟）
- 出现小冲突
- 角色的目标第一次受阻

### 转（2分钟）
- 冲突升级、人物被逼到极限
- **「目标→阻碍→再阻碍→彻底失控」的升级逻辑**
- 每一次升级都要叠加新的矛盾，不能重复

### 合（30秒）
- 反转 / 荒诞收尾
- **必须有明确结尾**——日式短剧拒绝开放式结局

---

## 四、节奏铁律

> **日式短剧拒绝冷场，节奏比剧情更重要**

### 基本节奏
- **15秒一个小笑点**
- **1分钟一个大爆点**

### 笑点藏在哪里
不只是对话，还有：
- 动作
- 表情
- 台词
- 反应

---

## 五、高级心法（三谷幸喜）

### 1. 喜剧的内核是「认真」
- 角色越认真，行为越荒诞，反差越大越好笑
- 哪怕演傻子，也要一本正经地傻

### 2. 日常解构法
- 把生活里的小情绪（焦虑、较真、讨好）放大10倍
- 笑点不是编出来的，是生活里本来就有的

### 3. 反讽与留白
- 不直接讲笑话，让观众自己品出笑点
- 高级短剧不靠密集梗，靠人物逻辑让观众笑

---

## 六、创作检查清单

### 角色设计
- [ ] 有一个明确的性格标签（偏执/懦弱/自大/较真）
- [ ] 性格贯穿始终，绝不崩塌
- [ ] 有一个明确的目标

### 情境设计
- [ ] 是日常场景（办公室、医院、便利店等）
- [ ] 场景被某个事件打破
- [ ] 日常场景 + 极端人物 = 自动冲突

### 结构检查
- [ ] 起：30秒内建立人物+场景
- [ ] 承：1分钟内出现第一次冲突
- [ ] 转：2分钟冲突升级，至少3次阻碍
- [ ] 合：30秒内有明确收尾（反转或荒诞结局）

### 节奏检查
- [ ] 每15秒至少一个小笑点
- [ ] 每1分钟有一个大爆点
- [ ] 笑点密度：5分钟 ≈ 20个笑点（≥4个/分钟）

---

## 七、常见错误

| 错误 | 说明 |
|------|------|
| 人设崩塌 | 角色为了笑点改变了性格，破坏可信度 |
| 无目标 | 角色只是在场景里"晃悠"，没有明确目的 |
| 重复阻碍 | 三次阻碍用同一个梗，观众会腻 |
| 冷场 | 超过30秒没有笑点 |
| 开放式结局 | 日式短剧必须有明确收尾 |

---

## 八、与 Sketch 的区别

| 维度 | 日式短剧（コント） | Sketch |
|------|------------------|--------|
| 节奏 | 极快，15秒必笑 | 可缓可急 |
| 人物 | 一个极端性格贯穿 | 可有多面性 |
| 场景 | 日常场景被打破 | 可荒诞设定 |
| 目标 | 明确单一目标 | 可有多目标 |
| 结尾 | 必须明确收尾 | 可开放式 |

日式短剧更像"把一个极端人物逼到极限"，Sketch更像"用一个设定展开故事"。


path: cclaw/modules/tools/poster/briefs/banner-damai-1404.md
content: # Design Brief: 大麦 Banner (1404×320)

## 规格
- 尺寸：1404×320px
- 用途：大麦 APP 分类页/活动页 Banner

## 内容数据

**必填：**
- 演出名称：<完整名称>
- 卖点：<一句话>

**选填：**
- 日期：<MM.DD>
- 城市：<城市名>
- 标签：<如"首演"、"收官">

## 视觉风格
- 超宽横版，适合沉浸式展示
- 可作为系列演出/活动专题图
- 视觉元素可更丰富

## 输出要求
- 文件命名：`banner_damai_1404_<演出简称>.png`


path: cclaw/modules/tools/poster/briefs/banner-damai-999.md
content: # Design Brief: 大麦 Banner (999×375)

## 规格
- 尺寸：999×375px
- 用途：大麦 APP 首页轮播图

## 内容数据

**必填：**
- 演出名称：<完整名称>
- 核心信息：<日期/城市/卖点>

**选填：**
- 主演：<演员名>
- 标签：<如"爆笑推荐"、"限时折扣">
- 按钮：<默认"立即抢购">

## 视觉风格
- 横版构图，视觉重心偏左
- 文字信息右置，避免被 UI 遮挡
- 适合轮播展示，3秒内传达核心信息

## 输出要求
- 文件命名：`banner_damai_999_<演出简称>.png`


path: cclaw/modules/tools/poster/briefs/banner-maoyan.md
content: # Design Brief: 猫眼 Banner

## 规格
- 尺寸：1053×180px
- 用途：猫眼 APP 首页/分类页轮播图

## 内容数据

**必填：**
- 演出名称：<简短名称，≤10字>
- 核心卖点：<一句话，如"限时特惠"、"本周开演">

**选填：**
- 日期：<MM.DD 开演>
- 价格：<起售价>
- 按钮文案：<默认"查看">

## 视觉风格
- 横条构图，左侧视觉/右侧文字
- 文字精简，远距离可读
- 与猫眼 APP 整体风格协调

## 输出要求
- 文件命名：`banner_maoyan_<演出简称>.png`


path: cclaw/modules/tools/poster/briefs/banner-xiudong.md
content: # Design Brief: 秀动 Banner

## 规格
- 尺寸：1114×200px
- 用途：秀动 APP 首页/活动页 Banner

## 内容数据

**必填：**
- 演出名称：<完整名称或简称>
- 日期：<YYYY.MM.DD>
- 城市：<城市名>

**选填：**
- 场地：<场地简称>
- 标签：<如"脱口秀"、"专场">
- 价格：<起售价>

## 视觉风格
- 秀动用户偏年轻潮流，可大胆用色
- 演出类型标签醒目
- 日期信息突出

## 输出要求
- 文件命名：`banner_xiudong_<演出简称>.png`


path: cclaw/modules/tools/poster/briefs/comedy-show.md
content: # Design Brief: 演出宣传海报

## 规格

- 类型: comedy-show
- 尺寸: 1920×1080px（横版 16:9）
- 输出: PNG
- 用途: 线下演出宣传、朋友圈海报

## 信息层级

1. **主视觉**: {{show_name}}（演出名称，最大字重）
2. **时间**: {{date}} {{time}}
3. **地点**: {{venue}}
4. **阵容**: {{actors}}（演员名单）
5. **Slogan**: {{slogan}}（一句话宣传语）
6. **辅助**: {{price}} | {{ticket_info}}（票价/购票信息）

## 风格指引

- 演出感：海报要有事件感、聚光灯感
- 强调时间紧迫性（倒计时感）和稀缺性
- 字体：粗体标题 + 清晰正文，信息层次分明
- 情绪基调：热闹/期待/隆重
- 参考：音乐节海报 / 脱口秀俱乐部海报 / 演唱会宣传
- 文字占比：信息类海报可适当增加文字密度，但保持视觉优先

## 内容数据

```
show_name:
date:
time:
venue:
actors:
slogan:
price:
ticket_info:
style_notes:
```


path: cclaw/modules/tools/poster/briefs/damai-detail.md
content: # Design Brief: 大麦演出详情页

## 规格
- 宽度：1020px
- 长度：不限（根据内容自适应）
- 格式：长图 PNG 或分段图片
- 用途：大麦 APP 演出详情页内容区

## 内容结构（从上到下）

**1. 演出亮点区**
- 3-5 个核心卖点图标+文字
- 如："爆笑解压"、"明星卡司"、"口碑之作"

**2. 演员介绍区**
- 演员头像 + 简介 + 代表作
- 每位演员独立卡片

**3. 演出介绍区**
- 演出内容简介
- 适合人群说明
- 观演提示

**4. 场地信息区**
- 场地名称、地址
- 交通指引
- 地图示意（可选）

**5. 购票须知区**
- 退换票政策
- 入场须知
- 儿童政策

**6. 主办方信息**
- 出品方/主办方 Logo
- 联系方式

## 视觉风格
- 整体风格与海报保持一致
- 信息层级清晰，留白充足
- 图标风格统一

## 输出要求
- 文件命名：`damai_detail_<演出简称>.png`
- 如内容过长，可分段输出：`damai_detail_<演出简称>_01.png` 等


path: cclaw/modules/tools/poster/briefs/damai-poster.md
content: # Design Brief: 大麦演出海报（竖版）

## 规格
- 尺寸：1020×1360px
- 格式：JPG/JPEG/PNG
- 用途：大麦 APP/小程序 演出详情页首图

## 内容数据

**必填：**
- 演出名称：<演出完整名称>
- 演出日期：<YYYY.MM.DD>
- 演出时间：<HH:MM>
- 演出场地：<场地名称>
- 城市：<城市名>
- 票价：<价格区间，如"80-280元">

**选填：**
- 主演/卡司：<演员名单>
- 演出类型：<脱口秀/漫才/即兴/综合>
- 主办/出品方：<主办方名称>
- 宣传语：<一句话卖点>
- 购票按钮文案：<默认"立即购票">

## 视觉风格

**推荐方向：**
- 演出类型为脱口秀/漫才：演员形象照 + 简洁文字排版
- 演出类型为综合拼盘：多演员头像拼图 + 演出名称突出
- 演出类型为主题专场：主题视觉元素 + 氛围感背景

**品牌规范：**
- 大麦品牌色（#FF5000）可作为点缀色，但非强制
- 确保文字在白色/浅色背景 APP 中清晰可见
- 避免底部重要信息被 APP 界面元素遮挡

## 输出要求
- 文件命名：`damai_poster_<演出简称>.png`
- 备用版本：提供 1020×1360 和 2040×2720（2x）两个版本


path: cclaw/modules/tools/poster/briefs/maoyan-detail.md
content: # Design Brief: 猫眼演出详情页

## 规格
- 宽度：800px
- 长度：不限
- 单张大小：≤13M
- 格式：PNG/JPG（支持动图插入）
- 用途：猫眼 APP 演出详情页内容区

## 内容结构（从上到下）

**1. 演出简介**
- 一句话卖点
- 演出内容概述

**2. 卡司阵容**
- 演员照片墙
- 每位演员简介

**3. 精彩看点**
- 图文结合介绍亮点
- 可插入动图/GIF 展示现场氛围

**4. 观众评价**
- 精选评论 + 评分
- 真实用户头像/昵称

**5. 场馆信息**
- 场馆名称、地址
- 交通方式

**6. 观演须知**
- 入场时间
- 禁止携带物品
- 退换规则

## 动图支持
- 可在任意位置插入 GIF 动图
- 建议尺寸：800px 宽，高度自适应
- 文件大小：单张 GIF ≤5M

## 输出要求
- 文件命名：`maoyan_detail_<演出简称>.png`
- 动图单独命名：`maoyan_detail_<演出简称>_anim.gif`


path: cclaw/modules/tools/poster/briefs/maoyan-poster.md
content: # Design Brief: 猫眼演出海报（竖版）

## 规格
- 尺寸：1800×2400px
- 大小：≤2M
- 格式：JPG/JPEG/PNG
- 用途：猫眼 APP/小程序 演出详情页首图

## 内容数据

**必填：**
- 演出名称：<演出完整名称>
- 演出日期：<YYYY.MM.DD>
- 演出时间：<HH:MM>
- 演出场地：<场地名称>
- 城市：<城市名>
- 票价：<价格区间，如"80-280元">

**选填：**
- 主演/卡司：<演员名单>
- 演出类型：<脱口秀/漫才/即兴/综合>
- 出品方：<出品方名称>
- 宣传语：<一句话卖点>
- 评分/推荐语：<如"9.2分口碑之作">

## 视觉风格

**推荐方向：**
- 高清演员形象照为主视觉
- 电影海报级质感，适合大银幕展示
- 文字信息层级清晰，远距离可辨识

**技术要点：**
- 1800×2400 为高清尺寸，需确保图片质量
- 文件大小控制在 2M 以内，注意压缩质量
- 避免过度复杂的纹理，影响压缩后效果

## 输出要求
- 文件命名：`maoyan_poster_<演出简称>.jpg`
- 压缩设置：品质 85-90%，确保 ≤2M


path: cclaw/modules/tools/poster/briefs/social-card.md
content: # Design Brief: 社交媒体分享卡

## 规格

- 类型: social-card
- 尺寸: 1200×630px（横版 1.91:1）
- 输出: PNG
- 用途: 微信朋友圈 / 微博 / 社交平台分享

## 信息层级

1. **主内容**: {{quote}}（金句/段子原文，核心视觉元素）
2. **来源**: {{source}}（出处，若有）
3. **作者**: {{author}}（作者名，若有）
4. **品牌**: Cclaw 喜剧龙虾（可选）

## 风格指引

- 金句卡=文字即视觉：文字排版本身构成设计
- 强调文字的力量感和节奏感
- 背景简洁或有微妙纹理，不抢文字风头
- 字体：衬线/无衬线混搭增加层次
- 情绪基调：{{mood}}（与段子情绪一致）
- 参考：书中金句卡 / 黑色幽默 meme / 日系俳句卡片
- 文字占比：可适当提高至 30-40%（金句卡以文字为核心元素）

## 内容数据

```
quote:
source:
author:
mood:
style_notes:
```


path: cclaw/modules/tools/poster/briefs/standup-poster.md
content: # Design Brief: 脱口秀个人海报

## 规格

- 类型: standup-poster
- 尺寸: 1080×1920px（竖版 9:16）
- 输出: PNG
- 用途: 抖音/B站视频封面

## 信息层级

1. **主视觉**: {{actor_name}}（最大字重，视觉锚点）
2. **副标题**: {{title}}（段子名或主题）
3. **Hook**: {{hook_line}}（一句话金句，若有）
4. **辅助信息**: {{date}} | {{venue}}（若有演出信息）
5. **底部**: Cclaw 喜剧龙虾（可选品牌标识）

## 风格指引

- 喜剧视觉语言：强对比、大胆用色、冲击力
- 字体：粗体无衬线，力量感
- 情绪基调：{{mood}}（如：讽刺/温暖/荒诞/治愈/炸裂）
- 参考：波兰海报学派 / 波普艺术 / 日系综艺字幕风格
- 文字占比：10% 视觉 + 90% 设计（极简文字，让设计说话）

## 内容数据

```
actor_name:
title:
hook_line:
date:
venue:
mood:
style_notes:
```


path: cclaw/modules/tools/poster/README.md
content: # 海报生成模块

> 将喜剧内容转化为视觉海报。Cclaw 负责数据层（组装 design brief），canvas-design skill 负责视觉生成。

## 工作流程

```
用户请求 → 识别海报类型 → 收集信息 → 填充 brief 模板 → 调用 canvas-design → 输出 .png/.pdf
```

## 海报类型

### 通用海报

| 类型 | 尺寸 | 用途 | 关键要素 |
|------|------|------|---------|
| standup-poster | 1080×1920 | 抖音/B站封面 | 演员名、段子名、一句话文案 |
| comedy-show | 1920×1080 | 演出宣传 | 演出名、日期、场地、演员阵容 |
| social-card | 1200×630 | 社交分享卡 | 金句/段子、出处、作者 |

### 演出平台标准规格

**海报（竖版）**

| 平台 | 尺寸 | 大小限制 | 格式 |
|------|------|---------|------|
| 大麦 | 1020×1360 | - | JPG/JPEG/PNG |
| 猫眼 | 1800×2400 | ≤2M | JPG/JPEG/PNG |

**详情页**

| 平台 | 宽度 | 长度 | 单张限制 | 备注 |
|------|------|------|---------|------|
| 大麦 | 1020px | 不限 | - | - |
| 猫眼 | 800px | 不限 | ≤13M | 支持动图 |

**Banner**

| 平台 | 尺寸 | 备注 |
|------|------|------|
| 猫眼 | 1053×180 | - |
| 秀动 | 1114×200 | 新尺寸 |
| 大麦 | 999×375 | - |
| 大麦 | 1404×320 | - |

## 信息收集规则

**场景A — 用户刚用 cclaw 创作完内容后请求海报：**
- 自动从创作输出中提取：段子标题→海报主题，Hook金句→一句话文案
- 只需确认：日期/场地（若有演出）、风格偏好

**场景B — 用户单独请求海报（无上下文创作）：**
- 必须交互确认关键信息（见各 brief 模板的"内容数据"字段）
- 缺少关键信息时主动询问，不猜测

## Design Brief 模板

`briefs/` 目录下存放三种海报的 design brief 模板：

| 文件 | 用途 |
|------|------|
| `briefs/standup-poster.md` | 脱口秀个人海报（竖版） |
| `briefs/comedy-show.md` | 演出宣传海报（横版） |
| `briefs/social-card.md` | 社交媒体分享卡 |

## 配方

`recipes/` 目录下存放预设场景配方，提供开箱即用的海报方案：

| 文件 | 用途 |
|------|------|
| `recipes/quote-card.md` | 从段子中提取金句生成分享卡 |

## 依赖

- **canvas-design skill**（bundled，预装）— 视觉生成引擎
- Cclaw 通过读取 canvas-design 的 SKILL.md 获取其工作流，将填充好的 brief 作为输入传递


path: cclaw/modules/tools/poster/recipes/quote-card.md
content: # 配方：段子金句卡

> 从脱口秀/漫才/小品中提取金句，生成社交分享卡。

## 触发条件

用户说以下任意一种：
- 金句卡 / 分享卡 / 朋友圈配图
- 把这段做成图 / 帮我生成一张图
- 从段子中提取一句做成海报

## 快速流程

1. 提取金句（从创作输出中选取最炸的一句，或用户指定）
2. 填充 `briefs/social-card.md` 模板
3. 调用 canvas-design 生成 1200×630 PNG

## 选句技巧

- 优先选有完整反转的句子（铺垫+抖包袱一体）
- 优先选自嘲/共鸣类（传播力强）
- 控制字数在 40 字以内（社交卡片场景）
- 如果段子太长，提取最精华的转折句

## 示例

输入：「35岁，一个Bug都没修好的人生」脱口秀

推荐金句：
「我35岁了，修了十年Bug，最大的成就就是——证明了一个Bug可以活十年。」

→ 填充 brief → 调用 canvas-design → 输出 1200×630 PNG


path: cclaw/modules/tools/video/README.md
content: # 视频剪辑模块

> 将自然语言剪辑请求解析为 FFmpeg 命令并执行。

## 工作流程

```
自然语言脚本 → 解析时间点/动作 → 生成 FFmpeg 命令 → 执行 → 返回结果
```

## 核心命令模式

| 自然语言模式 | FFmpeg 参数 |
|------------|-----------|
| 删除第 A-B 秒 | `-vf "trim=start=X:end=Y,setpts=PTS-STARTPTS"` |
| 提取第 A-B 秒 | `ffmpeg -i input -ss A -to B -c copy out` |
| 拼接 A 和 B | `ffmpeg -f concat -i list.txt -c copy out` |
| 加 BGM | `-af "amix=inputs=2:duration=first:dropout_transition=2"` |
| 渐变过渡 | `xfade=transition:offset` |
| 音量统一 | `loudnorm=I=-16:TP=-1.5:LRA=11` |
| 放大/特写 | `zoompan=z='min(zoom+0.0015,1.5)':d=25` |
| 加速 | `setpts=0.5*PTS` |
| 减速 | `setpts=2.0*PTS` |

## 视频编码规则

- **编码优先**：H.264 (`libx264`)，除非用户指定 HEVC
- **音频**：AAC 48kHz
- **容器**：MP4
- **参数约定**：`$in` 输入文件，`$out` 输出文件

## 脚本解析规则

识别关键词 → 映射参数：

```
"删除" + 时间范围 → trim/discard
"提取" + 时间范围 → extract segment
"拼接" + 文件列表 → concat demuxer
"加音乐" → amix/adelay
"统一音量" → loudnorm
"过渡"/"转场" → xfade
"特写"/"放大" → zoompan
```

## 时间格式支持

- 秒：`5s`、`10"`、`1:30"`（含引号秒）
- 帧（需先查帧率）：`frame_150` → 除以 fps 得秒

详见 `recipes/` 下的配方文件。

path: cclaw/modules/tools/video/recipes/basic-cut.md
content: # 基础剪辑 — Basic Cut

> 适用：删除片段、截取片段、简单剪切。

## 删除片段

删除第 A 秒到第 B 秒：

```bash
ffmpeg -i "$in" -vf "trim=start=X:end=Y,setpts=PTS-STARTPTS,asetpts=EXTRACT" -af "atrim=start=X:end=Y,asetpts=EXTRACT" -c:v libx264 -c:a aac "$out"
```

**快捷版**（无损流复制，需精确帧对齐）：

```bash
ffmpeg -i "$in" -c copy -avoid_negative_ts make_zero "$out"
```

## 截取片段

截取第 A 秒到第 B 秒：

```bash
ffmpeg -i "$in" -ss A -to B -c:v libx264 -c:a aac -avoid_negative_ts make_zero "$out"
```

## 删除中间段（多段）

删除 A-B 和 C-D（两段都要删除）：

```bash
ffmpeg -i "$in" \
  -vf "trim=0:end=X,setpts=PTS-STARTPTS" -t X \
  -f lavfi -t 0 -i "anullsrc=channel_layout=stereo:sample_rate=48000" \
  -vf "trim=start=Y,setpts=PTS-STARTPTS" -ss Y \
  -filter_complex "[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
  -map "[outv]" -c:v libx264 "$out"
```

## 参数速查

| 参数 | 说明 |
|------|------|
| `-ss A -to B` | 从 A 秒到 B 秒 |
| `-c copy` | 无损流复制（仅剪切无重编码） |
| `-avoid_negative_ts` | 处理时间戳负值 |
| `-setpts PTS-STARTPTS` | 重置视频 PTS |
| `-asetpts EXTRACT` | 重置音频 PTS |

path: cclaw/modules/tools/video/recipes/comedy-timing.md
content: # 喜剧节奏剪辑 — Comedy Timing

> 适用：脱口秀、开放麦等喜剧视频，强调节奏感和笑点留白。

## 笑点留白原则

喜剧剪辑和普通纪录片剪辑不同：
- **纪录片**：紧凑，不留空白
- **喜剧**：笑点后留 0.3-0.8 秒喘息空间

## 节奏参数

| 笑点类型 | 建议留白 | 参数 |
|---------|---------|------|
| 大笑点（全场笑） | 0.8-1.2s | 手动调整 |
| 中等笑点 | 0.5-0.8s | 手动调整 |
| 小笑点（个别笑） | 0.3-0.5s | 手动调整 |

## 放大笑点镜头（zoompan）

笑点时刻放大画面：

```bash
ffmpeg -i "$in" -vf "zoompan=z='if(between(t,X,Y),1.4,1)':d=1:s=1920x1080:enable='between(t,A,B)'" -c:v libx264 "$out"
```

- 启用时段：`A` 到 `B`（秒）
- 放大倍数：`1.4`（1.0 = 不放大）
- 目标分辨率：`1920x1080`

## 喜剧快切节奏

快速切换多个笑点片段：

```bash
ffmpeg -i "$in" -vf "select='eq(n,X)+eq(n,Y)+eq(n,Z)',setpts=N/(FPS*TB)" -r 30 "$out"
```

## 语速加速（压缩留白）

让语速略快，拉近笑点间距：

```bash
ffmpeg -i "$in" -vf "setpts=0.9*PTS" -af "atempo=1.1" -c:v libx264 "$out"
```

- `setpts=0.9*PTS`：视频加速 10%
- `atempo=1.1`：音频加速 10%（保持音高）

## 静音/弱音处理

笑点前的铺垫略微降音量，突出笑点：

```bash
ffmpeg -i "$in" -af "volume=enable='lt(t,X)':volume=0.7" -c:v libx264 "$out"
```

- 0-B 秒音量降为 70%

## 笑点时间戳标注（输出为 JSON）

分析视频，输出一份建议剪辑点：

```bash
ffmpeg -i "$in" -af "silencedetect=noise=-30dB:d=0.3" -f null -
```

- 检测静音段（可能是观众笑声）
- 配合手动标注使用

path: cclaw/modules/tools/video/recipes/highlight-reel.md
content: # 精彩集锦 — Highlight Reel

> 适用：多段视频拼接、精彩片段合集、开放麦切片合并。

## 拼接多个片段

**Step 1**：创建片段列表文件 `concat.txt`：

```
file 'part1.mp4'
file 'part2.mp4'
file 'part3.mp4'
```

**Step 2**：拼接：

```bash
ffmpeg -f concat -safe 0 -i concat.txt -c copy "$out"
```

## 渐变过渡拼接

两个片段之间加淡入淡出：

```bash
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex \
  "[0:v][1:v]xfade=transition=fade:duration=0.5:offset=X[outv];[0:a][1:a]afade=transition=fade:duration=0.5:offset=X[outa]" \
  -map "[outv]" -map "[outa]" -c:v libx264 -c:a aac "$out"
```

- `transition=fade`：淡入淡出过渡（其他选项：wiperight、slideleft、rectcrop…）
- `duration=0.5`：过渡时长（秒）
- `offset=X`：过渡开始的绝对时间点

## 统一音量

拼接前各片段音量不一致时，先统一：

```bash
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11:print_format=summary" -f null -
```

目标值：`I=-16`（Integrated LUFS），`TP=-1.5`（True Peak），`LRA=11`（Loudness Range）

## 统一帧率/分辨率

```bash
ffmpeg -i input -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30" -r 30 -c:v libx264 -c:a aac "$out"
```

## 完整 highlight reel 工作流

```bash
# 1. 提取各段
ffmpeg -i "$in" -ss 0 -to 5 -c copy p1.mp4
ffmpeg -i "$in" -ss 10 -to 18 -c copy p2.mp4
ffmpeg -i "$in" -ss 42 -to 48 -c copy p3.mp4

# 2. 写 concat.txt

# 3. 拼接
ffmpeg -f concat -safe 0 -i concat.txt -c copy concat_raw.mp4

# 4. 音量统一
ffmpeg -i concat_raw.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:v libx264 -c:a aac "$out"
```

path: cclaw/modules/tools/video/transitions.md
content: # 过渡效果库

> 视频片段之间的视觉过渡方式。

## 常用过渡效果

| 效果 | 参数 | 时长建议 |
|------|------|---------|
| 淡入淡出 | `fade` | 0.3-0.8s |
| 向右滑入 | `wiperight` | 0.5-1s |
| 向左滑入 | `slideleft` | 0.5-1s |
| 矩形收缩 | `rectcrop` | 0.5s |
| 圆形扩散 | `circleclose` | 0.8s |
| 无过渡 | `none` | — |

## 使用方式（xfade）

```bash
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex \
  "[0:v][1:v]xfade=transition=fade:duration=0.5:offset=T[outv]" \
  -map "[outv]" -c:v libx264 "$out"
```

- `transition`：过渡类型
- `duration`：过渡持续时间
- `offset`：第二个视频开始过渡的时间点

## 多段过渡（链式 xfade）

```bash
# n 段需要 n-1 次 xfade
# 每段拼接后递归应用
```

## 硬切（无过渡）

```bash
ffmpeg -f concat -safe 0 -i concat.txt -c copy "$out"
```

默认无过渡，适合快节奏内容（如喜剧快切）。

## 叠化（Cross Dissolve）

淡入淡出的电影感版本：

```bash
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex \
  "[0:v][1:v]blend=all_expr='A*if(gt(T,T0),1)+B*if(lt(T,T0),1)'[outv]" \
  -map "[outv]" -c:v libx264 "$out"
```

path: cclaw/modules/writing/absurdist-template.md
content: # 荒诞剧输出模板

> 适用：无因果、无意义的荒诞喜剧。核心是揭示无意义背后的意义。

## 荒诞剧 vs 其他喜剧的区别

| 类型 | 逻辑 | 因果 | 意义 |
|------|------|------|------|
| 小品 | 有 | 情境因果链 | 有明确主题 |
| 讽刺文 | 有 | 逻辑推理 | 有明确立场 |
| 荒诞剧 | 无 | 事件无关联 | 无意义 = 意义本身 |

## 输出规格

```
【荒诞剧标题】

【人物】（通常是扁平、无背景的符号化人物）
人物A：（可以是职位、编号、或无意义的词）
人物B：

【第一场：无意义的开始】
无原因地开始
无意义的对白
建立"这个世界的规则"

【第二场：无逻辑的发展】
事件之间没有因果关联
对话循环重复
角色在重复中逐渐变化（或完全不变）

【第三场：无结果的等待】
某种"等待"驱动全剧
等待的东西永远不会来
或者来了也没有意义

【收尾：循环回归】
回到开场状态
暗示一切可以重新开始
或者一切从未真正开始
```

## 创作步骤

### Step 1：确定"荒诞的核心主题"

荒诞剧不是无意义，而是把某种无意义**揭示**出来。
常见的荒诞核心：
- 沟通的不可能性
- 等待的徒劳
- 身份的丧失
- 意义的消解

### Step 2：设计"无意义的重复模式"

荒诞剧的核心节奏 = 重复 + 微小变化
找到一个核心动作/台词，在整个剧中反复出现，每次有微小变化。

### Step 3：打破因果逻辑

让事件之间**没有因果关系**，但有**时间上的承接**。
A发生了，然后B发生了——不是因为A，而是恰好在A之后。

### Step 4：保持克制的语调

越严肃地讲无意义，笑点越强。
不要用"荒谬"的语气讲荒谬，要用"日常"语气讲荒谬。

## 核心机制对照

| 喜剧手法 | 荒诞剧应用 |
|---------|----------|
| 反复压制与弹起 | 同样的对话反复弹起 |
| 无因连锁 | 无因的连锁，积累荒谬感 |
| 自动性 | 角色对彼此完全不了解 |
| 无社会性 | 角色之间无法形成互动 |

## 手法清单（荒诞剧优先）

| 手法 | 说明 |
|------|------|
| 无因果链 | 事件没有逻辑关联 |
| 循环重复 | 同一场景/对话重复出现 |
| 幽灵物体 | 一直在谈论但从未出现的东西 |
| 反高潮 | 预期的大事件变成虚无 |
| 语言解构 | 语言无法真正沟通 |

## 创作提示

荒诞剧的核心：生命在无意义的重复中机械运转，
但角色完全不觉察这种无意义——
这种**不自觉**本身，就是最大的喜剧来源。


path: cclaw/modules/writing/japanese-sketch-template.md
content: # 日式短剧（コント）输出模板

> 适用：5分钟极快节奏短剧。核心是"极端性格 + 明确目标 + 阻碍升级"。

## ⚡ 死磕6条铁律（每次创作前必看）

1. **角色永远第一**：性格贯穿全程，不崩人设
2. **目标明确**：每个角色都有一个要完成的事
3. **起承转合闭环**：5分钟也要有完整故事线
4. **认真的荒诞**：角色越认真，观众越想笑
5. **节奏铁律**：15秒小笑点，1分钟大爆点
6. **装傻+吐槽**：用行为装傻，用反应吐槽
7. **装傻彻底，吐槽精准**：装傻不能半真半假，吐槽不能啰嗦，一句话戳破
8. **留白停顿**：笑点说完停1秒，给观众反应时间——这是日式喜剧的灵魂

## 输出规格

### 结构规范

```
【日式短剧标题】

### 舞台布景
（场景描述，1-2句话）

### 道具
（列出关键道具）

### 灯光
（开场→转折→结尾的光线变化）

### 音效
（关键音效节点）

---

**【开场】**（30秒）
建立人物 + 场景，让观众知道谁、在哪、想干嘛

**【发展】**（1分钟）
第一次冲突——角色的目标受阻

**【转折】**（2分钟）
冲突升级、叠加新矛盾、人物被逼到极限
- 阻碍1
- 阻碍2（叠加）
- 阻碍3（彻底失控）

**【收尾】**（30秒）
反转 / 荒诞收尾（必须有明确结局）

---

**【笑点统计】**
共 X 个笑点，平均每分钟 X.X 个
```

## 创作步骤

### Step 1：设计角色（最关键）

选择一个极端性格：
- **偏执**：对某事有病态执着
- **懦弱**：怕这怕那，不敢行动
- **自大**：过度自信，轻视一切
- **较真**：对细节有病态要求

**人设铁律**：一旦确定，从头到尾不能变。所有笑点来自性格驱动行为。

### Step 2：设定情境

选择日常场景：办公室、医院、便利店、家里、学校、餐厅

问自己：如果把这个极端性格放进这个日常场景，会发生什么？

### Step 3：确定目标

角色想要什么？（只能有一个核心目标）
- 请假
- 看病
- 要钱
- 证明自己
- 买某个东西
- 说服某人

### Step 4：设计阻碍升级

```
阻碍1：初步受阻
阻碍2：叠加新矛盾（不能重复阻碍1的梗）
阻碍3：彻底失控（所有矛盾同时爆发）
```

每次阻碍都要让情况更糟，角色越努力越糟糕。

### Step 5：设计收尾

选择一种：
- **反转**：观众以为是A，结果是B
- **荒诞**：完全不讲道理的结局
- **认命**：角色接受失败，但以极端方式

## 手法清单（日式短剧优先）

| 手法 | 说明 |
|------|------|
| 装傻 & 吐槽 | 角色行为装傻 + 另一个角色反应吐槽 |
| 15秒法则 | 每15秒必须有一个笑点 |
| 认真演傻 | 哪怕演傻子，也要一本正经地傻 |
| 目标升级 | 角色越努力，情况越糟 |
| 性格驱动 | 笑点来自性格，不是硬加梗 |

## 笑点密度要求

```
最低标准：≥4个笑点/分钟（5分钟 ≈ 20个笑点）
优秀标准：≥5个笑点/分钟（5分钟 ≈ 25个笑点）
顶级标准：≥6个笑点/分钟（5分钟 ≈ 30个笑点）
```

## 三人结构模板

如果需要三人短剧：

```
角色A：主装傻（极端性格持有者）
角色B：主吐槽（正常人视角，对A的行为做出反应）
角色C：旁观者/搅局者（强化冲突，可以是无辜受害者或另一个极端性格）
```

## 格式规范

每个笑点用 `**【笑点N】**` 标注，后面简短说明笑点来源（性格驱动/动作/台词/反应）

---

## 范例参考

见 `knowledge/cases/japanese-sketch/` 下的案例文件。


path: cclaw/modules/writing/manzai-template.md
content: # 漫才输出模板

> 适用：2人对口喜剧，5-15分钟。核心是搭档配合 + 节奏堆叠。源自日本，但结构通用。

## 漫才 vs 相声的核心区别

| | 相声 | 漫才 |
|--|------|------|
| 结构 | 捧逗有信息差 | 两人都在装傻，配合节奏 |
| 重点 | 包袱的质量（三番四抖） | 节奏的密度（连续否认） |
| 笑点位置 | 通常在捧哏的翻/捧 | 通常在上手下放弃反驳的瞬间 |

## 输出规格

### 结构规范（标准漫才）

```
【漫才标题】

【人物】
漫才演员A（上手/先辈）：提出话题 + 制造逻辑
漫才演员B（下手/後輩）：连续否定 + 追问

【第一段：建立话题】（约1分钟）
A 提出一个话题/观点
B 追问或质疑

【第二段：连续否定】（约3-8分钟）
B："不对！"
A：坚持观点，理由更荒谬
B："还是不对！"
A：理由更更荒谬
B："完全不是！"
A：理由极度荒谬
B："不是……算了，你继续吧"
→ 笑

【第三段：切换话题或极致升级】（约1-3分钟）
可以切换新话题重复同样节奏
或在一个话题上极致升级到荒谬

【收尾】
两人突然恢复正常，礼貌告别
（反差收尾）
```

## 创作步骤

### Step 1：确定话题 +荒谬方向

话题 = 一个日常现象/社会观察
荒谬方向 = 从哪个角度把这个话题推向荒谬

### Step 2：设计三次否定

```
第一次否定（B）：轻微质疑
→ A 的回应：稍微升级
第二次否定（B）：强烈质疑
→ A 的回应：更荒谬的理由
第三次否定（B）：彻底放弃
→ A 的理由已经荒谬到极致
```

### Step 3：节奏设计

漫才的笑点来自**节奏密度**，不是单点爆发。
每30-60秒一个笑点，用语速和肢体配合。

### Step 4：收尾设计

标准收尾：突然恢复正常礼貌对话（反差萌）

## 手法清单（漫才优先）

| 手法 | 说明 |
|------|------|
| 连续否认 | 三次以上否定，每次理由更荒谬 |
| 极致化 | 话题推向逻辑终点 |
| 逻辑滑坡 | 从正常前提推到荒谬结论 |
| 装傻配合 | 两人一起装傻 |
| 突然正常 | 极度荒谬后突然清醒收尾 |

## 格式注意

漫才脚本用**对话格式**，标注"（上）"和"（下）"：

```
上：XXX
下：XXX
上：XXX
下：XXX
```

## 范例参考

见 `knowledge/cases/manzai/` 下的案例文件。


path: cclaw/modules/writing/parody-template.md
content: # 仿讽输出模板

> 适用：模仿特定文本/风格进行喜剧创作。核心是精准模仿 + 意外内核。

## 仿讽 vs 讽刺的区别

| | 讽刺 | 仿讽 |
|--|------|------|
| 对象 | 一种荒谬现象/系统 | 一个特定的文本/风格 |
| 手法 | 换位、反讽、归谬 | 风格模仿 + 内核替换 |
| 效果 | 让荒谬暴露 | 让被模仿对象"说出真相" |

## 输出规格

```
【仿讽标题】——（注明仿对象）

【开头：完全复刻风格】
用最接近原文的语言、结构、节奏开头
让读者/观众完全沉浸在模仿氛围中

【中段：逐渐植入荒谬】
开始用原文风格讨论完全不同的主题
或开始揭示原文不愿意面对的真相

【高潮：完全颠覆】
用原文风格说出完全颠覆原文立场的观点
或用原文语言结构得出荒谬结论

【收尾：回呼开头】
最后一个段落完全呼应开头，但内核完全反转
```

## 创作步骤

### Step 1：彻底研究原文

仿讽的前提是模仿者比原文更懂原文。
必须完全熟悉：
- 原文的语言风格（用词、句式、节奏）
- 原文的结构（开头、发展、高潮、结尾）
- 原文的核心论点

### Step 2：找准替换角度

常见替换角度：
- 原文说的是A，仿讽说反A
- 原文说的是A，仿讽把A用到荒谬场景
- 原文忽略B，仿讽专谈B

### Step 3：保持形式、替换内核

最有效的仿讽 = 形式完全不变，内核彻底替换。
读者/观众在"形式熟悉"的安全感下，突然被"内核陌生"击中。

### Step 4：控制颠覆程度

- 太保守：没有笑果
- 太颠覆：读者认不出原文
- 最佳点：既认得出，又完全没想到

## 仿讽类型

| 类型 | 说明 | 例子 |
|------|------|------|
| 风格仿讽 | 模仿某作者/类型的语言风格 | "假如鲁迅写淘宝好评……" |
| 结构仿讽 | 模仿某经典作品的叙事结构 | "假如《黑客帝国》发生在办公室……" |
| 体裁仿讽 | 模仿公文/报告/论文的格式 | 用学术论文格式写"养猫的十大好处" |
| 混搭仿讽 | 同时模仿多个来源的风格 | "用新闻联播风格报道家里断网" |

## 手法清单（仿讽优先）

| 手法 | 说明 |
|------|------|
| 形式复刻 | 精准复制原文的语言节奏 |
| 内核替换 | 替换成荒谬/相反的内容 |
| 关键词保留 | 保留原文关键词，但改变语境 |
| 结构复用 | 沿用原文结构框架 |
| 反转揭露 | 在仿讽最后揭示原文的盲点 |

## 法律提示

仿讽属于合理使用，但注意：
- 不用于商业诋毁
- 不冒充原文作者
- 足够让受众识别出是仿讽而非原文


path: cclaw/modules/writing/satire-template.md
content: # 讽刺文输出模板

> 适用：无角色散文讽刺，篇幅不限。核心是用庄重语言揭示荒谬。

## 讽刺文 vs 其他喜剧类型的区别

| 类型 | 是否有角色 | 核心机制 |
|------|-----------|---------|
| 讽刺文 | 无（作者直接发言） | 换位+反讽 |
| 仿讽 | 有（模仿特定对象） | 模仿+替换 |
| 小品 | 有（角色扮演） | 情境冲突升级 |
| 脱口秀 | 有（第一人称叙述） | 铺垫-反转 |

## 输出规格

```
【讽刺文标题】

【开篇：庄严切入】
用最正式、最学术、最官方的语气开篇
建立权威感，让读者以为在看正经文章

【中段：逐层揭示荒谬】
每段揭示一个荒谬层面
从宏观到微观，从系统到个人
语言始终保持庄重（反差产生笑）

【高潮：荒谬汇聚】
把所有荒谬串联起来
用正式语气说出最荒谬的结论

【收尾：余韵或反转】
一个戛然而止的荒谬结尾
或一句看似正确实则讽刺到极致的话
```

## 创作步骤

### Step 1：找准讽刺对象

讽刺对象 = 一种系统性的荒谬（不是针对个人）

### Step 2：梳理荒谬的层次

从浅到深列出荒谬的3-5个层面。

### Step 3：设计语言策略

| 讽刺强度 | 语言策略 |
|---------|---------|
| 温和讽刺 | 正话反说，让事实说话 |
| 中度讽刺 | 正式语言+荒谬内容 |
| 辛辣讽刺 | 归谬法——把对方逻辑推到极致 |

### Step 4：保持不动情

讽刺文最大的敌人是愤怒。一旦愤怒，讽刺就变成了控诉。
保持冷眼旁观的姿态——这是"社会性示意"，不是控诉。

## 手法清单（讽刺文优先）

| 手法 | 说明 |
|------|------|
| 庄→俗换位 | 用正式语言描述琐碎/荒谬 |
| 归谬法 | 从对方逻辑推出荒谬结论 |
| 数据冷幽默 | 用真实数据制造反差 |
| 反讽（Irony） | 说的和实际意思相反 |
| 反复强调 | 强调荒谬到让荒谬自己暴露 |

## 范例参考

见 `knowledge/cases/parody/` 下的讽刺案例文件。


path: cclaw/modules/writing/script-template.md
content: # 剧本输出模板

> 适用：60-120分钟完整喜剧剧本。核心是人物弧线 + 完整结构 + 性格喜剧。

## 输出规格

```
【剧本标题】

【人物表】
角色名：执念/缺点 · 人物小传（2-3句）

【第一幕：建置】
介绍主要人物和世界
展示每个人的核心执念
建立基本冲突/目标

【第二幕：对抗】
主角追求目标过程中
执念不断阻碍
冲突逐步升级
中点转折

【第三幕：危机 + 高潮】
执念导致的最终爆发
冲突达到顶点
解决/荒谬收尾

【幕间】（可选）
核心笑点串联的过场
```

## 创作步骤

### Step 1：设计 3-5 个核心执念

每个主要角色有一个执念。执念 = 人格中被机械化的部分。

### Step 2：设计执念如何碰撞

每个场景 = 执念A vs 执念B
碰撞越多，笑点越多。

### Step 3：设计人物弧线

```
开场：角色在执念控制下
中点：执念导致严重后果
结尾：角色有了一丝觉醒（或完全没觉醒，更可笑）
```

### Step 4：安排多线干扰

如果场景够复杂，可以安排两条以上事件线交叉。

## 喜剧剧本 vs 普通剧本

| 要素 | 普通剧本 | 喜剧剧本 |
|------|---------|---------|
| 人物深度 | 必须有成长弧线 | 可以只有类型化人物 |
| 情感 | 有深度情感段落 | 情感点到为止，避免过度煽情 |
| 笑点 | 主要靠对白 | 笑点可以来自情境、动作、语言 |
| 结尾 | 通常有情感解决 | 可以是荒谬结局 |

## 手法清单（剧本优先）

| 手法 | 应用位置 |
|------|---------|
| 性格喜剧 | 每个角色围绕执念设计 |
| 弹簧魔鬼 | 核心冲突反复被打压又弹起 |
| 雪球效应 | 一条故事线引发的连锁反应 |
| 系列干扰 | 两条故事线交叉产生误会 |
| 换位 | 用正式语言说荒谬内容 |
| Call back | 遗忘后再炸——强梗快被忘掉时再次使用，笑点翻倍 |

## 格式规范

```
【第一幕·第一场】

内景 咖啡馆 - 日

李老师正在看报纸。桌上摆满图表和数据。

李老师：（看表）下午三点十五分……（翻一页）三点十六分……
         PPI同比持平。M2同比增长12.3%。
         （叹气）又是一个不需要消费的日子。

……（继续）
```

## 范例参考

见 `knowledge/cases/script/` 下的案例文件。


path: cclaw/modules/writing/sketch-template.md
content: # 小品输出模板

> 适用：2-5人场景喜剧，10-30分钟。核心是角色冲突 + 情境升级。

## 输出规格

### 结构规范

```
【小品标题】

【人物表】
角色名：特征描述

【第一幕：情境建立】（约2分钟）
- 快速介绍场景和人物
- 每人展示一个核心执念/习惯
- 建立基本冲突

【第二幕：冲突升级】（约5-15分钟，分2-3个场景）
- 弹簧魔鬼：冲突被打压→弹起→更强打压→完全爆发
- 或：雪球效应：一个小动作引发连锁反应
- 角色执念逐渐暴露，越来越荒谬

【第三幕：极端爆发 + 收尾】（约1-2分钟）
- 所有执念同时发作到极致
- 结局荒谬但有逻辑
```

## 创作步骤

### Step 1：设计 2-3 个核心执念

每个主要角色有一个执念。执念 = 机械僵硬的核心。

### Step 2：设计冲突类型

| 冲突类型 | 适合场景 | 核心手法 |
|---------|---------|---------|
| 执念 vs 现实 | 一个固执的人遇到变化 | 弹簧魔鬼 |
| 执念 vs 执念 | 两个人互不相让 | 弹簧+雪球 |
| 信息差冲突 | 双方认知不一致 | 系列干扰 |

### Step 3：设计升级路径

```
第一层：执念只影响小事
第二层：执念开始影响核心冲突
第三层：执念导致完全荒谬的后果
```

### Step 4：安排肢体喜剧

小品有可视化的肢体动作。设计：
- 每个角色的标志性动作（重复出现）
- 场景中的道具喜剧
- 走位调度

## 手法清单（小品优先）

| 手法 | 说明 |
|------|------|
| 弹簧魔鬼 | 冲突被打压又弹起 |
| 雪球效应 | 小因→大果连锁反应 |
| 角色执念 | 每个人坚持荒谬行为 |
| 无意识暴露 | 角色不知道自己在干什么 |
| 重复+升级 | 同一动作/台词逐次升级 |

## 范例参考

见 `knowledge/cases/sketch/` 下的案例文件。


path: cclaw/modules/writing/standup-template.md
content: # 脱口秀输出模板

> 适用：单人口述喜剧，5-20分钟。核心是"我"的视角 + 铺垫-反转节奏。

## 输出规格

### 结构规范

```
【脱口秀标题】

【开场 Hook】（钩子，30秒内抓住注意力）

【第一段：建立世界观】
铺垫内容 → 核心笑点
（2-3个铺垫-反转段落）

【第二段：深挖细节】
更多细节 → 更深层的笑点
（call back 到第一段的强梗——时机：观众快忘掉时）

【脆弱时刻】（可选，1处）
制造共鸣的真诚段落

【第三段：疯狂升级】
笑点密度加大，节奏加快
（3-4个快节奏段子）

【收尾：炸裂 Call Back】
遗忘后再炸——把中前段的强梗在中后段再次激活，笑点极强
```

## 创作步骤

### Step 1：确定核心主题句

一句话说清你想讲什么。问自己：这里有什么"生命的机械化"？

### Step 2：找三个故事/观察

脱口秀最好有具体细节。三个故事/观察点，形成递进。

### Step 3：设计铺垫-反转结构

```
铺垫 = 让观众往 A 方向想
笑点 = 揭示其实是 B 方向

铺垫要"真"——观众必须相信才能笑
反转要"快"——不要铺垫太久才反转
```

### Step 4：设计 Call Back

找一个在前半段已经验证过（观众笑过）的强梗，在中后段某处再次使用——时机是观众差不多忘掉了。
不要"呼应开头"，要"遗忘后再炸"。

如果前半段没有强梗，先把梗讲扎实，再考虑 Call Back。

## 手法清单（脱口秀优先）

| 手法 | 说明 |
|------|------|
|铺垫-反转|核心结构|
|Call back|遗忘后再炸——在观众差不多忘掉一个强梗时，突然再次使用，笑点翻倍|
|身份错位|我是X但我做了Y|
|逻辑滑坡|从一个正常前提推到荒谬结论|
|自我打击|先说一个观点然后自己反驳|
|细节堆叠|用超具体的细节制造荒谬|
|反向预期|观众以为你会说A，你说了B|

### Call Back 的正确理解

> Call Back 不是呼应，不是平行，不是回归。
> Call Back 是一个强梗，在观众已经遗忘它的时候，突然再次杀出——炸。

**关键要素：**
- **时机**：观众差不多忘掉了，不是刚讲完就回
- **效果**：再次触发 = 比第一次更爆，因为有"遗忘+突然唤醒"的反差
- **次数**：一个梗 Call Back 一次就够了，两次就啰嗦

**常见误区：**
- ❌ "开头用了一个梗，结尾呼应一下"——这是平行，不是 Call Back
- ❌ "在同一个段落里重复使用同一个梗"——这是堆叠，不是 Call Back

**结构里"收尾 Call Back"的真实含义：**
不是呼应开头，而是——
在整段脱口秀的后半段，找一个前面埋下的强梗，在观众快忘掉时重新激活。
如果那个强梗恰好和开头有关，叫它"首尾呼应"也无妨，但那只是时机巧合，不是本质。

---

## 笑点密度控制

```
密集型：每30-45秒一个笑点
标准型：每60-90秒一个笑点  
稀疏型：笑点作为段落高潮点缀
```

## 范例参考

见 `knowledge/cases/standup/` 下的案例文件。


path: cclaw/poster_output/design_philosophy.md
content: # Design Philosophy: "Code Collapse"

## Movement Name
Code Collapse

## Philosophy

**The Visual Manifesto of Obsolescence**

This aesthetic captures the moment when technological certainty crumbles into existential absurdity. The visual language speaks to the paradox of the programmer—someone who builds systems that eventually render themselves, and their creators, obsolete. The design treats this collapse not as tragedy, but as dark comedy.

**Space and Form**

The composition employs dramatic vertical tension befitting the 9:16 format. Elements cascade downward like falling code, creating a sense of controlled chaos. Geometric fragments—rectangles suggesting terminal windows, sharp angles evoking syntax brackets—float and overlap with calculated precision. The human figure anchors the composition, a singular organic form amidst digital debris.

**Color and Material**

The palette draws from the cold luminescence of screens meeting warm human vulnerability. Deep terminal blacks and electric blues clash against flesh tones and warm amber accents. This chromatic tension visualizes the conflict between human and machine, experience and automation. Colors are saturated but controlled, never garish—think sophisticated cyber-noir rather than neon arcade.

**Scale and Rhythm**

Typography dominates through scale hierarchy. The actor's name commands maximum visual weight, rendered in bold, architectural letterforms. The title follows as secondary anchor, while the hook line appears as a whispered confession—small but impossible to ignore. This rhythm mirrors the standup format: establish presence, deliver premise, drop the punchline.

**Composition and Balance**

Asymmetrical balance creates dynamic tension. The human subject occupies the upper golden ratio, gaze directed toward the void of negative space below—suggesting looking into an uncertain future. Text elements anchor the lower portion, grounding the composition. Every element is meticulously placed, the product of countless refinements, demonstrating master-level typographic craft.

**Visual Hierarchy**

Information flows in three beats: WHO (the name), WHAT (the premise), WHY (the hook). Each layer receives distinct typographic treatment while maintaining cohesive visual language. The brand mark sits quietly at the foundation, a signature rather than an advertisement.

**The Craft**

This work must appear as though created by a designer at the absolute pinnacle of their craft—someone who has spent years mastering the interplay of type, image, and space. Every alignment, every margin, every chromatic choice should demonstrate painstaking attention to detail. The result should feel inevitable, as if no other arrangement were possible.


path: cclaw/poster_output/generate_poster.py
content: from PIL import Image, ImageDraw, ImageFont, ImageFilter
import os

# Poster dimensions (1080x1920 - 9:16 vertical)
WIDTH = 1080
HEIGHT = 1920

# Create base image with gradient background
img = Image.new('RGB', (WIDTH, HEIGHT), '#0a0a0f')
draw = ImageDraw.Draw(img)

# Create gradient background
for y in range(HEIGHT):
    # Gradient from dark blue-black to deep blue
    r = int(10 + (22-10) * y / HEIGHT)
    g = int(10 + (33-10) * y / HEIGHT)
    b = int(15 + (62-15) * y / HEIGHT)
    draw.line([(0, y), (WIDTH, y)], fill=(r, g, b))

# Add subtle code pattern in background
import random
random.seed(42)
code_chars = '01{}[]();=<>/\\'
for _ in range(500):
    x = random.randint(0, WIDTH)
    y = random.randint(0, HEIGHT)
    char = random.choice(code_chars)
    draw.text((x, y), char, fill=(0, 255, 136, 30), font=None)

# Load the profile photo
photo_path = r'C:\Users\tiger\Desktop\狼人杀\狼人杀头像(1).jpg'
if os.path.exists(photo_path):
    photo = Image.open(photo_path)
    # Resize to fit in circle
    photo_size = 400
    photo = photo.resize((photo_size, photo_size), Image.Resampling.LANCZOS)
    
    # Create circular mask
    mask = Image.new('L', (photo_size, photo_size), 0)
    mask_draw = ImageDraw.Draw(mask)
    mask_draw.ellipse((0, 0, photo_size, photo_size), fill=255)
    
    # Apply circular crop
    photo_circle = Image.new('RGBA', (photo_size, photo_size), (0, 0, 0, 0))
    photo_circle.paste(photo, (0, 0))
    photo_circle.putalpha(mask)
    
    # Add cyan border
    border_size = photo_size + 16
    border = Image.new('RGBA', (border_size, border_size), (0, 212, 255, 255))
    border_mask = Image.new('L', (border_size, border_size), 0)
    border_draw = ImageDraw.Draw(border_mask)
    border_draw.ellipse((0, 0, border_size, border_size), fill=255)
    border.putalpha(border_mask)
    
    # Paste border then photo
    border_x = (WIDTH - border_size) // 2
    border_y = 120
    img.paste(border, (border_x, border_y), border)
    img.paste(photo_circle, (border_x + 8, border_y + 8), photo_circle)
    
    # Add glow effect
    glow = Image.new('RGBA', (border_size + 60, border_size + 60), (0, 212, 255, 40))
    glow_mask = Image.new('L', (border_size + 60, border_size + 60), 0)
    glow_draw = ImageDraw.Draw(glow_mask)
    glow_draw.ellipse((0, 0, border_size + 60, border_size + 60), fill=255)
    glow.putalpha(glow_mask)
    glow = glow.filter(ImageFilter.GaussianBlur(20))
    img.paste(glow, (border_x - 30, border_y - 30), glow)

# Try to load fonts, fallback to default if not available
try:
    # Try system fonts
    font_name_large = ImageFont.truetype("C:/Windows/Fonts/arialbd.ttf", 120)
    font_title = ImageFont.truetype("C:/Windows/Fonts/arialbd.ttf", 72)
    font_hook = ImageFont.truetype("C:/Windows/Fonts/arial.ttf", 48)
    font_brand = ImageFont.truetype("C:/Windows/Fonts/arial.ttf", 24)
except:
    font_name_large = ImageFont.load_default()
    font_title = ImageFont.load_default()
    font_hook = ImageFont.load_default()
    font_brand = ImageFont.load_default()

# Draw actor name "DIEGO"
name_text = "DIEGO"
name_bbox = draw.textbbox((0, 0), name_text, font=font_name_large)
name_width = name_bbox[2] - name_bbox[0]
name_x = (WIDTH - name_width) // 2
name_y = 580
draw.text((name_x, name_y), name_text, fill='#ffffff', font=font_name_large)

# Draw title "AI打败了程序员"
title_text = "AI打败了程序员"
try:
    # Try to use a font that supports Chinese
    font_title_cn = ImageFont.truetype("C:/Windows/Fonts/msyhbd.ttc", 72)
except:
    font_title_cn = font_title
title_bbox = draw.textbbox((0, 0), title_text, font=font_title_cn)
title_width = title_bbox[2] - title_bbox[0]
title_x = (WIDTH - title_width) // 2
title_y = 730
draw.text((title_x, title_y), title_text, fill='#00d4ff', font=font_title_cn)

# Draw divider line
line_y = 860
draw.line([(WIDTH//2 - 100, line_y), (WIDTH//2 + 100, line_y)], fill='#ff6b6b', width=3)

# Draw hook line in a box
hook_text = '"35岁，一个Bug都没修好的人生"'
try:
    font_hook_cn = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 42)
except:
    font_hook_cn = font_hook

# Calculate text size for box
hook_bbox = draw.textbbox((0, 0), hook_text, font=font_hook_cn)
hook_width = hook_bbox[2] - hook_bbox[0]
hook_height = hook_bbox[3] - hook_bbox[1]

# Draw box background
box_padding = 50
box_x = (WIDTH - hook_width - box_padding * 2) // 2
box_y = 950
box_width = hook_width + box_padding * 2
box_height = hook_height + box_padding * 2

# Draw box with left border
draw.rectangle([(box_x, box_y), (box_x + box_width, box_y + box_height)], 
               fill=(255, 255, 255, 13), outline=None)
draw.line([(box_x, box_y), (box_x, box_y + box_height)], fill='#ff6b6b', width=4)

# Draw hook text
hook_text_x = box_x + box_padding
hook_text_y = box_y + box_padding - 10
draw.text((hook_text_x, hook_text_y), hook_text, fill='#ffffff', font=font_hook_cn)

# Draw brand at bottom
brand_text = "CCLAW 喜剧龙虾"
try:
    font_brand_cn = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 24)
except:
    font_brand_cn = font_brand
brand_bbox = draw.textbbox((0, 0), brand_text, font=font_brand_cn)
brand_width = brand_bbox[2] - brand_bbox[0]
brand_x = (WIDTH - brand_width) // 2
brand_y = HEIGHT - 100
draw.text((brand_x, brand_y), brand_text, fill=(255, 255, 255, 100), font=font_brand_cn)

# Add decorative brackets
bracket_font = ImageFont.truetype("C:/Windows/Fonts/arial.ttf", 200)
draw.text((50, 200), "{", fill=(0, 212, 255, 20), font=bracket_font)
draw.text((WIDTH - 150, HEIGHT - 500), "}", fill=(0, 212, 255, 20), font=bracket_font)

# Save the poster
output_path = r'C:\Users\tiger\.qclaw\workspace\cclaw\poster_output\diego_standup_poster.png'
img.save(output_path, 'PNG', quality=95)
print(f"Poster saved to: {output_path}")


path: cclaw/poster_output/generate_poster_v2.py
content: from PIL import Image, ImageDraw, ImageFont, ImageFilter
import os

# Poster dimensions (1080x1920 - 9:16 vertical)
WIDTH = 1080
HEIGHT = 1920

# Create base image with gradient background
img = Image.new('RGB', (WIDTH, HEIGHT), '#0a0a0f')
draw = ImageDraw.Draw(img)

# Create gradient background
for y in range(HEIGHT):
    # Gradient from dark blue-black to deep blue
    r = int(10 + (22-10) * y / HEIGHT)
    g = int(10 + (33-10) * y / HEIGHT)
    b = int(15 + (62-15) * y / HEIGHT)
    draw.line([(0, y), (WIDTH, y)], fill=(r, g, b))

# Add subtle code pattern in background
import random
random.seed(42)
code_chars = '01{}[]();=<>/\\'
for _ in range(500):
    x = random.randint(0, WIDTH)
    y = random.randint(0, HEIGHT)
    char = random.choice(code_chars)
    draw.text((x, y), char, fill=(0, 100, 80), font=None)

# Load fonts - try multiple options for Chinese support
def load_font(size, bold=False):
    font_paths = [
        "C:/Windows/Fonts/msyhbd.ttc" if bold else "C:/Windows/Fonts/msyh.ttc",
        "C:/Windows/Fonts/simhei.ttf",
        "C:/Windows/Fonts/simsun.ttc",
        "C:/Windows/Fonts/arialbd.ttf" if bold else "C:/Windows/Fonts/arial.ttf",
    ]
    for path in font_paths:
        if os.path.exists(path):
            try:
                return ImageFont.truetype(path, size)
            except:
                continue
    return ImageFont.load_default()

font_name_large = load_font(110, bold=True)
font_title = load_font(64, bold=True)
font_hook = load_font(40)
font_brand = load_font(22)

# Load the profile photo
photo_path = r'C:\Users\tiger\Desktop\狼人杀\狼人杀头像(1).jpg'
photo_y = 120
if os.path.exists(photo_path):
    try:
        photo = Image.open(photo_path)
        # Convert to RGB if necessary
        if photo.mode in ('RGBA', 'P'):
            photo = photo.convert('RGB')
        
        # Resize to fit in circle
        photo_size = 380
        photo = photo.resize((photo_size, photo_size), Image.Resampling.LANCZOS)
        
        # Create circular mask
        mask = Image.new('L', (photo_size, photo_size), 0)
        mask_draw = ImageDraw.Draw(mask)
        mask_draw.ellipse((0, 0, photo_size, photo_size), fill=255)
        
        # Add cyan border
        border_size = photo_size + 16
        border = Image.new('RGB', (border_size, border_size), (0, 212, 255))
        border_mask = Image.new('L', (border_size, border_size), 0)
        border_draw = ImageDraw.Draw(border_mask)
        border_draw.ellipse((0, 0, border_size, border_size), fill=255)
        
        # Create a temporary image for compositing
        temp = Image.new('RGB', (border_size, border_size), (10, 10, 15))
        temp.paste(border, (0, 0), border_mask)
        
        # Paste photo in center
        photo_circle = Image.new('RGB', (photo_size, photo_size), (10, 10, 15))
        photo_circle.paste(photo, (0, 0), mask)
        temp.paste(photo_circle, (8, 8), mask)
        
        # Add glow effect
        glow = Image.new('RGBA', (border_size + 80, border_size + 80), (0, 212, 255, 60))
        glow_mask = Image.new('L', (border_size + 80, border_size + 80), 0)
        glow_draw = ImageDraw.Draw(glow_mask)
        glow_draw.ellipse((0, 0, border_size + 80, border_size + 80), fill=255)
        glow.putalpha(glow_mask)
        glow = glow.filter(ImageFilter.GaussianBlur(30))
        
        # Paste glow first
        glow_x = (WIDTH - border_size - 80) // 2
        img.paste(glow, (glow_x, photo_y - 40), glow)
        
        # Paste photo with border
        border_x = (WIDTH - border_size) // 2
        img.paste(temp, (border_x, photo_y))
        
    except Exception as e:
        print(f"Error loading photo: {e}")
        # Draw placeholder circle
        border_x = (WIDTH - 400) // 2
        draw.ellipse([(border_x, photo_y), (border_x + 400, photo_y + 400)], 
                    fill=(0, 212, 255), outline=None)
else:
    print(f"Photo not found: {photo_path}")

# Draw actor name "DIEGO"
name_text = "DIEGO"
name_bbox = draw.textbbox((0, 0), name_text, font=font_name_large)
name_width = name_bbox[2] - name_bbox[0]
name_x = (WIDTH - name_width) // 2
name_y = 580
draw.text((name_x, name_y), name_text, fill='#ffffff', font=font_name_large)

# Draw title "AI打败了程序员"
title_text = "AI打败了程序员"
title_bbox = draw.textbbox((0, 0), title_text, font=font_title)
title_width = title_bbox[2] - title_bbox[0]
title_x = (WIDTH - title_width) // 2
title_y = 720
draw.text((title_x, title_y), title_text, fill='#00d4ff', font=font_title)

# Draw divider line
line_y = 840
draw.line([(WIDTH//2 - 100, line_y), (WIDTH//2 + 100, line_y)], fill='#ff6b6b', width=3)

# Draw hook line in a box
hook_text = '"35岁，一个Bug都没修好的人生"'
hook_bbox = draw.textbbox((0, 0), hook_text, font=font_hook)
hook_width = hook_bbox[2] - hook_bbox[0]
hook_height = hook_bbox[3] - hook_bbox[1]

# Draw box background
box_padding = 40
box_x = max(50, (WIDTH - hook_width - box_padding * 2) // 2)
box_y = 920
box_width = min(WIDTH - 100, hook_width + box_padding * 2)
box_height = hook_height + box_padding * 2 + 20

# Draw semi-transparent box
draw.rectangle([(box_x, box_y), (box_x + box_width, box_y + box_height)], 
               fill=(255, 255, 255, 30), outline=None)
# Draw left border
draw.line([(box_x, box_y), (box_x, box_y + box_height)], fill='#ff6b6b', width=4)

# Draw hook text centered
hook_text_x = box_x + (box_width - hook_width) // 2
hook_text_y = box_y + (box_height - hook_height) // 2 - 5
draw.text((hook_text_x, hook_text_y), hook_text, fill='#ffffff', font=font_hook)

# Draw brand at bottom
brand_text = "CCLAW 喜剧龙虾"
brand_bbox = draw.textbbox((0, 0), brand_text, font=font_brand)
brand_width = brand_bbox[2] - brand_bbox[0]
brand_x = (WIDTH - brand_width) // 2
brand_y = HEIGHT - 100
draw.text((brand_x, brand_y), brand_text, fill=(200, 200, 200), font=font_brand)

# Add decorative brackets
try:
    bracket_font = ImageFont.truetype("C:/Windows/Fonts/arial.ttf", 180)
except:
    bracket_font = ImageFont.load_default()
draw.text((40, 180), "{", fill=(0, 212, 255), font=bracket_font)
draw.text((WIDTH - 120, HEIGHT - 450), "}", fill=(0, 212, 255), font=bracket_font)

# Save the poster
output_path = r'C:\Users\tiger\.qclaw\workspace\cclaw\poster_output\diego_standup_poster_v2.png'
img.save(output_path, 'PNG', quality=95)
print(f"Poster saved to: {output_path}")


path: cclaw/poster_output/generate_poster_v3.py
content: from PIL import Image, ImageDraw, ImageFont, ImageFilter
import os

# Poster dimensions (1080x1920 - 9:16 vertical)
WIDTH = 1080
HEIGHT = 1920

# Create base image with gradient background
img = Image.new('RGB', (WIDTH, HEIGHT), '#0a0a0f')
draw = ImageDraw.Draw(img)

# Create gradient background
for y in range(HEIGHT):
    # Gradient from dark blue-black to deep blue
    r = int(10 + (22-10) * y / HEIGHT)
    g = int(10 + (33-10) * y / HEIGHT)
    b = int(15 + (62-15) * y / HEIGHT)
    draw.line([(0, y), (WIDTH, y)], fill=(r, g, b))

# Add subtle code pattern in background
import random
random.seed(42)
code_chars = '01{}[]();=<>/\\'
for _ in range(500):
    x = random.randint(0, WIDTH)
    y = random.randint(0, HEIGHT)
    char = random.choice(code_chars)
    draw.text((x, y), char, fill=(0, 100, 80), font=None)

# Load fonts - try multiple options for Chinese support
def load_font(size, bold=False):
    font_paths = [
        "C:/Windows/Fonts/msyhbd.ttc" if bold else "C:/Windows/Fonts/msyh.ttc",
        "C:/Windows/Fonts/simhei.ttf",
        "C:/Windows/Fonts/simsun.ttc",
        "C:/Windows/Fonts/arialbd.ttf" if bold else "C:/Windows/Fonts/arial.ttf",
    ]
    for path in font_paths:
        if os.path.exists(path):
            try:
                return ImageFont.truetype(path, size)
            except:
                continue
    return ImageFont.load_default()

font_name_large = load_font(110, bold=True)
font_title = load_font(64, bold=True)
font_hook = load_font(36)
font_brand = load_font(22)

# Load the profile photo
photo_path = r'C:\Users\tiger\Desktop\狼人杀\狼人杀头像(1).jpg'
photo_y = 120
if os.path.exists(photo_path):
    try:
        photo = Image.open(photo_path)
        # Convert to RGB if necessary
        if photo.mode in ('RGBA', 'P'):
            photo = photo.convert('RGB')
        
        # Resize to fit in circle
        photo_size = 380
        photo = photo.resize((photo_size, photo_size), Image.Resampling.LANCZOS)
        
        # Create circular mask
        mask = Image.new('L', (photo_size, photo_size), 0)
        mask_draw = ImageDraw.Draw(mask)
        mask_draw.ellipse((0, 0, photo_size, photo_size), fill=255)
        
        # Add cyan border
        border_size = photo_size + 16
        border = Image.new('RGB', (border_size, border_size), (0, 212, 255))
        border_mask = Image.new('L', (border_size, border_size), 0)
        border_draw = ImageDraw.Draw(border_mask)
        border_draw.ellipse((0, 0, border_size, border_size), fill=255)
        
        # Create a temporary image for compositing
        temp = Image.new('RGB', (border_size, border_size), (10, 10, 15))
        temp.paste(border, (0, 0), border_mask)
        
        # Paste photo in center
        photo_circle = Image.new('RGB', (photo_size, photo_size), (10, 10, 15))
        photo_circle.paste(photo, (0, 0), mask)
        temp.paste(photo_circle, (8, 8), mask)
        
        # Add glow effect
        glow = Image.new('RGBA', (border_size + 80, border_size + 80), (0, 212, 255, 60))
        glow_mask = Image.new('L', (border_size + 80, border_size + 80), 0)
        glow_draw = ImageDraw.Draw(glow_mask)
        glow_draw.ellipse((0, 0, border_size + 80, border_size + 80), fill=255)
        glow.putalpha(glow_mask)
        glow = glow.filter(ImageFilter.GaussianBlur(30))
        
        # Paste glow first
        glow_x = (WIDTH - border_size - 80) // 2
        img.paste(glow, (glow_x, photo_y - 40), glow)
        
        # Paste photo with border
        border_x = (WIDTH - border_size) // 2
        img.paste(temp, (border_x, photo_y))
        
    except Exception as e:
        print(f"Error loading photo: {e}")
        # Draw placeholder circle
        border_x = (WIDTH - 400) // 2
        draw.ellipse([(border_x, photo_y), (border_x + 400, photo_y + 400)], 
                    fill=(0, 212, 255), outline=None)
else:
    print(f"Photo not found: {photo_path}")

# Draw actor name "DIEGO"
name_text = "DIEGO"
name_bbox = draw.textbbox((0, 0), name_text, font=font_name_large)
name_width = name_bbox[2] - name_bbox[0]
name_x = (WIDTH - name_width) // 2
name_y = 580
draw.text((name_x, name_y), name_text, fill='#ffffff', font=font_name_large)

# Draw title "AI打败了程序员"
title_text = "AI打败了程序员"
title_bbox = draw.textbbox((0, 0), title_text, font=font_title)
title_width = title_bbox[2] - title_bbox[0]
title_x = (WIDTH - title_width) // 2
title_y = 720
draw.text((title_x, title_y), title_text, fill='#00d4ff', font=font_title)

# Draw divider line
line_y = 840
draw.line([(WIDTH//2 - 100, line_y), (WIDTH//2 + 100, line_y)], fill='#ff6b6b', width=3)

# Draw hook line - split into two lines if needed
hook_line1 = '"35岁，一个Bug'
hook_line2 = '都没修好的人生"'

# Calculate text sizes
bbox1 = draw.textbbox((0, 0), hook_line1, font=font_hook)
bbox2 = draw.textbbox((0, 0), hook_line2, font=font_hook)
width1 = bbox1[2] - bbox1[0]
width2 = bbox2[2] - bbox2[0]
height1 = bbox1[3] - bbox1[1]
height2 = bbox2[3] - bbox2[1]

max_width = max(width1, width2)
total_height = height1 + height2 + 10

# Draw box
box_padding = 50
box_x = (WIDTH - max_width - box_padding * 2) // 2
box_y = 920
box_width = max_width + box_padding * 2
box_height = total_height + box_padding * 2

# Draw semi-transparent box background (darker)
overlay = Image.new('RGBA', (box_width, box_height), (30, 30, 40, 200))
img.paste(overlay, (box_x, box_y), overlay)
# Draw left border
draw.line([(box_x, box_y), (box_x, box_y + box_height)], fill='#ff6b6b', width=4)

# Draw hook text line 1
line1_x = box_x + (box_width - width1) // 2
line1_y = box_y + box_padding // 2
draw.text((line1_x, line1_y), hook_line1, fill='#ffffff', font=font_hook)

# Draw hook text line 2
line2_x = box_x + (box_width - width2) // 2
line2_y = line1_y + height1 + 5
draw.text((line2_x, line2_y), hook_line2, fill='#ffffff', font=font_hook)

# Draw brand at bottom
brand_text = "CCLAW 喜剧龙虾"
brand_bbox = draw.textbbox((0, 0), brand_text, font=font_brand)
brand_width = brand_bbox[2] - brand_bbox[0]
brand_x = (WIDTH - brand_width) // 2
brand_y = HEIGHT - 100
draw.text((brand_x, brand_y), brand_text, fill=(200, 200, 200), font=font_brand)

# Add decorative brackets
try:
    bracket_font = ImageFont.truetype("C:/Windows/Fonts/arial.ttf", 180)
except:
    bracket_font = ImageFont.load_default()
draw.text((40, 180), "{", fill=(0, 212, 255), font=bracket_font)
draw.text((WIDTH - 120, HEIGHT - 450), "}", fill=(0, 212, 255), font=bracket_font)

# Save the poster
output_path = r'C:\Users\tiger\.qclaw\workspace\cclaw\poster_output\diego_standup_poster.png'
img.save(output_path, 'PNG', quality=95)
print(f"Poster saved to: {output_path}")


path: cclaw/poster_output/poster.html
content: <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
  width: 1080px;
  height: 1920px;
  background: linear-gradient(180deg, #0a0a0f 0%, #1a1a2e 50%, #16213e 100%);
  font-family: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
  position: relative;
  overflow: hidden;
}

/* Background code pattern */
.code-bg {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0.03;
  font-family: "Courier New", monospace;
  font-size: 14px;
  color: #00ff88;
  line-height: 1.6;
  padding: 20px;
  white-space: pre-wrap;
  word-break: break-all;
}

/* Main container */
.container {
  position: relative;
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 60px 50px;
}

/* Photo container */
.photo-container {
  width: 420px;
  height: 420px;
  border-radius: 50%;
  overflow: hidden;
  border: 4px solid #00d4ff;
  box-shadow: 0 0 60px rgba(0, 212, 255, 0.3), 0 0 120px rgba(0, 212, 255, 0.1);
  margin-top: 40px;
  position: relative;
}

.photo-container img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Glitch effect overlay */
.glitch-overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 2px,
    rgba(0, 212, 255, 0.03) 2px,
    rgba(0, 212, 255, 0.03) 4px
  );
  pointer-events: none;
}

/* Actor name */
.actor-name {
  font-size: 120px;
  font-weight: 900;
  color: #ffffff;
  letter-spacing: 20px;
  margin-top: 60px;
  text-transform: uppercase;
  text-shadow: 0 0 40px rgba(0, 212, 255, 0.5);
}

/* Title */
.title {
  font-size: 72px;
  font-weight: 700;
  color: #00d4ff;
  margin-top: 30px;
  letter-spacing: 8px;
}

/* Divider */
.divider {
  width: 200px;
  height: 3px;
  background: linear-gradient(90deg, transparent, #ff6b6b, transparent);
  margin: 50px 0;
}

/* Hook line */
.hook-container {
  background: rgba(255, 255, 255, 0.05);
  border-left: 4px solid #ff6b6b;
  padding: 40px 50px;
  max-width: 900px;
  margin-top: 20px;
}

.hook-line {
  font-size: 48px;
  color: #ffffff;
  font-weight: 500;
  line-height: 1.6;
  text-align: center;
}

.hook-line .quote {
  color: #ff6b6b;
  font-size: 60px;
  line-height: 0;
}

/* Age highlight */
.age-highlight {
  color: #ffd93d;
  font-weight: 700;
}

/* Brand */
.brand {
  position: absolute;
  bottom: 60px;
  font-size: 24px;
  color: rgba(255, 255, 255, 0.4);
  letter-spacing: 4px;
}

/* Decorative elements */
.deco-line {
  position: absolute;
  width: 2px;
  height: 150px;
  background: linear-gradient(180deg, transparent, #00d4ff, transparent);
}
.deco-left { left: 80px; top: 300px; }
.deco-right { right: 80px; top: 500px; }

/* Floating brackets */
.bracket {
  position: absolute;
  font-size: 200px;
  color: rgba(0, 212, 255, 0.08);
  font-weight: 100;
}
.bracket-left { left: 30px; top: 200px; }
.bracket-right { right: 30px; bottom: 400px; }
</style>
</head>
<body>
<div class="code-bg">function life() {
  const age = 35;
  const bugs = Infinity;
  const fixed = 0;
  
  while (alive) {
    try {
      fixBugs();
    } catch (AI) {
      becomeObsolete();
    }
  }
  
  return "一个Bug都没修好的人生";
}</div>

<div class="bracket bracket-left">{</div>
<div class="bracket bracket-right">}</div>

<div class="deco-line deco-left"></div>
<div class="deco-line deco-right"></div>

<div class="container">
  <div class="photo-container">
    <img src="file:///C:/Users/tiger/Desktop/狼人杀/狼人杀头像(1).jpg" alt="Diego">
    <div class="glitch-overlay"></div>
  </div>
  
  <div class="actor-name">DIEGO</div>
  
  <div class="title">AI打败了程序员</div>
  
  <div class="divider"></div>
  
  <div class="hook-container">
    <div class="hook-line">
      <span class="quote">"</span>
      <span class="age-highlight">35岁</span>，一个Bug都没修好的人生
      <span class="quote">"</span>
    </div>
  </div>
  
  <div class="brand">CCLAW 喜剧龙虾</div>
</div>
</body>
</html>


path: cclaw/README.md
content: # Cclaw

[![License: MIT-0](https://img.shields.io/badge/License-MIT--0-lightgrey.svg)](https://opensource.org/licenses/MIT-0)

全球首个开源喜剧 AI —— 喜剧龙虾

一款面向全场景喜剧创作者的开源 AI 喜剧创作辅助工具 + 视频剪辑助手，专注解决从灵感构思到完整喜剧稿件"从0到1"难题，并支持自然语言驱动的视频剪辑。

## 项目定位

Cclaw，喜剧龙虾。
它不只是一个工具，更是一条路。
作为全链路喜剧创作孵化平台的开源核心，它以 AI 为笔，帮每一个有表达欲的人，将自身独特喜剧视角，写成能笑、能传、能站得住的喜剧文本。同时，它也是你的视频剪辑搭档——用自然语言描述剪辑意图，FFmpeg 帮你执行。

我们不制造廉价的梗，我们搭建真正的喜剧发生机制。
AI 完成"从零到一"，人完成从一到无穷。

## 我们在解决什么

- 普通人心里有戏，笔下无文，有情绪却不会成稿。
- 市面上的 AI 只懂堆砌笑点，不懂喜剧章法，更不懂人。
- 新人写了稿，没人改、没人教、没人指路子。
- 视频剪辑门槛高，时间轴操作繁琐，喜剧节奏难以精准把控。
- 喜剧这一行，长期缺一个真正好用、真正懂行的工具。

## 核心能力

### 喜剧文本创作

- 一事、一情、一念，即可生成完整喜剧文本，让氛围写作变成现实。
- 内置脱口秀、小品、漫才、剧本、讽刺、仿讽、荒诞剧等 **7 种全类型结构**。
- 语言口语、节奏利落、气质鲜明，适配线上传播，也适配喜剧舞台。
- 知识驱动：基于喜剧理论体系 + 案例库，不是随机堆梗，而是有章法地制造笑点。
- 尊重创作者风格，不模板化，不千人一面。

### 视频剪辑

- 自然语言脚本驱动 FFmpeg：说出你的剪辑意图，自动解析为 FFmpeg 命令。
- 支持基础剪辑（裁剪/删除/拼接）、过渡效果（fade/fadeblack/crossfade）、音频处理（loudnorm/加BGM）、字幕烧录。
- 内置 3 个剪辑配方：基础剪辑、高光集锦、喜剧节奏剪辑。
- 过渡效果库：快速查阅各种转场参数。
- 默认 H.264 输出，Windows 全平台可播。

### 海报生成

- 自然语言描述生成专业演出海报，支持脱口秀个人海报、演出宣传海报、社交分享卡。
- 支持大麦/猫眼/秀动等主流演出平台规格：海报、详情页、Banner。
- Design Brief 驱动：将喜剧语境自动翻译为设计语言，输出专业视觉。
- 内置配色方案、版式模板，一键生成可直接上传平台的物料。
- 输出格式：PNG（默认）、PDF（可选）。

## 谁都能用

- 脱口秀演员、喜剧编剧、真心热爱喜剧的普通人。
- 抖音、快手、小红书、视频号等平台的喜剧内容创作者。
- 深耕漫才、Sketch、喜剧短剧的团队与个人。
- 需要幽默表达、年会文案、宣传稿件、喜剧化演讲的企业与机构。
- 需要快速剪辑喜剧视频、制作高光片段的内容创作者。
- 需要生成演出海报、宣传物料的喜剧演员和主办方。
- 每一个想把生活讲成喜剧的人。

## 我们想做的事

做喜剧行业的基础设施。
用 AI 拆掉创作的门槛，用体系铺好成长的道路。
让每一个心怀欢喜的人，都能站上属于自己的喜剧舞台。

## 安装

```bash
# 方式一：ClawHub CLI
clawhub install cclaw

# 方式二：SkillHub CLI
skillhub install cclaw

# 方式三：手动安装
# 将本仓库内容放入 OpenClaw 的 skills 目录：
# ~/.qclaw/skills/cclaw/
```

## 使用示例

### 喜剧创作

```
写一段脱口秀，主题是中年程序员失业
帮我写个漫才，题材是大龄程序员面试
写个讽刺文，主题是内卷
用荒诞剧的形式表达沟通的不可能
```

### 视频剪辑

```
帮我剪辑视频，删掉第5秒到第20秒
拼接这4个片段，加上fade过渡
给56秒处加一个zoom特写效果
帮我提取高光片段做成集锦
```

### 海报生成

```
生成脱口秀海报，主题是AI打败了程序员
生成大麦演出海报，演出名称51笑翻天
生成金句卡，内容是35岁一个Bug都没修好的人生
生成大麦详情页，演员Diego，时间五月1日
```

## 架构

```
├── SKILL.md                     # 技能入口 + 三步路由工作流
├── commands.md                  # 用户命令配置（文本+视频）
├── LICENSE                      # MIT No Attribution
├── modules/
│   ├── writing/                 # 喜剧输出模板（7种）
│   │   ├── standup-template.md  # 脱口秀
│   │   ├── sketch-template.md   # 小品
│   │   ├── manzai-template.md   # 漫才
│   │   ├── script-template.md   # 剧本
│   │   ├── satire-template.md   # 讽刺文
│   │   ├── parody-template.md   # 仿讽
│   │   └── absurdist-template.md# 荒诞剧
│   └── tools/
│       ├── video/               # 视频剪辑模块
│       │   ├── README.md        # FFmpeg工作流 + 自然语言脚本解析
│       │   ├── transitions.md   # 过渡效果库
│       │   └── recipes/         # 剪辑配方
│       │       ├── basic-cut.md
│       │       ├── highlight-reel.md
│       │       └── comedy-timing.md
│       └── poster/              # 海报生成模块
│           ├── README.md        # 海报工作流 + Design Brief 规范
│           ├── briefs/          # 海报规格模板（大麦/猫眼/秀动）
│           │   ├── standup-poster.md
│           │   ├── comedy-show.md
│           │   ├── social-card.md
│           │   ├── damai-poster.md
│           │   ├── damai-detail.md
│           │   ├── banner-damai-999.md
│           │   └── banner-damai-1404.md
│           └── recipes/         # 海报配方
│               └── quote-card.md
├── knowledge/
│   ├── theory/                  # 喜剧底层原理（必读）
│   │   ├── eb7cb5ef.md         # 喜剧创作核心原理
│   │   ├── ac07d434.md         # 包袱结构与铺垫节奏
│   │   ├── 126b44e8.md         # 笑的心理学机制
│   │   └── 9d01e4da.md         # 喜剧类型速查 + 推荐手法
│   └── cases/                   # 案例库 + 创作方法论（必读）
│       ├── standup/             # 脱口秀案例（充实 ✅）
│       ├── sketch/              # 小品案例（有模板 ✅）
│       ├── manzai/              # 漫才（待填充）
│       ├── parody/              # 仿讽（待填充）
│       └── script/              # 剧本（待填充）
└── references/                  # 索引
    ├── comedy-theory.md         # 理论文件索引
    └── comedy-templates.md      # 模板文件索引
```

## 工作流程

Cclaw 采用**三步路由**架构：

1. **识别命令** — 读取 commands.md，判断是文本创作还是视频工具
2. **路由执行** — 文本创作走 knowledge 驱动（模板→案例→理论），视频工具走 FFmpeg 脚本驱动，海报生成走 Design Brief 驱动
3. **输出** — 成品 + 创作笔记（手法说明 + 知识来源标注）

## 喜剧理论体系

一切喜剧效果的根本来源：**生命中出现机械性、僵硬性**。

三大铁律：
1. 角色越不自觉，越可笑
2. 观众越不动情，越能发笑
3. 效果逐级递增

核心手法：弹簧魔鬼 / 雪球效应 / 系列干扰 / 换位 / 反转 / 三番四抖 / 连续否认 / Call Back（遗忘后再炸）

## 版本历史

### v1.7.0 (2026-04-27)
- 新增海报生成模块，支持 3 种基础海报类型 + 8 种演出平台规格
- 支持大麦/猫眼/秀动：海报、详情页、Banner（共 11 个规格模板）
- 新增 Design Brief 工作流：喜剧语境 → 设计语言 → 专业视觉
- 集成 canvas-design skill 实现高质量视觉输出
- 本地版本完成，待发布至 ClawHub

### v1.6.0 (2026-04-26)
- 新增海报生成模块 P0+P1 实现
- 3 种海报类型：脱口秀海报(1080×1920)、演出海报(1920×1080)、社交分享卡(1200×630)
- 新增金句卡配方
- SKILL.md 新增 Step 2C 海报工作流
- 本地版本完成

### v1.5.1 (2026-04-26)
- 四问流程优化：Q3标题改为"创作者核心情绪"（明确问的是创作者自己的感受）
- 新增交互原则：用户可只选选项字母，也可补充描述
- 每步增加示例回复和括号提示引导
- 发布至 ClawHub

### v1.5.0 (2026-04-26)
- 新增意图确认分支：情况A（具体话题）直接创作，情况B（模糊如"写一段脱口秀"）走四问交互
- 四问流程：体裁→题材→情绪→受众
- 发布至 ClawHub

### v1.4.0 (2026-04-25)
- 新增 knowledge/blackbook.md 黑话手册（蒸馏/龙虾/国潮术语定义）
- SKILL.md 新增步骤⓪加载黑话（最高优先级）
- cases 空目录改为跳过不再读其他类型
- 发布至 ClawHub

## 许可证

本技能采用 **MIT No Attribution (MIT-0)** 许可证。

✅ 可自由使用、修改、分发、商用，无需署名。

详见 [LICENSE](./LICENSE) 文件。


path: cclaw/references/comedy-templates.md
content: # 喜剧类型索引

> 本文件是 Cclaw 各喜剧类型的快速导航索引。

## 文本输出模板

| 类型 | 路径 | 说明 |
|------|------|------|
| 脱口秀 | `modules/writing/standup-template.md` | 单人口述，5-20分钟 |
| 小品 | `modules/writing/sketch-template.md` | 多人情景剧 |
| 漫才 | `modules/writing/manzai-template.md` | 对口/多口漫才 |
| 剧本 | `modules/writing/script-template.md` | 完整喜剧剧本 |
| 讽刺 | `modules/writing/satire-template.md` | 讽刺文章 |
| 仿讽 | `modules/writing/parody-template.md` | 戏仿/恶搞 |
| 荒诞剧 | `modules/writing/absurdist-template.md` | 荒诞喜剧 |

## 视频工具

| 类型 | 路径 | 说明 |
|------|------|------|
| 视频剪辑 | `modules/tools/video/README.md` | FFmpeg 自然语言脚本驱动 |
| 基础剪辑 | `modules/tools/video/recipes/basic-cut.md` | 删除/截取片段 |
| 精彩集锦 | `modules/tools/video/recipes/highlight-reel.md` | 多段拼接 |
| 喜剧节奏 | `modules/tools/video/recipes/comedy-timing.md` | 笑点留白/放大 |
| 过渡效果 | `modules/tools/video/transitions.md` | 淡入/滑入等 |

## 知识库

见 `../knowledge/` 目录及 `SKILL.md` 中的知识库速查。

path: cclaw/references/comedy-theory.md
content: # 理论索引（内部参考）

> 本目录已重构，文件已哈希化。请使用下方新路径。

| 主题 | 文件（哈希索引） |
|------|------|
| 喜剧创作核心原理（必读） | `knowledge/theory/eb7cb5ef.md` |
| 包袱结构与铺垫节奏 | `knowledge/theory/ac07d434.md` |
| 笑的心理学机制 | `knowledge/theory/126b44e8.md` |
| 喜剧类型速查 + 推荐手法 | `knowledge/theory/9d01e4da.md` |

旧路径（已失效）：
- `knowledge/theory/bergson.md` → 已更名为 `eb7cb5ef.md`
- `knowledge/theory/freud.md` → 已更名为 `126b44e8.md`
- `knowledge/theory/xiangsheng.md` → 已更名为 `ac07d434.md`
- `knowledge/theory/comedy-types.md` → 已更名为 `9d01e4da.md`


path: cclaw/_meta.json
content: ownerId: kn72a10j131nz1mqm3w217v3mx854w02
slug: cclaw
version: 1.8.0
publishedAt: 1777346506475

path: commands.md
content: # Cclaw 命令速查

## 文本创作命令

### 脱口秀 / standup

**命令格式：**
```
写/创作/帮我写一段脱口秀
主题：<一句话描述>
可选：风格偏好、时长要求
```

**知识读取顺序（必须按顺序）：**
1. `modules/writing/standup-template.md` — 结构模板
2. `knowledge/cases/standup/growth-path.md` — 创作者心法（必读）
3. `knowledge/cases/standup/` — 其他案例文件
4. `knowledge/theory/eb7cb5ef.md` — 核心原理
5. `knowledge/theory/ac07d434.md` — 包袱结构

**适用场景：** 单人口述，5-20分钟，幽默演讲、社会观察、自我调侃

---

### 小品 / sketch

**命令格式：**
```
写/创作/帮我写一个小品
主题：<场景+冲突>
人物：<2-5人>
```

**知识读取顺序（必须按顺序）：**
1. `modules/writing/sketch-template.md` — 结构模板
2. `knowledge/cases/sketch/sketch创作模板_平台课程.md` — 小品创作模板
3. `knowledge/cases/sketch/` — 其他案例文件
4. `knowledge/theory/eb7cb5ef.md` — 核心原理
5. `knowledge/theory/9d01e4da.md` — 类型速查

---

### 漫才 / manzai

**命令格式：**
```
写/创作/帮我写一段漫才
题材：<话题描述>
```

**知识读取顺序（必须按顺序）：**
1. `modules/writing/manzai-template.md` — 漫才格式规范
2. `knowledge/theory/eb7cb5ef.md` — 核心原理

**注：** `knowledge/cases/manzai/` 当前为空，跳过案例步骤。

**核心手法：** 连续否认（三次以上）、极致化升级、收尾反差

---

### 讽刺 / satire

**命令格式：**
```
写/创作/帮我写一篇讽刺文章
对象：<社会现象/行业/政策>
角度：<批评/嘲笑/揭示>
```

**知识读取顺序：**
1. `modules/writing/satire-template.md` — 讽刺格式
2. `knowledge/theory/eb7cb5ef.md` — 核心原理
3. `knowledge/theory/126b44e8.md` — 笑的心理学

---

### 仿讽 / parody

**命令格式：**
```
写/创作/帮我写一段仿讽
原作：<作品名/类型>
主题：<新角度/反转>
```

**知识读取顺序：**
1. `modules/writing/parody-template.md` — 仿讽格式
2. `knowledge/theory/9d01e4da.md` — 类型速查

**注：** `knowledge/cases/parody/` 当前为空，跳过案例步骤。

---

### 剧本 / script

**命令格式：**
```
写/创作/帮我写一个喜剧剧本
类型：<情景剧/独角戏/电影/短剧>
主题：<核心冲突>
```

**知识读取顺序：**
1. `modules/writing/script-template.md` — 剧本格式
2. `knowledge/theory/eb7cb5ef.md` — 核心原理

**注：** `knowledge/cases/script/` 当前为空，跳过案例步骤。

---

### 荒诞剧 / absurdist

**命令格式：**
```
写/创作/帮我写一段荒诞剧
概念：<荒诞设定>
```

**知识读取顺序：**
1. `modules/writing/absurdist-template.md` — 荒诞剧格式
2. `knowledge/theory/eb7cb5ef.md` — 核心原理
3. `knowledge/theory/126b44e8.md` — 笑的心理学

---

## 视频工具命令

> 视频工具通过自然语言脚本驱动 FFmpeg。

**基础剪辑：**
```
帮我剪辑视频
文件：<路径>
脚本：<时间戳+操作描述>
```

**拼接：**
```
拼接以下片段（按顺序）：
- <文件1>：<起始时间>-<结束时间>
- <文件2>：<起始时间>-<结束时间>
```

**加字幕：**
```
给视频加字幕
文件：<路径>
字幕内容：<文字>
格式：硬字幕/软字幕
```

**转码：**
```
转换格式
文件：<路径>
目标格式：mp4/webm/mov
```

**更多配方：** 见 `modules/tools/video/README.md`

---

## 海报工具命令

> 海报生成通过 design brief 驱动 canvas-design skill 实现。

### 通用海报

**脱口秀海报：**
```
帮我生成一张脱口秀海报 / 做个B站封面
演员：<名字>
段子名：<名称>
可选：日期、场地、风格偏好
```

**演出宣传海报：**
```
帮我做一张演出海报 / 演出宣传图
演出名：<名称>
日期：<日期> 时间：<时间>
场地：<地点>
演员：<名单>
可选：票价、购票链接、宣传语
```

**金句分享卡：**
```
帮我把这段做成图 / 生成金句卡
内容：<金句文字>
可选：出处、作者、风格偏好
```

### 演出平台标准规格

**海报（竖版）：**
```
生成演出海报（大麦规格）
生成演出海报（猫眼规格）
```
- 大麦：1020×1360px
- 猫眼：1800×2400px（≤2M）

**详情页：**
```
生成演出详情页（大麦规格）
生成演出详情页（猫眼规格）
```
- 大麦：1020px宽，长度不限
- 猫眼：800px宽，长度不限（≤13M，支持动图）

**Banner：**
```
生成Banner（猫眼规格）
生成Banner（秀动规格）
生成Banner（大麦999×375）
生成Banner（大麦1404×320）
```

**从创作联动：**
写完脱口秀/漫才后可直接说「帮我生成一张海报」，自动从创作内容提取信息。

**更多详情：** 见 `modules/tools/poster/README.md`

---

## 通用说明

**创作时必须：**
- 按顺序读取知识（模板→案例→理论）
- 若对应类型的 cases 目录为空，直接跳过案例步骤
- 禁止在正文中出现人名/书名/理论术语标签
- 输出成品后附加创作笔记（手法+知识来源）

**遇到类型不确定时：** 先读取 `knowledge/theory/9d01e4da.md`（类型速查）再决定路由


path: knowledge/blackbook.md
content: # 黑话.md — Cclaw 喜剧创作行业术语手册

> **用途**：Cclaw 喜剧写作流程第一步加载文件。  
> **作用**：统一术语解释锚点，确保创作时术语含义一致、不泄底、不跳步。  
> **加载顺序**：所有创作任务 → ①加载黑话.md → ②读输出模板 → ③读案例库 → ④读理论原理 → ⑤按模板创作。

---

## 核心黑话

---

### 蒸馏（Knowledge Distillation）

**本义（AI 领域）**  
大模型（教师模型）把自己会的知识压缩提炼给小模型（学生模型），小模型用更少的参数学会了大模型的核心能力。

**喜剧映射**  
脱口秀演员 A 写了一个好段子，演员 B 在开放麦听到后，用类似的结构、角度、甚至原句，"借鉴"了一下，第二天上了自己的台。  
→ A 是教师模型，B 是学生模型。  
→ B 干的事叫**段子蒸馏**。  
→ 蒸馏率越高，差别越小——B 的段子越像 A 的。

**喜剧中的笑点方向**  
- 把"蒸馏"这个词正儿八经用在脱口秀圈，有一种学术论文式的讽刺感  
- "知识蒸馏"→"段子蒸馏"→"蒸馏²"→"元蒸馏"，层层升级  
- 区分：学习会说谢谢，蒸馏连标点符号都不改

---

### 龙虾（OpenClaw / AI Agent）

**本义**  
龙虾是一个 AI Agent（人工智能助手），名字来源于它的"钳子"（tools/工具能力）——能帮用户执行各种任务，包括写文案、查资料、剪视频等。

**喜剧映射**  
龙虾 = 全网最大的蒸馏器。  
它从整个互联网搬内容，搬完加上自己的"外壳"（提示词包装），输出给用户。  
用户以为自己在用 AI，实际上在用全网蒸馏后的"水果味"。

**喜剧中的笑点方向**  
- 龙虾有钳子 = AI 有工具能力 = 能干活  
- 龙虾既是厨师又是食材——AI 写的段子又能被人类再蒸馏  
- "龙虾焦虑"：不是怕吃龙虾，是怕变成龙虾——一个每天蒸馏全网、不需要内疚的"我"

---

### 国潮（Fake Guochao）

**本义**  
"国潮"本意是带中国传统文化元素 + 现代潮流设计的商品/品牌。但大量品牌只是在商品上贴传统符号（龙凤、祥云、京剧脸谱），并没有文化内涵，俗称**假国潮**。

**喜剧映射**  
假国潮 = 万物 + 龙凤祥云 = 国潮。  
公式：**任何东西 + 传统符号 = 国潮联名款**  
越假越潮，越浅越贵。

**喜剧中的笑点方向**  
- "加了两块钱的龙"——贴了传统元素就敢涨价  
- 万物皆可国潮：煎饼果子、马桶盖、银行理财（兵马俑联名手机壳）  
- 归谬法：国潮 × 清明节限定款（谁买？买了送谁？）  
- 身份错位：真手艺人从不说"国潮缂丝"——他们只说"缂丝"；加了前缀的都是怕你不觉得它潮

---

## 使用指南

| 黑话 | 适用主题 | 推荐手法 |
|------|---------|---------|
| 蒸馏 | 行业内部吐槽、open relationship | 铺垫-反转、元蒸馏 |
| 龙虾 | AI × 喜剧、工具焦虑 | 身份错位、弹簧魔鬼 |
| 国潮 | 消费主义、文化符号 | 归谬法、逻辑滑坡 |

---

*黑话文件 · 版本 1.1 · 2026-04-25（精简版）*

path: knowledge/cases/japanese-sketch/README.md
content: # 日式短剧案例库

> 本目录存放日式短剧（コント）创作案例和参考

## 什么是日式短剧（コント）？

- 5分钟极快节奏短剧
- 核心公式：极端性格 + 明确目标 + 阻碍升级
- 节奏铁律：15秒一个小笑点，1分钟一个大爆点
- 必须有明确收尾（拒绝开放式结局）

## 创作核心理论

详见：`knowledge/theory/japanese-sketch.md`

## 输出模板

详见：`modules/writing/japanese-sketch-template.md`

## 案例索引

（待填充）


path: knowledge/cases/manzai/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: knowledge/cases/parody/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: knowledge/cases/script/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: knowledge/cases/sketch/README.md
content: # 案例库\n\n> 存放本类型优秀案例。格式：标题 + 手法分析 + 原文节选。\n\n暂无案例，请添加。


path: knowledge/cases/sketch/sketch创作模板_平台课程.md
content: ---
style: 训练模板, 观察式, 身份错位式, 荒诞解构式
mood: 训练, 结构化
tags: sketch, 素描喜剧, 前提, Premise, 情境喜剧, 多角色
---

# Sketch素描喜剧创作模板（平台课程框架）

## 来源
文件：C:\Users\tiger\Desktop\喜剧知识库\sketch作品档案.docx
分类：cases/sketch
主题：6天训练模板——从灵感到完整作品

---

## 一、模板结构说明

本文档为 Sketch 素描喜剧的**创作训练框架**，包含6个训练日模板。
每个训练日均有6个字段，创作时按顺序填写。

### 六大字段说明

| 字段 | 说明 |
|------|------|
| **作品标题** | 给你的作品起个名字 |
| **灵感** | 这个作品的灵感来源是什么？（生活观察/负面情绪/新闻事件/日常细节） |
| **前提** | 一句话概括整个 Sketch 的核心设定/情境/规则（Premise） |
| **结构** | 作品的叙事结构：如何建立→如何推进→如何收尾 |
| **全文** | 完整的 Sketch 脚本文本 |
| **教练反馈** | 创作完成后的复盘/优化点 |

---

## 二、六天训练日模板

### 训练日6：完成你的第一个原创喜剧作品

**作品标题：** __________________________

**灵感来源：**
（从哪里得到的灵感？生活中观察到什么？什么触发了这个想法？）

**前提（Premise）：**
（一句话概括这个 Sketch 的核心设定/情境/荒诞规则）
> 例："两个人被困在电梯里，但电梯只是不动，并没有坏"

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[人物1]：
[人物2]：
[人物3]：
...（完整对话/动作脚本）
```

**教练反馈：**
□ 前提是否清晰？
□ 结构是否有递进？
□ 笑点密度够吗？
□ 有没有重复利用的前提/套路？
□ 优化建议：__________________________

---

### 训练日7：优化你的第一个原创喜剧作品

**作品标题：** __________________________

**灵感来源：**
（对训练日6作品的优化灵感）

**前提（Premise）：**
（优化后的前提是否更清晰/更有力？）

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（优化版脚本）：**
```
[完整优化后的脚本]
```

**教练反馈：**
□ 对比训练日6，改了哪些地方？为什么改？
□ 优化后的版本好笑在哪里？
□ 还有哪些地方可以继续打磨？

---

### 训练日9：完成你的第二个原创喜剧作品

**作品标题：** __________________________

**灵感来源：**
（新的灵感来源，尝试不同的领域或角度）

**前提（Premise）：**
（一句话概括）

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[完整脚本]
```

**教练反馈：**
□ 这个作品和第一个有什么不同？
□ 这次创作遇到的最大挑战是什么？

---

### 训练日10：优化你的第二个原创喜剧作品

**作品标题：** __________________________

**全文（优化版脚本）：**
```
[优化后的脚本]
```

**教练反馈：**
□ 优化前后对比：主要改了哪里？
□ 第二个作品比第一个进步在哪里？

---

### 训练日11：24小时限时创作——第三个原创作品

**限定条件：** 24小时内完成从灵感到完整脚本

**作品标题：** __________________________

**灵感来源：**
（限时创作的灵感来源：必须快速锁定灵感）

**前提（Premise）：**
（快速形成的前提）

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[完整脚本]
```

**教练反馈：**
□ 24小时限时够用吗？哪个环节最费时间？
□ 限时创作的压力带来了什么？是更高效还是更焦虑？

---

### 训练日12：24小时限时创作——第四个原创作品

**限定条件：** 24小时内完成从灵感到完整脚本

**作品标题：** __________________________

**灵感来源：**

**前提（Premise）：**

**结构：**
- 建立：__________________________
- 推进：__________________________
- 收尾：__________________________

**全文（Sketch脚本）：**
```
[完整脚本]
```

**教练反馈：**
□ 第四次比第三次更快了吗？快在哪里？
□ 到现在为止，四个作品中最满意哪个？为什么？
□ 自己的创作风格开始形成了吗？

---

## 三、训练路径总结

| 训练日 | 任务 | 关键词 |
|--------|------|--------|
| Day 6 | 完成第1个原创作品 | 从零到一 |
| Day 7 | 优化第1个原创作品 | 打磨 |
| Day 9 | 完成第2个原创作品 | 尝试不同角度 |
| Day 10 | 优化第2个原创作品 | 迭代 |
| Day 11 | 24小时限时创作第3个作品 | 速度 |
| Day 12 | 24小时限时创作第4个作品 | 效率复盘 |

### 创作核心流程（可复用）
1. **锁定灵感** — 观察生活，记录触动点
2. **提炼前提** — 用一句话说清楚设定
3. **设计结构** — 建立→推进→收尾
4. **写出全文** — 对话+动作+节奏
5. **获取反馈** — 讲给别人听，记录反应
6. **优化迭代** — 哪里不好笑改哪里

---

## 四、Sketch（素描喜剧）核心特点

### 与脱口秀的区别

| 维度 | 脱口秀 | Sketch素描喜剧 |
|------|--------|----------------|
| 人物 | 单人（我） | 多个角色 |
| 时长 | 5-15分钟 | 1-5分钟 |
| 结构 | 铺垫+笑点线性推进 | 情境建立+反复强化+意外收尾 |
| 笑点密度 | 分散，多段子串联 | 高密度，同一情境反复炸 |
| 核心 | "错误"艺术 | "情境"艺术 |

### Sketch 的前提（Premise）类型
- **情境型**：两个人被困在电梯里，但电梯只是不动，并没有坏
- **身份型**：如果医生比病人还紧张
- **规则型**：如果所有人说话都只能反着说
- **反转型**：前面一切正常，最后一个细节颠覆全局

---

## 关键词索引
#sketch #素描喜剧 #作品档案 #训练模板 #前提 #Premise #情境喜剧 #多角色 #限时创作 #结构建立 #灵感收集 #优化迭代


path: knowledge/cases/standup/README.md
content: # 脱口秀案例库

> 存放脱口秀/单口喜剧的优秀案例，供创作参考。

## 当前内容

| 文件 | 内容 |
|------|------|
| `growth-path.md` | 创作者成长路径 + 三大杂念粉碎法 + 排毒日记法 + 喜剧原力觉醒 |

## 案例格式

每个案例文件包含：
- 案例标题
- 核心笑点分析
- 使用的手法和理论原理
- 完整或节选的原文


path: modules/tools/poster/briefs/banner-damai-1404.md
content: # Design Brief: 大麦 Banner (1404×320)

## 规格
- 尺寸：1404×320px
- 用途：大麦 APP 分类页/活动页 Banner

## 内容数据

**必填：**
- 演出名称：<完整名称>
- 卖点：<一句话>

**选填：**
- 日期：<MM.DD>
- 城市：<城市名>
- 标签：<如"首演"、"收官">

## 视觉风格
- 超宽横版，适合沉浸式展示
- 可作为系列演出/活动专题图
- 视觉元素可更丰富

## 输出要求
- 文件命名：`banner_damai_1404_<演出简称>.png`


path: modules/tools/poster/briefs/banner-damai-999.md
content: # Design Brief: 大麦 Banner (999×375)

## 规格
- 尺寸：999×375px
- 用途：大麦 APP 首页轮播图

## 内容数据

**必填：**
- 演出名称：<完整名称>
- 核心信息：<日期/城市/卖点>

**选填：**
- 主演：<演员名>
- 标签：<如"爆笑推荐"、"限时折扣">
- 按钮：<默认"立即抢购">

## 视觉风格
- 横版构图，视觉重心偏左
- 文字信息右置，避免被 UI 遮挡
- 适合轮播展示，3秒内传达核心信息

## 输出要求
- 文件命名：`banner_damai_999_<演出简称>.png`


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)