Shotfun creator
Agent skill collection for AI content production across images, video, audio, and digital humans
npx -y skills add shotfun-ai/shotfun-creatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
面向 AI 内容生产场景的 skill 集合,覆盖图片、视频、声音、数字人等内容生产能力。
SKILL.md
22.6 KB, ~7.4k tokens by cl100k_base, as published. Nobody here has run it
shotfun-creator
shotfun-creator 面向所有 AI 内容生产场景,是覆盖图片、视频、声音、数字人等能力的 skill 集合。它负责理解用户目标、自主选择合适的可用技能,并完成内容生产。用户只需要输入内容目标,它会帮助拆解任务、规划流程、完成工作任务,并可把已实现的工作流程沉淀为用户自己的 skill。
核心运行规则
- 路由顺序:优先使用能完整覆盖用户目标的 workflow skill;其次使用
task-skills/;最后才下钻到scripts/cli/*.js或scripts/services/*.js原子能力。 - 前置约定:调用 ShotFun 前读取
references/calling-conventions.md和references/output-conventions.md;缺少SHOTFUN_API_KEY时只做 dry-run 或引导配置,不提交真实任务。 - 价格查询:当用户询问价格、费用、收费、积分、credits、成本或哪个模型更便宜时,先读取
references/pricing.md,按其中的价格表向用户展示相关条目;不要凭记忆报价。references/model-catalog.md只作为模型选择目录,用户展示口径以references/pricing.md为准。 - 脚本归属:新增 skill 的专用脚本、模板、示例输入、参考素材配置和辅助工具必须放进对应 skill 目录;主项目
scripts/只放跨 skill 复用的稳定底层能力。 - 安全边界:不要把 API Key、token、签名 URL、本机绝对路径、历史生成素材 URL、客户素材、私有项目名、角色资产或一次性生产参数硬编码到 skill 文件或主项目脚本中。
- 汇报约定:最终回复优先给用户可直接使用的产物链接/本地路径、
outputDir、manifest和关键模型参数;不要粘贴原始 API 响应、内部task对象或大段 JSON。
新建 workflow/task skill 时,可在该 skill 目录下使用 scripts/、templates/、examples/、references/ 等子目录承载专用内容。需要公开示例时,只使用无敏感信息的占位 URL 和最小示例数据。
前置检查
调用 ShotFun 之前:
- 确认用户目标:完整工作流、单个任务产物,还是原子能力调用。
- 读取
references/calling-conventions.md(环境变量、输出目录、安全约束)和references/output-conventions.md。 - 确认本地
<cwd>/.env.local或运行环境中存在SHOTFUN_API_KEY;如果缺失,先引导用户到 shotfun.cn/agent 注册/登录 ShotFun 账户并获取 API Key,再把 key 写入当前项目根目录的<cwd>/.env.local。对于当前仓库使用场景,默认就是shotfun-creator/.env.local。不要继续提交真实任务;可用--dry-run帮用户预览执行计划。 - 对多步骤或含糊请求,优先使用
--dry-run预演。 - 对用户期望本轮直接拿到结果的单能力任务,使用
--wait。 - 对工作流执行,只有在真实运行有成本门槛的工作流时才使用
--confirm,不要在 dry-run 规划阶段使用。 --project-code传用户填写的 ShotFun 项目名称,未传时默认为default;--project-name只控制本地归档目录,未传时也使用default。- 如果任务反馈余额不足、积分不足或账户余额不够,先停止继续提交并引导用户到 ShotFun 充值页 充值后再继续。
凭证优先来自本地 <cwd>/.env.local,其次才是运行时环境变量。不要把 API Key、token、私有 URL 或生成资产硬编码到 skill 文件或已跟踪文件中。
ShotFun API Key 引导
当任务需要调用 ShotFun OpenAPI,但环境中没有 SHOTFUN_API_KEY 时,停止真实执行并用简短步骤引导用户:
- 打开 shotfun.cn/agent。
- 注册或登录 ShotFun 账户。
- 在账户/API Key 页面创建或复制 API Key。
- 将 API Key 写入当前工作目录的
.env.local,格式为SHOTFUN_API_KEY=<用户的 key>。在本仓库场景下,默认路径是shotfun-creator/.env.local。 - 后续所有 ShotFun CLI/service 会通过
scripts/core/env-loader.js自动从.env.local读取。
推荐提示语:
当前本地缺少 SHOTFUN_API_KEY,所以我还不能提交真实生成任务。你可以到 https://shotfun.cn/agent 注册/登录 ShotFun 账户并获取 API Key。拿到后我会把它写入当前工作目录的 .env.local,后续 ShotFun 任务会自动从这个文件读取。配置好后回复“继续”,我会接着执行。
如果用户明确要求你代写本地配置,直接把 key 写入当前项目根目录的 <cwd>/.env.local;在 shotfun-creator 仓库里就是 shotfun-creator/.env.local。不要在回复中复述密钥。.env.local 已被 .gitignore 的 .env.* 规则忽略。
需求澄清规则
当用户输入不够明确,且会影响成本、模型选择、产物质量或是否能执行时,先引导用户确认需求,不要直接猜测并提交真实任务。
必须澄清的情况:
- 缺少核心输入:例如没有提示词、没有参考图、没有口播稿、没有视频/图片 URL、没有项目名称或必要凭证。
- 输出规格不明确且会影响结果:例如图片比例、分辨率、视频时长、语言、音色、是否需要字幕、是否需要严格保留人物身份。
- 任务类型存在歧义:例如用户只说“做个视频”,但没有说明是图生视频、口播视频、单镜头视频还是完整工作流。
- 成本或执行风险较高:例如高分辨率、长视频、多步骤工作流、批量生成、会发布到外部平台。
- 参考素材的用途不明确:例如用户给了人物照片和场景图,但没有说明要换背景、合成场景、做口播图还是做视频。
澄清方式:
- 优先问 1-3 个最关键问题,不要一次性抛出长表单。
- 给出推荐默认值,帮助用户快速确认,例如“我建议 16:9、默认模型、先 dry-run,再正式生成”。
- 如果需求可以安全默认,先说明默认假设,再执行 dry-run;真实执行前仍需确认高成本或外部发布动作。
- 如果用户已经明确说“直接生成/按你建议来”,可以使用合理默认值继续执行。
主 Skill 调度规则
按以下顺序选择执行路径:
- 如果用户描述的是端到端目标或跨渠道产物,且仓库存在
workflow-skills/README.md,先读取匹配的 workflow skill。 - 如果用户描述的是一个输入输出明确的产物,先查
task-skills/README.md并读取匹配的 task skill。 - 如果用户只需要图片、视频、音频、视频处理或资产管理中的一个原子能力,读取
references/*.md并调用scripts/cli/*.js。 - 如果没有现成 workflow/task skill,先用原子服务跑通 MVP,并把缺口作为后续可新增 skill 记录。
工作流 skill 可以调用 task skill;task skill 可以调用 atomic service。不要让 atomic service 反向依赖 task/workflow skill。
用户意图路由
| 用户意图 | 优先读取 | 推荐命令 |
|---|---|---|
| 默认口播内容生产、口播形象图、口播视频、封面和可复用口播工作流 | workflow-skills/koubo.md | 先用 gpt-image2(即 gpt-image-2)生成/确认口播形象图,再按工作流规划脚本、声音、视频和封面 |
| 公众号文章一体化写作、封面和发布到草稿箱 | task-skills/wechat-write-publish-allinone.md | 先生成标题/正文/封面,再按发布条件推送到草稿箱 |
| 公众号封面图 | task-skills/wechat-cover-image.md | node scripts/cli/image-generate.js ... |
| 小红书/RedNote 图片卡片或卡片系列 | task-skills/xhs-images-gen.md | node scripts/cli/image-generate.js --model gpt-image2 ... |
| 任意内容生成图片、促销图、培训说明图 | task-skills/universal-content-to-image.md | 先设计 visual brief,再 node scripts/cli/image-generate.js --model gpt-image2 ... |
| 参考视频分析、抽帧和风格拆解 | task-skills/reference-video-analysis.md | ffprobe + ffmpeg 抽帧/contact sheet + 分析报告 |
| 口播场景图生成 | task-skills/talking-head-scene-image.md | node scripts/cli/image-generate.js ... |
| 真人口播风格视频 / 根据图片和口播稿生成完整口播视频 | task-skills/scripted-talking-video.md | 短稿走 single-shot;长稿或需穿插内容镜头时先做分镜和模型确认 |
| 创建、检查或渲染 HyperFrames 项目 | task-skills/hyperframes-project.md | node scripts/cli/run-workflow.js --workflow news-broadcast-video ... 或 npx --yes [email protected] render ... |
| 给指定 skill 生成 Web 工作台、查看生产过程和产物 | task-skills/workbench-web-skill.md | HTML5 + Tailwind CSS 4 + Vite 静态工作台 |
| 一句话同时生图和生视频 | references/model-catalog.md#单镜头工作流 | node scripts/cli/one-shot.js ... |
| 生成或编辑图片 | references/model-catalog.md#图片生成 | node scripts/cli/image-generate.js ... |
| 将图片转成视频 | references/model-catalog.md#视频生成图生视频 | node scripts/cli/video-generate.js ... |
| 生成 TTS 或试听音色 | references/model-catalog.md#音频--tts | node scripts/cli/audio-generate.js ... |
| 视频超分或去字幕 | references/model-catalog.md#视频处理 | node scripts/cli/video-process.js ... |
| 创建 ShotFun 素材组或素材 | references/model-catalog.md#项目素材 | node scripts/cli/project-assets.js ... |
| 生成一个短镜头视频 | references/model-catalog.md#单镜头工作流 | node scripts/cli/one-shot.js ... |
| 生成角色素材包 | 暂未实现 | 说明限制;手动组合图片/文本服务 |
| 生成多镜头场景 | 暂未实现 | 说明限制;重复使用 single-shot,或等待工作流支持 |
News Broadcast 输入纪律
当用户只说“用 News Broadcast Video Workflow 做一个播报视频”或类似请求,但没有在本轮明确给出主题、素材、JSON 路径或“复用某个历史 run”的指令时:
- 先问用户现在想播报什么,不要在
shotfun-output/、manual-inputs/或历史 run 里自动挑一个 JSON。 - 可以运行
node scripts/cli/run-workflow.js --workflow news-broadcast-video --project-name "<name>"生成needs-broadcast-input请求包,但不要把历史产物当作正式输入。 - 只有当用户明确说要复用某个历史文件/run 时,才可以传
--input-file指向shotfun-output/下的 JSON,并且必须同时传--allow-historical-input。
只有当注册表中存在专用服务尚未支持的任务时,才把 scripts/cli/run-template.js 作为低层逃生口使用。
模型决策协议
调用任何 ShotFun service / CLI 之前,AI 必须按本协议选定 --model / --kind / --operation,不要让用户自己挑模型,也不要在 task-skills 文档里硬编码。
1. 读 catalog
每次调用前必读 references/model-catalog.md。该文件由 scripts/core/dump-model-catalog.js 从 scripts/core/task-registry.js 自动生成,包含所有可用 model 的 key / priceTier / 推荐分 / 适用场景 / 能力约束 / 亮点 / 取舍。registry 更新后必须重新运行脚本同步。用户询问价格或成本时,另读 references/pricing.md,并以该文件作为展示口径。
不要凭记忆调用未在 catalog 中列出的 model key。
2. 选 model 的判断顺序
- 用户已显式指定:用户消息含具体
--model X或写了 model key,直接采用,不再决策。 - 任务级硬约束:根据输入特征过滤候选模型:
- 有参考图 /
anchorPhoto/Asset://...→ 必须supports.referenceImage = true。 - 要求素材模式 → 必须
supports.assetMode = true(目前仅sd-reference)。 - 用户指定分辨率 1080P / 4K → 选
defaults.resolution匹配的或显式 1080p 的 model。 - 用户指定时长 10s → 优先固定 10s 的 model(如
ref2v-grok-cheap)。
- 有参考图 /
- 场景匹配:剩余候选按
selection.scenarios与用户描述做语义匹配,命中场景的优先。 - 预算偏好:
- 用户暗示「便宜 / 草稿 / 试试」→ 选
priceTier ∈ {low, standard}中推荐分最高的。 - 用户暗示「最好 / 发布 / 投放」→ 进入下面的高成本确认流程。
- 用户未表态 → 默认走低成本,
priceTier = standard推荐分最高者优先;同分按 credits 升序。
- 用户暗示「便宜 / 草稿 / 试试」→ 选
- 同分裁决:先看
selection.tags中default标签;再看recommendationScore;再看credits升序。
3. 静默推进 vs 复述确认
默认静默推进(不打断对话):
priceTier ∈ {low, standard, free}- 单次调用、
--dry-run、--wait单产物 - 用户已显式指定 model 或说过「按你建议」/「直接生成」
静默推进时 AI 仍要在最终汇报里写明实际使用的 model 和一句话原因(如 model: nano2 — 通用稳定 + 支持参考图)。
必须复述确认(拦截一步,等用户回应):
priceTier ∈ {high, premium}- model key ∈
{sora2, *-1080p, nano-pro, nano-pro-stable, seedream5} - 工作流多镜头 / 批量生成 / 单次任务 ≥ 5 个产物
- 用户描述含「发布 / 上线 / 投放 / 给客户 / 给老板 / 上传到平台」
- 单次预估 credits ≥ 12
复述格式(保持简短):
我打算用 <model-key>(<credits> credits,<一句话原因>),需要换吗?
可选:<其他 1-2 个候选 key + 价格差异>
用户回复任一以下视为确认:「是 / 行 / 可以 / 继续 / 用这个 / 按你建议」。回复具体 key 视为指定。回复「换 / 不要 / 太贵」要重新决策并复述。
4. 决策可追溯
- 工作流(写 manifest 的场景):把最终选定的
model和选中原因写进manifest.json的decision/notes字段(若 runtime 暂未支持该字段,可暂留在 step sidecar)。 - 单次 CLI 调用:在最后向用户的汇报里附
model + 一句话原因。
5. 例外
- 音频、视频处理、素材管理这几类 category 没有"挑模型"的语义(key 就是 kind/operation/action),按用户意图直接选对应
--kind/--operation/--action即可,不需要复述。 - 单镜头工作流的图片步骤可以默认走
nano2,视频步骤默认走seedance,除非命中上述高成本拦截条件。
当前可用的任务生成能力
已端到端实现:
- 通过
image-generate.js生成或编辑单张图片。 - 通过
video-generate.js执行图生视频。 - 通过
audio-generate.js执行 TTS/音频生成。 - 通过
video-process.js执行视频处理。 - 通过
one-shot.js执行一句话生图 + 生视频。 - 通过
run-workflow.js --workflow single-shot执行单镜头工作流。 - 通过
project-assets.js创建素材组和素材。
批量任务执行经验
多图生成时不要串行执行 image-generate.js --wait 等完一张再提交下一张。推荐流程:
- 先为每张图生成独立 prompt、参考图 URL 和 sidecar JSON。
- 并发提交创建任务,默认并发度使用
SHOTFUN_CONCURRENCY;未配置时建议3,高成本模型或网络不稳时降到2。 - 记录每个任务的
taskNo、输入 prompt、参考图 URL、模型、项目名和本地 sidecar 路径。 - 统一轮询所有
taskNo到终态,成功后再下载或整理远程 URL。 - 单个任务超时但后端仍是
RUNNING时,不要重新提交扣费;继续用taskNo查询或恢复。
适用场景:多页 PPT 图片重绘、小红书多图卡片、批量封面、任意内容多图展示图。单张图或需要人工逐张确认风格时,仍可串行生成。
批量图片归档默认规则
对小红书、多图封面、系列海报等批量图片任务,默认不要只返回分散在各个 run 目录里的原始图片。
- 生成完成后,应额外整理一个同批次的聚合目录。
- 聚合目录下统一使用
card-01.png、card-02.png这类命名。 - 同时提供一个
index.json,记录每张图的taskNo、原始 run 路径、批次路径、标题和顺序。 - 如果用户明确要求保留原始 run 结构,再只返回分散路径。
暂未作为工作流实现:
short-drama:把故事、角色、分镜、图片、视频和处理串成一个可恢复流程。character-pack:多视角一致角色素材。video-scene:包含多个协同镜头的单场景。- 通过
--fetch-remote下载远程产物。 - 导出可分享的 manifest 脱敏版本,隐藏私有/签名 URL。
scripts/core/task-registry.js中的价格只作为模型决策快照;用户询价以references/pricing.md为准。
不要把未支持的工作流承诺为完整自动化能力。应提供最接近的已实现路径,并明确说明限制。
命令模板
使用 {baseDir} 表示包含本 SKILL.md 的目录。
单镜头视频
默认流程:用户一句话先生成图片,再基于该图片生成视频。用户说“一句话生图和生视频”“generate an image and video from this prompt”或“make this into a short shot”时使用。
最短入口:
node {baseDir}/scripts/cli/one-shot.js \
--project-code <project-name> \
--prompt "A cinematic sunrise over a quiet lake" \
--confirm
请求含糊或用户要求先预览时,先规划:
node {baseDir}/scripts/cli/one-shot.js \
--project-code <project-name> \
--prompt "A cinematic sunrise over a quiet lake" \
--dry-run
使用已有图片:
node {baseDir}/scripts/cli/run-workflow.js \
--workflow single-shot \
--project-code <project-name> \
--prompt "Slow camera push-in, soft morning haze" \
--image-url "https://example.com/scene.png" \
--confirm
恢复工作流:
node {baseDir}/scripts/cli/run-workflow.js \
--workflow single-shot \
--project-code <project-name> \
--prompt "A cinematic sunrise over a quiet lake" \
--resume "<run-id>" \
--confirm
图片
node {baseDir}/scripts/cli/image-generate.js \
--project-code <project-name> \
--prompt "A polished product poster, studio lighting" \
--model nano2 \
--wait \
--agent-output
带参考图:
node {baseDir}/scripts/cli/image-generate.js \
--project-code <project-name> \
--prompt "Keep the character, change outfit to a black suit" \
--image-url "https://example.com/character.png" \
--model nano2 \
--wait \
--agent-output
图生视频
node {baseDir}/scripts/cli/video-generate.js \
--project-code <project-name> \
--prompt "Animate this character with a slow confident walk" \
--image-url "https://example.com/character.png" \
--model seedance \
--asset-mode none \
--wait \
--agent-output
当请求需要素材模式参考行为时,使用 sd-reference:
node {baseDir}/scripts/cli/video-generate.js \
--project-code <project-name> \
--prompt "Animate this character, preserve identity" \
--image-url "https://example.com/character.png" \
--model sd-reference \
--wait \
--agent-output
语音 / 音频
音色按平台从 references/voice_<platform>.json 读取;格式见 references/voice-catalog-format.md。用户指定 --voice-id / --voice-name 时精确查找,未指定时自动使用该平台默认音色,并把表中的 voiceId 写入任务参数。
node {baseDir}/scripts/cli/audio-generate.js \
--project-code <project-name> \
--kind single \
--voice-platform <platform> \
--text "你好,这是语音生成测试。" \
--wait \
--agent-output
声音克隆后生成语音:
node {baseDir}/scripts/cli/audio-generate.js \
--project-code <project-name> \
--kind clone \
--voice-url "https://example.com/voice.mp3" \
--text "你好,这是克隆音色后的语音生成测试。" \
--wait \
--agent-output
视频处理
node {baseDir}/scripts/cli/video-process.js \
--project-code <project-name> \
--operation upscale \
--video-url "https://example.com/input.mp4" \
--wait \
--agent-output
常用 --operation 值:upscale、subtitle-remove。
项目素材
node {baseDir}/scripts/cli/project-assets.js \
--project-code <project-name> \
--action asset-group-create \
--name "Hero refs" \
--description "Reference images" \
--wait
node {baseDir}/scripts/cli/project-assets.js \
--project-code <project-name> \
--action asset-create \
--group-id 123 \
--url "https://example.com/hero.png" \
--name hero \
--asset-type Image \
--wait
输出规则
单能力 CLI 默认返回面向任务的 JSON。当调用方需要稳定的 userArtifacts JSON、而不是原始 task 对象时,对图片、视频、音频和视频处理 CLI 添加 --agent-output。工作流始终返回面向 Agent 的 JSON:
{
"ok": true,
"runId": "20260514-031211-a1b2c3d4",
"outputDir": "/abs/path/to/shotfun-output/...",
"manifest": "/abs/path/to/manifest.json",
"userArtifacts": [
{ "kind": "video", "name": "video", "url": "https://..." }
],
"cost": { "estimated": 0, "currency": "CNY" }
}
返回图片、视频、音频结果时,默认把本地路径和线上 URL 都格式化成可点击链接;优先给本地路径,其次补充线上 URL。不要只用纯文本路径展示。
向用户汇报时:
- 优先给出来自
userArtifacts或resultUrls的最终产物 URL 或本地路径,并用可点击链接格式输出。 - 对工作流运行,说明
outputDir和manifest。 - 对分组项目运行,在有帮助时说明
projectName、projectSlug,以及项目latest.json/index.jsonl的位置。 - 不要粘贴内部
task对象、token、签名 URL 查询参数细节、原始 API 响应或大段 JSON。 - 如果 URL 看起来是签名或私有链接,告诉用户它可能会过期,并建议下载或妥善保存。
失败与恢复规则
- 缺少 API key、用户输入的项目名称、提示词、输入文件、URL 或必需选项:停止并报告缺失输入。
- API 任务失败:报告
taskNo、状态和人类可读错误;不要隐藏失败。 - 如果失败原因是任务余额不足或积分不足,明确提示用户去 ShotFun 充值页 充值。
- 超时:如果存在
taskNo,将其报告为可恢复状态。 - 工作流部分失败:保留
manifest.json和步骤 sidecar 文件,然后建议使用--resume <run-id>。 - 只有当工作流输入 hash、注册表版本、工作流版本和步骤输入 hash 都匹配时,恢复才安全。工作流版本不匹配时必须重新运行。
What ships with it: 92 files
759.7 KB alongside SKILL.md, 46 of them executable
examples/
- news-broadcast-input.example.json2.6 KB
- visual-grammar-gallery/before_after_surface.svg1.4 KB
- visual-grammar-gallery/cinematic_anchor.svg1.5 KB
- visual-grammar-gallery/data_on_plate.svg1.4 KB
- visual-grammar-gallery/decision_tree_path.svg1.5 KB
- visual-grammar-gallery/ecosystem_orbit.svg1.4 KB
- visual-grammar-gallery/index.html4.2 KB
- visual-grammar-gallery/layer_stack.svg1.6 KB
- visual-grammar-gallery/market_ledger.svg1.7 KB
- visual-grammar-gallery/mechanism_xray.svg1.8 KB
- visual-grammar-gallery/metric_pulse.svg1.5 KB
- visual-grammar-gallery/quote_architecture.svg1.4 KB
- visual-grammar-gallery/radar_sweep.svg1.4 KB
- visual-grammar-gallery/runtime_lens.svg1.5 KB
- visual-grammar-gallery/signal_board.svg1.5 KB
- visual-grammar-gallery/timeline_ribbon.svg1.5 KB
- visual-grammar-gallery/verification_rail.svg1.6 KB
references/
- calling-conventions.md8.3 KB
- model-catalog.md21.5 KB
- model-taskcode-migration.md4.5 KB
- output-conventions.md2.0 KB
- pricing.md2.8 KB
- style-guide.md1.2 KB
- troubleshooting.md1.2 KB
- voice-catalog-format.md2.5 KB
- voice_minimax.json125.0 KB
scripts/
- cli/audio-generate.jsruns846 B
- cli/doctor.jsruns1.3 KB
- cli/image-generate.jsruns840 B
- cli/one-shot.jsruns6.0 KB
- cli/project-assets.jsruns1.1 KB
- cli/run-template.jsruns5.2 KB
- cli/run-workflow.jsruns12.6 KB
- cli/video-generate-import.jsruns71 B
- architecture.md37.8 KB
- COMMERCIAL_LICENSE.md1.2 KB
- CREDITS.md555 B
- .gitignore679 B
- LICENSE4.5 KB
- README.md9.9 KB
52 more files not listed here. See all 92 in the repository.