Communitygithub.com

YouTube 縮圖 & 封面產生器

根據標題、人像或影片影格,一鍵產出 YouTube 縮圖 (16:9)、Shorts/Reels/TikTok 封面 (9:16) 與 Podcast/課程封面 (1:1),內建文字由 GPT Image 2.5 原生渲染,可透過參考編輯鎖定人臉。

YouTube 縮圖 & 封面產生器 是什麼?

此工具專為需要快速、高品質且尺寸精確的影片縮圖或社群封面而設計。它會根據用戶提供的標題、可選的人像照片、角色代號 ( @handle )、品牌顏色或自行上傳的影片影格,自動生成三種不同設計概念的縮圖供用戶挑選。核心特色在於「小尺寸生存」:所有縮圖皆以觀眾在資訊流中實際看到的大小(約 160px 寬)進行品質判斷,確保文字與視覺元素在小縮圖中依然清晰可辨。 此技能支援 Claude Code 和 Genmedia 生態系,並串接多個 AI 圖像模型(如 GPT Image 2.5、Seedream)。工作流程包含:一次性上傳所有素材,用戶選定設計概念後,進行高品質最終版與後續文字/背景修訂。它嚴格遵守成本控制、人像使用同意書與真實性規範,不會憑空捏造影片中不存在的元素。

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

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

YouTube 縮圖 & 封面產生器 是做什麼的?

縮圖與封面以人們在資訊流中實際看到的大小(約 160 像素寬)進行評判。輸入一個標題,產出三個不同概念,由用戶挑選,最終產出一個版本,進行有限的修正,並以實際傳送尺寸提供檔案。所有工藝(概念框架、提示詞藍圖、文字規則、小尺寸把關)在此處;具體操作細節則位於 references/cli-contract.md 和 references/platform.md。

步驟 0 — 起飛前檢查

每次連線階段執行一次:

command -v genmedia
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" preflight
python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" tools
  • blockers 不為空、CLI 缺失或版本低於 0.7.0 → /genmedia-skills:setup。金鑰缺失 → 請用戶自行執行 genmedia setup 或設定環境變數 FAL_KEY;等待用戶操作。切勿讀取、列印、要求或輸入金鑰。
  • 保留 config.announce_above_usd 和 config.confirm_above_usd(預設值 0.50 和 2.00):它們是成本門檻。
  • thumbcheck.py tools 會回報 preview、sheet、fit、frame 哪些可以在本機執行(需要 ffmpeg 或 macOS sips),以及 lockup 是否可用(需要 Chromium 核心瀏覽器)。若兩者皆無 → 在「工作流程」步驟 6 中使用降級路徑。切勿依賴 drawtext、Pillow 或 ImageMagick:文字由模型渲染。
  • 先恢復進度:若 .genmedia/projects/<專案名稱>/thumbnail.md 與本次請求相符 → 讀取該檔案,從其第一個未完成的步驟繼續進行。切勿在有記帳記錄的專案上重新開始。

