Podcast Highlights Deck
(Internal skill id: podcast-highlights-deck)
What it creates
Create a premium editorial long-scroll highlight deck with a sticky TOC rail, multilingual toggle, and original audio clips.
Workflow
Inputs
- - podcast_url: episode page URL (Apple/Spotify/RSS/YouTube/direct MP3)
- languages: list of language codes, e.g.
en, ja, INLINECODE3
Output
- - A static website (Vite build) with:
- editorial hero (no full-bleed podcast artwork)
- sticky left rail: metadata + language toggle + table of contents
- 8–12 highlight sections
- per-highlight audio clip playback (original audio)
- global language switching (no mixed-language UI)
Workflow (execute in order)
1) Acquire audio (source-of-truth)
Prefer a direct audio URL (RSS <enclosure>). Recommended approach:
- 1. Use
search_web to find the show’s RSS feed (queries like: "<show name>" RSS feed, or the Apple show id + RSS). - Use
get_web_page_contents to fetch the RSS XML. - Parse RSS to locate the exact episode and extract:
- title
- publish date
- duration (if present)
- cover image
-
enclosure mp3 URL
If RSS is unavailable:
- - If YouTube exists, use
yt-dlp to download audio. - If a platform blocks direct audio access, ask the user for the RSS link or direct mp3.
Download audio to a working folder (example):
2) Transcribe with timestamps
Primary:
- - Run
anygen-speech-to-text episode.mp3 -o transcript -f json,md,srt.
Fallback (if the tool fails):
- - Split audio into chunks with
ffmpeg (10 min chunks) - Use OpenAI Whisper (
whisper-1) with INLINECODE13 - Merge segments by adding time offsets
You need a machine-readable file like:
- -
transcript/episode_verbose.json containing segments with start, end, INLINECODE17
3) Curate 8–12 highlights (do NOT dump transcript)
Selection philosophy:
- - Prefer fewer, stronger highlights.
- Only use quotes that exist in the transcript.
For each highlight, produce:
- -
id (h1..h12) - INLINECODE19 +
end timestamps in seconds (from transcript) - title (translate later)
- quote (English, exact or lightly cleaned)
- context (1 sentence)
- takeaway (editorial interpretation)
4) Translate + global UI copy
For every supported language:
- - Translate titles, context, takeaway, and quote (transcreation; keep meaning + tone).
Important behavior:
- - In non-English modes, show translated quote as primary.
- Preserve a connection to English:
- show “Original (English)” as a secondary expandable panel.
Also translate all UI strings:
- - hero framing
- sidebar labels
- buttons (“Play clip”, “Back to top”, etc.)
- closing section labels
5) Clip original audio per highlight
Use the bundled script:
Conventions:
- - add ~2s padding before/after for natural listening
- output:
-
site_assets/audio/h1.mp3 …
6) Build the site with the bundled editorial template
Use website_init to create a new site project.
Then copy assets into the project:
- - INLINECODE24
- INLINECODE25
- INLINECODE26
Then replace template files from this skill:
- -
assets/template/Home.tsx → INLINECODE28 - INLINECODE29 → INLINECODE30
- INLINECODE31 → project INLINECODE32
Notes:
- - The template expects
highlights.json schema similar to assets/template/highlights.schema.example.json. - Ensure
document.documentElement.dataset.lang is set from the language toggle.
7) Bundle and deliver
Run website_bundle and deliver the generated dist/index.html.
Template assets in this skill
- -
assets/template/Home.tsx: editorial layout + global language switching + expandable English original - INLINECODE39 : Swiss‑brutalist paper/ink theme + language font stacks
- INLINECODE40 : Google Fonts includes Instrument Serif, Manrope, IBM Plex Mono, and Noto JP/SC
- INLINECODE41 : reference structure
播客精华集锦展示页
(内部技能ID:podcast-highlights-deck)
生成内容
创建一份高级编辑风格的长滚动精华展示页,包含固定目录侧边栏、多语言切换功能及原始音频片段。
工作流程
输入参数
- - podcast_url:节目单集页面URL(Apple/Spotify/RSS/YouTube/直接MP3链接)
- languages:语言代码列表,例如 en、ja、zh
输出结果
- 编辑风格主视觉(非全幅播客封面)
- 固定左侧边栏:元数据 + 语言切换 + 目录
- 8–12个精华片段区域
- 每个精华片段对应的音频播放功能(原始音频)
- 全局语言切换(无混合语言界面)
工作流程(按顺序执行)
1)获取音频(数据源)
优先使用直接音频链接(RSS )。推荐方法:
- 1. 使用 searchweb 查找节目的RSS订阅源(查询格式:<节目名称> RSS feed,或Apple节目ID + RSS)
- 使用 getwebpagecontents 获取RSS XML内容
- 解析RSS定位到具体单集并提取:
- 标题
- 发布日期
- 时长(如有)
- 封面图片
-
enclosure mp3链接
如果RSS不可用:
- - 若为YouTube内容,使用 yt-dlp 下载音频
- 若平台限制直接音频访问,请用户提供RSS链接或直接MP3地址
将音频下载至工作文件夹(示例):
- - podcast_work/episode.mp3
2)带时间戳的转写
主要方法:
- - 运行 anygen-speech-to-text episode.mp3 -o transcript -f json,md,srt
备用方案(若主要工具失效):
- - 使用 ffmpeg 将音频分割为10分钟片段
- 使用OpenAI Whisper(whisper-1)配合 responseformat=verbosejson
- 通过添加时间偏移量合并片段
需要生成机器可读文件,例如:
- - transcript/episode_verbose.json,包含带有 start、end、text 的片段
3)精选8–12个精华片段(请勿直接转存完整文稿)
筛选原则:
- - 宁缺毋滥,精选高质量片段
- 仅使用文稿中存在的引述内容
每个精华片段需包含:
- - id(h1..h12)
- 时间戳 start + end(以秒为单位,源自文稿)
- 标题(后续翻译)
- 引述(英文,精确或轻微整理)
- 背景说明(1句话)
- 核心观点(编辑解读)
4)翻译及全局界面文案
针对每种支持的语言:
- - 翻译标题、背景说明、核心观点及引述(创意翻译,保留含义与语气)
重要行为规范:
- - 在非英文模式下,以翻译后的引述为主
- 保留与英文的关联:
- 以“原文(英文)”作为可展开的二级面板
同时翻译所有界面字符串:
- - 主视觉框架文案
- 侧边栏标签
- 按钮(“播放片段”、“返回顶部”等)
- 结尾区域标签
5)为每个精华片段剪辑原始音频
使用配套脚本:
- - python scripts/clipaudio.py --audio episode.mp3 --highlights highlights.json --out-dir siteassets
规范要求:
- - 在片段前后各添加约2秒缓冲,确保自然听感
- 输出文件:
- site_assets/audio/h1.mp3 ……
6)使用配套编辑模板构建网站
使用 website_init 创建新的网站项目。
然后将资源文件复制到项目中:
- - src/assets/highlights.json
- src/assets/cover.jpg
- src/assets/audio/*.mp3
接着替换本技能中的模板文件:
- - assets/template/Home.tsx → src/pages/Home.tsx
- assets/template/index.css → src/index.css
- assets/template/index.html → 项目 index.html
注意事项:
- - 模板要求 highlights.json 的结构与 assets/template/highlights.schema.example.json 类似
- 确保通过语言切换功能设置 document.documentElement.dataset.lang
7)打包并交付
运行 website_bundle,交付生成的 dist/index.html。
本技能包含的模板资源
- - assets/template/Home.tsx:编辑布局 + 全局语言切换 + 可展开英文原文
- assets/template/index.css:瑞士‑粗野主义纸墨主题 + 语言字体栈
- assets/template/index.html:Google Fonts包含Instrument Serif、Manrope、IBM Plex Mono及Noto日/中字体
- assets/template/highlights.schema.example.json:参考结构