youtube-to-links

star 470

Import a YouTube video or full playlist into apps/media/content/links/ as Keystatic MDX entries. Use when the user gives a YouTube URL and asks to add it (or all videos in it) to the media app's links collection. Channel-aware: videos from the Solana Foundation channel (@SolanaFndn) get tagged automatically.

solana-foundation By solana-foundation schedule Updated 6/1/2026

name: youtube-to-links description: Import a YouTube video or full playlist into apps/media/content/links/ as Keystatic MDX entries. Use when the user gives a YouTube URL and asks to add it (or all videos in it) to the media app's links collection. Channel-aware: videos from the Solana Foundation channel (@SolanaFndn) get tagged automatically.

YouTube → apps/media/content/links

Turn a YouTube URL into one MDX file per video under apps/media/content/links/, matching the schema in apps/media/keystatic.config.tsx and the formatting of existing entries like apps/media/content/links/catherine-gu-sdp-interview-fireblocks.mdx.

When to use

The user provides a YouTube URL (single video, short, or playlist) and asks to import / add / save it to the links collection.

  • youtube.com/watch?v=…, youtu.be/…, youtube.com/shorts/… → one MDX
  • youtube.com/playlist?list=… → one MDX per video in the playlist

How to use

Run the helper script. It reads YOUTUBE_DATA_API_KEY (or YOUTUBE_API_KEY) from the environment, falling back to apps/media/.env.local:

python3 skills/youtube-to-links/import_youtube.py "<youtube-url>"

Multiple URLs are accepted and de-duped. Existing files (matched by slug) are left untouched, so re-runs are safe.

What gets written

Frontmatter mirrors the existing links schema:

---
title: "<video title>"
url: "https://www.youtube.com/watch?v=<id>"
linkType: video
description: >
  <video title>
source: "YouTube"
publishedAt: <video publishedAt, ISO 8601 with ms>
tags: # only when channel is Solana (@SolanaFndn)
  - tag: solana-foundation
featured: false
---
<video title>

Fixed values (per the project owner):

  • source: "YouTube"
  • linkType: video
  • featured: false
  • description and MDX body are the video title (matches the Catherine Gu example). No category is added by default — fill in via Keystatic if needed.

Channel → tag mapping

Channel Tag applied
Solana (@SolanaFndn, channel id UC9AdQPUe4BdVJ8M9X7wxHUA) solana-foundation

Add new mappings in import_youtube.py (is_solana_foundation / SOLANA_CHANNEL_* constants) if more channels need tagging later.

Slug

The slug matches Keystatic's behavior (lowercase, non-alphanumerics → -, trimmed and truncated to 80 chars) so the filename matches what Keystatic would have generated had the entry been authored in the CMS.

Duplicate check

After writing, the script scans every .mdx in apps/media/content/links/, extracts the url: field, and groups by YouTube video id (falling back to the raw URL for non-YouTube links). Any group with more than one file is printed as a duplicate group, e.g.:

Found 1 duplicate group(s) in apps/media/content/links:
  yt:UW8qaI5SbEY
    - apps/media/content/links/accelerate-usa-2026-anatoly-yakovenko.mdx
    - apps/media/content/links/some-other-file-pointing-at-the-same-video.mdx

If you see this, decide which file to keep and delete the other — the script does not auto-delete.

After running

  • The script prints written / skipped for each video, a final summary, and the duplicate-check result.
  • Spot-check one of the generated files against apps/media/content/links/catherine-gu-sdp-interview-fireblocks.mdx.
  • If you want categories or extra tags, add them in Keystatic — the script leaves both empty by default (except the channel-based tag above).
Install via CLI
npx skills add https://github.com/solana-foundation/solana-com --skill youtube-to-links
Repository Details
star Stars 470
call_split Forks 352
navigation Branch main
article Path SKILL.md
More from Creator
solana-foundation
solana-foundation Explore all skills →