plugins/wwdc-plugin/skills/wwdc-catalog/SKILL.md
Fetch the WWDC session catalog from Apple's CDN by extracting the catalog URL from the Developer.app's WWDCCore binary. Use this skill whenever the user asks about WWDC sessions, WWDC videos, WWDC catalog, Apple developer conference content, or wants to browse, search, list, or look up any WWDC session or talk — even if they just say something like "what sessions are there about SwiftUI" or "find me that WWDC video about concurrency". Also use this when the user wants to download or work with WWDC session metadata.
npx skillsauth add memfrag/apparata-plugins wwdc-catalogInstall 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 fetches the full WWDC session catalog from Apple's CDN. The catalog includes all events from WWDC14 through the latest year, along with videos, labs, articles, topics, and media URLs (video downloads, HLS streams, slides).
The Apple Developer app (/Applications/Developer.app) ships with a framework called WWDCCore that contains an embedded CDN URL pointing to the session catalog. The bundled script reads this binary, finds the URL by searching for the https://devimages-cdn.apple.com/wwdc-services/ prefix, and appends contents.json to fetch the full catalog.
The catalog is normalized after fetching: older WWDCs (<=2019) used "Session" as the content type while newer ones use "Video" — the script rewrites all "Session" types to "Video" so you can always filter on type == "Video" regardless of year.
/Applications/Developer.app installed (free from the Mac App Store)Run the bundled script to fetch the catalog as JSON:
python3 <skill-dir>/scripts/wwdc_catalog.py
This prints a summary to stdout and the catalog URL to stderr. To capture the full catalog as JSON, use the script as a module:
python3 -c "
import sys; sys.path.insert(0, '<skill-dir>/scripts')
from wwdc_catalog import get_wwdc_catalog
import json
catalog = get_wwdc_catalog()
print(json.dumps(catalog, indent=2))
" > /tmp/wwdc_catalog.json
Or import the individual functions for more control:
import sys; sys.path.insert(0, '<skill-dir>/scripts')
from wwdc_catalog import read_wwdccore_binary, extract_contents_url, fetch_catalog, normalize_catalog
data = read_wwdccore_binary("/Applications/Developer.app")
url = extract_contents_url(data)
catalog = normalize_catalog(fetch_catalog(url))
Replace <skill-dir> with the actual path to this skill's directory (the parent of this SKILL.md).
The catalog JSON has these top-level keys:
| Key | Description |
|-----|-------------|
| events | List of WWDC events (WWDC14–WWDC25, Tech Talks, etc.) |
| contents | All content items — videos, labs, articles, etc. |
| rooms | Rooms where events/sessions take place |
| topics | Topics like "SwiftUI", "Machine Learning", etc. |
| topicCategories | Groupings of topics |
| resources | Linked resources |
| imageTypes | Image type definitions |
| updated | Last update timestamp |
| snapshotId | Catalog snapshot identifier |
Each item in contents has:
id, title, description, type — always "Video" for session videos (normalized across all years)eventId — which event it belongs to (e.g. "wwdc2025")webPermalink — link to the session page on developer.apple.comtopicIds — associated topic IDsplatforms — e.g. ["iOS", "macOS"]media.hls — HLS video stream URLmedia.downloadHD / media.downloadSD — direct video download URLsmedia.slides — slide deck URLmedia.duration — duration in secondsmedia.chapters — chapter markers with timestampskeywords — search keywordsstartTime / endTime — for scheduled content like labsTo find all videos for a specific year:
wwdc25_videos = [c for c in catalog["contents"]
if c["eventId"] == "wwdc2025" and c["type"] == "Video"]
To search by keyword in title/description:
query = "swiftui"
matches = [c for c in catalog["contents"]
if query in c["title"].lower() or query in c["description"].lower()]
To get video download URLs:
for video in wwdc25_videos:
media = video.get("media")
if media and media.get("downloadHD"):
print(f"{video['title']}: {media['downloadHD']}")
eventId and type to narrow results before presenting to the user.topics list — join on topicIds from content items to get human-readable topic names.media field.development
Extract timestamped transcripts from WWDC session videos. Use this skill whenever the user wants to read, search, or get the transcript of a WWDC session or Apple developer video — even if they just say something like "what did they say about concurrency in that talk" or "get me the transcript for session 230". Also use this when the user provides a developer.apple.com/videos URL and wants to know what the video covers.
testing
Download WWDC session videos in HD or SD quality. Use this skill whenever the user wants to download a WWDC video, save a session video to disk, or get the video file for a specific WWDC talk. Supports lookup by URL, session ID (e.g. "wwdc2025/230"), session number, or title. Also use when the user says things like "download the AlarmKit session" or "grab the HD video for session 287".
tools
Generate a blog-post-style HTML page from a WWDC session, interleaving transcript text with slide screenshots. Use when the user wants to create a blog post, readable page, or visual summary from a WWDC talk — e.g. "create blog post from WWDC session 230", "generate HTML for that WWDC talk", "make a readable version of the AlarmKit session".
testing
Control Spotify playback and check what's currently playing. Use when the user asks what music or song is playing, wants to play/pause/stop music, skip tracks, or interact with Spotify in any way.