Communitygithub.com

Varnan-Tech/opendirectory

從品牌資產與關鍵訊息生成高能量精選片段或 hype 影片 (MP4),採用快節奏蒙太奇格式,包含動態切換、醒目文字疊加與可選背景音樂。支援 4 段結構(冷開場、鋪陳、高潮、落地)與 4 種語調預設,當音樂提供時可實現節拍同步剪輯。

opendirectory 是什麼?

vid-sizzle-reel 是一個專為 AI 代理(如 Claude Code、Cursor)設計的技能,用於從品牌資產和關鍵標語自動生成高能量的「精選片段」或 hype 影片。它採用 HyperFrames 管線(GSAP 動畫 + headless Chromium + FFmpeg),完全不依賴 Runway、Pika 或其他 AI 影片 API,執行成本僅限於 Node.js 和 FFmpeg。技能支援 4 段式結構:冷開場(營造懸念,不露出品牌)、鋪陳(逐條展示訊息)、高潮(最強訊息放大輸出)、落地(品牌名稱 + 標語 + CTA)。用戶可設定參數如語調(活潑/電影感/感性/專業)、時長(30/60/90 秒)、長寬比(9:16 或 16:9)與音樂檔案,系統會根據 BPM 自動實現節拍同步剪輯。技能內建嚴格的品質檢查清單,確保品牌名稱僅在落地段出現、所有元素具備 HyperFrames 所需的 class 與 data 屬性、GSAP 時間軸以暫停狀態註冊,並提供 SFX 音效時間軸(逐字重擊、咻聲與 CTA 鐘聲)以增強影片節奏感。

相容平台✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/vid-sizzle-reel

在你喜歡的 AI 中提問

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

說明文件

vid-sizzle-reel

從品牌資產與關鍵訊息生成高能量精選片段或 hype 影片。 管線:HyperFrames HTML 合成 (GSAP 時間軸) → headless Chromium → FFmpeg H.264 MP4。 無須 Runway、無須 Pika、無須 AI 影片 API。除 Node.js + FFmpeg 外無執行成本。

與 vid-product-launch 的區別:

  • vid-product-launch 敘述一個故事——一次揭露、五個段落、張力曲線
  • vid-sizzle-reel 創造能量與興奮感——快速剪輯、音樂優先、無單一故事節拍

關鍵規則(每次生成前務必閱讀)

  1. 自行撰寫關鍵訊息——或請使用者撰寫。 這些是會在畫面上顯示的確切詞句。「AI 會搞定」只會產出填充內容。3-5 句犀利台詞就是整部精選片段的全部內容。

  2. 品牌名稱僅出現在落地段落。 冷開場與鋪陳段應製造懸念而不揭示品牌名稱。落地段落才是最終回報。

  3. 在撰寫任何 HTML 前,於腳本頂部以註解宣告節奏模式。 格式:// RHYTHM: flash-sequence | Cold[0-5s]: stat | Build[5-40s]: msg(1.5s)|flash|... | Peak[40-55s]: ... | Land[55-60s]: logo+CTA。每個時間決策都須以此為依據。

  4. 先以 CSS 建立結束狀態佈局——暫時不要動 GSAP。 在靜態 CSS 中將每個元素定位在其最顯眼的時刻。然後用 gsap.from() 加入進入動畫,用 gsap.to() 加入退場動畫。切勿定位在動畫起始狀態。

  5. 每個計時元素都須加上 class="clip"。 HyperFrames 要求此類別,否則元素對播放器不可見。

  6. 每個 clip 都須有 data-start、data-duration、data-track-index。 無例外。相同軌道的 clip 不可重疊——請使用不同的 track 索引。

  7. 禁止使用 Math.random()。 HyperFrames 要求確定性合成。任何偽隨機值都應使用種子 PRNG(mulberry32)。

  8. 所有 GSAP 時間軸都以 { paused: true } 起始,並註冊至 window.__timelines["comp-id"]。 HyperFrames 播放器控制播放——切勿呼叫 tl.play()。

  9. .scene-content 容器禁止使用 position: absolute。 應使用 width:100%; height:100%; padding:Npx; display:flex。僅限裝飾性元素使用 position:absolute。

  10. 音樂:獨立的 <audio> 元素,須有 data-track-index。 影片必須設定 muted playsinline。切勿將音訊放入 <video> 元素。

  11. 生成任何 HTML 前,請閱讀 references/cut-patterns.md 與 references/tone-presets.md。

  12. 切勿將 HTML 直接貼在聊天中。 請儲存至檔案,僅顯示摘要即可。


