← Skills

🌊 /content-cascade <url|latest>

Blog + Twitter thread + LinkedIn (+ lead magnet + SKFAI guide) from one video.

After you publishSkill 6 of 7

Turns a YouTube video into a full content cascade: blog post + Twitter thread + LinkedIn post (+ lead-magnet post and SKFAI guide for tutorials). Fetches the transcript, generates every piece from your voice prompts, and optionally saves drafts to Supabase.

Triggers: "generate content for this video", "content cascade for…", "write a blog post from my video", "run content cascade on my latest video".

Run /onboard first. If no channel is configured, the skill suggests it before proceeding.

Pipeline

  1. Get the video β€” use the URL, or for "latest" auto-detect with yt-dlp --flat-playlist --playlist-end 1 --print url --print title "https://www.youtube.com/channel/YOUR_CHANNEL_ID/videos" and confirm the title with you.
  2. Fetch the transcript β€” three methods, in order (see below).
  3. Extract metadata β€” 11-character video ID and title.
  4. Classify the video β€” tutorial (step-by-step, how-to, tool setup, code demos β†’ generates guide + lead magnet) vs. discussion (opinions, news, trend analysis β†’ regular LinkedIn only). You can override.
  5. Generate the blog post from blog-system-prompt.md β†’ shown for review.
  6. (Optional) check for an existing post in Supabase by youtube_video_id, then save (Supabase or local markdown).
  7. Generate the Twitter thread β†’ review β†’ save; optionally post it via post-thread.js.
  8. Generate the LinkedIn post (mirrors the video's full premise).
  9. Tutorials only: LinkedIn lead-magnet post (labelled "LINKEDIN (LEAD MAGNET)") and the SKFAI guide as HTML.
  10. Save local copies and print a summary (titles, tweet count, video type, files, review notes).

Transcript fetch β€” methods in order

#MethodCommand
1Apify β€” most reliable, esp. fresh uploads (sync call, 30–60 s)node …/scripts/fetch-transcript-apify.js "<url>"
2youtube-transcript (free)node …/scripts/fetch-transcript.js "<url>"
3yt-dlp subtitles β€” try en-orig (original captions) first, fall back to en auto-captionsyt-dlp --write-sub --sub-lang en-orig --skip-download --sub-format json3 …
⚠️ The auto-generated en track sometimes returns the wrong transcript for recent uploads. After any method, sanity-check the first 1–2 sentences against the video title β€” if they don't match, discard and try the next method. If all fail, the skill stops: "Captions aren't available yet β€” YouTube can take 30–60 minutes." It never proceeds without a transcript.

Blog post β€” generated fields

FieldSpec
meta_titleunder 60 chars, includes primary keyword
meta_description150–160 chars, keyword + CTA
primary_keyword / secondary_keywordsmain keyword; 3–5 related terms
sluglowercase-hyphenated, under 60 chars
excerpt1–2 sentence preview-card summary
tags3–7 topic tags
cover_imagealways the YouTube thumbnail: https://i.ytimg.com/vi/VIDEO_ID/maxresdefault.jpg
visual_assets5–8 real .jpg/.jpeg/.png files, each with type, source/model, path, placement after an H2/H3, alt text, caption (+ frame/timestamp for screenshots)
contentfull post in markdown, 1,500–2,500 words
review_noteswhat was cut from the transcript + any [STAT NEEDED] flags

Long-form visual requirement

SKFAI guide HTML skeleton (tutorials only)

A minimal standalone HTML document (system-font stack, 800px column, styled code/pre) with the guide content inside <body> β€” Skool preserves HTML when pasted.

Autonomy rules

Supabase REST config (optional)

← PreviousπŸ“‹ outlines