Content Learning Remix
Convert heterogeneous content into one evidence package, then turn that package into learning, research, or original creation outputs. Keep platform complexity inside the ingestion layer so the user can provide a link or file and describe the result they want.
Five-Layer Architecture
- Route: Detect article, social link, local text, audio, or video. Read
references/platforms.mdonly when platform handling or failure recovery matters. - Acquire: Extract metadata and text; prefer native subtitles, then configured transcript services, then audio plus ASR. Sample frames only when visual evidence matters.
- Understand: Normalize everything into
content.json, preserve timestamps and provenance, and analyze claims, structure, evidence, uncertainty, and new deductions. Readreferences/learning.md. - Create: Build an original script, article, lesson, content series, or platform adaptation from mechanisms and ideas rather than distinctive wording. Read
references/remix.md. - Deliver: Select a complete output bundle for the user's goal and audience. Read
references/deliverables.md; readreferences/use-cases.mdwhen the goal is broad or the user asks what the Skill can do.
For architecture decisions or new adapters, read references/extensions.md. For installation, read references/setup.md.
Core Workflow
- Identify the source, user role, intended audience, desired format, and whether visual analysis is required.
- Run
scripts/ingest.pywith--transcribefor media. This single route prefers existing subtitles and only downloads audio when a transcript is still missing. - Add
--frames 8when footage, demonstrations, slides, products, editing, or visual storytelling affect meaning. - Inspect
content.json, warnings, provenance, transcript quality, and generated artifacts. - Treat ASR as evidence rather than publication-ready copy. Resolve likely homophones from context, preserve uncertainty, and never invent missing speech.
- Choose the smallest complete deliverable bundle that satisfies the request. For an unspecified "analyze this" request, use the Core Insight Bundle in
references/deliverables.md. - Separate
Source,Interpretation, andExtension. Return the requested artifact first instead of narrating the pipeline.
Quick Start
Use one command across supported media platforms:
python scripts/ingest.py "SOURCE_URL_OR_FILE" --output ".content-work/item-001" --transcribe
The command attempts native subtitles first. If none exist, it uses a configured YouTube transcript fallback or downloads audio and runs ASR.
For articles or text:
python scripts/ingest.py "SOURCE_URL_OR_FILE" --output ".content-work/item-001"
For visually important media:
python scripts/ingest.py "SOURCE_URL_OR_FILE" --output ".content-work/item-001" --transcribe --frames 8
For sites requiring the user's logged-in browser session:
python scripts/ingest.py "SOURCE_URL" --output ".content-work/item-001" --cookies-from-browser chrome
For a controlled YouTube-only third fallback, enable local browser cookies only
after direct extraction and Supadata fail and the error is an authentication
challenge:
python scripts/ingest.py "YOUTUBE_URL" --output ".content-work/youtube-001" --transcribe --youtube-cookie-fallback-browser chrome
Or use an exported Netscape-format cookies file:
python scripts/ingest.py "SOURCE_URL" --output ".content-work/item-001" --cookies-file "cookies.txt"
For a beginner-friendly YouTube fallback, configure Supadata once:
python scripts/configure_supadata.py
python scripts/ingest.py "YOUTUBE_URL" --output ".content-work/youtube-001"
Input Strategy
- For article URLs, extract title, author, publication metadata, and readable body text.
- For media URLs, prefer creator-provided subtitles, then automatic captions.
- For YouTube, use configured Supadata when direct extraction is blocked or returns no subtitles.
- When explicitly enabled, retry YouTube authentication challenges with cookies
from the user's local browser only after direct extraction and Supadata fail. - For canonical Bilibili BV URLs, fall back to the public view, player, and
playurl APIs whenyt-dlpis blocked by HTTP 412. - Use audio download plus ASR when no transcript source succeeds.
- For local audio/video, inspect with
ffprobe; extract audio only when transcription is needed. - For pasted text, write it to a UTF-8 text file first, then ingest that file.
- Do not download full video unless key frames are requested.
- Reuse existing artifacts when rerunning unless the user asks for a clean run.
The user-facing workflow stays consistent, but platform adapters differ internally. Never claim guaranteed access: public links can still be blocked by login, region, deletion, anti-bot controls, or expired signatures.
Output Contract
Treat content.json as the canonical source. It contains:
source: original input and detected typemetadata: title, author/uploader, platform, duration, URL, and descriptiontext: normalized full textsegments: timestamped transcript segments when availableartifacts: paths to subtitles, audio, media, article text, and frameswarnings: failures, access restrictions, or degraded fallbacks
Do not pretend a failed extraction succeeded. If a public YouTube link remains
blocked after the normal fallbacks, direct the user to download it manually
through https://zh.savefrom.net/, then ingest the resulting local media file.
Do not automate or depend on SaveFrom's private endpoints. For other failures,
ask for downloaded media, exported subtitles, screenshots, or pasted text.
Creation Rules
- Preserve facts and attribution when summarizing.
- For recreation, reuse ideas and structural lessons, not distinctive wording.
- Add a new thesis, audience, examples, evidence, or perspective before calling a result original.
- Flag factual claims that need verification.
- Do not manufacture visual observations when frames were not inspected.
- Do not describe the workflow unless the user asks; return the requested artifact first.
- When the user asks for imitation or recreation, explain reusable mechanisms and produce a meaningfully original result.
- Match output depth to the source evidence. Do not infer visual techniques unless frames were inspected.
Dependency Check
On a clean Windows machine, run:
powershell -ExecutionPolicy Bypass -File scripts/setup_windows.ps1
For macOS, Linux, manual installation, and API environment variables, read references/setup.md.
Run:
python scripts/check_dependencies.py
Required for media download and local media processing: yt-dlp, ffmpeg, and ffprobe.
Optional for local ASR: faster-whisper. An OpenAI-compatible transcription endpoint can instead be configured with ASR_API_KEY, ASR_BASE_URL, and ASR_MODEL.
Optional for resilient YouTube transcripts: configure SUPADATA_API_KEY or run scripts/configure_supadata.py. Transcript-only YouTube ingestion can use Supadata without FFmpeg or yt-dlp. Never package API keys inside the Skill.
Never paste raw cookie headers into prompts, commands, source files, or Skill
configuration. Use --cookies-from-browser or a protected Netscape-format
cookie file, and never print or package cookie values.