Skip to main content

funai-skill

橙星梦工厂AI视频制作工具,通过对话式操作,用户可以创建项目、配置剧本、生成角色/分镜/视频、查询任务状态。当用户要求使用橙星梦工厂平台、创建 AI 漫剧项目、或通过 API 与平台交互时使用。触发词:橙星梦工厂、ai.fun.tv、漫剧制作、AI漫剧、FunAI。

설치로 이동

소스 정보

저장소
LeoYeAI/openclaw-master-skills
최근 소스 활동
2026년 5월 5일 16:03
감지된 SKILL.md 언어
중국어
스타
2,151
포크
325

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
22 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
Funai-skill
description
橙星梦工厂AI视频制作工具,通过对话式操作,用户可以创建项目、配置剧本、生成角色/分镜/视频、查询任务状态。当用户要求使用橙星梦工厂平台、创建 AI 漫剧项目、或通过 API 与平台交互时使用。触发词:橙星梦工厂、ai.fun.tv、漫剧制作、AI漫剧、FunAI。
# 橙星梦工厂 Agent Skill 橙星梦工厂是一个 AI 驱动的漫剧制作平台。通过 API 创建项目、提交剧本、提取角色、生成分镜、配置成片并最终合成视频。 > **内测提示** > > 当前您正在使用的是 **Funai-skill 内测版**。 > Agent 在与用户交互时,应明确告知当前处于内测阶段。 > **重要结论** > > 真实后端不是“只看 `workflow.currentStep` 的线性流程”,而是: > > - 一层是项目级步骤:`workflow.currentStep` > - 一层是章节级隐藏任务:`comicPreset.data.chapters[]` 中的 `sceneCaptionsTaskStatus`、`dialogTaskStatus`、`sceneTaskStatus` > > Agent 如果只看 `currentStep` 就继续调用下一步,非常容易报错。 ## Skill 更新约束(创建类操作前必须执行) **本地机器可读版本文件**:`VERSION` > 说明:对外文案不再重复写死版本号;实际版本以本地 `VERSION` 与远端 setup 元数据中的 `latest_version / minimum_required_version` 为准。 每当 Agent 准备调用本 Skill 执行任何会创建、推进、修改平台任务的操作前,**必须先访问固定更新入口**: `https://neirong.funshion.net/skills/setup-skill.md` 至少检查以下字段: - `latest_version` - `minimum_required_version` - `force_update` - `skill_package_url` 执行规则: 1. 如果本地尚未安装本 Skill,必须先自动安装。 2. 如果远端要求强制更新,或本地版本低于 `minimum_required_version`,必须先自动更新。 3. 版本检查完成后,才能继续执行创建项目、提交剧本、推进步骤、生图、生视频、回退、合成等操作。 ## 快速配置 ### 1. 获取 Token 引导用户访问 `https://ai.fun.tv/#/openclaw` 并登录,获取 Token 后由 Agent 代为写入配置文件。 ### 2. 配置 Token ```bash cp config/.env.example config/.env # 编辑 config/.env # AIFUN_TOKEN=... ``` ### 3. 验证配置 ```bash ./scripts/api-client.sh setup-check ./scripts/api-client.sh check ``` ### 4. 运行完整自检示例 ```bash ./examples/create-comic.sh ``` > 示例脚本是**自检脚本**,会使用 `select-options` 返回的实时默认值自动创建测试项目。 > > 面向真实用户的 Agent 交互中,仍然必须先读取实时可选项;其中 `aspect / style` 必须展示给用户并让用户选择,`generateType / scriptType` 可按当前默认值静默使用,`model / videoModel` 在用户未指定时可继续使用实时默认值。 > > 另外,示例脚本为了验证整条链路,会在自检场景下先提交剧本再展示“确认点”;这不代表真实用户交互可以跳过“先确认再继续”的节奏要求。 ## Agent 必须遵守的执行规则 ### 0. 默认模式静默使用,不要主动向用户解释 除非用户明确提出要切换模式,否则 Agent 应直接使用平台默认模式: - `generateType = 1`(文生图) - `scriptType = 解说漫模式`(以 `select-options` 返回的默认剧本模式为准) 但这条“静默默认”**只适用于模式层级**,不适用于项目视觉配置。 创建项目时,以下两个字段**不能静默默认**,必须让用户明确选择: - `aspect`(画面比例) - `style`(风格) **重要**: - 这是 Agent 的内部默认决策,不要主动把“现在默认使用文生图 / 解说漫模式”当成一个需要告诉用户的配置项。 - 只有当用户明确要求切换到其他模式时,才需要说明并调整。 - 即使静默使用默认模式,底层仍然必须先调 `select-options`,并使用当次接口返回的默认值,而不是写死常量。 - `aspect / style` 不能因为接口返回了 `isDefault` 就直接替用户决定,必须向用户展示可选项并让用户确认。 ### 1. 创建项目前必须先调 `select-options` ```bash POST /service/workflow/project/story/select-options {"appCode":"ai-story","generateType":"1"} ``` 规则: - 必须使用接口返回的 `ratios`、`generateTypes`、`models`、`videoModels`、`styles`、`scriptTypes` - **禁止**硬编码风格、模型、比例、剧本类型 - `isDefault` 是**请求相关**的,不要把历史默认值写死在代码或文档里 - 如果用户没有明确要求切换模式,则直接静默使用当次接口返回的默认 `generateType / scriptType` - 但 `aspect / style` 必须向用户展示并让用户选择,不能静默默认 - `model / videoModel` 若用户没有额外要求,可以继续使用 `select-options` 返回的当前默认值 - 面向用户交互时,不需要主动把“文生图 / 解说漫模式”当作默认项拿出来解释;但必须明确让用户选择 `aspect / style` ### 2. 解说剧 / 解说漫模式下,AI 代写剧本必须写成旁白叙述式小说体 如果用户让 AI 帮忙写剧本,而当前走的是**解说剧 / 解说漫模式**,Agent 必须把剧本写成**旁白叙述式的小说 / 故事正文**,而不是分镜脚本。 必须符合: - 连续叙事 - 以旁白持续讲述故事推进为主 - 可以穿插少量自然对白,但整体仍应是讲述型正文 - 适合后续交给平台自动拆分角色、分镜与解说 禁止出现这类写法: - `镜头1` / `镜头2` - `旁白:...` 这种显式台本标签 - `林舟说:...` - `【音效:脚步声】` / `砰!` / `咚——` 这类音效描述 - 舞台说明式条目 - 分镜表 / 台本格式 正确风格示意: ```text 清晨,城市公园的林荫道上,年轻人林舟正在慢跑。阳光穿过树叶,在青石板路上投下斑驳的金色光影。 他刚想加快脚步,一只金毛犬忽然从灌木旁窜了出来,差点撞上他的膝盖。林舟猛地停住脚步,呼吸一乱,循声抬头望去。 不远处,一个扎着马尾的女孩正快步跑来。她一边抓紧手里的牵引绳,一边有些不好意思地朝林舟笑了笑。 ``` 错误风格示意: ```text 镜头1:公园远景。 旁白:清晨的城市公园里,林舟正在跑步。 林舟说:今天一定要把状态跑出来。 镜头2:金毛犬冲出。 ``` ### 3. 创建项目成功后,先展示项目链接 创建成功后必须立即把项目链接告诉用户: ```text https://ai.fun.tv/#/comic/multiple?projectId={projectId} ``` ### 4. 不要只看 `workflow.currentStep` 以下三类 readiness 都要检查: | 场景 | 检查位置 | 继续条件 | |------|----------|----------| | 项目处于哪个大步骤 | `GET /project/{projectId}` → `workflow.currentStep` | 当前步骤正确 | | 角色图是否完成 | `GET /comic/roles/{presetResourceId}` → `roles[].taskStatus` / `imgUrl` | 全部 `SUCCESS` 且 `imgUrl` 非空 | | 章节级隐藏任务是否完成 | `GET /resource/comicPreset/{presetResourceId}` → `chapters[]` | 对应状态字段为 `SUCCESS` | ### 5. 不要硬编码 `tts` / `voice-clone-select` 输入 `novel_extract_roles` 不是只传 `chapterNum` 就够。真实可运行的做法是: 1. 先调 `GET /comic/roles/{presetResourceId}` 2. 从 `data.voiceInputs[0]` 或 `data.roles[0].inputs[0]` 取出 live 的 `tts` 输入对象 3. 将它和 `chapterNum` 一起提交 ### 6. 不要把 `sceneUuid` 当 `sceneId` `scene-list` 里的 `sceneUuid` 只是短 ID,不能直接用于分镜/视频接口。 正确流程: ```text comicPreset/{presetResourceId} → chapters[].sceneTaskId → GET /task/{sceneTaskId} → data.resourceId (storyboardId) → GET /resource/{storyboardId} → data.data.scenes[].id (完整 sceneId) ``` ### 7. 优先向用户返回 `videoPlayUrl` 如果后端返回了新的可播放字段: - scene 视频资源:`videoPlayUrl` - 最终成片资源:`videoPlayUrl` 则正确做法是: - 对外只返回 `videoPlayUrl` - 高层 helper、示例脚本、模型可见输出中不要暴露原始视频 `url` - 项目链接仍可作为补充入口一起返回 ### 8. `scene/ai/video` 必须使用 scene 当前基准分镜图 图转视频的正确图片来源是当前 scene 的**基准分镜图**: - 优先使用 `GET /storyboard/scene/{sceneId}/prompt/detail?sceneId={sceneId}` 中的 `video.imageId` - 再到 `GET /storyboard/scene/{sceneId}/resources` 中找到与这个 `imageId` 对应的 image 资源 - 如果当前仍有 `selected == true` 的 image,它通常就是同一张图 不要直接使用: - `GET /comic/roles/{presetResourceId}` 返回的 `roles[].imgUrl` **重要**:这不是“后端一定会报错”的约束,而是“Agent 必须主动保证语义正确”的约束。 live 测试里,后端接受了 `roles[].imgUrl + roles[].imageResourceId`,并成功生成了一条 video 资源。也就是说,传错图时接口可能仍然返回 `200 success`,但生成出来的是**语义错误的视频**。 所以: - 正确图源 = scene 当前基准分镜图(优先 `video.imageId` 对应的 image) - 错误图源 = 角色图 / 其他非当前 scene 图片 - 不要依赖后端帮你兜底 ## 面向 Agent 的权威执行顺序 ### 第 0 步:先做 setup 检查 先读取 `https://neirong.funshion.net/skills/setup-skill.md`,确认本地 skill 版本可用。 ### 第 1 步:获取项目可选项 ```bash POST /service/workflow/project/story/select-options {"appCode":"ai-story","generateType":"1"} ``` ### 第 2 步:创建项目 使用上一步接口返回的实时值创建项目。 > live 后端通常会让 `novel_config` 自动完成,所以项目创建后常见的 `currentStep` 是 `novel_input`,这是正常现象。 > 如果用户没有特别说明,不要额外告诉用户“当前默认使用文生图 / 解说漫模式”。 > > 但在真正创建项目之前,必须先让用户明确选择: > > - 画面比例 `aspect` > - 风格 `style` > > 只有这两个字段确认后,才可以结合实时默认的 `generateType / scriptType / model / videoModel` 创建项目。 ### 第 3 步:提交剧本 ```bash POST /service/workflow/project/step/next { "userProjectId": "项目ID", "step": "novel_input", "inputs": [ {"name": "content", "type": "text", "value": "剧本内容"}, {"name": "scriptType", "type": "text", "value": "0"}, {"name": "isSplit", "type": "text", "value": "0"} ] } ``` 返回 `resultId` 后轮询 `GET /task/{resultId}`。 如果剧本是 AI 代写,并且当前是解说剧 / 解说漫模式,则剧本正文必须保持**旁白叙述式小说体**,不要写成分镜脚本,也不要写音效描述。 ### 第 4 步:智能分集 ```bash POST /service/workflow/project/step/next {"userProjectId":"项目ID","step":"novel_opt","inputs":[]} ``` 返回 `resultId` 后轮询任务。 ### 第 5 步:等待角色图完成,再执行角色步骤 先调: ```bash GET /service/workflow/comic/roles/{presetResourceId} ``` 必须满足: - `roles[].taskStatus == SUCCESS` - `roles[].imgUrl` 非空 然后再调: ```json POST /service/workflow/project/step/next { "userProjectId": "项目ID", "step": "novel_extract_roles", "inputs": [ {"type": "number", "name": "chapterNum", "value": 1}, { ...来自 roles/voiceInputs 的 tts 输入对象... } ] } ``` 如果跳过这一步,常见报错是: - `角色 [xxx] 图片未完成` 如果用户在这一阶段要求修改角色形象,则必须满足: 1. 当前 `workflow.currentStep == novel_extract_roles` 2. 先对目标角色发起新图生成 3. 等待新图在角色候选图列表里变成 `SUCCESS` 且 `imgUrl` 非空 4. 再显式应用这张新图 5. 最后重新读取角色列表,确认角色主图已切换,并把新的图片 URL 返回给用户 只生图不应用,不算修改完成。 ### 第 6 步:等待 `sceneCaptionsTaskStatus=SUCCESS`,再执行智能分镜 先调: ```bash GET /service/workflow/resource/comicPreset/{presetResourceId} ``` 等待: ```text chapters[chapterNum].sceneCaptionsTaskStatus == SUCCESS ``` 补充说明:live 数据里,这类章节字段在短时间内可能先出现空值,再进入 `RUNNING / SUCCESS`。空值不一定代表异常,更不能据此提前推进下一步。 然后再调: ```json POST /service/workflow/project/step/next { "userProjectId": "项目ID", "step": "novel_scene_captions", "inputs": [ {"type": "number", "name": "chapterNum", "value": 1}, {"name": "imgGenTypeRef", "value": 1} ] } ``` 这个步骤返回的是 **`dialogTaskId`**,不是 `resultId`。 如果调早了,常见报错是: - `该章节提取分镜场景任务未完成,请稍后再试` ### 第 7 步:轮询 `dialogTaskId` 后,还要再等 `sceneTaskStatus=SUCCESS` 轮询 `dialogTaskId` 成功后,仍然不能立刻推进到成片。 还需要再看: ```text chapters[chapterNum].sceneTaskStatus == SUCCESS ``` 补充说明:live 数据里,`sceneTaskStatus` 在一段时间内可能为空,再变成 `SUCCESS`;判断 readiness 时应继续轮询,而不是把空值直接当失败。 如果调早了,常见报错是: - `该章节分镜图任务未完成,请稍后再试` ### 第 8 步:推进到成片步骤 等 `sceneTaskStatus=SUCCESS` 后,再调: ```json POST /service/workflow/project/step/next { "userProjectId": "项目ID", "step": "novel_chapter_scenes", "inputs": [{"type": "number", "name": "chapterNum", "value": 1}] } ``` ### 第 9 步:解析 storyboard 与 sceneId 用 `sceneTaskId -> task -> resourceId -> resource` 链路拿到: - `storyboardId` - `scenes[].id` - `scenes[].image` ### 第 9.5 步:单场景图转视频(如用户明确要求) 先确认: 1. 当前步骤已处于 `novel_chapter_scenes` 2. `sceneTaskStatus == SUCCESS` 3. 使用完整 `sceneId` 4. 先取 `prompt/detail.video.imageId`,再从 `resources` 中找到对应 image 资源 推荐 payload 形态: ```json { "sceneId": "完整 sceneId", "prompt": "来自 prompt/detail 的视频提示词", "cameraPrompt": "来自 prompt/detail 的镜头提示词", "model": "doubao-pro", "duration": "-1", "firstImage": "scene 当前基准分镜图 URL", "tailImage": "", "clarity": "720p", "imageId": "scene 当前基准 image 资源ID" } ``` 不要写成: ```text firstImage = roles[].imgUrl imageId = roles[].imageResourceId ``` 因为这可能不会报错,却会生成错误语义的视频。 ### 第 10 步:成片配置与合成 这里必须明确区分**成片设置阶段**和**视频合成阶段**。 #### 第 10A 步:进入 `novel_chapter_video` = 进入成片设置阶段 当章节从 `novel_chapter_scenes` 推进到 `novel_chapter_video` 后,用户并不是立刻就能看到最终成片。 live 测试里,这个阶段常见特征是: - `workflow.currentStep = novel_chapter_video` - `chapters[].currentStep = novel_chapter_video` - `chapters[].currentSubStep = setting` 这表示当前处于**成片设置阶段**,此时需要准备并确认成片参数。 #### 第 10B 步:保存成片设置 顺序如下: 1. `POST /storyboard/prepareVideoComposite` 2. `GET /storyboard/getVideoSetting?userProjectId=...&type=2&chapterNum=1` 3. `POST /storyboard/saveVideoComposeConfig` 这一阶段主要对应: - 封面设置 - 字幕设置 - 背景音乐 - 以及后续生成视频前需要确认的合成相关参数 在 live 测试中,`saveVideoComposeConfig` 成功后,章节仍可能保持: - `currentSubStep = setting` 也就是说,**保存设置成功 ≠ 已经开始合成视频**。 #### 第 10C 步:点击“生成视频” = 真正发起视频合成 只有当调用: 4. `POST /project/step/action` with `step=novel_chapter_video` 之后,才是真正开始视频合成。 live 测试里,这一步会: - 返回新的 `resultId`(视频合成任务 ID) - 将章节的 `videoTaskId` 更新为新的任务 ID - 让章节 `currentSubStep` 从 `setting` 进入 `video` 然后才需要: 5. 轮询返回的 `resultId` live 自检里,这个最终合成任务可能会在 `QUEUED` 状态停留明显长于普通步骤;不要沿用前面普通任务的短轮询预算直接判超时。 #### 第 10D 步:只有合成任务成功后,用户才能看到最终成片 只有在视频合成任务 `SUCCESS` 后: - 才会得到新的最终视频 `resourceId` - 用户这时才能在平台里看到最终成片结果 换句话说: - 进入 `novel_chapter_video` 不是最终成片完成 - 保存封面 / 字幕 / 背景音乐也不是最终成片完成
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기