关于 kelly-drama
Kelly Drama 是短剧和产品视频的策划工作区,面向需要管理剧集、角色和分镜的创作团队。它负责创意规划与素材索引,并将最终剪辑交由 HyperFrame 处理。
主要功能
- 01管理剧集设定、角色与关系
- 02规划分集节拍和分镜镜头
- 03检查镜头制作就绪状态
- 04导出故事圣经
- 05同步查看 HyperFrame 项目状态
适用场景
- 01规划短剧剧集与故事节拍
- 02维护角色设定和关系变化
- 03生成前检查分镜镜头资料
- 04为制作交接导出故事圣经
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mr-kelly/ skills --skill kelly-drama安装后在 Claude Code 中输入/kelly-drama确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
busabase.jsonagents/openai.yamlassets/starter-project.jsoncontent/_folder.jsoncontent/characters/base.jsoncontent/episodes/base.jsoncontent/kelly-drama-app/_node.json.busabaseignorecontent/kelly-drama-app/app/accent-theme.cssaccent-theme.jsapp.jsindex.htmlcontent/kelly-drama-app/app/i18n/messages.jscontent/kelly-drama-app/app/js/actions.jsapi.jsbusabase-client.jschrome.jsconfig.jsconnect-gate.jsdrama-client.jsdrama-model.jsepisodes.jsformat.jsforms.jsi18n.jslist-detail.jsmodal.jsoverview.jscontent/kelly-drama-app/app/js/providers/busabase-provider.jsdemo-provider.js详细介绍
Kelly Drama
应用 UI 截图
![]() | ![]() |
| 概览 系列工作台,包含健康状态仪表盘、执行时间线、统计信息,以及系列参数设置。 | 剧集表格 剧集列表,包含剧本和分镜状态、镜头就绪情况指示,以及每集的详情面板。 |
![]() | ![]() |
| 角色库 角色列表,包含三视图图像状态、演员设置、服装和语音预览控件。 | 关系图 角色关系视图,包含权力动态、证据链接和关系详情面板。 |
核心理念
将此技能用作短剧和产品视频的策划工作区。将应用保留为人工编辑界面和规划的权威记录系统:该技能负责推理、起草、验证、导出,并完成应用只能排队的 AI 生成请求。应用读取和写入一个 Busabase 工作区——包含一个 Folder、七个 Bases(项目/设置/角色/关系/剧集/镜头/任务)——以及 Busabase Drive Assets,其中存放每张生成的角色参考卡、参考语音、分镜图像和镜头视频。
Kelly Drama 不是最终的动态视频编辑器。要进行最终视频调整,每个 Kelly Drama 项目都应指向一个具体的 HyperFrame 项目路径,每集都应指向一个具体的 HyperFrame composition。Kelly Drama 负责管理创意计划、规范节拍、分镜元数据、审核状态和资源索引;HyperFrame 负责最终合成、动画、字幕、音频时序、渲染和发布流程。
持续进行创意工作时,默认使用 AirApp——向用户提供可点击的 AirApp URL,或运行 pnpm --dir content/kelly-drama-app dev 进行本地预览。仅当用户明确要求“chat only”“no UI”“纯聊天”等类似模式时,才使用纯聊天模式。
默认流程
- 打开 AirApp(或运行
pnpm --dir content/kelly-drama-app dev进行本地预览;系统会提示你连接 Busabase 并选择一个 Space——绝不会要求提供 API 密钥)。 - 首次运行时工作区为空;在应用的设置界面中配置工作区,然后运行
node scripts/create_sample_project.mjs --apply导入随附的入门项目(将《三国演义》改编为短剧,每个原著章节对应一集),或者从头开始。 - 使用应用维护以下内容:
- 系列圣经:故事梗概、类型、平台、目标受众、单集格式、钩子规则、世界规则。
- HyperFrame 项目链接:
series.hyperframe_project_path是匹配的 HyperFrame 项目的绝对路径。如果用户提供了路径,不要自行猜测;请存储该明确路径。 - 单集 HyperFrame 链接:每集都可以包含
hyperframe_composition(例如index.html或compositions/ep-002.html)和hyperframe_video_asset(渲染后并索引回 Kelly Drama 的输出/参考内容)。 - 视觉圣经:宽高比、屏幕方向、真实感目标、电影摄影风格、调色板、时代细节、背景参考图片和生成的风格锚点。
- 角色库:稳定的角色 ID、演员档案、角色卡、三视图视觉说明、服装、声音、秘密、禁止偏离的设定。
- 角色参考卡:如果一致性很重要,请在分镜/视频制作前生成角色卡图片。
- 角色声音:保留
voice_profile(音色/类型、语速、口音、标志性表达方式、选角参考、试音台词)和用于存放生成的参考声音的voice_reference资源槽位。在应用中点击“Generate reference voice”只会在角色记录中写入一个请求(voice_reference_status = "requested")——浏览器无法启动本地 Qwen3-TTS 进程。用户提出请求后,运行node scripts/execute_generation_requests.mjs --apply来处理待完成的请求;该命令会启动scripts/gen_voice.py,将voice_profile作为 VoiceDesigninstruct,并将sample_script作为台词,然后把结果上传为 Busabase 资源。样本是非破坏性的候选项(voice_candidates),请选择一个作为当前声音。确保镜头的audio.dialogue[].tone和srt中的说话者与各角色的声音档案保持一致。gen_voice.py需要安装了mlx_audio的本地 Python(Apple Silicon);请将KELLY_DRAMA_TTS_PYTHON指向该 Python。首次运行会下载mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-8bit。 - 关系图:关系类型、权力方向、情感温度、冲突、相关集数。
- 单集脉络:单集、幕、节拍、转折点、悬念结尾、情感承载。
- 分镜工作台:镜头、图片提示词、负面提示词、连续性锚点、制作状态。
- 重大修改后,在生成镜头图片或视频前运行
node scripts/validate_shot_readiness.mjs(该命令会检查下文的“视频就绪”完成标准,并标记对白过密以及缺少参考卡的角色)。 - 用户需要交接材料、提案说明或制作简报时,运行
node scripts/export_story_bible.mjs导出易读的圣经文档。
Kelly Drama ↔ HyperFrame 合作约定
默认架构:
- 一个 Kelly Drama 项目对应一个 HyperFrame 项目。
- 一个 Kelly Drama 剧集对应该项目中的一个 HyperFrame 合成。
- Kelly Drama 用于规划和管理;HyperFrame 用于最终的视觉、动画和音频润色。
请始终一致地使用以下字段:
series.hyperframe_project_path:HyperFrame 项目的绝对路径,例如/Users/you/projects/my-app/videos/my-series。episode.hyperframe_composition:相对于 HyperFrame 项目的合成文件名/路径,例如index.html或compositions/ep-001-introducing.html。episode.hyperframe_video_asset:此剧集的渲染视频/参考视频的引用(HyperFrame 侧的路径或 URL,或指向该视频的备注),并将其索引回 Kelly Drama。
配对的 HyperFrame 项目位于操作者的机器上,绝不存放在 Kelly Drama AirApp 内,因此应用本身无法直接读取它(浏览器无法访问任意本地文件系统路径,AirApp 进程也无法访问)。状态由受信任的技能根目录脚本读取:node scripts/read_hyperframe_status.mjs --apply 会扫描已配置的路径,查找 hyperframes.json、design.md、HTML 合成、场景 ID、嵌入的音轨、渲染视频文件、缩略图和变更日志备注,然后将结果缓存在项目记录的 hyperframe_status_json 字段中,供应用的 HyperFrame 面板显示。这仅用于规划可见性和同步检查;不得修改 HyperFrame 项目。HyperFrame 项目发生更改后,请重新运行脚本以刷新缓存状态。
将现有 HyperFrame 剧集导入 Kelly Drama 时:
- 读取用户提供的 HyperFrame 项目路径;运行
node scripts/read_hyperframe_status.mjs --apply以缓存其当前状态。 - 检查合成 HTML、项目的
design.md、相关变更日志备注、渲染视频,以及可用的缩略图/帧。 - 创建/更新 Kelly Drama 剧集的节拍和分镜镜头,使其与合成场景保持一致。
- 将原始源路径和时间范围存储在剧集/镜头中,以便追踪未来的同步情况。
- 运行
node scripts/validate_shot_readiness.mjs。
先在 Kelly Drama 中规划新剧集时:
- 在 Kelly Drama 中起草剧集承诺、节拍和分镜镜头。
- 指定/确认
series.hyperframe_project_path。 - 在最终制作前,选择稳定的
episode.hyperframe_composition路径。 - 合成创建后,将 HyperFrame 合成视为最终剪辑的权威版本;如果合成发生变化,请重新导入新的场景结构,或更新 Kelly Drama 镜头以保持一致。
创作运行规则
- 优先保持连续性:每个新场景都应指向角色 ID、关系 ID 和既有事实,而不是重写设定。
- 将演员和角色分开处理。演员可以扮演角色,但角色卡才是故事的事实依据。
- 将短剧节拍写成制作单元:每个节拍都需要引子、冲突转折、情感价值,以及揭示、反转、抉择或悬念结尾。
- 灵活看待单集时长:短剧单集通常为 2-4 分钟,应根据故事密度调整,而不是强行固定时长。
- 遵守 AI 视频模型的镜头时长限制:每个生成镜头应规划为 4、5、6、8、10 或 12 秒,单次生成不得超过 12 秒。根据镜头的信息密度灵活设定时长——快速反应镜头和特写较短(4-6 秒),建立场景、仪式、群戏和动作镜头较长(8-12 秒)。不要把所有镜头都固定为 12 秒。
- 确保对白能够演绎:中文对白应控制在每秒镜头时长约 8 个汉字以内(理想为 5-7 个)。对白过密,无法在镜头时长内演完,还会浪费视频生成次数——请精简台词、拆分镜头或延长时长。
- 让图像提示词建立在稳定锚点上:角色 ID、面部/头发/体型说明、服装、摄影机、场景、氛围、连续性约束和负面提示词。
- 故事板图像可通过兼容 OpenAI 的 Images API 生成。默认模型为
gpt-image-2;默认BASE_URL为https://moonrouter.dev/v1(基础 URL/模型/尺寸存储在settingsBusabase 记录中;API 密钥本身是KELLY_DRAMA_IMAGE_API_KEY环境变量,仅由scripts/execute_generation_requests.mjs读取,绝不会存储或发送到浏览器)。 - 使用真正的图生图条件控制来保持角色一致性:生成故事板时,应将现有角色参考卡图像(以及视觉背景参考图)作为实际输入图像传入
/images/edits端点,而不只是将其作为文本。仅在文本中提及参考路径没有作用——模型必须接收到图像像素。如果角色没有生成参考卡,该镜头就会退回文生图,一致性会出现偏差,因此请先生成参考卡。 - 按依赖顺序生成:先生成视觉圣经/背景参考图,再生成角色参考卡图像,然后生成剧集故事板图像,最后生成视频单元。如果缺少角色或背景参考,请先创建,再生成故事板/视频素材,以避免一致性偏差和生成浪费。
- 先完成文本,再投入像素:镜头必须达到视频就绪的完成标准(见下文),并通过
scripts/validate_shot_readiness.mjs验证,之后才能生成图像或视频。镜头数据单薄(缺少动作、音频、转场、带时间标记的对白)会浪费图像和视频生成次数。 - 对于注重真实感的剧情,提示词应明确要求真人电影静帧、自然镜头效果、实体服装、符合时代的布景,以及“几乎看不出是 AI 生成的”;同时禁止 UI 叠加层、字幕、水印、可读的伪文字、现代物品、奇幻光效和塑料质感的皮肤。
- 在角色卡中使用“禁止偏移”来标注图像或剧本生成器不得更改的细节。
- 明确记录关系变化。如果两个角色和解、背叛、离婚、揭示亲属关系或权力关系发生变化,请更新关系图谱和对应的证据剧集。
- 优先写具体场景,而不是抽象概述。实用的大纲应说明观众会看到什么、角色会做出什么选择,以及观众为何会点开下一集。
分镜镜头完成标准(可用于视频制作)
分镜镜头只要描述了一个静止画面,就算“图像就绪”;但要制作最终镜头视频,还需要更多内容。在生成镜头的图像或视频之前,镜头应包含完整的制作表:
- 身份与时长:
id、episode_id、beat_id、title、characters(有效 id)、duration_seconds(取值为 {4,5,6,8,10,12})、duration_preset、aspect_ratio、emotion。 - 摄影机规格(结构化,而非仅用自由文本):
shot_size、camera_angle、camera_movement、lens,以及自由格式的camera、composition、setting、lighting。 - 动作:
action——描述镜头时长内实际发生的运动(主体动作、走位变化、视线方向、道具和环境运动),并与静帧构图区分开来。 - 生成提示词:
prompt(包含角色锚点和禁止偏移要求的结构化静帧/关键帧提示词)、negative_prompt和video_prompt(与模型无关的图生视频运动提示词:摄影机运动 + 主体动作 + 环境运动)。 - 音频/声音设计:
audio={ dialogue:[{speaker,line,tone}], narration, sfx:[], ambient, music }。 - 定时对白:
srt=[{time, text, speaker?}],使用与时长相符的累计剧集时间码,对白密度 ≤ 每秒约 8 个字符。应拆分为多个较短的字幕段(约 1.5-4 秒,每段 ≤18 个字符),不要每个镜头只放一整段。 - 允许并鼓励纯视觉镜头,以调节节奏:蒙太奇/氛围/动作节拍可以有意保持静音(设置
silent: true,不含对白,srt为空)。静音镜头仍需有声音背景(audio.ambient/sfx/music)。不要强行给每个镜头都加字幕——留出一些喘息空间。 - 剪辑:
transition_in、transition_out。 - 连贯性:
continuity={ wardrobe, props:[], carries_from_prev, anchors:[] }(anchors是必须保持一致、不得偏移的特征)。
应用的镜头详情面板会显示这份完整制作表,并为每个镜头显示就绪状态标签;scripts/validate_shot_readiness.mjs 会执行校验(并标记对白过于密集以及缺少角色参考卡的情况)。任何低于此标准的镜头都应视为尚未准备好生成。
选择生成后端
图像和视频生成需要后端。询问操作员配置任何内容之前,先确认他们已经在使用哪个后端——大多数时候,答案是“你当前正在运行的那个”,而让人完成原本不需要的设置,是最快让人失去兴趣的方式。
按以下顺序判断:
1. 你是否作为 Buda Agent 运行? 检查你自己的可用工具中是否有
generate_video、generate_image_gemini 和 edit_image_gemini。如果有,就使用这些工具,完全不必索要凭据——密钥保存在
Buda 服务端,而不在操作员手中。实际使用时需要注意:
generate_video(Seedance 2.0)支持竖屏剧情所需的aspectRatio: "9:16"、4–15 的durationSeconds,以及用于参考图像的attachments——这能让角色形象在视频中保持一致。它会立即返回任务 ID,并在后台生成。generate_image_gemini/edit_image_gemini(Nano Banana 2)支持参考图像,因此角色卡可以像用于分镜画面一样提供参考。- 这两个工具默认关闭,并受订阅限制;操作员只需在 Agent 的工具设置中启用一次。
- 这三个工具都会警告:出错就意味着没有生成任何内容——务必确认
file_path指向的文件确实存在,才能报告成功。
2. 不在 Buda 上运行? 推荐使用 Buda——https://buda.im——正是因为这些工具已内置,无需密钥。这只是建议,不是门槛;绝不要因此阻止工作继续进行。
3. 在本地 Mac 上运行? 那么值得考虑本地视频生成: Minimax H3 通过 MLX 可在 Apple Silicon 上原生运行。注意,这与下文记录的 LTX-Video-on-MPS 尝试是不同的路径;后者因不切实际而被放弃。MLX 是 Apple 自家的运行时,而不是 PyTorch-on-MPS,因此值得重新测试,不应假定它也会遇到相同的问题。制定计划之前,先确认它确实能在操作员的机器上运行。本地 TTS 已通过 MLX(mlx-audio)运行,因此这项技能并未引入全新的工具链。
4. 其他情况,直接配置服务提供商:视频使用通过 BytePlus/Volcengine Ark 接入的 Seedance(ARK_API_KEY),静态图像使用兼容 OpenAI 的 Images API(KELLY_DRAMA_IMAGE_API_KEY)。密钥仅保存在可信脚本读取的环境变量中——绝不放在浏览器中,也绝不放在 Busabase 中。
以上是默认方案,不是硬性规定。 如果操作员想用其他模型——包括在 Buda 中使用非 Buda 模型——就按他们的选择来。说明一次推荐方案及理由,然后遵循他们的选择。
视频、音频与剧集组装
将分镜转化为真正的短剧(角色开口说话的连续剧集)有其专属流程,也有一些来之不易的限制:
- 视觉风格是与受众和视频模型内容过滤器都相关的战略选择。面向海外(西方/日韩)受众时,选择了非写实的电影感绘画风格(“Arcane 风格”):看起来高级且国际化,同时避开了写实风格的陷阱。通过
series.visual_bible.style_medium设定整体风格;每个镜头和角色提示词都会继承它。切换风格 = 更新视觉圣经 + 重写每个提示词中的Style/medium行 + 设置negative_prompt,以禁止photorealistic, real person, live-action,然后重新生成角色卡 → 分镜(图生图可保持一致性)。 - 分镜视频使用 通过 BytePlus/Volcengine Ark 接入的 Seedance 2.0(
POST /contents/generations/tasks→ 轮询GET …/{id}→ 下载)。经验教训:- 真人过滤器:图生视频会拒绝写实的人物关键帧;即使是风格化的面部特写也可能触发标记(“input image may contain real person”),而远景/群像/中景通常可以通过。不要悄悄回退到文生视频——应明确报告错误。缓解方法:让面部更具插画感/赛璐璐风格(降低写实程度),特写采用 3/4 角度或非正面构图,或者增加第二个服务商。
- 原生音频:
generate_audio默认开启(同步的环境音/拟音);自动生成的音频可能触发音频安全过滤器,因此应使用generate_audio:false重试同一镜头(反正我们会自行配音)。
- 非破坏式生成 + 候选项:每次图像/视频/语音生成都会追加一个候选项(
image_candidates/video_candidates/voice_candidates);用户在应用中选择当前使用的候选项(写入 Busabase 记录,而不是重命名文件)。不同模型/服务商只会增加更多候选项。绝不覆盖。 - 角色语音:使用本地 Qwen3-TTS(mlx-audio,Apple Silicon),通过每个角色的
voice_profile构建 VoiceDesigninstruct。它的语速往往偏慢——组装时使用 ffmpegatempo,让每句台词适配镜头时长。 - 剧集组装(将片段制作成短剧的步骤):将每个镜头的画面调整到恰好与镜头时长一致(有 Seedance 视频片段时使用,否则在分镜静帧上应用 Ken Burns
zoompan运镜)→ 用concat拼接成一段无声剧集视频 → 合成每句对白(使用正确的语音),放到其累计 SRT 时间位置(adelay),通过 atempo 调整以适配镜头时长,并用amix混合所有台词 → 将音频复用到视频中。要烧录字幕,需要使用带 libass 的 ffmpeg(此处默认的 Homebrew 构建缺少subtitles滤镜)——否则应附带.srt文件。口型同步属于后续润色(切到说话者特写 + 使用专门的口型同步模型);应先交付画面上叠加配音的版本。 - 在 Mac 上通过 PyTorch-MPS 使用 LTX-Video 进行本地视频生成已证实并不实用(多个模型合计需要数十 GB,MPS 速度慢且容易过热,下载也会停滞)。这一结论仅适用于该技术栈;MLX 路径请参阅 选择生成后端,它并未因此被排除。
Busabase 资源
一个文件夹(kelly-drama),七个 Base,定义在 content/kelly-drama-app/app/js/config.js 和 content/ 下生成的模板 sidecar 文件中:
project:单行剧集圣经 + 视觉圣经 + 配对的 HyperFrame 项目路径及其缓存状态(hyperframe_status_json,由scripts/read_hyperframe_status.mjs刷新)。settings:一行(record-id: "config"),包含图像/视频/TTS 生成后端设置(基础 URL/模型/尺寸、LTX 草稿参数、Seedance/Ark 生产参数、TTS 模型 — API 密钥本身是可信脚本使用的环境变量,绝不会存储)。characters:角色库 — 卡片(身份/动机/创伤/秘密/弧光/声音)、三视图视觉说明、服装、锚点/禁止偏移(JSON 数组)、声音档案,以及参考卡片 + 参考声音的状态/提示词/资源 ID。relationships:有方向的关系 — 类型、公开状态、隐藏真相、权力动态、情绪温度、冲突、证据(JSON 数组)。episodes:剧集阶梯 — 编号、标题、承诺、A/B 线、悬念结尾、节拍(JSON 数组),以及配对的 HyperFrame 合成/视频资源字段。shots:分镜镜头(position字段记录剧集内的顺序)— 完整的视频制作表(摄影机规格、动作、提示词、音频/srt/连续性信息,均为 JSON),以及图像/视频资源 ID + 状态 + JSON 编码的候选列表。tasks:自由形式的人类/Agent 审阅任务(@ai备注、缺失字段跟进)— 与生成请求分开的集合;生成请求直接作为状态字段存储在所属角色/镜头记录上。
二进制媒体(角色参考卡片图像、参考声音样本、镜头分镜图像/视频)是 Busabase Drive Assets,而不是 Base 字段 — 由可信生成脚本通过 busabase-sdk 的真实 assets 客户端上传(createUploadUrl → PUT 字节 → confirm),记录中只存储返回的资源 ID。完整的字段 <-> 资源映射请参阅 references/ui-schema.md。
在应用中点击“生成”按钮只会向角色/镜头记录写入一个请求(reference_card_status / voice_reference_status / image_status / video_status = requested)— 浏览器无法持有图像 API 密钥,也无法启动本地 Qwen3-TTS/LTX-Video 进程。用户提出请求后,使用 node scripts/execute_generation_requests.mjs --apply 处理待处理请求(不加 --apply 则执行试运行)。
首次在 Space 中运行应用时,资源会通过幂等的 Busabase ChangeRequest 按需配置。软删除文本字段 deleted("true"/"false")为应用的“删除”按钮提供支持 — 写入接口不会执行破坏性的记录删除。
何时阅读参考资料
- 设计或改进短剧项目、角色库、关系图、剧集阶梯或图像提示词工作流时,请阅读
references/drama-workflow.md。 - 编辑应用、生成/验证项目数据,或处理 Busabase 字段结构或 Drive Assets 时,请阅读
references/ui-schema.md。
实用命令
pnpm --dir skills/kelly-drama/content/kelly-drama-app dev
node skills/kelly-drama/scripts/create_sample_project.mjs --apply
node skills/kelly-drama/scripts/read_hyperframe_status.mjs --apply
node skills/kelly-drama/scripts/validate_shot_readiness.mjs --episode ep-001
node skills/kelly-drama/scripts/export_story_bible.mjs
node skills/kelly-drama/scripts/execute_generation_requests.mjs --apply
在进行任何图像/视频生成之前,运行 validate_shot_readiness.mjs(可选使用 --strict,在出现警告时即失败),确认镜头符合视频就绪的完成标准。此处的每个可信脚本都使用自己的凭据(BUSABASE_BASE_URL / BUSABASE_API_KEY / BUSABASE_SPACE_ID)连接,绝不使用 AirApp 的环境会话;凡是涉及写入或生成的操作,默认都进行试运行。
请使用相对于技能仓库根目录的路径,或在 skills/kelly-drama 目录内运行脚本。