UX 規則

  1. 以用戶的語言回覆(土耳其文輸入 → 土耳其文輸出)。模型提示詞以英文撰寫;圖片上的文字保留其發佈時所使用的語言和拼寫。端點 ID、欄位名稱和路徑保持不變。
  2. 聊天中不要出現 JSON、請求 ID、提示詞或工具敘述。靜默等待;每批次最多顯示一行狀態。
  3. 提問預算:2 個問題,一次一個,以有標籤的選項呈現,僅在缺少答案時提問:
    • Q1 關鍵字詞:沒有標題且沒有主題 → 詢問標題。已知標題 → 不要問;自行撰寫 2 到 4 個關鍵字詞(三個概念使用不同的字詞)。
    • Q2 是否包含人像:只有在沒有任何線索時才問。有照片、@handle 或「我 / 我的臉 / ben」→ 包含人像。「無臉」、產品、螢幕錄影、風景 → 不包含人像。 用戶只要求一個縮圖或指定了概念 → 只產生一個草稿而非三個;挑選變成是或否。所有其他設定使用預設值,並在傳送行中說明:格式 16:9;文字語言與標題語言相同;調色板使用提供的品牌顏色,否則每個概念自行選擇;寫實海報風格;3 個概念;最終主圖 2560x1440,傳送為 1920x1080 和 1280x720。不計入提問預算:同意確認、挑選確認、成本確認。
  4. 挑選是一個硬性停止點。 顯示比對表並等待。沉默、成功的作業或你自己的偏好絕非挑選。可以推薦一個,但不能代替用戶選擇。
  5. 真實性。 縮圖可以戲劇化,但絕不能誤導。顯示或撰寫的所有內容都必須在影片中或誠實地源自影片:不得有虛構的數字、結果、反應、產品或來賓;不得有真實平台的假 UI;不得有用戶不擁有的標誌或角色。無法判斷影片內容 → 在承諾之前先詢問(這會取代 Q1 或 Q2,不會增加問題)。
  6. 人像。 真實人物的照片(包括用戶本人)→ 需要一次確認用戶已獲得該人物的同意,並說明上傳的內容會置於公開網址。不得使用用戶並非本人的名人或公眾人物;拒絕「長得像 <名人>」,應提供虛構臉孔或無臉概念。虛構臉孔是替代品:切勿將其呈現為真實姓名的人物、客戶、專家或來賓,並在傳送時說明該臉孔為 AI 生成。
  7. 成本:在第一次付費呼叫之前(工作流程步驟 4)估算整個請求,並使用起飛前檢查中的門檻進行成本把關:低於 announce_above_usd → 直接執行;達到 confirm_above_usd 以下 → 一行顯示估算,然後執行;達到或超過該值 → 顯示估算並等待用戶明確同意(references/platform.md 第 8 節)。批准僅涵蓋當下顯示的計畫;更大的計畫需要新的批准。切勿憑記憶報價;切勿為了省錢而替換用戶指定的模型。
  8. 限制:最多 3 輪草稿和 3 輪修訂;每輪嘗試都必須有所改變;被內容政策拒絕的請求不得原封不動地重新提交;包含請求 ID 的作業應恢復,而不是重新提交。

探索防護機制

以下路由表為快取資料(references/routing-image.md,驗證日期 2026-09-19)。在每次連線階段中,第一次對某端點進行付費呼叫之前:

genmedia models --endpoint_id <端點ID> --json
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" schema <端點ID>
  • status 必須為 active。若狀態非 active 或回傳 404 → 使用 references/routing-image.md 中同一任務的下一層級端點;否則執行 genmedia models "<名稱>" --no-classify --limit 10 --json,選擇最新且活躍的匹配項,並說明使用的是哪個模型。
  • 欄位名稱、列舉值和限制來自 Schema,不得憑記憶。用戶指定了模型名稱 → 先搜尋再質疑;新版本的模型位於供應商名稱空間下(openai/、bytedance/、google/、alibaba/),而非 fal-ai/。
  • 切勿在未指定端點 ID 的情況下執行 genmedia run(智慧型路由會解析過時的預設值)。

路由

