---
name: yanshangcha01/libtv-shortdrama-storyboard
source: https://app.decimal.ai/s/yanshangcha01-libtv-shortdrama-storyboard@1/SKILL.md
source_sha256: 051cea3309c1
---

# LibTV 短剧分镜自动化 Skill

把一段剧本变成 **LibTV 画布上建好的分镜节点**：分析爽感 → 提修改意见 → 敲定 → 拆锚点 → 拆分镜 → 自动建节点。本文件是自包含的执行入口；配套知识库在 `prompts/`，详细流程在 `AGENT_WORKFLOW.md`。

> ⚠️ 本 skill **不含任何具体剧情**。所有示例均为占位符（见 `examples/template/`），填入任意剧本即可复用。

## 何时使用

- 用户给了剧本/网文文本，要求做成竖屏短剧/漫剧的分镜节点
- 用户说"把这个脚本拆成 LibTV 节点""按这个 skill 流程跑""生成分镜"
- 用户要"改题材"（女频/知识口播/悬疑等）——本流程换任何题材都通用

## 核心约束（铁律）

1. **绝不自动生成视频**：脚本和本流程都**绝不**调用 `libtv ... -r/--run`。建完节点列清单交人类点生成。
2. **一致性靠引用**：分镜不重写人物长相，只引用锚点图（`--left` 连边 / `{{Node <id>}}` 占位符）。人脸场景不跳变。
3. **模型锁定**：生图 `Lib Image`，生视频 `Seedance 2.0 VIP`（音画同步）。无 VIP 时在 manifest 换可用模型。
4. **先分析后建节点**：必须先把分析摘要 + 修改意见给人看，**等人敲定**再建节点。

## 5 步流水线（详见 AGENT_WORKFLOW.md）

```
① 输入剧本 ──→ ② 分析引擎(提题材/冲突/弧线/角色/场景/道具 + 提修改意见)
   ↓ 等人敲定
③ 锚点清单(anchors) ──→ ④ 分镜表(storyboard) ──→ ⑤ 批量建节点(CLI)
```

## 工具：libtv CLI（关键命令）

```bash
libtv login web                          # 登录（首次）
libtv account info                       # 确认登录
libtv project list                       # 找目标画布 uuid
# 建锚点图节点：
libtv node create -p <project> -t image --name "<A1-角色：{{主角名}}>" --prompt "<描述+后缀>" -s model="Lib Image" -s ratio="9:16"
# 建分镜视频节点（连锚点确保一致性）：
libtv node create -p <project> -t video --name "<分镜01-...>" --prompt "<{{Node <id>}}...>" -s model="Seedance 2.0 VIP" -s ratio="9:16" -s duration=10 --left <anchorNodeId1> --left <anchorNodeId2>
```

> 批量建节点请直接调用 `python3 scripts/create_nodes.py --project <uuid> --manifest <nodes_manifest.json>`，不要手敲每个命令。

## 知识库索引（必须读这些再动手）

| 文件 | 用途 |
|------|------|
| `prompts/analyzer.md` | 分析引擎：从自由文本提取结构化信息的规则 A-E（题材/角色/场景/道具/弧线） |
| `prompts/anchor_template.md` | 锚点清单模板 + 角色/场景/道具定妆描述写法 |
| `prompts/storyboard_template.md` | 分镜表模板 + 6 元素镜头公式 |
| `prompts/node_prompts.md` | 生图/生视频 prompt 组装规则 + 拍摄手法词库（景别/运镜/光影/情绪映射） |
| `examples/template/` | 占位符模板：剧本→分析→锚点→分镜→manifest 全齐，填空即用 |

## manifest 规范（scripts/create_nodes.py 的输入）

```json
{
  "project_name": "{{项目名}}",
  "visual_style_suffix": "9:16竖幅+电影级光影+写实风格+无字幕无水印",
  "image_model": "Lib Image",
  "video_model": "Seedance 2.0 VIP",
  "anchors": [
    {"id":"A1","type":"character","name":"A1-角色锚点：{{主角名}}（主角）","prompt":"{{年龄}}{{性别}}，{{服装细节}}，{{面部三要素}}，{{反差感}}。强侧光，15-30°侧拍，中近景，浅景深。禁止文字水印。","ratio":"9:16"},
    {"id":"B1","type":"scene","name":"B1-场景锚点：{{主场景}}","prompt":"{{具体环境描述}}，{{色调}}，空旷无人物。","ratio":"9:16"},
    {"id":"C1","type":"prop","name":"C1-道具锚点：{{核心道具}}","prompt":"{{微距特写}}，{{材质/色泽}}，顶部强光，背景纯黑。","ratio":"9:16"}
  ],
  "shots": [
    {"id":"01","name":"分镜01-{{第一幕铺垫}}","prompt":"{{主场景}}{{Node B1}}，{{主角名}}{{Node A1}}...","duration":10,"anchor_refs":["B1","A1"]}
  ]
}
```

脚本会：先建所有 anchor 拿到真实 node id → 把 shot.prompt 里的 `{{Node <anchorId>}}` 替换为真实 id → 建 shot 节点并用 `--left` 连对应锚点 → 输出节点清单。

> 防护：若 shot.prompt 里引用了某锚点但 `anchor_refs` 漏写，脚本会自动补连，避免建节点被拒。

## 注意

- 本流程是**用画布节点复现** LibTV skill 的能力；`libtv` CLI 本身没有读取/创建「skill」的命令。
- 台词直接写进视频 prompt（`台词掷地有声："..."`），靠 `Seedance 2.0` 的 `enableSound` 合成，无独立配音节点。
- 仓库不含具体剧情，所有示例均为占位符；填入你的剧本即可复用整套分析技术与镜头语言。