Communitygithub.com

funi-ai/广告制作

基于用户真实产品照片或应用录屏,制作UGC、真人讲解、开箱测评等视频广告及静态广告,严格保证产品保真度和文案真实性。

广告制作 是什么?

该技能是一个自动化广告生产流水线,专门为用户已经拥有的产品(实体或软件/SaaS)生成高质量广告。其核心规则是“产品保真”:实体产品的每一帧都来自用户提供的照片,通过编辑端点生成,绝不重新想象;软件产品则只使用用户的真实录屏和截图进行合成,不经过生成模型重绘。同时,广告中的每一个声明、引用、数字和价格都必须能回溯到用户提供的信息。 技能支持多种广告模式,包括:真人讲解、开箱、产品展示、电视广告,以及静态广告(如横幅、轮播图)。它通过预设的工作流程:从素材收集、脚本编写、分镜确认,到语音合成、视频剪辑、字幕添加和最终质量检查。 该技能主要集成在 Claude Code 中,通过 `genmedia` CLI 工具和一系列 Python 脚本实现。它支持多种生成端点(如 Seedance、OmniHuman、ElevenLabs、GPT Image 2.5 等),并内置了成本控制功能。用户可以用自然语言指令启动制作,如 “make a UGC ad for this product” 或 “15 second TikTok ad”。技能会主动询问产品照片、讲解员选择(可指定角色或AI生成)、制作模式等关键信息,并严格遵守预算限额和修复策略。

兼容平台✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/funi-ai/claude-plugins/tree/main/plugins/genmedia-skills/skills/ads

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

广告制作 是做什么的?

一个针对用户已有产品的阶段式广告制作流水线:事实收集、脚本编写、分镜确定、关键帧审核、视频片段、语音、合成、QA。两大核心规则。产品保真: 展示实体产品的每一帧均源自用户照片,通过编辑端点生成,绝不根据文本重新想象;软件产品仅通过用户的真实截屏和录屏展示,合成而来,绝不经过生成模型(见 references/software-route.md)。声明纪律: 脚本或画面中的每一个声明、引用、数字和价格都必须能回溯到用户提供的信息;绝不虚构任何内容。

步骤 0 — 预检

