Communitygithub.com

Varnan-Tech/opendirectory

生成高能量的精彩集锦或宣传视频(MP4),使用品牌资产和关键信息。快节奏蒙太奇格式,动态剪辑、粗体文字叠加,可选配乐。内置4个章节结构和4种基调预设。

opendirectory 是什么?

这个技能可以根据用户提供的品牌资产(Logo、颜色等)和3-5条关键信息,自动生成专业的宣传视频(MP4)。它采用固定的四章节结构(冷开场、构建、高潮、落地),提供四种基调预设(动感、电影、情感、专业),支持30/60/90秒时长,并可根据音乐BPM实现节拍同步剪辑。核心引擎基于Headless Chromium与FFmpeg,无需任何第三方AI视频API,运行成本极低。该技能特别强调严格的内容规则,如品牌名只能在“落地”章节出现,并要求用户预先撰写好画面上的文字信息,确保视频质量可控。

兼容平台✓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

根据品牌资产和关键信息,生成高能量的精彩集锦或宣传视频。 流程:HyperFrames HTML 合成(GSAP 时间线)→ 无头 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 入场动画,使用 gsap.to() 添加出场动画。切勿定位在动画起始状态。

  5. 每个带时间控制的元素都必须有 class="clip"。 HyperFrames 强制要求。没有这个类,元素对播放器不可见。

  6. 每个剪辑元素都必须有 data-start、data-duration 和 data-track-index。 无一例外。相同轨道的剪辑不能重叠——需使用不同的轨道索引。

  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. 音乐:使用带有 data-track-index 的独立 <audio> 元素。 视频必须设置为 muted playsinline。永远不要将音频放在 <video> 元素中。

  11. 在生成任何 HTML 之前,必须阅读 references/cut-patterns.md 和 references/tone-presets.md。

  12. 切勿直接在聊天中输出 HTML。 保存到文件,仅显示摘要。


第一步:信息收集

必需项:

  • key_messages(关键信息)—— 3-5 条能瞬间抓住眼球的短语,用于屏幕显示(用户必须自行撰写)

可选参数及默认值:

参数默认值描述
brand_assets(品牌资产)无Logo URL/路径、品牌色(十六进制)、关键截图
tone(基调)energetic(动感)energetic(动感)/ cinematic(电影)/ emotional(情感)/ professional(专业)
music(音乐)无文件路径,或 BPM/流派字符串(如 "128bpm electronic")
duration(时长)6030 / 60 / 90 秒
aspect_ratio(宽高比)9:169:16(1080x1920)/ 16:9(1920x1080)
cut_style(剪辑风格)autofast(快切,1-2秒)/ cinematic(电影感,3-5秒)—— auto 会从基调中推导
end_card(结尾卡片)auto用于“落地”章节的 Logo + 标语 + CTA URL

cut_style 自动默认值:energetic → fast;professional → fast(2秒);cinematic → cinematic;emotional → mixed

如果缺少 key_messages,请精确询问:

"要生成精彩集锦视频,我需要您提供关键信息——即即将显示在屏幕上的确切短语。请给我 3-5 条精炼的句子。这是您为这个视频写的最重要内容。

示例:‘被 500+ 增长团队使用’ / ‘从数天到数分钟’ / ‘兼容 Claude、Codex、Gemini’

同时,如果方便,请提供:基调(动感/电影/情感/专业)、时长(30/60/90 秒)、以及任何品牌色或 Logo URL。"

如果关键信息已提供 → 立即进入第二步。


第二步:安装 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 中的品牌名或第一条关键信息生成 kebab-case 格式,最长 25 个字符。


第三步:内部架构(从不向用户展示)

1. 根据 duration + cut_style 推导剪辑时间点:

章节30 秒60 秒90 秒
冷开场(Cold Open)0-5 秒0-5 秒0-8 秒
构建(Build)5-25 秒5-40 秒8-65 秒
高潮(Peak)25-28 秒40-55 秒65-80 秒
落地(Land)28-30 秒55-60 秒80-90 秒

将每个边界转换为毫秒。根据 cut_style 计算每场戏的持续时间:

  • fast:每条信息 1.2-1.8 秒(默认 1.5 秒)
  • cinematic:每条信息 3.5-5.0 秒(默认 4.0 秒)
  • mixed:根据章节能量在 2.0-4.0 秒之间变化

2. 将关键信息映射到场景:

  • 冷开场(1 个场景):一个能产生冲击力的统计数据或问题——不能出现品牌名,建立悬念
  • 构建:每条关键信息对应一个场景
  • 高潮:以双倍比例重复最强的信息,或者将两条信息快速闪现组合
  • 落地:品牌名 + 标语 + 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

