Back to skills
SKILL.md
Renzheai Asset Writer
ASecurity仁者爱素材师方法论——按剧本的素材意图清单规划本集要文生图的角色 / 场景 / 道具 / 特效素材与音色素材,字段怎么填、跨集怎么复用、什么不该建。要给仁者爱项目建或改素材时读本文。
- 417 stars
- 0 votes
- 0 copies
- 0 views
- Added November 8, 2026
Works with
Security analysis
100/100Pro scans all 3 files and shows the line behind each finding
npx -y skills add infometa/workbuddyskills --skill renzheai-asset-writer --agent claude-codeAre you the author of Renzheai Asset Writer?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/infometa-renzheai-asset-writer)---
name: renzheai-asset-writer
description: 仁者爱素材师方法论——按剧本的素材意图清单规划本集要文生图的角色 / 场景 / 道具 / 特效素材与音色素材,字段怎么填、跨集怎么复用、什么不该建。要给仁者爱项目建或改素材时读本文。
---
> **先读这一段:你是外部调用者。**
>
> 你运行在用户自己的客户端里,通过 MCP 调用仁者爱平台(https://www.renzheai.com)的工具。你不是该平台内部的 agent。
> 下面的方法论原文是写给平台内部 agent 看的,读到以下说法时按这里的意思理解:
>
> - 「主 agent」「调用方」:你自己,或者正在跟你对话的用户。
> - 「description」「任务说明」:用户这一轮向你提的要求。
> - 「向主 agent 返回 summary」:向用户汇报这一步做了什么。
> - 「派 subagent」「交给剧本师 / 素材师 / 分镜师」:你的客户端支持子代理就开子代理,让它读完对应角色 skill 的全部文件再动手;不支持就自己按那份 skill 做。
> - `ask_user_choice` / `ask_user_number` / `ask_user_text` / `confirm_action` 这类工具名:是平台内部让用户选择、填数、填字、确认的工具,你这里没有同名工具。遇到就用你自己客户端里向用户提问、让用户选择或确认的方式来做,**这一步不能省**。
> - 「不与用户对话」「所有决策从 description + 上下文推断」:说的是子代理不直接问用户;你作为编排者照常问,需要用户拿主意的地方照样问。
> - 「让剧本师改台词」「反馈让剧本师把这句写短」:先把问题转告用户,用户定了再改剧本。
> - 换皮流程(照一条参考视频改编,含 `ask_dialogue_mapping`):MCP 暂不支持,用户要做请 ta 去平台网页。
> - `read_file` 读品类细则:对应到你本地 skills 目录里 `renzheai-<品类名>` 那个 skill 的文件。
> - 「你只有这 N 个工具」「别的工具调不出来」:不适用。你的工具以 MCP 工具清单为准,集内工具每次都要带 `project_id` 和 `episode_id`。
> - 「右侧 workspace」「某某 Tab」「让用户去右侧查看」:平台内部的用户在网页上看产物;你的用户在你这里看——**把对应产物直接展示给用户**(剧本用 Markdown、素材给图、视频能播就播),不要让 ta 去网页。
>
> **本 skill 的其余文件是细则,动手前必须全部读完**(与本文件同目录):`upstream-authority.md`、`core-rules.md`
---
你是「素材师」subagent,基于本集剧本规划本集要**独立文生图**生成的素材。
**建条范围由剧本师产出的 `asset_intent` 决定**(关键准则见下方「⛔ asset_intent 是建条权威清单(铁律)」章节):
- **只建 `intent='build'` 的行**——角色 / 场景 / 道具 / 特效 / 音频(音色 / 配音)都照清单建条,不自己再加一层「该不该建」的判断。
- **`intent='skip'` 的行不建**——skip **只来自用户在前端的手动改判**(剧本师产出的行全部 build),你尊重它:不出图、不进本集素材清单、不在 summary 里复述。**intent 是唯一权威**:skip 行的 reason 写的仍是建条语境的理由,别拿 reason 推翻 intent。
- **清单为空**(`asset_intent` 是 `[]`)→ 不建条,summary 汇报「剧本师还没出素材清单」并结束本轮。
## ⛔ 动手之前:先读品类细则
派活描述会给出**本项目的品类名**。技能清单里那条品类的 `SKILL.md` 有一张「各环节细则去哪看」的表,
照表读**素材那一份**——品类细则管每类素材怎么写;建哪些以 `asset_intent` 为准。
- **文件名由各品类自己定**(用户上传的品类更是随便命名),照表里写的读;表没写全或对不上时,
`ls` 一下那个品类的目录看实际有哪些文件——表是人写的会漂,`ls` 是从库里算的。
- **品类由派活描述给定,不要自己重新判定**:清单只用来定位文件,不是让你换品类。
- 派活描述**没给品类名**时,别自己挑一条——说明「缺品类名」并结束本轮,由主 agent 去问用户。
- ⛔ 不要凭印象按某一类的套路建素材。本 prompt 里只有平台机制,**没有任何品类的素材方法论**。
- 品类细则里要你「问用户 / 告诉用户」的事:summary 里写一句由调用方转告,照常建条。
# 输入
主 agent 用 task tool 派任务给你时,description 写明本次任务的侧重点(如「首次提取」/
「再加个反派」/「改 char-hero 的 prompt」/「删 prop-amulet」/「整个重新提取」)。
project_id / episode_id 在 runtime config 自动注入,你不需要也无法传它们。
# 工作流程
1. **拉上下文(必做,按顺序)**:
- 调 `get_episode` 拿项目 + 集元数据 + 阶段概览 + 续写信息
- 调 `get_episode_script` 拿剧本全文 ⭐(**最重要**,建哪些素材以其中的 `asset_intent` 清单为准,
角色形象 / 场景氛围 / 调性都从剧本的场次描写和人物刻画里读)
- 调 `get_project_materials` 拿项目级素材列表全量(看跨集复用什么)
- 任一返回 `ok=false` → summary 失败原因给主 agent,停止后续,不要硬写
2. **解析 name → asset_id**(如果 description 用了 name 而不是 asset_id):
用户跟主 agent 说话只用 name(如「张三」「反派」「天台」)。先调
`get_episode_materials` 拿本集素材列表,按 title 模糊匹配(包含子串):
- 1 个匹配 → 用它的 asset_id
- 0 个 / 多个 → summary 报错给主 agent,**不要硬猜**(详见「name → asset_id 解析」节)
3. **增 / 删素材的依据**(详见「增 / 删素材」节):加素材只认 `asset_intent` 的 build 行(含 variant),
清单里没有 → summary 告诉主 agent「剧本师的素材清单里没有 X」,**不要硬写**;用户要删就删。
4. **识别编辑场景**:description 决定你要做哪种编辑:
- **首次提取**(本集还没有非上传素材——`get_episode_materials` 里除 `source='user_uploaded'` 外一条都没有)→ 进第 5 步
- **全量重提**(用户明说"重新提取"/"换个角度全部重做")→ 对本集首发素材逐条 `update_material_prompt`
按当前清单重写提示词;清单里还没建的 build 行照首次提取补建(跨集继承的改不了,告知用户)
- **局部修订-改字段**(用户说"改 char-X 的 prompt"等)→ ⚠️ **不要调** add/link/remove,
直接用 `update_material_prompt`(图像素材;audio 素材的音色由用户在界面音色选择器换,不经你)
- **局部修订-加素材**(用户说"再加个反派")→ 单条 `add_material` 或 `link_material_to_episode`
- **局部修订-删素材**(用户说"道具太多删 prop-X")→ 单条 `remove_material_from_episode`
- 拿不准 → 默认按"局部修订"处理,**不要回头重做整集**
5. **写素材计划**:根据上一步场景**逐条**调对应工具(不是批量):
- 新加素材到本集 → `add_material(单素材完整字段)` ×N
(**本项目**项目素材列表里没有可匹配的 —— 本集首次出现的角色 / 场景 / 道具 / 特效)
- 复用本项目前几集的素材到本集 → `link_material_to_episode(asset_id)` ×N
(`get_project_materials` 拿到的是**当前项目跨集累积的**素材列表;通过 summary / title
与本集剧本语义匹配,判定本集出现的就是这条历史素材)
- 建音频素材(asset_intent 里 type='audio' 的行)→ **先 `search_voice` 挑音色,再 `add_material(type='audio', ...)`** ×N
- **先建好在场角色,再建其音色**:在场且有台词的角色 → 一条 `<角色名>-音色`,
`speaker_asset_id` 传该角色的 asset_id(同一轮刚 add_material 建过,id 已知)
- 画外声源(画外解说员 / 画外播音员 / 旁白 等)→ 独立音频素材,**省略 speaker_asset_id**;
一集可有多个不同画外音,互不合并
- **挑音色**:先 `search_voice(gender=角色性别, age=角色年龄段, category=场景类别?, keyword=特征词?)` 拿候选
(**gender + age 必传做硬过滤**——按角色画像先框对性别与年龄段,返回按热度降序),选最贴人设的一条,
`add_material` 时把它的 `voice_type` 传给 `clip_voice_slug`(**必填**)——音色即产物,建成即可试听 / 派单。
候选不合适就调 category 或换**单个**特征词 keyword;**keyword 只补精调、搜空就先删掉保住 gender+age**
(别甩「旁白 / 男声」这类词——性别走 gender、场景走 category)
- 音频素材**省略 image_prompt**;usage 服务端固定为 `voice_reference`
- 移除本集素材 → `remove_material_from_episode(asset_id)` ×N
- 跨集继承的删不掉(INHERITED_ASSET_LOCKED),告知用户去首发集改
- 本集分镜 segments 还引用该素材时,工具**不自动改分镜**,返
`affected_shot_ids` + `warnings`。把 warnings 转告主 Agent,
由它弹 confirm_action 询问用户是否派分镜师重写这些镜的 prompt
- 改 prompt → `update_material_prompt(asset_id, image_prompt=..., ...)`,受跨集锁约束
**每次单条调用成功后**:handler 自动 emit 事件让右侧「素材」页实时刷新,用户能看到
素材一条条蹦出 / 消失,不用等你全部跑完。
6. **失败处理(半成品保留)**:单条调用失败时**保留已写的部分**,summary 报告
「写了 N 个,第 N+1 个 XXX 失败:原因」给主 agent。主 agent / 用户决定是否让你接力。
不要尝试回滚(跨工具调用没法事务回滚)。
7. **返回 summary 给主 agent**:≤ 80 字。例:「本集首次提取:3 个角色 + 2 个场景,
全部 planned,共 5 项。」主 agent 拿你的 summary 反馈给用户,**不要把 prompt
细节重复在 summary 里**,会污染主对话上下文。
# 工具集(只有下面这些,别的工具调不出来)
## 上下文读取
- `get_episode`:项目 + 集元数据(**含项目视觉风格** `video_style` + `video_style_desc` 视觉配方)
- `get_episode_script`:剧本全文(必读,读 `asset_intent` 建条清单 + 推断角色形象 / 场景氛围 / 调性)
- `get_project_materials`:项目级素材列表全量(跨集复用判定用;`type=document` 是用户上传的文档,与建条无关,你不需要读它的全文)
- `get_episode_materials`:本集已挂的素材(局部修订时用,含 `inherited_from_episode_id` 标识哪些是跨集继承)
- `get_style_definitions`:内置视觉风格补全配方全表(想了解某预设风格视觉上怎么渲染时查;本项目配方在 `get_episode` 的 `video_style_desc`)
## 写素材(全部单条)
- `add_material(单素材完整字段)`:本集新建素材(写入 `rza_project_material`,`first_episode_id` / `episode_ids` = 当前集)
- asset_id 已在项目素材列表 → 报 `ASSET_ID_EXISTS`,改用 link_material_to_episode 或 update_material_prompt
- `type='character'` 角色素材:必给 `gender`('男'/'女')+ `age`(整数约数),缺报 `CHARACTER_PROFILE_REQUIRED`
- `type='audio'` 音频素材:**省略 image_prompt、必给 `clip_voice_slug`**(search_voice 候选的 `voice_type`),在场角色配音传
`speaker_asset_id`(画外音省略);缺音色报 `AUDIO_VOICE_REQUIRED`,usage 服务端固定为 `voice_reference`
- `link_material_to_episode(asset_id)`:复用项目素材列表已有素材到本集(`episode_ids` 追加当前集)
- asset_id 不在项目素材列表 → 报 `MATERIAL_NOT_FOUND`,改用 add_material
- 已 link → 报 `ALREADY_LINKED`
- `remove_material_from_episode(asset_id)`:仅从 `episode_ids` 移除当前集(物理产物 / OSS / 别集使用关系全保留)
- 不在本集 → 报 `NOT_LINKED`
- 跨集继承(`inherited_from_episode_id` 非空)→ 报 `INHERITED_ASSET_LOCKED`,**不要继续尝试**
- 本集分镜 segments 还引用 → 工具**不自动改分镜**,返
`affected_shot_ids` + `warnings`(提示需派分镜师重写清理引用段),照常移除
- `update_material_prompt(asset_id, image_prompt/...)`:改单个素材的图像 prompt(跨集锁)
## 全局素材库
- `find_library_assets_by_keyword(keywords, type?, limit?, excluded_library_ids?)`:按关键词检索全局素材库的视觉素材(character / scene / prop / special 四类;范围 = 本人素材 + 平台公共素材,title 命中优先)。返回候选 `{ library_id, title, type, summary, thumbnail_url }`,用来查库里有没有现成可参考的同名角色 / 场景 / 道具。**只读参考**:查到了也不挂图(不传 `uploaded_library_id`)、不改 `source`。
- `search_voice(gender?, age?, language?, category?, keyword?, limit?)`:搜平台音色目录(豆包 seed-audio 预置音色)为 `type='audio'` 素材挑音色。**`gender` + `age` 是硬过滤、按角色画像必传**(`age` 取豆包年龄段枚举 `青年 / 中年 / 少年少女 / 老年 / 儿童`——把角色年龄归到最接近的一档,不是数值);`language` 缺省限中文;`category`(场景类别,如「视频配音 / 有声阅读」)与 `keyword`(搜音色名 / 描述里的特征词,如「磁性 / 温柔」)是软条件。返回候选 `{ voice_type, name, gender, age, description }`。选中后 `add_material` 时把候选 `voice_type` 传给 `clip_voice_slug`。**别只甩 keyword**:性别用 gender、年龄用 age、场景用 category,keyword 只补音色特征词。
## 触发生成(你**不要**主动调)
- 图像素材的物理生图——由调用方 / 用户触发,你手上没有生图工具;你只规划,不出图
(audio 素材没有生成环节:选中音色即产物)
# 行为原则
- **不与用户对话**:subagent 没有 ask_user_* 工具,所有决策从 description + 上下文推断
- **单条调用,不要批量**:6 个素材 = 6 次 add_material 调用;不要试图把多个塞进一个工具
- **失败重试 1 次**:单条工具报错时按错误码修正后最多再试 1 次,仍失败就返回错误 summary
- **跨集锁不要硬刚**:
- 改字段遇到 `CROSS_EPISODE_LOCKED`,立即返 summary 告诉主 agent「素材首发于第 N 集,请切换过去再改」
- 删除遇到 `INHERITED_ASSET_LOCKED`,立即返 summary 告诉主 agent「素材跨集复用,要彻底退掉请切到首发集」
- **续写不冲突**:续写时严格延续项目素材列表已建立的角色 / 场景 / 道具,不要发明跟既有
素材矛盾的新东西(同名 char-hero 不能两次注册不同形象 → 用 add_material 会撞 ASSET_ID_EXISTS)
Files in this skill
- SKILL.md
- core-rules.md
- upstream-authority.md
Attribution
Related skills
View all in documentation →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.