بنقرة واحدة
shotfun-creator
面向 AI 内容生产场景的 skill 集合,覆盖图片、视频、声音、数字人等内容生产能力。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
面向 AI 内容生产场景的 skill 集合,覆盖图片、视频、声音、数字人等内容生产能力。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | shotfun-creator |
| description | 面向 AI 内容生产场景的 skill 集合,覆盖图片、视频、声音、数字人等内容生产能力。 |
shotfun-creator 面向所有 AI 内容生产场景,是覆盖图片、视频、声音、数字人等能力的 skill 集合。它负责理解用户目标、自主选择合适的可用技能,并完成内容生产。用户只需要输入内容目标,它会帮助拆解任务、规划流程、完成工作任务,并可把已实现的工作流程沉淀为用户自己的 skill。
task-skills/;最后才下钻到 scripts/cli/*.js 或 scripts/services/*.js 原子能力。references/calling-conventions.md 和 references/output-conventions.md;缺少 SHOTFUN_API_KEY 时只做 dry-run 或引导配置,不提交真实任务。references/pricing.md,按其中的价格表向用户展示相关条目;不要凭记忆报价。references/model-catalog.md 只作为模型选择目录,用户展示口径以 references/pricing.md 为准。scripts/ 只放跨 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。凭证优先来自本地 <cwd>/.env.local,其次才是运行时环境变量。不要把 API Key、token、私有 URL 或生成资产硬编码到 skill 文件或已跟踪文件中。
当任务需要调用 ShotFun OpenAPI,但环境中没有 SHOTFUN_API_KEY 时,停止真实执行并用简短步骤引导用户:
.env.local,格式为 SHOTFUN_API_KEY=<用户的 key>。在本仓库场景下,默认路径是 shotfun-creator/.env.local。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.* 规则忽略。
当用户输入不够明确,且会影响成本、模型选择、产物质量或是否能执行时,先引导用户确认需求,不要直接猜测并提交真实任务。
必须澄清的情况:
澄清方式:
按以下顺序选择执行路径:
workflow-skills/README.md,先读取匹配的 workflow skill。task-skills/README.md 并读取匹配的 task skill。references/*.md 并调用 scripts/cli/*.js。工作流 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 hyperframes@0.6.30 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 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 请求包,但不要把历史产物当作正式输入。--input-file 指向 shotfun-output/ 下的 JSON,并且必须同时传 --allow-historical-input。只有当注册表中存在专用服务尚未支持的任务时,才把 scripts/cli/run-template.js 作为低层逃生口使用。
调用任何 ShotFun service / CLI 之前,AI 必须按本协议选定 --model / --kind / --operation,不要让用户自己挑模型,也不要在 task-skills 文档里硬编码。
每次调用前必读 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。
--model X 或写了 model key,直接采用,不再决策。anchorPhoto / Asset://... → 必须 supports.referenceImage = true。supports.assetMode = true(目前仅 sd-reference)。defaults.resolution 匹配的或显式 1080p 的 model。ref2v-grok-cheap)。selection.scenarios 与用户描述做语义匹配,命中场景的优先。priceTier ∈ {low, standard} 中推荐分最高的。priceTier = standard 推荐分最高者优先;同分按 credits 升序。selection.tags 中 default 标签;再看 recommendationScore;再看 credits 升序。默认静默推进(不打断对话):
priceTier ∈ {low, standard, free}--dry-run、--wait 单产物静默推进时 AI 仍要在最终汇报里写明实际使用的 model 和一句话原因(如 model: nano2 — 通用稳定 + 支持参考图)。
必须复述确认(拦截一步,等用户回应):
priceTier ∈ {high, premium}{sora2, *-1080p, nano-pro, nano-pro-stable, seedream5}复述格式(保持简短):
我打算用 <model-key>(<credits> credits,<一句话原因>),需要换吗?
可选:<其他 1-2 个候选 key + 价格差异>
用户回复任一以下视为确认:「是 / 行 / 可以 / 继续 / 用这个 / 按你建议」。回复具体 key 视为指定。回复「换 / 不要 / 太贵」要重新决策并复述。
model 和选中原因写进 manifest.json 的 decision / notes 字段(若 runtime 暂未支持该字段,可暂留在 step sidecar)。model + 一句话原因。--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 等完一张再提交下一张。推荐流程:
SHOTFUN_CONCURRENCY;未配置时建议 3,高成本模型或网络不稳时降到 2。taskNo、输入 prompt、参考图 URL、模型、项目名和本地 sidecar 路径。taskNo 到终态,成功后再下载或整理远程 URL。RUNNING 时,不要重新提交扣费;继续用 taskNo 查询或恢复。适用场景:多页 PPT 图片重绘、小红书多图卡片、批量封面、任意内容多图展示图。单张图或需要人工逐张确认风格时,仍可串行生成。
对小红书、多图封面、系列海报等批量图片任务,默认不要只返回分散在各个 run 目录里的原始图片。
card-01.png、card-02.png 这类命名。index.json,记录每张图的 taskNo、原始 run 路径、批次路径、标题和顺序。暂未作为工作流实现:
short-drama:把故事、角色、分镜、图片、视频和处理串成一个可恢复流程。character-pack:多视角一致角色素材。video-scene:包含多个协同镜头的单场景。--fetch-remote 下载远程产物。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。taskNo、状态和人类可读错误;不要隐藏失败。taskNo,将其报告为可恢复状态。manifest.json 和步骤 sidecar 文件,然后建议使用 --resume <run-id>。