第四步: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>
  [end if]

  [如果 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>
  [end if]

  [如果 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>
  [end if]

  <!-- 场景——每个场景一个 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="[音乐路径]"
  ></audio>
  [end if]

  <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]
  // ── 胶片颗粒(仅限电影/情感基调) ──────────────────────────────────────────
  const grainCanvas = document.getElementById('grain-overlay');
  const grainCtx = grainCanvas ? grainCanvas.getContext('2d') : null;
  // 颗粒效果由 GSAP ticker 更新(不是逐帧捕获——HyperFrames 处理此操作)
  [end if]

  // ── GSAP 时间线 ────────────────────────────────────────────────────────────
  const tl = gsap.timeline({ paused: true });

  // ── 冷开场 ────────────────────────────────────────────────────────────────
  [冷开场的入场和出场补间动画——具体模式见 cut-patterns.md]

  // ── 构建章节 ──────────────────────────────────────────────────────────────
  [每条信息的补间动画——见 cut-patterns.md 中的 flash-sequence 或 cinematic-hold]

  // ── 高潮章节 ──────────────────────────────────────────────────────────────
  [高潮补间动画——与构建相同模式,但时间更紧凑]

  // ── 落地章节 ──────────────────────────────────────────────────────────────
  [落地入场动画——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)
  • scene-content 始终使用 padding + flex——内容容器上永远不要使用 position:absolute
  • 每个带有 data-start 的元素都必须有 class="clip"

第五步:自我质量检查(在进入第六步之前修复所有问题)

内容:

  • key_messages —— 每个短语恰好出现一次,无重复
  • 品牌名仅出现在“落地”章节(不能出现在冷开场、构建或高潮章节)
  • 冷开场不包含任何品牌名或产品名——仅包含统计数据或有冲击力的短语
  • 落地章节包含:品牌名 + 标语 + CTA URL(至少三个元素)
  • 最终帧上存在 end_card CTA URL

HyperFrames 协定:

  • 每个带有 data-start 的元素都有 class="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()(从屏幕外 TO CSS 位置)
  • 所有出场使用 gsap.to()(从 CSS 位置 TO 屏幕外)
  • .scene-content 容器上无 position:absolute
  • 脚本顶部以注释形式声明了节奏模式

剪辑时机:

  • fast 基调:平均剪辑时长 ≤ 2.0 秒
  • cinematic 基调:平均剪辑时长 ≥ 3.0 秒
  • 对于 energetic 基调,每次剪辑边界触发闪白效果(60 毫秒,透明度 0→1→0)
  • 相同轨道的剪辑不重叠(检查所有 data-track-index 分组)

音效:

  • 存在 window.__sfxTimeline 并放置在时间线注册之前
  • 每条关键信息触发 word-hit 事件
  • 在“构建”章节到“高潮”章节的过渡边界触发 whoosh 事件
  • 在“落地”章节开始时触发 cta-chime 事件
  • 前 500 毫秒内无音效触发

第六步:校验、渲染、输出

npx hyperframes lint
npx hyperframes inspect --json

修复所有校验错误。修复所有检查错误(文字溢出、剪辑元素超出容器)。然后渲染:

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

输出:

## 精彩集锦: [来自 end_card 的品牌名]
基调:[基调] | 时长:[N]秒 | 剪辑风格:[cut_style] | 宽高比:[ratio]
节奏:[已声明的模式]

章节
  冷开场 [0-N秒]:  [有冲击力的统计数据或短语]
  构建   [N-N秒]:  [N 条关键信息已列出]
  高潮   [N-N秒]:  [最强信息以最大比例呈现]
  落地   [N-N秒]:  [品牌名] + "[标语]" + [CTA URL]

文件
  源文件:sizzle/[slug]/index.html
  输出:sizzle/[slug]/sizzle-reel.mp4

音效时间线(嵌入每个合成)

与 vid-product-launch 相同的 FFmpeg 合成音效系统。将 window.__sfxTimeline 放在 GSAP 时间线注册之前。

精彩集锦的音效类型参考:

类型声音时长位置
word-hit低音冲击(50Hz)+ 瞬态咔嚓声(2.2kHz)+ 噪音爆发180毫秒每条关键信息场景开始时
whoosh双频带噪音扫频(1.1kHz 主体 + 4-8kHz 空气感)700毫秒在构建→高潮的边界处
cta-chimeA 大调和弦(440+554+659+880Hz)+ 声学钟响 shimmer1.2秒在落地章节开始时
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.

相关技能