生成小红书和 B 站 AI 工具实操视频封面,支持脚本模式与 Agent 自主模式、真实视频证据、三画幅输出和可选创作者头像。仅在用户明确提到 oil-cover、$oil-cover、使用 oil-cover 或指定本 Skill 时触发;普通封面、首图、视频封面请求不要自动触发。
npx skills add https://github.com/oil-oil/oil-cover --skill oil-cover
为小红书 AI 工具实操内容生成稳定、清楚、干净、精致的视频封面。执行模式以用户配置为准;两种模式遵循同一套标题、产物和验收规则。
先检查当前视频已有产物:源视频、审校字幕、标题、画幅和头像配置未变且最终图已经验收时,直接复用。缺哪一版只生成哪一版;只改头像时复用无人物底图。用户选定已有版本后停止其他候选的生成。两种模式均遵守这条恢复规则,不因分析文件格式不同重做已有封面。
需要外部服务凭据时先读API Key 配置与业务读取:复用已有安全入口;本机缺少 Key 时使用随附固定页面,保存后通过业务包装入口读取。内置能力与纯本地流程不要求配置 Key。
generate_oil_cover.py,由脚本调用外部视觉服务完成选帧分析,并生成无人物底图;用户配置启用创作者头像时,再用确定性代码把透明头像合成到右下角。需要 Python、ffmpeg、Pillow 和所选服务的 API Key。下面「默认入口」到「输出说明」描述的都是这一模式。references/agent-native-flow.md。不要假设用户名、Skill 安装目录、视频库、脚本、素材镜像或密钥位置。
SKILL_DIR:当前这份 SKILL.md 所在目录。${OIL_COVER_CONFIG:-$HOME/.oil-cover/config.json}。它属于本机用户,不进入 Skill 仓库。$SKILL_DIR/scripts/generate_oil_cover.py。若安装包没有脚本,读取配置里的 script_path;两者都不存在时说明安装不完整,不要猜个人目录。$SKILL_DIR/assets/。额外素材镜像仅从配置 product_asset_mirror 读取。ZENMUX_API_KEY;备用文件仅从 api_key_file 配置或 --api-key-file 读取。不要把 key 或个人绝对路径写进 Skill 仓库。支持的用户配置:
{
"mode": "agent-native",
"creator_name": "optional creator name",
"script_path": "/optional/path/to/generate_oil_cover.py",
"video_library_root": "/optional/path/to/video-library",
"product_asset_mirror": "/optional/path/to/shared-product-assets",
"api_key_file": "/optional/path/to/zenmux-key",
"creator_portrait": {
"enabled": false,
"path": "/optional/path/to/portrait.png"
}
}
路径允许使用 ~,读取后必须展开。没有配置 video_library_root 时,所有持久产物默认跟随输入视频。配置后,同一视频的持久资源统一放进 <video_library_root>/<视频标题>/;从导出暂存目录开始处理时,先无覆盖地归位源视频,再生成字幕、封面和 sidecar。
每次触发 oil-cover 时按这个顺序决定:
mode 字段。script 或 agent-native → 直接按该模式执行,不再询问。 mkdir -p "$(dirname "${OIL_COVER_CONFIG:-$HOME/.oil-cover/config.json}")"
# 合并写入 {"mode":"agent-native"},或设为 "script"
前提与回退:模式二要求执行 Agent 具备多模态视觉 + 支持参考图的生图工具,通过当前宿主实际提供的工具判断,不根据宿主品牌推断。若 mode=agent-native 但当前环境跑不了生图这一步,说明情况并给两条路——使用具备所需能力的宿主,或在已授权的服务范围内临时使用脚本模式——不要静默失败,也不要擅自改掉用户的默认偏好。
走模式二时,先完整读 references/agent-native-flow.md 和 references/cover-rules.md,按 SOP 执行,忽略下面所有针对脚本的参数与说明。
用户反馈字号、留白或局部排版时,默认只调整对应问题,保留原有字体气质、配色体系、透视、装饰和主体表达。先保留可回退的图片与提示词,再做最小修改;未明确要求更换风格时,不全面重写视觉规范。
封面主标题由执行本 skill 的 Agent 在跑脚本之前自己提炼,不交给脚本里的分析模型做,避免它理解错内容:
.srt/.ass/.txt,或视频旁的同名字幕文件)先通读一遍再提炼。.ass/.srt 先抽成纯文本(去掉时间轴和样式标记)。优先借用视频里的原话强词(例如口播里的「目前最强」「指哪打哪」这类明确判断),忠于内容,不夸大、不编造评价。--title 传给脚本;抽好的纯文本字幕通过 --subtitle 传入,供分析模型选帧、写副标题和点缀使用。分析模型会把 --title 当作已定稿的封面主标题,只做断行和排版,不再改写。将实际存在的生成脚本绝对路径记为 OIL_COVER_SCRIPT。默认运行以下命令;有字幕时额外添加 --subtitle "<实际纯文本字幕路径>",没有字幕时省略该参数:
node "$SKILL_DIR/scripts/credential-ui/src/profile.ts" run default -- python3 "$OIL_COVER_SCRIPT" \
--video "<视频路径>" \
--title "<提炼后的封面主标题>" \
--topic "<补充背景>"
如果用户提供的是截图或已选关键帧:
node "$SKILL_DIR/scripts/credential-ui/src/profile.ts" run default -- python3 "$OIL_COVER_SCRIPT" \
--image "<截图或关键帧路径>" \
--logo "<可选 Logo 路径>" \
--title "<标题或主题>" \
--topic "<补充背景>"
默认不传 --aspect,脚本会并行生成小红书 3:4 竖屏版、通用/B 站首页主封面 4:3 横屏版和 B 站个人空间伴随版 16:9 横屏版。发布 B 站时默认上传 _4x3.png,平台再同步生成个人空间 16:9 版本。只重跑单个画幅时使用 --aspect 3x4、--aspect 4x3 或 --aspect 16x9。
--subtitle <脚本/字幕/转录文件>:把上下文喂给 Gemini,帮助判断主题、标题措辞和证据选择。有完整文稿时优先加上。--logo <Logo 路径>:可多次传入多个产品 Logo 作为参考资产。--title 和 --topic 当作主产品依据。只要其中任一存在,就不再扫描字幕寻找 Logo,避免把口播里的次要产品错当成主产品。references/product-assets.md 暂时没有对应资产,先联网寻找官方或可信来源的透明 PNG,归档到 $SKILL_DIR/assets/product-logos/;配置了 product_asset_mirror 时再同步到镜像目录。通过 --logo 传给脚本,高频复用的产品同步补充到 product-assets.md 和脚本的自动匹配表。--frame-count <N>:本地预筛产出多少个候选帧供分析模型挑选,默认 8。候选越多模型选择越好,但分析请求越大。--scan-fps <N>:本地预筛扫描的采样帧率,默认 0=自动(≤5 分钟视频用 2fps,更长用 1fps)。想抓更细的瞬间可调高。--candidate-seconds 1,8,24.5:手动指定取帧时间点,跳过本地预筛。已经知道哪几秒是关键画面时用。--aspect all|both|3x4|4x3|16x9:默认 all 并行生成三版;both 为兼容旧调用,只生成 3:4 和 4:3;单独重跑时只生成指定画幅。--bilibili-size <尺寸>:B 站个人空间 16:9 伴随版的 API 尺寸,默认 1280x720;B 站默认上传源仍是 4:3 主封面。--no-allow-subtitle。gpt-image-2.5-flare 的参考图上传。是否启用及素材路径来自用户配置;公开 Skill 默认关闭。默认布局参数为:3:4 宽约 55%、顶部约 58%、向右越界约 6%;4:3 宽约 38%、顶部约 40%、向右越界约 3%;16:9 宽约 32%、顶部约 40%、右侧内收约 2%。--no-default-creator-portrait。配置启用头像时默认保留;未配置时保持无人物。排查与验证:
--dry-run:不调任何 API,只准备本地文件和 prompt,用于核对路径、规则文件和素材是否就位。--skip-generate:只跑 Gemini 分析和写 prompt,不调用图片 API。用来看 Gemini 选了哪一帧、标题怎么断行、prompt 写成什么样。--generation-only:用 /images/generations 而非 /images/edits,屏幕帧和 Logo 参考图不上传给图片 API;头像启用时始终只在本地合成。$SKILL_DIR/scripts/generate_oil_cover.py,否则使用用户配置 script_pathgoogle/gemini-3.8-flashopenai/gpt-image-2.5-flarereferences/cover-rules.md<视频名>_3x4.png、<视频名>_4x3.png、<视频名>_16x9.png,直接落在影片旁边方便查找;分析、prompt、原始响应等中间产物收进 <视频名>.oil-cover/ 子目录。传 --output-root 可改到别处。脚本负责用 ffmpeg 本地扫描+评分预筛出若干高清候选帧(默认策略,无需调模型),把候选交给视觉模型分析、由模型按语义选出最佳封面帧并生成封面方案和提示词、保存 sidecar、并行调用所选图片服务、生成无人物底图。用户配置启用头像时,再用 Pillow 把透明头像按画幅参数合成到右下角;头像不会进入 视觉或图片 API 的参考图列表。底图保存在 <视频名>.oil-cover/<画幅>.generated-base.png,合成记录保存在 portrait_composite.json,最终封面写到影片目录。本地预筛的打分明细写在 <视频名>.oil-cover/frame_selection_local.json。
references/agent-native-flow.md(流程 SOP)和 references/cover-rules.md(视觉规范)。references/cover-rules.md 传给 Gemini。references/cover-rules.md。references/product-assets.md。references/product-assets.md 并按里面的补充规则执行。references/impact-tech-cover-style.md。3:4、4:3 和 16:9 三版;单独重跑时只生成指定画幅。.prompt.md sidecar;生成后保留 cover_plan.md 和最终图片。脚本模式保留脚本输出的 manifest.final.json、analysis.json 和原始响应;自主模式按 SOP 保留 analysis.md 和工具实际返回的记录,不伪造内部字段。references/cover-rules.md 区分事实或交付错误与审美偏好;只重做失败画幅。替换最终图片前,将仍可用的旧图片和对应 sidecar 成套保存在视频自己的工作目录中,候选通过检查后再切换,避免用户选择旧版时无法恢复。analysis.json、cover_plan.md、.prompt.md、生成记录以及本 skill 自身的参考文档时,只描述当前这一版的最终状态,不要塞编辑历史元数据(「更新于 X」「第 N 版」「原 X 现改为 Y」「本次修正了 Z」这类),不要把文档写成或改成 changelog;返工重跑时直接覆盖成新版本,而不是在文档里追加一段修改历史。完成后说明:
.prompt.md sidecar 路径analysis.json 和 cover_plan.md 路径portrait_composite.json 路径;说明头像未作为生图参考图上传--aspect 3x4、--aspect 4x3 或 --aspect 16x9 重跑某一版Take oil-oil/oil-cover from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.