skills/summarize-video/SKILL.md
--- Skill name: summarize-video Skill description: Summarize a video — extract transcript via Kaltura API, generate AI summary with key takeaways and timestamped quotes, and build styled HTML page. Requires Chrome DevTools MCP. argument-hint: <video_url> allowed-tools: - mcp__chrome-devtools__new_page - mcp__chrome-devtools__navigate_page - mcp__chrome-devtools__evaluate_script - mcp__chrome-devtools__take_snapshot - mcp__chrome-devtools__wait_for - mcp__chrome-devtools__click - mc
npx skillsauth add abhiroopb/synthetic-mind skills/summarize-videoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill requires Chrome DevTools MCP and the markdown Python package. See SETUP.md for installation instructions.
Given a video URL from a Kaltura-based video platform, perform the following steps.
Create an output directory based on the video title slug (lowercase, hyphens):
mkdir -p <output_dir>
new_page with a 30s timeout — it may need SSO auth).evaluate_script. Important: The ks token is a session credential — do not log it, persist it, or include it in any output.async () => {
const player = window.KalturaPlayer.getPlayers()['kplayer'];
const ks = player.config.provider.ks;
const entryId = player.config.sources.id;
// List caption assets
const listResp = await fetch('https://www.kaltura.com/api_v3/service/caption_captionasset/action/list', {
method: 'POST',
body: new URLSearchParams({ ks, format: '1', 'filter[entryIdEqual]': entryId })
});
const listData = await listResp.json();
if (!listData.objects?.length) return JSON.stringify({ error: 'No captions found' });
const captionId = listData.objects[0].id;
// Get download URL
const urlResp = await fetch('https://www.kaltura.com/api_v3/service/caption_captionasset/action/getUrl', {
method: 'POST',
body: new URLSearchParams({ ks, format: '1', id: captionId })
});
const downloadUrl = await urlResp.json();
// Fetch the actual SRT content
const srtResp = await fetch(downloadUrl);
const srt = await srtResp.text();
return srt;
}
.srt file:import json
with open('<tool-results-file>') as f:
data = json.load(f)
raw = data[0]['text']
# Content is inside a ```json "..." ``` block
import re
match = re.search(r'```json\n(.*?)\n```', raw, re.DOTALL)
if not match:
raise ValueError("Could not find JSON block in tool-results file")
srt = json.loads(match.group(1))
with open('<output_dir>/video.srt', 'w') as f:
f.write(srt)
Run the format script. Use the video title from the page and the original URL:
python3 {{SKILL_DIR}}/scripts/format_transcript.py \
<output_dir>/video.srt \
"<video_url>" \
--title "<Video Title>" \
--interval 30 \
-o <output_dir>/transcript.md
Spawn a subagent (Task tool, subagent_type="general-purpose") to read transcript.md and write summary.md. This keeps the main context clean, especially for long videos.
The subagent prompt should include:
The subagent should write <output_dir>/summary.md with this exact structure:
# <Video Title>
> <Date> | [Watch Video](<video_url>)
*The takeaways and summary below are AI-generated from the transcript. Direct quotes are marked in italics with linked timestamps but have not been verified for accuracy. The [full verbatim transcript](#full-transcript) from the video's caption file is included below.*
## Key Takeaways
- **Takeaway 1.** 1-2 sentences with *"direct quotes"* and linked timestamps ([MM:SS](<video_url>?st=SECONDS)).
- **Takeaway 2.** 1-2 sentences with *"direct quotes"* and linked timestamps.
- **Takeaway 3.** 1-2 sentences with *"direct quotes"* and linked timestamps.
## Summary
### Section Title 1
[MM:SS](<video_url>?st=SECONDS) – [MM:SS](<video_url>?st=SECONDS)
Summary paragraph with *"direct quotes"* and linked timestamps like ([MM:SS](<video_url>?st=SECONDS)).
### Section Title 2
...
Rules:
[MM:SS](<video_url>?st=TOTAL_SECONDS)pip3 install markdown==3.7 --break-system-packages -q
python3 {{SKILL_DIR}}/scripts/build.py <output_dir>/
The built HTML page will be in <output_dir>/index.html. Tell the user the output path so they can open it in a browser or publish it to their preferred hosting.
testing
Track TV shows and movies with Trakt.tv. Search, get watchlist, history, up-next, recommendations, trending, calendar, ratings, stats, add/remove from watchlist, mark watched, rate, and check in. Use when asked about what to watch, TV shows, movies, watch history, or Trakt.
development
Send and receive SMS messages via Twilio API. Used for text message notifications, forwarding important alerts, and two-way SMS communication.
documentation
Organizes files in the local Downloads folder into proper folders. Use when asked to organize, sort, or file downloaded documents.
tools
Book and manage appointments on Sutter Health MyHealth Online portal. Uses browser automation via Playwright MCP to interact with the patient portal.