步驟 1:資訊輸入

必要項目:

  • key_messages — 3-5 句犀利的畫面上顯示台詞(使用者必須自行撰寫)

可選參數與預設值:

參數預設值說明
brand_assets無Logo 路徑/URL、品牌色 (hex)、關鍵截圖
toneenergeticenergetic / cinematic / emotional / professional
music無檔案路徑,或 BPM/風格字串(如 "128bpm electronic")
duration6030 / 60 / 90 秒
aspect_ratio9:169:16 (1080x1920) / 16:9 (1920x1080)
cut_styleautofast (1-2s) / cinematic (3-5s) — auto 依 tone 自動推導
end_cardautoLogo + 標語 + CTA URL,用於落地段落

cut_style 自動預設:energetic → fast;professional → fast (2s);cinematic → cinematic;emotional → mixed

如果缺少 key_messages,請務必提出以下詢問:

「要生成精選片段,我需要您的關鍵訊息——即畫面上要閃爍顯示的確切台詞。請提供 3-5 句犀利的詞句。這是您為這支影片撰寫的最重要內容。

範例:'已被 500+ 成長團隊採用' / '從數天縮短至數分鐘' / '相容於 Claude、Codex、Gemini'

此外也需了解:語調 (energetic/cinematic/emotional/professional)、時長 (30/60/90s)、任何品牌色或 Logo URL。」

若 key_messages 已提供 → 立即進入步驟 2。


步驟 2:安裝 HyperFrames

安裝 HyperFrames 技能(僅首次安裝,若已安裝可跳過):

npx skills add heygen-com/hyperframes

驗證環境:

node --version   # 必須 >= 22
ffmpeg -version  # 必須存在

建立專案骨架:

npx hyperframes init sizzle-[slug] --example kinetic-type --non-interactive
cd sizzle-[slug]

Slug:從 end_card 品牌名稱或第一個 key_message 轉為 kebab-case,最多 25 個字元。


步驟 3:內部架構(不對使用者顯示)

1. 由 duration + cut_style 推導剪輯點時間:

段落30s60s90s
冷開場0-5s0-5s0-8s
鋪陳5-25s5-40s8-65s
高潮25-28s40-55s65-80s
落地28-30s55-60s80-90s

將每個邊界轉換為毫秒。根據 cut_style 計算每個場景的時長:

  • fast:每則訊息 1.2s-1.8s(預設使用 1.5s)
  • cinematic:每則訊息 3.5s-5.0s(預設使用 4.0s)
  • mixed:依段落能量在 2.0s-4.0s 之間變化

2. 將 key_messages 對應至場景:

  • 冷開場(1 個場景):一個衝擊性統計數字或問題——不包含品牌名稱,製造懸念
  • 鋪陳:每個 key_message 一個場景
  • 高潮:以兩倍尺寸重複最強訊息,或將 2 則訊息快速閃爍組合
  • 落地:品牌名稱 + 標語 + CTA URL

3. 若有提供音樂,偵測節拍同步:

npx hyperframes tts --analyze-beats [music-file]

若無法使用,依 BPM 計算:beat_ms = 60000 / BPM。對齊剪輯至每 2 拍。

4. 選擇語調預設 — 閱讀 references/tone-presets.md 取得 CSS 代幣。

5. 宣告節奏模式 — 在腳本頂部寫入註解:

// RHYTHM: flash-sequence
// Cold Open [0-5000ms]: stat
// Build [5000-40000ms]: msg-1(1500ms)|flash|msg-2(1500ms)|flash|msg-3(1500ms)|flash|msg-4(1500ms)|flash|build-accum(10000ms)
// Peak [40000-55000ms]: msg-strongest(1200ms)|flash|msg-2nd(1200ms)|flash|HOLD(5600ms)
// Land [55000-60000ms]: logo+tagline+cta

6. 決定像素尺寸:

  • 9:16 → W=1080, H=1920(預設 — Instagram Reels、TikTok、YouTube Shorts)
  • 16:9 → W=1920, H=1080

步驟 4:HyperFrames HTML 合成

在撰寫任何程式碼前,請閱讀 references/cut-patterns.md 與 HyperFrames 技能 (/hyperframes)。

