Communitygithub.com

husniadil/dalang

Dalang — 将任意主题转化为完整的动画视频(旁白、免费本地AI语音、音乐、音效、HyperFrames视觉):剧本 → 语音 → 逐词计时 → 视觉画面,每个阶段均由智能体自主把控。适用于任意主题、语言和平台(Shorts、Reels、TikTok、YouTube、Instagram),风格化且忠于现实。当用户要求从主题、想法、文章或笔记制作视频、动画、讲解或短片时使用(例如“制作一个关于X的视频”、“bikinin video tentang Z”),或借用现有内容。

dalang 是什么?

Dalang 是一个高度自动化的 AI 智能体技能,能够将任何主题或想法转化为完整的、风格化的动画视频。它遵循严格的“文字优先”流水线:先撰写并批准脚本,然后生成配音,再计算每个单词的时间码,最后基于 HyperFrames 框架构建视觉画面。该技能支持 Express(快速,使用 Canvas 2D 实现 2.5D 效果)和 Studio(精确,基于 three.js,面向代码)两种模式,并提供了多种视觉风格(如等距世界、对象工作室等)。它能够生成带有旁白、背景音乐和音效的最终视频,兼容 YouTube、TikTok、Reels 和 Instagram 等平台。Dalang 的设计强调自主运行、无需用户干预、高效利用 token,并通过子智能体并行处理任务,在提交最终渲染之前会进行严格的质量检查。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/husniadil/sandalkuilang-dalang/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Dalang — 从主题到视频

模式与视觉风格,在 Brief 中提出,并在其之后锁定(references/looks.md)。模式:Express(默认;在 Canvas 2D 中实现 2.5D,参见 references/express.md)或 Studio(精确:基于 three.js,代码优先,参考板,基准测试,审查)。视觉风格:等距系列(主要使用 isometric-world,以及 cutaway、blueprint)或 object-studio(在浅色背景上的研究模型)。3D 视觉风格不会自动将影片切换到 Studio 模式。如果在第 6 步之后更改视觉风格:停止所有构建器,重写 SPEC.md,并在一条消息中重新启动每个组;旁白和语音保持不变。

原则

第 7 条原则仅适用于 Studio 模式;其余原则在两种模式下均适用。

  1. 视觉论点优先(references/looks.md):视觉风格的编号规则决定每一帧和质量控制。object-studio:浅色工作室,一个强调色,主体占 60–70%,单一输入机器,现场乐器,固定镜头。
  2. 文字优先,画面在后:脚本获批 → 语音 → 每个单词计时 → 视觉画面。
  3. 屏幕上的每次变化都与一个单词对应,基于计时数据。
  4. 主体在每个镜头中都有动作;镜头对准静止画面就是幻灯片。
  5. 用数据说话,不要猜测:每个报告的数字都来自日志或脚本。
  6. 所有问题提前提出,不阻塞用户。 所有问题在第 1 步提出;后续步骤不再等待用户。一旦通过各项检查,自行通过 4 个关卡中的每一个,用一行说明,然后运行到完成影片。后续变更为新的一轮。在最后一轮之前(除关卡 3 的风格帧和钩子样本外)不进行最终质量渲染。
  7. 风格化,忠于现实。 每部影片使用一种视觉风格;不使用素材、照片级渲染、生成图像或剪辑。零件、比例、尺度和行为符合真实参考(references/visual-direction.md §1)。
  8. 顶级工作室水准,但不过度:风格帧、润色、审查评分标准。草稿使用 10 fps;最终版 --quality high --fps <brief fps> 通过所有检查。
  9. 默认免费。 仅在用户要求时使用付费或按量计费服务(ElevenLabs、HeyGen),并标注“付费”。优先选用商用许可;当无法使用时需说明。

通用目的。 任意主题、语言、平台。绝不打开其他 video/<slug>/ 文件夹;除非用户选择了系列套件(references/brief.md 中的“系列套件”),否则不继承任何内容。engine/three/ 是一个工具箱,而非限制:它缺少的主体将根据其自身规律建模,或在不使用 3D 的视觉风格中呈现。

