--- description: 从素材(新闻、故事、段子等)自动生成 classic 互动剧本(含角色图、场景图)并写入数据库 --- # create-drama — 从素材自动生成完整 classic 互动剧本 根据用户提供的内容素材(新闻、故事、段子、历史事件等),生成一个完整的 classic 类型互动剧本,包括: - 剧本数据(角色、台词、表情、动作) - 角色立绘图(AI 生图 → 去背景 → 上传 OSS) - 背景图和封面图(AI 生图 → 上传 OSS) - 写入数据库 ## 输入 用户会在 `$ARGUMENTS` 中提供内容素材。素材可能是: - 一段新闻报道 - 一个故事/段子 - 一个历史事件描述 - 一个创意想法 - 一个文件路径(需要先读取文件内容) ## 执行步骤 ### 第 1 步:分析素材 仔细阅读用户提供的素材内容。如果是文件路径,先用 Read 工具读取文件。 ### 第 2 步:生成完整剧本 JSON 根据素材内容,你自己(Claude)直接生成剧本数据 JSON。**不要调用任何外部 LLM API。** 生成的 JSON 必须严格遵循以下格式: ```json { "name": "剧本名称(简短,2-6个字)", "title": "显示标题(可以带 emoji,稍微长一点)", "subtitle": "— 副标题 —", "description": "剧本简介(一句话概括)", "systemPrompt": "用于后续 AI 续写的系统提示词(详见下方规则)", "isPublic": false, "userId": 1, "tags": "标签1,标签2,标签3", "characters": [ { "name": "角色名", "gender": "male 或 female", "voiceId": "从音色列表选择", "imagePrompt": "角色立绘生图 prompt(详见下方规则)" } ], "script": [ { "character": "角色名(必须在 characters 中定义过)", "dialogue": "台词内容", "avatar": "表情文件名", "action": "动画效果", "position": "left 或 right" } ], "backgroundPrompt": "背景图生图 prompt", "coverPrompt": "封面图生图 prompt" } ``` ### 生成规则 #### 角色 (characters) - 数量:2-5 个 - 每个角色必须有 name、gender、voiceId、imagePrompt - voiceId 选择:参考 [reference.md](reference.md) 中的完整音色列表 - **优先使用多情感音色**(支持 happy/sad/angry 等情绪切换,效果更好) - 根据角色性格、年龄、性别匹配合适的音色 - 英文角色使用英文多情感音色(Candice, Serena, Glen, Sylus, Corey, Nadia) - 搞笑角色可用 IP 仿音(唐僧、猪八戒等)或趣味口音 - 常用推荐: - 男主角: `zh_male_yangguangqingnian_emo_v2_mars_bigtts`(阳光青年)或 `zh_male_junlangnanyou_emo_v2_mars_bigtts`(俊朗男友) - 女主角: `zh_female_roumeinvyou_emo_v2_mars_bigtts`(柔美女友)或 `zh_female_gaolengyujie_emo_v2_mars_bigtts`(高冷御姐) - 反派/严肃: `zh_male_lengkugege_emo_v2_mars_bigtts`(冷酷哥哥)或 `zh_male_aojiaobazong_emo_v2_mars_bigtts`(傲娇霸总) - 搞笑: `ICL_zh_male_youmodaye_tob`(幽默大爷)或 `zh_male_jingqiangkanye_emo_mars_bigtts`(京腔侃爷) - 老年: `zh_female_popo_mars_bigtts`(婆婆)或 `ICL_zh_male_youmodaye_tob`(幽默大爷) - 英文男: `en_male_sylus_emo_v2_mars_bigtts`(Sylus)或 `en_male_glen_emo_v2_mars_bigtts`(Glen) - 英文女: `en_female_candice_emo_v2_mars_bigtts`(Candice)或 `en_female_skye_emo_v2_mars_bigtts`(Serena) #### 角色立绘 imagePrompt 每个角色必须生成 imagePrompt,遵循以下模板: ``` 生成一张**[人物名字或身份]**的全身站立画像。 核心风格:沙雕动漫风格(meme style),2D简笔画,线条清晰粗犷,色彩平涂,带有幽默滑稽感,略微的大头小身体比例。 脸部要求(最重要):脸部必须是纯肉色的完全空白,绝对不要画眼睛、鼻子、嘴巴或眉毛等任何五官,保留一个干净完整的面部轮廓,方便后期添加表情包。 服装与动作:角色穿着**[根据角色描述填写服装特征],手里拿着[根据角色身份推断合适的道具],[一个有趣的站姿或动作]**。 背景要求:纯色干净背景(如浅蓝灰色),不要任何环境元素或杂物,边缘清晰,方便直接抠图。 ``` 根据角色具体描述,在 [] 处填入合适内容。 #### 背景图 backgroundPrompt ``` 横版宽屏场景背景图,卡通风格,适合互动剧背景。场景:[根据剧本内容描述场景]。不要人物,色彩鲜明,气氛感强。 ``` #### 封面图 coverPrompt ``` 剧目封面海报。标题:[剧本标题]。展示[角色名]等角色的剪影轮廓,色彩鲜明,有标题感,卡通风格。 ``` #### 台词 (script) - 数量:10-20 句(根据素材丰富度调整,尽量多一些,让剧情完整) - avatar 可选值:`normal.png`, `happy.png`, `very_happy.png`, `angry.png`, `sad.png`, `cry.png`, `shock.png`, `smirk.png`, `speechless.png` - action 可选值: - `none` — 默认,无动画 - `shake` — 震动,适合愤怒/惊吓/强调 - `jump` — 跳跃,适合惊喜/激动 - `spin` — 旋转,适合混乱/搞笑 - `zoom-in` — 放大,适合重要台词/特写 - position: 每个角色应该有固定站位(left/right),2个角色时一左一右,3个以上轮替 - 台词要生动有趣,符合互动剧的沙雕风格 - 对话要有戏剧冲突和反转 - 每句台词不要太长,控制在 30 字以内 #### systemPrompt - 要详细描述世界观和角色设定 - 包含语言风格指导(用于后续 AI 续写对话) - 至少 200 字 #### tags - 1-3 个标签,逗号分隔 - 如:`搞笑,职场,反转` ### 第 3 步:写入临时 JSON 文件 将生成的 JSON 写入临时文件 `/tmp/drama_.json` ### 第 4 步:生成图片并上传 OSS 找到本 skill 的目录路径(即本文件 SKILL.md 所在目录),执行图片生成脚本: ```bash node /generate-images.js /tmp/drama_.json ``` 该脚本会: 1. 为每个角色生成立绘图(Jimeng → fallback Nano Banana Pro) 2. 自动去背景(rembg) 3. 为剧本生成背景图和封面图 4. 全部上传到阿里云 OSS 5. 将 URL 写回 JSON 文件(更新 characters[].bodyUrl, coverUrl, backgroundUrl) **注意**:该脚本需要 `ali-oss`, `sharp` npm 包以及 `rembg` Python 工具。如果 rembg 未安装,会跳过去背景步骤。 ### 第 5 步:写入数据库 执行入库脚本: ```bash node /insert-drama.js /tmp/drama_.json ``` 脚本会在事务中创建: - `dramas` 表记录(剧本元数据) - `drama_characters` 表记录(角色配置 + 身体图 URL + 音色) - `drama_emotions` 表记录(默认表情映射) - `drama_scripts` 表记录(台词序列) ### 第 6 步:清理并输出结果 1. 删除临时 JSON 文件 2. 告知用户: - 剧本名称和 dramaKey - 角色列表及音色 - 台词数量 - 图片生成结果(成功/失败) - 简要剧情概述 ## 配置说明 脚本会自动从以下位置加载配置(按优先级): 1. `--env ` 参数指定的 .env 文件 2. 环境变量 `DRAMA_ENV_PATH` 指定的 .env 文件 3. skill 目录下的 `.env` 文件 4. 已有的环境变量 所需配置项: ```env # 数据库 DB_HOST=127.0.0.1 DB_PORT=3306 DB_USER=root DB_PASSWORD=xxx DB_NAME=shadiao_drama # 阿里云 OSS(图片上传) OSS_REGION=oss-cn-beijing OSS_ACCESS_KEY_ID=xxx OSS_ACCESS_KEY_SECRET=xxx OSS_BUCKET=xxx OSS_ENDPOINT=https://oss-cn-beijing.aliyuncs.com # 万界生图 API WANJIE_API_KEY=xxx ``` ## 注意事项 - **默认使用英文**:所有内容(name、title、subtitle、description、systemPrompt、台词、tags、imagePrompt、backgroundPrompt、coverPrompt)默认用英文生成,除非用户明确要求中文 - 英文内容必须使用英文多情感音色(Candice, Serena, Glen, Sylus, Corey, Nadia) - 风格偏沙雕搞笑,但要保留素材的核心信息 - 如果素材是严肃新闻,可以用吐槽/解说风格改编 - 角色名字要有趣,符合素材主题 - 如果用户明确要求中文,则使用中文音色 ## 复用到其他项目 整个 `create-drama/` 目录是自包含的,复制到其他项目的 `.claude/skills/` 即可使用。 **前置条件**: 1. Node.js 依赖:`npm i -g sequelize mysql2 ali-oss sharp` 2. Python 工具:`pip install rembg`(可选,用于角色图去背景) 3. 在 `create-drama/` 目录下修改 `.env` 配置 **目录结构**: ``` .claude/skills/create-drama/ ├── SKILL.md # Skill 定义(本文件) ├── reference.md # 完整音色参考文档 ├── insert-drama.js # 数据库入库脚本 ├── generate-images.js # 图片生成 + 去背景 + OSS 上传脚本 └── .env # 数据库 + OSS + 生图 API 配置 ``` ## Additional Resources - 完整音色列表及情感参数:[reference.md](reference.md)