必要的 HTML 骨架:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
[從語調預設取得字型 CDN 連結]
<style>
:root {
  [所有來自語調預設的 CSS 代幣]
}

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
</style>
</head>
<body>
<div
  data-composition-id="sizzle-[slug]"
  data-width="[W]"
  data-height="[H]"
  style="position:relative;width:[W]px;height:[H]px;overflow:hidden;background:var(--bg)"
>

  [如果 cut-flash: true]
  <div id="cut-flash"
    style="position:absolute;inset:0;background:var(--cut-flash-bg);opacity:0;pointer-events:none;z-index:200"></div>
  [結束條件]

  [如果 film-grain: true]
  <canvas id="grain-overlay"
    width="240" height="135"
    style="position:absolute;inset:0;width:[W]px;height:[H]px;pointer-events:none;opacity:0.022;mix-blend-mode:overlay;z-index:50"></canvas>
  [結束條件]

  [如果 vignette: true]
  <div id="vignette-overlay"
    style="position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 35%,rgba(0,0,0,0.65) 100%);pointer-events:none;z-index:51"></div>
  [結束條件]

  <!-- 場景 — 每個場景一個 div -->
  <div id="scene-cold"
    class="clip"
    data-start="0"
    data-duration="5"
    data-track-index="0"
    style="position:absolute;inset:0;opacity:0"
  >
    <div class="scene-content" style="width:100%;height:100%;padding:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box">
      [冷開場內容 — 一個統計或衝擊性詞句,不含品牌名稱]
    </div>
  </div>

  [每個鋪陳場景一個 div,data-start 依剪輯時長遞增]
  [高潮場景]
  [落地場景 — 品牌名稱 + 標語 + CTA]

  [如果有提供音樂]
  <audio id="music"
    class="clip"
    data-start="0"
    data-duration="[總時長]"
    data-track-index="10"
    data-volume="0.85"
    src="[music_path]"
  ></audio>
  [結束條件]

  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js"></script>
  <script>
  // ── 節奏宣告 ──────────────────────────────────────────────────────────────
  // RHYTHM: [flash-sequence | cinematic-hold | beat-sync | mixed]
  // Cold Open [0-Nms]: ...
  // Build [N-Nms]: ...
  // Peak [N-Nms]: ...
  // Land [N-Nms]: ...

  // ── 種子 PRNG(僅用於顆粒效果——不產生其他隨機值)────────────────────
  function mulberry32(seed) {
    return function() {
      seed |= 0; seed = seed + 0x6D2B79F5 | 0;
      let t = Math.imul(seed ^ seed >>> 15, 1 | seed);
      t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
      return ((t ^ t >>> 14) >>> 0) / 4294967296;
    };
  }

  [如果 film-grain: true]
  // ── 底片顆粒(僅 cinematic/emotional 語調)──────────────────────────
  const grainCanvas = document.getElementById('grain-overlay');
  const grainCtx = grainCanvas ? grainCanvas.getContext('2d') : null;
  // 由 GSAP ticker 更新顆粒(非逐幀捕捉——HyperFrames 處理此功能)
  [結束條件]

  // ── GSAP 時間軸 ───────────────────────────────────────────────────────────
  const tl = gsap.timeline({ paused: true });

  // ── 冷開場 ───────────────────────────────────────────────────────────────
  [冷開場的進入與退場補間動畫——請參閱 cut-patterns.md 取得確切模式]

  // ── 鋪陳段落 ───────────────────────────────────────────────────────────────
  [每則訊息的補間動畫——flash-sequence 或 cinematic-hold,參考 cut-patterns.md]

  // ── 高潮段落 ─────────────────────────────────────────────────────────────
  [高潮補間動畫——與鋪陳模式相同但時間更緊湊]

  // ── 落地段落 ─────────────────────────────────────────────────────────────
  [落地進入動畫——logo、標語、CTA。無退場——持續至結束]

  // ── 時間軸註冊 ────────────────────────────────────────────────────────────
  window.__timelines = window.__timelines || {};
  window.__timelines["sizzle-[slug]"] = tl;
  </script>
</div>
</body>
</html>

設計品質規則:

  • 冷開場統計數字:16:9 格式字型大小 ≥160px,9:16 格式 ≥100px
  • 關鍵訊息:字型大小 ≥80px — 一眼即可閱讀
  • 落地段落品牌名稱:16:9 格式 ≥120px
  • 所有顏色均使用預設代幣變數——除了 var(--accent) 在 canvas fillStyle 中的實際十六進位值外,禁止使用自由 hex
  • scene-content 一律使用 padding + flex——內容容器禁止使用 position:absolute
  • 每個具有 data-start 的元素都須加上 class="clip"