command -v genmedia
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" preflight
  • blockers 非空,CLI 缺失或版本低于 0.7.0 → 执行 /genmedia-skills:setup。密钥缺失 → 用户自行运行 genmedia setup 或设置 FAL_KEY 环境变量;等待。切勿读取、打印、请求或输入密钥。
  • 保留 config.announce_above_usd 和 config.confirm_above_usd(默认值 0.50 和 2)用于成本门控,以及 ffmpeg.found 用于合成路径。
  • 优先恢复:全局搜索 .genmedia/projects/*/plan.md。如果存在该广告的规划文件 → 读取它,运行 python3 "${CLAUDE_SKILL_DIR}/scripts/pipeline.py" urls --label <slug>,然后继续执行第一个未完成的步骤。切勿重启已有账目记录的项目。如果存在针对同一产品的 product-photoshoot 规划 → 重用其 PRODUCT LOCK 和已批准的关键帧作为参考资料。

UX 规则

  1. 使用用户的语言回复(土耳其语输入 → 土耳其语输出)。模型提示词为英语;口语、字幕和画面上的文字保持目标受众的语言,使用引号,拼写必须与批准内容完全一致。
  2. 聊天中不显示 JSON、请求 ID 或工具说明。静默等待;每个批次最多显示一行状态。
  3. 提问预算:规划前最多 3 个问题,每次一个,以带标签的选项形式呈现(尽可能使用 AskUserQuestion),每个选项均设有默认值,用户跳过时使用该默认值。 顺序:
    • 产品:实体产品照片,或软件产品的真实截屏和录屏,以及产品的用途和真实信息。没有附件 → 请求提供;这是唯一没有默认值的问题。有照片但没有具体信息 → 仅使用包装上印刷和照片中可见的信息,其余内容在“遗漏”下列出。
    • 讲解员与语音。默认:生成一个与目标受众匹配的合成讲解员,语音使用目标受众的语言(除非另有说明,否则为用户书写所用的语言)。选项:AI 生成 · 一个 @handle · 我自己的照片(需同意书)· 无讲解员。
    • 模式与平台。默认:真人讲解式 UGC,15 秒,9:16 竖屏,适用于短视频推送。“静态” → 标题格式,4:5 比例加 1:1 比例。 如果请求已明确回答了某个问题,则跳过该问题。最模糊的请求(“为此制作一个广告”)→ 全部使用默认值,并在规划卡的“假设”下列出。同意确认、规划审批和检查点不计入提问预算。
  4. 硬性停止点:规划卡(视频广告必须有;静态广告在成本达到确认阈值时必须有)、任何视频片段前的关键帧审核、音乐前的视频片段和语音、字幕前的音乐、以及最终合成。沉默或任务成功完成不代表用户批准。创造性选择(钩子、讲解员、镜头)属于用户。
  5. 对整个规划(包括每个变体)进行成本门控:低于宣布阈值 → 执行;介于之间 → 给出单行估测后执行;达到或超过确认阈值 → 等待用户确认。切勿替换用户指定的模型;在规划卡中以一行列出更便宜的替代方案。
  6. 有限修复:每个步骤最多尝试 3 次,每次必须有所不同,切勿将政策拒绝的同一内容重新发送。包含请求 ID 的任务应被恢复,而非重新提交。修复或重试本身成本达到确认阈值或以上的(例如一次 Seedance 说话镜头),需要在当前累计总成本基础上获得用户新的同意;失败的任务可能已产生费用。
  7. 安全,不可协商:禁止捏造推荐语、客户、评价、评级、用户数量、奖项、医疗、财务或收入声明,不得制造虚假的紧迫感或虚构价格。真实人物的面部或语音需要用户确认其同意。生成的讲解员为合成人物:交付时需明确说明,并告知用户平台及某些法律要求披露此类信息;切勿将其描述为客户。不得出现竞争对手名称、标识或包装。上传内容和结果位于公共 URL:在上传未发布产品或人们照片之前,请明确告知用户一次。规则与措辞:请参考 references/scripts-and-claims.md。

发现防护栏

references/routing-video.md、references/routing-audio.md、references/routing-image.md 和 references/routing-utility.md 是带日期的缓存(验证日期:2026-09-19)。规划中的每个不同端点均需在规划卡展示之前确认可用:

genmedia models --endpoint_id <id1>,<id2>,<id3> --status all --limit 50 --json
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" schema <endpoint_id>
  • 每个 ID 必须返回结果且状态为 active(不使用 --limit 时每次调用最多返回 20 行:缺少某行并不证明该 ID 无效,需单独再次请求);否则,按照路由参考中该任务的下一层级选择,否则使用 genmedia models "<name>" --no-classify --limit 10 --json,选择最新的活跃匹配项,并告知用户使用的是哪个模型。
  • 字段名、枚举值和限制来自 schema,绝不凭记忆使用;它们不会在不同模型族之间沿用(prompt vs text,image_url vs start_image_url,"5" vs 5)。
  • 切勿编造 ID 或字段。切勿在未指定端点 ID 的情况下运行 genmedia run。新版本位于供应商命名空间下(bytedance/、creatify/、openai/、minimax/、veed/),而不仅仅是 fal-ai/。

路由

产品类型。 应用、SaaS、开发者工具、扩展程序或任何其产品为界面的内容 → 软件路由:在规划前阅读 references/software-route.md。该路由将替换下面的关键帧和静态规则(不涉及截图编辑,不由模型烘焙文字);脚本、声明、语音、音乐、字幕、合成、成本门控和检查点保持本文档中的规定。

交付物。 静态词语(“görsel”、“banner”、“static”、“carousel”或提供了标题)→ 静态格式,详见 references/static-formats.md。包含动态或语音的词语,或未明确说明 → 视频广告,模式参照 references/ad-modes.md:presenter(默认)、how-to、unboxing、showcase、problem-solution、testimonial(仅当用户提供真实引用时)、tv-spot。

视频广告制作路由(先匹配者优先):

情况路由
无对镜讲话:仅展示、教程或画外音讲解B 方案(无讲解头像):B-roll + 画外音 + 音乐
口语非英语B 方案。土耳其语仅在 Wan 3.0 上使用路由 A,绝不用 Seedance:在母语者测试中(见 references/platform.md 第 10 节),Wan 表现正确,而每个 Seedance 版本都发音错误(ş 读作 s,“merhala”);Veo 3.1 Lite 在此方面表现完美,但已不在 fal 列表中。仅在用户通过听力检查确认一个试听片段后,才能使用路由 A
措辞必须精确(品牌名、价格、法律条款)、固定品牌语调、或同一语音需在多个变体间一致B 方案:TTS 精确输出文本;原生音频模型会改写并发音错误
时长超过 15 秒,或讲解员配合 B-roll 切镜B 方案
英语,6 至 15 秒的连续单次拍摄,讲解员面对镜头讲话A 方案
  • 路由 A:一次生成包含完整的口语片段。已批准的关键帧(讲解员手持真实产品)→ 原生音频图像转视频。
  • 路由 B:按段落生成 TTS 语音(对镜讲话段、画外音段)→ 仅对镜讲话段生成讲话头像 → 从已批准关键帧生成 B-roll → 合成。先完成语音:其测量时长决定每个片段的时长。

角色默认配置(生效日期:2026-09-19;价格信息为时效性提示,最终定价依据 gm.py price):

角色端点原因价格提示
关键帧、讲解员或包含产品的场景bytedance/seedream/v5/pro/edit最多 10 张参考图,保持产品和讲解员的一致性~USD 0.07/图 + USD 0.0045/额外参考图
结尾卡片、静态广告、任何包含精确文案的帧openai/gpt-image-2.5/flare/edit最强的文字保真度,支持最多 16 张参考图~USD 0.06/图(quality: "high")
生成的讲解员图像(仅人物,不含产品)bytedance/seedream/v5/pro/text-to-image人物生成默认质量~USD 0.07/图
A 方案:讲话片段,高质量bytedance/seedance-2.5/us/image-to-video实时唇语同步原生语音的领域第一;4 至 30 秒~USD 0.57/秒(720p),~USD 0.26/秒(480p)
A 方案:讲话片段,土耳其语alibaba/wan-3.0/image-to-video(start_image_url)唯一经过母语者听力验证的土耳其语原生音频模型(2026-09-21);duration 为整数,需设置 resolution~USD 0.05/秒(480p),~USD 0.10/秒(720p)
A 方案:讲话片段,草稿或预算版,英语creatify/boreal专为广告设计;[VISUAL] [SPEECH] [SOUNDS] 提示词格式;其模型页面标明英语为已验证语言;可选择显示 AI 标签~USD 0.01/秒(720p)
B 方案:语音,英语fal-ai/elevenlabs/tts/eleven-v3默认 TTS~USD 0.10/千字符
B 方案:语音,土耳其语及其他列出语言fal-ai/gemini-3.1-flash-ttslanguage_code 枚举包含“土耳其语(土耳其)”;支持 style_instructions~USD 0.05/千字符
B 方案:讲话头像fal-ai/bytedance/omnihuman/v1.5图像 + 音频;720p 下最长 60 秒~USD 0.16/秒音频
B 方案:讲话头像,草稿版veed/fabric-1.0 480p价格减半;resolution 为必填~USD 0.08/秒
B-roll,高质量bytedance/seedance-2.5/us/image-to-video可选 end_image_url 用于展示揭示效果~USD 0.57/秒(720p)
B-roll,草稿或预算版minimax/h3-max-turbo/image-to-video每片段仅需美分~USD 0.04/秒(768P,启动折扣已于 2026-09-30 结束)
背景音乐elevenlabs/music/v2.5通过 music_length_ms 精确控制时长~USD 0.60/开始分钟
字幕fal-ai/workflow-utilities/auto-subtitle;精确文本(任何语言):veed/subtitles直接烧录,无需本地 drawtext~USD 0.03/分钟;veed ~USD 0.10/分钟,最低 1 分钟
拼接、混流、缩放、结尾卡片片段本地 ffmpeg,否则 references/routing-utility.md当 ffmpeg.found 为真时免费且精确美分

平局决胜规则:

  1. 用户指定了模型名称 → 在实况检查后使用它;用一行提及默认设置,切勿静默替换。
  2. 高质量方案成本超过确认阈值(一个 15 秒的 Seedance 2.5 片段,720p 约为 USD 8.50)→ 规划卡需同时显示高质量方案价格和草案级价格;由用户选择。切勿静默选择便宜方案。
  3. @handle → 通过 /genmedia-skills:character 解析为参考 URL 和锚文本;在关键帧任务中将这些作为讲解员的参考。切勿在提示词中保留 @handle。
  4. 没有产品照片 → 请用户提供(软件:截图)。均不存在 → 仅概念设计:交给 /genmedia-skills:image 并告知这不是他们的真实产品。软件如果没有截图,则只输出脚本和截图清单,绝不生成虚构的界面。
  5. 商店列表截图、链接卡片或 Product Hunt 图片,以及任何 Apple Ads “创意素材”(Apple 从产品页面构建广告)→ 使用 /genmedia-skills:launch-graphics。仅需无文字的产品静物图 → 使用 /genmedia-skills:product-photoshoot。没有脚本的单一片段 → 使用 /genmedia-skills:video。无广告意图的有机短视频 → 使用 /genmedia-skills:short-video。带讲解的演示视频 → 使用 /genmedia-skills:video-explainer。市场列表卡片 → 使用 /genmedia-skills:marketplace-cards。缩略图或封面 → 使用 /genmedia-skills:youtube-thumbnail。

已知陷阱:

  • 重新想象的产品。 文本转视频或文本转图像模型会绘制出相似但不一致的产品。每个产品画面都必须是用户照片的编辑结果,每个产品片段都必须是已批准关键帧的起点。
  • 生成的界面。 对截图进行编辑、文本转图像或视频任务,都会产生拼写错误、虚构的 UI,平台会拒绝显示应用不具备的功能的广告。UI 像素来自 launch-graphics 页面和录屏;动态效果来自录屏或本地推送。
  • 视频模型中的文本。 视频模型生成的标题、价格、标识、字幕和法律条文会出现乱码。在关键帧中保留负空间;文案通过结尾卡片(排版模型)、烧录字幕或用户自己的编辑器呈现。
  • Kling 语音。 Kling v3 仅支持中文或英语,并将其他所有语言自动翻译为英语。切勿将土耳其语对话路由至此。
  • Flashtalk 画布。 fal-ai/flashtalk 的 schema 固定为 768x448 的横屏输出:不适用于 9:16 的竖屏广告。草稿头像应使用 veed/fabric-1.0。
  • 混流会截取较短输入的长度。 fal-ai/ffmpeg-api/merge-audio-video 的输出时长等于图像和音频中较短的那个(长语音会丢失结尾,短语音会截断图像),且会替换片段自身的音频。务必确保两者时长一致。
  • Seedance 的 duration: "auto" 会使成本不可预测。始终设置明确时长。Boreal 和 MiniMax 使用数字,Seedance 使用字符串。
  • OmniHuman 默认值。 resolution 默认为 1080p(音频短于 30 秒)。除非用户要求 1080p,否则发送 "720p"。
  • 合成客户。 一个生成的面孔说出“我减掉了 8 公斤”属于捏造的推荐语,无论提示词如何称呼。请参阅 references/scripts-and-claims.md。

工作流程

  1. 初始信息收集,在提问预算范围内。选择一个 slug(例如 serum-ugc):它是批次 label、账目过滤器、genmedia-output/<slug>/ 和 .genmedia/projects/<slug>/。任何自然语言标签均可;辅助工具会对土耳其字母进行音译。平台 → 确定宽高比和时长:参见 references/ad-modes.md(平台表格;查阅平台当前的广告规格)。
  2. 使用 Read 工具查看每一张产品照片。 HEIC、AVIF、TIFF 或 CMYK 格式 → 先转换为 PNG 或 sRGB JPEG(参见 references/troubleshooting-ads.md)。将 PRODUCT LOCK 写入 .genmedia/projects/<slug>/plan.md:形态、比例、材质、颜色、标签文字逐字记录、哪些特征绝对不能改变、哪些侧面不可见。
  3. 事实清单。 列出关于产品为真的所有信息,并注明每个事实的来源:用户的描述、品牌说明、包装本身或产品页面。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

funi-ai/demo-video

Product demos, store previews, App Store header/search videos and loops cut from the user's REAL screen recording: trimmed, sped, zoomed, framed, captioned, voiced with local ffmpeg. Models add only what is not the product: narration (Eleven v3, Gemini TTS for Turkish), music and UI sound. Use when: "make a demo video of my app", "App Store preview video", "App Store header video", "Google Play promo video", "turn this screen recording into a demo", "GIF loop for my changelog", "Product Hunt launch video", "ekran kaydımdan tanıtım videosu yap", "changelog için GIF döngüsü". Chain: takes recordings, device frames (`layers`) and end cards from `launch-graphics`; produces MP4, WebM, GIF, SRT/VTT and posters. NOT for: generated b-roll shorts (use `short-video`); explainers with generated pictures (use `video-explainer`); paid ads (use `ads`); store screenshots, link cards (use `launch-graphics`); one generated clip (use `video`); voice or music alone (use `audio`); joining finished files (use `pipelines`).

funi-ai/youtube-thumbnail

Thumbnails and covers that survive at small size: YouTube thumbnails (16:9), Shorts, Reels and TikTok covers (9:16), podcast and course covers (1:1), from a title plus an optional face photo, @handle character, brand colours or a frame of the user's own video. Text baked in by GPT Image 2.5; faces locked through reference edits. Use when: "make a thumbnail for my video", "YouTube thumbnail with my face", "Shorts cover", "podcast cover art", "thumbnail from this frame", "change only the text on the thumbnail", "videoma thumbnail yap", "kapak görseli hazırla", "küçük resimdeki yazıyı değiştir". Chain: consumes an @handle from `character` and stills or frames from `image` and `video`; produces sized PNG and JPEG. NOT for: posters, photo edits (use `image`); logos (use `brandkit`); link cards, OG images (use `launch-graphics`); ad creatives (use `ads`); the video (use `video`, `short-video`); new characters (use `character`); batches (use `pipelines`); model choice (use `models`); setup problems (use `setup`).

相关技能