步驟端點原因
草稿,無參考素材openai/gpt-image-2.5/flare/text-to-image, quality: "medium"字體排印領導者;只有目標模型系列可以預覽文字,便宜的草稿模型不行
草稿,含人像照片、@handle 參照、產品照或影片影格openai/gpt-image-2.5/flare/edit, quality: "medium"參考素材放入 image_urls(最多 16 張);與最終版本同模型系列
最終版openai/gpt-image-2.5/sunburst/edit, quality: "high"精確度層級;被選中的草稿作為圖片 1,因此最終版是基於該構圖,而不是重新生成
修訂(文字、表情、背景、顏色)openai/gpt-image-2.5/sunburst/edit, quality: "high"當前最終版作為圖片 1;每輪只修改一個範圍
無文字基底圖,寫實風格(替代路徑)bytedance/seedream/v5/pro/text-to-image競技場 #1 寫實風格;文字稍後透過 GPT Image 2.5 編輯加入
人像身份識別基底圖(當臉孔漂移時)fal-ai/nano-banana-2/edit身份一致性圖像的路由預設值;文字稍後加入
放大真實影格或照片fal-ai/seedvr/upscale/image;有臉孔或文字時用:topaz/upscale/image/precision忠實還原;Topaz 有臉孔與文字精煉模型
用戶影片的影格thumbcheck.py frame(本地 ffmpeg)精確時間戳記;無 ffmpeg → 請用戶提供螢幕截圖
用戶自訂標誌放置於無文字基底圖上thumbcheck.py lockup(本地瀏覽器)標誌從用戶的檔案放置;模型會重新繪製它

平局判定:

  1. 圖片上有文字 → 使用 GPT Image 2.5,即使是寫實概念。完全沒有文字(用戶指定)→ 草稿可在 bytedance/seedream/v5/pro/text-to-image 或其 /edit 端點上執行;其餘流程不變。Seedream 拒絕 1280x720 尺寸(其最小面積為 1024x1024)且無 quality 欄位:發送 image_size 為 1920x1080(9:16 → 1080x1920,1:1 → 1536x1536)並根據其路由行按圖定價(2026-09-19 約為每張 USD 0.07:三個草稿約為 USD 0.20,重新計算總額)。
  2. 預設文字策略為一次烘烤。使用基底圖路徑(先產出無文字基底圖,再進行一次「僅添加此文字」的編輯)的情況:同一基底圖需要多種語言或 A/B 文字;變音符號失敗兩次;基底圖是真實影格或照片。詳情:references/text-and-readability.md。
  3. @handle → 讀取 .genmedia/characters/<代號>/character.json(錨點 description;refs[] 中找出 role: "face" 且 active: true 的參考),若該參考已有 cdn_url 則重複使用,否則上傳其檔案;使用錨點內容原樣。real_person: true → 套用 UX 規則 6;若有記錄 consent_confirmed_at 則視為已確認。未知的 handle → 告知用戶,並提供 /genmedia-skills:character;切勿自行替代。
  4. 用戶指定了模型 → 在實時檢查後使用該模型;一行文字中提供預設選項。
  5. 設計是基底圖加上用戶的自訂標誌(品牌頻道、應用程式的商店預覽影片)→ 基底圖路徑,然後使用 thumbcheck.py lockup 將標誌檔案放置於圖片寬度的某個比例位置(references/text-and-readability.md 第 2b 節)。基底圖已存在(如 launch-graphics 的基底圖、用戶的照片)→ 無需付費呼叫:直接 lockup、成本把關、步驟 10。無標誌檔案 → 詢問用戶;切勿讓模型繪製標誌。

陷阱:

  • 自動尺寸陷阱。 編輯端點將 image_size 預設為 auto,這會跟隨輸入圖片的尺寸:一張人像照片會產生一張直式縮圖。務必發送 {width,height}。
  • 預設品質陷阱。 quality 預設為 high 且模型系列按 token 計費。務必在每次呼叫中設定:medium 用於草稿,high 用於最終版;xhigh 或 max 僅在用戶同意價格後使用。
  • 16 的倍數陷阱。 1920x1080 不是 GPT Image 的合法尺寸。應渲染 1280x720、2560x1440 或 3840x2160,然後使用 thumbcheck.py fit 產生 1920x1080。
  • 附加圖片陷阱。 文字轉圖像端點沒有圖片欄位;它會忽略照片但仍然收費。任何參考素材 → 使用 /edit 端點。
  • 重新生成陷阱。 以高品質重新執行提示詞會得到不同的圖片(此模型系列沒有 seed 參數)。最終版是對選定草稿的編輯。
  • 大小寫陷阱。 切勿讓模型將土耳其文轉為大寫:請自行撰寫最終字串(thumbcheck.py text),用引號括起來,並逐字檢查。