语言。 使用用户的语言进行聊天。每个 AskUserQuestion 都使用英语。 切勿根据姓名推断语言。

快速工作,节省 token

  • 一个视频 = 一次会话;状态存储在文件中。恢复:node <skill-dir>/scripts/state.mjs next、BRIEF.md、PRODUCTION.md 的结尾。

  • 子智能体类型,列出时:构建器(修复轮次、脚本、语音)使用 dalang-builder,每个裁决使用 dalang-checker,事实核查使用 dalang-research;否则为通用类型。

  • 技能版本:首先说明 next 的 DALANG v…;绝不使用 git。

  • 惰性读取:每一步,只读取 state.mjs next --print 打印的内容,完整读取,一次调用(步骤 0 也会打印步骤 1;首次 approve <n> 会打印下一步骤:不需要 next 轮次,不需要 --step 提前读取);“需要时查阅” 只在被指示前往时执行。绝不完整读取参考文档、引擎 README 或 lessons.md,或重复读取某个章节;对于 /hyperframes,只读取所需指南。

  • 输出精简:过滤 --json;绝不打印 words.json、*.response.json 或完整日志;后台输出按字节截断(tail -c 1500)。场景变更是 Edit 调用,绝不使用 sed -i 或写入整个文件。

  • 场景代码保留在构建器子智能体中。 主智能体绝不编写或读取 src/ 或 assets/*.js(生成的数据除外;风格帧发送给构建器)。引导、每个组、组装以及每个修复轮次都发送给新的构建器(上次报告和路径,其预算在 look-build.md / express.md 中)。审查者绝不是构建器。

  • 图像保留在子智能体中。 主智能体绝不 Read 静态图像、条带、工作表、范围或风格帧:子智能体获取路径和 next 的“给子智能体的命令”,返回文本裁决。例外:style-frames/src/ 的作者在首次写入之前,会打开每个 review/refs-board-<frame>.jpg 一次。

  • 按任务分配模型,绝不询问:state.mjs next 打印每个步骤的子智能体任务及其模型和努力程度(state.mjs models:所有模型,以及 top/mid/light 的含义)。

  • 升级,绝不重复。 失败的任务(红色、不可用、遗留 P0 问题)发送到高一级的新智能体:努力程度(低 → 中 → 高),然后模型(light → mid → top);top 和 high 为上限:遗留的 P0 问题被分类(hero-asset.md §3)。绝不降级或重复;干净的任务绝不重跑。≤ 3 处复制或计时修复:降一级。记录每次设置。

  • 主智能体负责编排,绝不亲自执行具体工作。 你的回合会重新读取会话(约是子智能体的 10 倍);循环(写入 ↔ 检查、拍摄 ↔ 重拍、修复 ↔ 检查)在一个任务内运行(步骤 3–4 也是如此);每次回复都会唤醒你:一个任务运行到其裁决;同时启动的 N 个任务在该消息末尾加上 wait.mjs . --expect N(timeout: 600000):一个回合,一行。Runner(express.mjs / studio.mjs <step>)是一个前台调用(timeout: 600000),当它在约 9 分钟内结束时使用,不进行链式调用或轮询。Agent 提示是任务和路径(≤ 15 行;它通过 next --step <n> --sub 读取)。检查者写入其裁决文件,构建器写入 review/reports/<job>.md;两者都简短回复,绝不重新输入。state.mjs log 附加在步骤的命令之后,使用 &&,绝不单独使用一个回合。

  • 紧凑:workspace.mjs init 设置自动紧凑(200K);在关卡 2–4 时,说明一次 /compact 是安全的。

  • 默认并行。 独立的任务在一条消息中启动,每个智能体处理自己的文件。重型任务(VoxCPM、渲染、检查、快照)单独运行,绝不与模型任务并行;使用 while kill -0 <pid> 排队。并行处理:预检 ‖ 主题问题;参考 ‖ 研究任务;关卡 1 后:语音任务 ‖ 资源,绝不能是场景;关卡 2 时:规划器和音乐;第 6 步 Studio 模式:引导,然后所有组;Express 模式:所有组同时启动,无需引导(一个干净的拍摄通过 express.mjs after-voice 自行通过关卡 1–2;规划器运行 express.mjs scaffold .);第 7 步:草稿检查,然后审查者 ‖ 测验 ‖ 设定/现实检查;第 8 步:渲染期间运行 POST.md。

  • 先廉价后昂贵:拍摄前使用 --sample;仅在 {} 发生变化时使用 --from-response;迭代时使用快照;按轮次批量修复;QC 使用 --fps 10 --quality draft;最终渲染一次完成。

  • 用户的需求优先:如果某条规则使其无法实现,用一行说明;绝不默默接受。

  • 消息简短:说明变更内容、需要决定的事项和链接;等待时,提供下一关卡的时钟时间;步骤执行超过约 2 分钟时提供预估时间。

项目文件(video/<topic-slug>/)

使用 state.mjs log "<step> | <output> | <problems or ->" 记录。该文件夹就是 HyperFrames 项目;从中运行命令。仅编辑 *.tpl.html;node <skill-dir>/scripts/fill_times.mjs src/index.tpl.html index.html 会重新生成 index.html(绝不能手动编辑,不能有第二个根目录 .html)。

步骤

步骤执行内容结束标志读取(references/)
0 设置运行 preflight.mjs,修复其报告的问题,创建项目文件夹PRODUCTION.md 创建完成brief.md §0
1 Brief首先确定主题,现在提出所有问题BRIEF.md 创建完成brief.md §1
2 参考(可选)测量制作工艺,绝不复制reference-measurements.md 创建完成measure-reference.md
3 脚本执行研究、编写、通读任务;approve 1 运行检查脚本关卡 1script-voice.md §3
4 语音执行一个语音任务;after-voice 进行填充,通过关卡 1–2关卡 2script-voice.md §4
5 视觉风格创建 SPEC.md、主角、故事板、资源、风格帧、基准测试关卡 3look-build.md §5
6 构建构建器执行,从 BEATS/WORDS 获取时间,混音音频index.html 创建完成,检查无错误look-build.md §6
7 QC草稿、检查、条带、审查者、测验、修复轮次关卡 4qc.md §7
8 最终资源检查、高质量渲染、重新检查final.mp4、POST.md、报告创建完成qc.md §8

在每个步骤:关卡通过 state.mjs approve <n> --by agent 进行(按顺序;它会运行关卡检查并拒绝错误;后续编辑过关文件会使其标记为 STALE,直到重新批准);BRIEF.md 规则规定了格式和语言;录制或克隆的声音仅在获得说话者许可后使用;页面仅在 Claude 内置浏览器中打开,绝不使用用户的 Chrome;在 PRODUCTION.md 中记录每一步和每个问题;系列反馈通过 series.mjs note 记录,绝不依赖记忆。

自主模式

如果用户提供了主题后离开,则使用他们已提供的信息,否则:Express 模式;YouTube 16:9,60–90 秒(短片使用 9:16 或 ≤ 60 秒);使用用户的语言;object-studio(Studio 模式下使用 isometric-world);“现代平衡”;面向普通观众;VoiceStudio,默认语音,按照 brief.md 步骤 0 操作(到步骤 4 时未就绪:停止并说明原因)。首先在 PRODUCTION.md 中写入“使用默认值”,记录每个决策,完成影片。发布规则:references/qc.md 中的“用户离开”(如果 audio_qc.mjs 以退出码 2 持续运行,则在交接中说明其名称,绝不通过)。跳过安装提示(记录它们)。绝不编辑已安装的技能。

当出现问题时

grep -n -i '<word>' <skill-dir>/references/lessons.md

相关技能