步驟 5:自我品質檢查(進入步驟 6 前修正所有失敗)

內容:

  • key_messages — 每個詞句恰好出現一次,無重複
  • 品牌名稱僅出現在落地段落(不在冷開場、鋪陳、高潮)
  • 冷開場不包含品牌名稱與產品名稱——僅有統計或衝擊性詞句
  • 落地段落包含:品牌名稱 + 標語 + CTA URL(最少三個元素)
  • end_card CTA URL 出現在最終畫面

HyperFrames 協定:

  • 每個具有 data-start 的元素都有 class="clip"
  • 每個 clip 都有 data-start、data-duration、data-track-index
  • 根合成 div 有 data-composition-id
  • 已註冊 window.__timelines["sizzle-[slug]"] = tl
  • 所有時間軸以 { paused: true } 起始
  • 未使用 Math.random()——僅使用種子 PRNG
  • 未呼叫 tl.play() 或 tl.resume()

GSAP / 佈局:

  • 所有進入使用 gsap.from()(從螢幕外到 CSS 位置)
  • 所有退場使用 gsap.to()(從 CSS 位置到螢幕外)
  • .scene-content 容器未使用 position:absolute
  • 節奏模式已在腳本頂部以註解宣告

剪輯時機:

  • fast 語調:平均剪輯時長 ≤ 2.0s
  • cinematic 語調:平均剪輯時長 ≥ 3.0s
  • energetic 語調下,每次剪輯邊界觸發剪輯閃爍(60ms,透明度 0→1→0)
  • 相同軌道的 clip 不重疊(檢查所有 data-track-index 分組)

音效:

  • window.__sfxTimeline 存在且置於時間軸註冊之前
  • 每則關鍵訊息有 word-hit 事件
  • 在鋪陳→高潮轉換邊界有 whoosh
  • 落地開始時有 cta-chime
  • 500ms 前不觸發任何音效

步驟 6:Lint、渲染、輸出

npx hyperframes lint
npx hyperframes inspect --json

修正所有 lint 錯誤。修正所有 inspect 錯誤(文字溢出、clip 超出容器)。然後渲染:

npx hyperframes render --output sizzle/[slug]/sizzle-reel.mp4

輸出範例:

## 精選片段:[end_card 中的品牌名稱]
語調:[tone] | 時長:[N]s | 剪輯風格:[cut_style] | 長寬比:[ratio]
節奏:[宣告的模式]

段落
  冷開場 [0-Ns]:  [衝擊性統計或詞句]
  鋪陳   [N-Ns]:  [N 則關鍵訊息]
  高潮   [N-Ns]:  [最強訊息以最大尺寸顯示]
  落地   [N-Ns]:  [品牌名稱] + "[標語]" + [CTA URL]

檔案
  來源:sizzle/[slug]/index.html
  輸出:sizzle/[slug]/sizzle-reel.mp4

音效時間軸(嵌入每個合成中)

與 vid-product-launch 相同的 FFmpeg 合成音效系統。將 window.__sfxTimeline 置於 GSAP 時間軸註冊之前。

適用於精選片段的音效類型參考:

類型聲音時長放置位置
word-hit低頻重擊 (50Hz) + 瞬態點擊 (2.2kHz) + 噪音爆發180ms每則關鍵訊息場景開始時
whoosh雙頻噪音掃掠(1.1kHz 主體 + 4-8kHz 空氣聲)700ms鋪陳→高潮邊界
cta-chimeA 大三和弦 (440+554+659+880Hz) + 迴聲鈴聲1.2s落地開始的瞬間
window.__sfxTimeline = [
  // 每則關鍵訊息對應一個 word-hit(依場景開始時間計算)
  { ms: MSG_1_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  { ms: MSG_2_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  { ms: MSG_3_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  // ... 每則訊息重複
  { ms: PEAK_START_MS - 700,      sfx: 'whoosh',     vol: 0.55 },
  { ms: LAND_START_MS,            sfx: 'cta-chime',  vol: 0.65 },
];

所有 ms 值依宣告的段落時間計算。

Individual skills in this repo

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

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

相關技能