工作流程

  1. 輸入。 標題或主題、格式(預設 16:9)、是否包含人像、品牌顏色、參考素材。HEIC、AVIF、TIFF 或非常大的照片需先處理:thumbcheck.py fit <檔案> --max-side 2048 --out .genmedia/tmp/<名稱>.jpg;讀取並上傳該副本。使用 Read 工具打開每個本地圖片後再規劃(圖片中的人物和內容決定概念)。來自用戶影片的影格:python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" frame <影片> --at <秒數 或 分:秒>,然後用 Read 工具檢查。僅在 UX 規則 3 允許的情況下使用提問預算。
  2. 狀態卡片。 選取一個簡短的 ASCII <專案名稱>(例如 eksi-maya):它將作為批次 label、帳本篩選器、輸出資料夾和專案資料夾名稱。自然語言標籤也能用;輔助腳本會將「Ekşi maya」折叠為 Eksi-maya,這個折叠後的形式即為資料夾名稱。使用 Write 工具撰寫 .genmedia/projects/<專案名稱>/thumbnail.md 並在每個步驟後更新它:
    # <標題> — thumbnail
    promise: <一行:影片真正傳遞的價值>
    format: 16:9 | text language: <代碼> | face: <none | photo path | @handle> (consent: <yes, date | n/a>) | palette: <顏色>
    [ ] concepts  [ ] drafts-1  [ ] gate  [ ] pick: -  [ ] final  [ ] revisions 0/3  [ ] delivered
    log:
    - <日期> drafts-1: 1 <框架> "<文字>", 2 <框架> "<文字>", 3 <框架> "<文字>"
    
  3. 三個不同的概念。 讀取 references/frameworks.md。私下腦力激盪至少五個,保留最強的三個,且必須使用不同的框架(不是同一個想法的三種配色),每個概念有自己的 2 到 4 個關鍵字詞。每個關鍵字詞都需通過文字檢查,並使用其 upper 字串原樣:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" text "şimdi izle" --lang tr
    
    關鍵字詞和圖片只能使用用戶陳述過的數字、結果、引言、產品和來賓(來自標題、簡報、他們的檔案);僅憑標題無法得知 → 使用問題、無約束關鍵字或無文字概念,或者提問(UX 規則 5)。拒絕任何違反真實性規則的概念。選擇包含人像 → 三個概念中至少兩個要顯示人像。標題已包含關鍵字 → 其中一個概念可以是無文字的。
  4. 驗證與定價。 為每個端點執行探索防護機制,然後:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" price openai/gpt-image-2.5/flare/edit,openai/gpt-image-2.5/sunburst/edit
    
    GPT Image 2.5 回覆 1 units,這不是價格。此技能的美元費用計算方式:作業數 x 每次作業的尺寸、品質對應價格(不在列表中的尺寸 → 使用下一個更大的尺寸)取自 references/routing-image.md 中 GPT Image 2.5 的表格(t2i-typography 註解;編輯端點的價格已包含一張輸入圖片的費用) + 每張額外參考圖片的 references/platform.md §7 中的參考費用。歷史定價(2026-09-19):草稿 1280x720 medium 約 USD 0.01;最終版或修訂 2560x1440 high 約 USD 0.055;3840x2160 high 約 USD 0.10。典型完整作業(3 草稿 + 最終版 + 3 修訂):無參考時約 USD 0.25,有一張人像參考時約 USD 0.45 → 低於預設公告閾值,直接執行並在傳送行中陳述估算。第二輪草稿、更多參考圖、xhigh、max、4K 或一次請求中包含多個影片(每個影片一個專案名稱和狀態卡片;估算為總和)→ 重新計算並先套用成本門檻。
  5. 一次性批次草稿。 上傳參考素材一次並保留 urls(注意參數順序);上傳的內容為公開網址,若為私人素材則說明一次:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" upload ./me.jpg
    
    從 references/prompt-blueprint.md 建構每個提示詞。使用 Write 工具將計畫寫入 .genmedia/projects/<專案名稱>/drafts-1.json:
    {"label": "<專案名稱>", "max_parallel": 3, "jobs": [
      {"id": "draft-a", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02,
       "input": {"prompt": "<概念A>", "image_urls": ["<人像網址>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}},
      {"id": "draft-b", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<概念B>", "image_urls": ["<人像網址>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}},
      {"id": "draft-c", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<概念C>", "image_urls": ["<人像網址>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}}
    ]}
    
    執行批次:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" batch .genmedia/projects/<專案名稱>/drafts-1.json
    
    等待所有作業完成。若某個作業失敗,其狀態行會說明原因;修復它或選擇跳過該概念。
  6. 比較圖與挑選。 若 preview 與 sheet 可用:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" sheet .genmedia/projects/<專案名稱>/drafts-1 --out .genmedia/projects/<專案名稱>/sheet.png
    
    顯示 sheet。若僅 preview 可用:逐一顯示草稿。若兩者皆無:提供每個草稿的本地路徑。無論如何,都要等待用戶的選擇(UX 規則 4)。
  7. 最終版:被選中的草稿的構圖精煉版。 使用參照被選中草稿的 /edit 端點:
    {"id": "final", "endpoint_id": "openai/gpt-image-2.5/sunburst/edit", "est_cost_usd": 0.055,
     "input": {"prompt": "<精煉提示詞(保留基本構圖,要求更高細節與光照)>", "image_urls": ["<被選中草稿的網址>", "<人像網址>"], "image_size": {"width": 2560, "height": 1440}, "quality": "high", "num_images": 1, "output_format": "png"}}
    
    執行單一作業並等待結果。
  8. 尺寸調整與輸出交付。 將最終版調整為所需尺寸:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" fit .genmedia/projects/<專案名稱>/final.png --sizes 1920x1080,1280x720 --out-dir .genmedia/projects/<專案名稱>/delivery
    
    使用 platform.md 中的規則產出 JPEG 版本(若需要)。
  9. 修訂(最多 3 輪)。 用戶要求變更(文字、顏色、背景、表情)→ 製作新的編輯作業,將目前的「最終版」作為輸入,並指定變更範圍。最多 3 輪,每輪只修改一個範圍。
  10. 完成與記錄。 更新狀態卡片(所有方框打勾)。輸出交付摘要。

檔案結構

  • .genmedia/projects/<專案名稱>/thumbnail.md:專案狀態
  • .genmedia/projects/<專案名稱>/drafts-*.json:批次定義
  • .genmedia/projects/<專案名稱>/delivery/:最終輸出版本
  • scripts/thumbcheck.py:工具集
  • scripts/gm.py:Genmedia 輔助腳本

Individual skills in this repo

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

funi-ai/ads

Ads from the user's REAL product: UGC and polished ad videos (presenter, unboxing, showcase, testimonial, TV spot) and static ads with copy. Physical products: keyframes locked to the product photo, Seedance clips or TTS + OmniHuman, GPT Image 2.5 copy. Apps and SaaS: real captures and recordings, composited, never regenerated. Use when: "make a UGC ad for this product", "15 second TikTok ad", "static ad with this headline", "app install ad from my screen recording", "A/B ad variants", "bu ürün için reklam videosu yap", "uygulamam için reklam hazırla", "indirim görseli hazırla". Chain: consumes `product-photoshoot` stills, `character` @handles, `launch-graphics` pages; produces ads and a manifest. NOT for: text-free product photos (use `product-photoshoot`); posters (use `image`); listing cards (use `marketplace-cards`); store screenshots, OG cards (use `launch-graphics`); one clip (use `video`); organic shorts (use `short-video`); product demos (use `demo-video`); thumbnails (use `youtube-thumbnail`).

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`).

相關技能