add-feishu
Add Feishu (飞书/Lark) as a channel. Uses WebSocket long connection mode — no public URL needed. Bot responds to all messages (no…
Turn a user-provided voiceover audio file + SRT subtitle into a finished, narration-synced MP4 using HyperFrames (HTML-to-video). The audio + SRT are the source of truth — scenes are timed to the SRT cues, content is read from the SRT, and the audio is muxed in automatically.
$ npx -y skills add sugarforever/01coder-agent-skills --skill producing-video --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/producing-videoContext preview
The summary Claude sees to decide when to auto-load this skill.
Turn a user-provided voiceover audio file + SRT subtitle into a finished, narration-synced MP4 using HyperFrames (HTML-to-video). The audio + SRT are the source of truth — scenes are timed to the SRT cues, content is read from the SRT, and the audio is muxed in automatically.
name: producing-video description: Turn a user-provided voiceover audio file + SRT subtitle into a finished, narration-synced MP4 using HyperFrames (HTML-to-video). The audio + SRT are the source of truth — scenes are timed to the SRT cues, content is read from the SRT, and the audio is muxed in automatically. Use when the user hands over an mp3/wav + srt and wants a video, says "把音频做成视频", "做一期视频", "audio + srt to video", "把这期早读做成视频", "render this narration into a video", or provides a recording + subtitles for an explainer / daily / 解读 / 口播. NOT for generating the voiceover (that's the user's job here) and NOT for slide decks (use a slides skill).
把"用户已经录好的口播音频 + SRT 字幕"做成一条**画面跟着声音走**的 MP4。用 HyperFrames(HTML 即视频)出片。
**铁律:音频和 SRT 是唯一事实源。** 画面的内容来自 SRT,画面的时间轴来自 SRT 的 cue 时间戳,音频作为一个 `<audio>` clip 直接挂进合成里、渲染时自动合流 —— **没有"先出视频再合音频"这一步**。
| 谁 | 做什么 | |---|---| | **用户** | 写稿 → 录音/合成音频 → 生成 SRT → 把 `audio.mp3` + `audio.srt` 交给你 | | **本 skill(你)** | 选 frame/品牌 → 按 SRT 搭 HyperFrames 合成 → 校对 → 渲染成片 |
用户**不**指望你生成配音(那是上游)。如果用户还没有音频、问的是"怎么配音",那不是本 skill —— TTS / 声音克隆是另一条线(见下方"超出范围")。
npx hyperframes doctor # 需要 Node ≥ 22 · FFmpeg · Chrome
需要 `hyperframes` / `hyperframes-cli` 两个 skill 在场(编写合成 + 跑 CLI)。缺了就让用户 `npx hyperframes skills` 安装后重来。
确认用户给了**两个文件**:音频(mp3/wav/m4a)+ SRT。只给音频没给 SRT → 本 skill 需要 SRT 拿时间轴;可让用户补 SRT(很多录音工具/剪辑软件能导出),**不要**默认去跑 Whisper 转写(用户没给 SRT 往往是有意的,先问)。
---
画面的风格 = 一个 frame.md / visual-style / 既有系列品牌。三种来源,按情况选:
1. **延续系列品牌**(推荐用于日更/系列)。如果这期属于一个已有系列(如"AI 早读"),去翻该系列的封面/历史成片,**沿用同一套 token**(颜色、字体、栅格、页眉页脚),让视频和封面一脉相承。 2. **HyperFrames frame.md 模板**。用户可能直接点名,例如 `creative-mode` / `biennale-yellow` / `cobalt-grid`。取 token:
3. **8 个内置 visual-style**(Swiss Pulse / Velvet Standard / Shadow Cut / Maximalist 等)。在 `hyperframes` skill 的 `visual-styles.md` 里,直接抄 YAML token。
**字体一律本地 woff2**(见 Gotcha "字体")。中文必须配 `Noto Sans SC`(400/500/700/900 视用量);英文 display 按 frame 选(Archivo Black / Manrope / Oswald…);标签数字常用 `JetBrains Mono`。从 `fontsource` CDN 下到项目的 `fonts/`:
curl -sSL -o fonts/<name>.woff2 "https://cdn.jsdelivr.net/fontsource/fonts/<family>@latest/<subset>-<weight>-normal.woff2" # 中文:subset 用 chinese-simplified;拉丁:latin
cd <repo>/studio/videos # 仓库约定:成片放这里 npx hyperframes init <YYYYMMDD-slug> --example blank --non-interactive cd <YYYYMMDD-slug> && mkdir -p fonts audio cp <user-audio> audio/narration-full.mp3 cp <user-srt> audio/narration.srt
读完整 SRT(`scripts/srt-cues.mjs` 可打印每条 cue 的开始秒数 + 文本,方便规划)。然后:
1. **按内容把 cue 归成"幕/场景"**。一条 SRT cue 通常是一句话;把讲同一件事的几条 cue 合成一个场景(scene)。一支 6~7 分钟的日更,大约 12~16 个场景比较舒服(平均 ~30s/场,画面不至于久不动)。 2. **场景开始时间 = 它第一条 cue 的开始时间戳**(秒)。 3. **场景时长 = 下一场开始 − 本场开始 + ~0.5s**(这 0.5s 重叠让转场 wipe 能盖住上一场,避免穿帮)。最后一场到音频结束。 4. **场景内的逐步出现(sub-reveal)= 对应子 cue 的开始时间**。让标题/要点/数字"在被念到的那一刻"出现 —— 这是同步感的关键。 5. **画面文案从 SRT 来,且不能和口播打架**。可以精炼成海报式短句,但不能说的是 A、画面写 B。顺手核对事实(数字、专有名词、人名)—— 用户很在意准确。
> 把场景开始时间放进一个 JS 数组 `const B = [...]`,所有 tween 用 `B[i-1] + 局部偏移` 定位。日后微调时间轴只改数组,不用逐条改 tween。
<audio id="vo" src="audio/narration-full.mp3" data-start="0" data-duration="<总时长>" data-track-index="20" data-volume="1"></audio>
媒体元素不需要 `class="clip"`;给它独立的 `data-track-index`。
function wipe(sel, at){ tl.fromTo(sel,{clipPath:"inset(0 100% 0 0)"},{clipPath:"inset(0 0% 0 0)",duration:0.5,ease:"power3.inOut"}, at); }npx hyperframes lint # 0 error 才继续(var(--x) 字体告警是误报,可忽略) npx hyperframes validate # WCAG AA 对比度;改掉过暗的次级灰 npx hyperframes inspect --samples 30 # 版面溢出,带时间戳;场景多就多采样
装饰元素故意出血到画外 → 标 `data-layout-ignore`。真实溢出 → 改容器/字号/padding。
ffmpeg -y -ss <秒> -i renders/x.mp4 -frames:v 1 /tmp/f.png # 然后看图
npx hyperframes render --resolution landscape-4k --quality high --output renders/<slug>-4k.mp4
`--resolution landscape-4k` 是把同一合成按 2× DPR 真·超采样到 3840×2160(不是放大);4K master 即使观众看 1080p 也更耐平台二压。4K + 长片渲染较久(几分钟到十几分钟),可后台跑。
成片留在 `studio/videos/<slug>/renders/`。**不要自动提交**(除非用户明确要)。
---
这些是踩过的坑,违反任何一条都会出废片:
1. **音频即时钟**。场景时长从 SRT 量出来,不要凭感觉定时长再硬塞音频。 2. **有 SRT 就别转写**。用户给了 SRT = 精确时间轴免费拿到,不需要 Whisper。(没 SRT 想自己转写前先问用户。) 3. **转场只用场景自身 clip-path 揭幕**。**绝不**用单独的全屏色块/幕布/刀闸/砸场板去做转场 —— 在渲染引擎里它会"扫进来盖住下一场后卡住不走",整场变成纯色/黑屏。揭幕揭的是 incoming 场景本体。 4. **不要给 `.pad` 容器套整体 opacity 的 "pushIn" 包装**。容器级 opacity 动画在 seek 渲染里可能留在 0,把整场变黑。用每个元素各自的 `gsap.from()`。 5. **配对 tween 不要加 `overwrite:"auto"`**。它会把配对的另一条 tween 杀掉(比如"扫入"在、"扫出"没了)。lint 的 overlapping_gsap_tweens 是无害告警,宁可留着。 6. **字体必须本地 woff2**。Google Fonts `<link>` 会被 lint 标记、且 sandbox 渲染里不可靠。中文配 Noto Sans SC;**中文字在彩色 accent 色块里要给足竖直 padding/line-height**(CJK 字形比 em 框高,padding 太紧 inspect 会报 text_box_overflow,给到 ~0.2em 竖直 padding + line-height ~1.12)。 7. **深色主题别信亮度探测**。1×1 平均亮度对深底+稀疏文字永远偏低,会把正常场景误判成黑屏。**靠抽帧看图**确认。 8. **浅色主题的对比度误报**。validate 在固定几个时间戳采样**所有** DOM 文字
A marketplace of agent skills by VerySmallWoods — content creation, publishing, analytics, and security scanning. Works with Claude Code, Codex, Cursor, Windsurf, and any other coding agent that supports the skills.sh format.
Add Feishu (飞书/Lark) as a channel. Uses WebSocket long connection mode — no public URL needed. Bot responds to all messages (no…
Manage Claude Code session transcripts from local JSONL storage, including listing candidate sessions, exporting full or selected…
Use when an agent needs to delegate a task to the OpenAI Codex CLI from another agent environment such as Claude Code, OpenClaw,…
Manage local Codex session transcripts, including listing candidate sessions, exporting full or selected sessions to organized…
Design typography-driven video cover images using HTML/CSS + Chrome DevTools screenshot. Generates covers in all needed aspect…
Generate elegant cover images for articles. Analyzes content and creates eye-catching hand-drawn style cover images with multiple…