Communitygithub.com

youtube-note-forge

Ein Agenten-Skill, der YouTube- und Bilibili-Videos in Obsidian-fähige Lernnotizen umwandelt.

Was ist youtube-note-forge?

Dieser Skill, `youtube-note-forge`, ist eine leistungsstarke Pipeline zur Umwandlung von YouTube- und Bilibili-Videos in strukturierte, Obsidian-kompatible Lernnotizen. Er ist als strenger Zustandsautomat konzipiert und führt einen festgelegten Workflow aus: Transkriptextraktion, KI-gestützte Analyse zur Erstellung eines Notizplans mit Kapiteln und Schlüsselbildern, Extraktion dieser Frames und abschließende Formatierung und Validierung der Notiz. Der Skill ist Teil des größeren Ökosystems um das `youtube-note-reader` Obsidian-Plugin und eine Chrome-Erweiterung zur Bereitstellung von Video-URLs und Cookies. Obwohl OpenCode als optionaler Einstiegspunkt dient, ist die primäre Laufzeitumgebung das Obsidian-Plugin. Der Skill behandelt Fehler streng, indem er anhält und die erste Nicht-Null-Ausgabe meldet, anstatt alternative Methoden zu versuchen. Die Ausgabe ist eine Obsidian-Notiz mit YAML-Metadaten, einem chinesischen Titel und einer englischen Ergänzung, in die mithilfe von Obsidian-Wiki-Einbettungen Screenshots als Beweise eingefügt werden. Der Workflow stellt sicher, dass die Notiz genau den Videotranskripten folgt, Lernziele in jedem Kapitel hervorhebt und visuelle Beweise liefert, ohne überflüssige Inhalte.

Funktioniert mit~Claude Code✓Codex CLI~Cursor✓OpenCode
npx skills add yinbaozong/Youtube-note-forge

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

YouTube Transcript v4.0.0

Die primäre Vollprodukt-Laufzeitumgebung ist das youtube-note-reader Obsidian-Desktop-Plugin. Es besitzt den deterministischen Zustandsautomaten, ruft das konfigurierte OpenAI-kompatible Modell auf, führt diese Skripte aus, persistiert den Aufgabenstatus und schreibt die fertige Notiz in die aktive Vault. Die Chrome-Erweiterung liefert nur die aktuelle Video-URL und das Browser-Cookie. OpenCode bleibt ein optionaler Skill-only-Einstiegspunkt und wird von der vollständigen Browser- + Obsidian-Installation nicht benötigt.

Verwenden Sie diesen Skill als strengen Zustandsautomaten. Improvisieren Sie keine alternativen Extraktionspfade.

Version

Wenn der Benutzer nach der aktuellen Version fragt, führen Sie Folgendes aus:

python .obsidian/skills/youtube-transcript/scripts/video_note.py --version

Geben Sie die Befehlsausgabe zurück. Antworten Sie niemals aus dem Gedächtnis. Es meldet die installierte Version, den Quellpfad und SHA-256-Werte für die Kern-Dateien.

Fester Workflow

Führen Sie für jede URL die folgenden Schritte vollständig aus, bevor Sie zur nächsten URL übergehen. Stoppen Sie den gesamten Batch beim ersten Skript-Ergebnis ungleich Null.

  1. Quellmaterial extrahieren:
python .obsidian/skills/youtube-transcript/scripts/extract_transcript.py "<url>" --output-dir "YouTube video" --deadline 300
  1. Lesen Sie die generierte Notiz und ihre SRT. Erstellen Sie einen JSON-Plan mit article_outline und frames. article_outline enthält 3-8 aus dem Transkript abgeleitete Kapitel; jedes Element hat section_id, title, start, end, core_claims und learning_goal. Wählen Sie Frames nach Lernwert aus, normalerweise ein erforderlicher Frame für jedes visuell sinnvolle Kapitel plus optionale Belege für unterschiedliche Schritte oder Ergebnisse. Die meisten Videos benötigen 6-14 Frames; 24 ist nur die harte Sicherheitsgrenze, niemals ein Ziel. Erstellen Sie nicht mehrere nahezu identische Zeitpunkte, nur um die Anzahl zu erhöhen. Jeder Frame hat section_id, timestamp, purpose und required. Verwenden Sie dieselbe section_id, um jeden Screenshot an sein detailliertes Zusammenfassungskapitel zu binden. Benennen Sie die Notiz noch nicht um und überschreiben Sie sie nicht. Schreiben Sie keine Probe-Skripte oder inspizieren Sie Videoformate manuell.
  2. Extrahieren Sie die geplanten Frames genau einmal. Nach einem erfolgreichen Materialergebnis ist dies der einzig zulässige nächste ausführbare Befehl:
python .obsidian/skills/youtube-transcript/scripts/extract_frames.py "<url>" --plan "<plan.json>" --note "<generated-note.md>" --output-dir "YouTube video" --deadline 120
  1. Bestätigen Sie, dass das Frame-Ergebnis status: ok, mindestens einen Screenshot und einen echten manifest Pfad enthält. Das Skript schreibt automatisch frame_manifest in das Notiz-YAML. Wenn eines dieser Elemente fehlt, stoppen Sie; schreiben Sie die endgültige Notiz nicht und ersetzen Sie das Cover nicht.
  2. Benennen Sie die generierte Notiz um und überschreiben Sie sie direkt gemäß references/note-contract.md. Verwenden Sie unter ## 详细内容总结 jeden article_outline.title als exakte ###-Überschrift, erklären Sie seine Kernaussagen und fügen Sie jeden erfolgreichen erforderlichen Frame mit einer chinesischen Erklärung in sein passendes Kapitel ein. Verwenden Sie für vault-lokale Screenshots immer Obsidian-Wiki-Einbettungen wie ![[YouTube video/assets/VIDEO_ID/frame.jpg]]; verwenden Sie niemals ein nicht maskiertes Markdown-Ziel, das Leerzeichen enthält. Nur Bilder, die im Manifest aufgeführt sind, gelten als Screenshots.
  3. Validieren:
python .obsidian/skills/youtube-transcript/scripts/validate_note.py "<finished-note.md>"
  1. Wenn die Validierung fehlschlägt, bearbeiten Sie diese Notiz nur einmal und führen Sie den Validator erneut aus. Führen Sie während dieser Reparatur niemals eine Extraktion durch, schreiben Sie temporäre Skripte, inspizieren Sie Implementierungscode oder diagnostizieren Sie das Plattformverhalten. Wenn es immer noch fehlschlägt, stoppen Sie und melden Sie die zurückgegebenen Fehler. Nach einer erfolgreichen Validierung entfernt der Validator nur 待命名 - ... Markdown-Entwürfe im selben Ordner, deren YAML url genau mit der endgültigen Notiz übereinstimmt; nicht übereinstimmende unterbrochene Entwürfe bleiben für eine Wiederaufnahme verfügbar.

Fehlerbehandlungsrichtlinie

PIPELINE_RESULT ist die Quelle der Wahrheit. Bei status: error sofort anhalten und die URL, Phase, Code, Nachricht, Aktion, abgeschlossene URLs und nicht gestartete URLs melden.

Reagieren Sie niemals auf einen Fehler, indem Sie einen anderen Downloader, einen Browser, Puppeteer, Chrome/Edge-Cookie-Extraktion, eine Websuche, eine Audioaufnahme oder einen zweiten Versuch ausführen. Der einzige kontrollierte Wiederholungsversuch befindet sich in den Skripten: Ein letzter bekanntermaßen gültiger Cookie-Check und eine Aktualisierung der Video-Stream-URL während der gezielten Frame-Extraktion.

ASR ist standardmäßig deaktiviert. Verwenden Sie --allow-asr nur, wenn der Benutzer explizit Audio-Download und langsamere Verarbeitung akzeptiert.

Visuelle Anforderungen

  • Screenshots sind Beweise, keine Dekoration.
  • Verwenden Sie Demonstrationen, Schnittstellen, Diagramme, Parameter, Vergleichszustände und Ergebnisse.
  • Das Frame-Skript verwendet zuerst einen entfernten 720p-oder-niedriger-Stream mit yt-dlp-Anforderungs-Headern. Wenn das ferne Seek fehlschlägt, kann es nur ein 8-Sekunden-begrenztes Segment um jeden geplanten Zeitpunkt herunterladen. Temporäre Segmente werden sofort gelöscht und ein vollständiges Video wird niemals für Screenshots heruntergeladen.
  • Ein Fehler bei einem erforderlichen Frame oder weniger als 70% Frame-Plan-Abdeckung ist ein schwerwiegender Fehler.
  • Ein Cover, Thumbnail, manuell kopiertes Bild oder doppelter Embed zählt niemals als Keyframe.
  • Behalten Sie geplante Frames bei, selbst wenn ihre Gesamtlayouts ähnlich aussehen. Terminaltext, Code, Folien und UI-Zustandsänderungen sind nützlich. Lehnen Sie nur effektiv leere schwarze/weiße Frames ab; verwenden Sie keine OCR, KI-Bildanalyse oder wahrnehmungsbezogene Duplikatfilterung.
  • Behalten Sie geplante Frames bei, selbst wenn ihre Gesamtlayouts ähnlich aussehen. Terminaltext, Code, Folien und UI-Zustandsänderungen sind nützlich. Lehnen Sie nur effektiv leere schwarze/weiße Frames ab; verwenden Sie keine OCR, KI-Bildanalyse oder wahrnehmungsbezogene Duplikatfilterung.
  • Behaupten Sie niemals den Abschluss, es sei denn, frame_manifest existiert und jeder erforderliche Manifest-Frame erscheint in ## 详细内容总结.
  • Erstellen Sie keine Canvas-Dateien.

Anforderungen an die endgültige Notiz

  • Dateiname: 中文标题 - English Title.
  • YAML enthält skill_version: 4.0.0, quality_profile_version: 1 und ein gültiges frame_manifest, das von extract_frames.py geschrieben wurde.
  • Der Text beginnt mit ## 一句话摘要 ohne eine doppelte H1-Überschrift.
  • Entfernen Sie Quellstatus, Videobeschreibung, visuelle Materialindizes, Extraktionswarnungen, Aufgabenanweisungen und Selbstprüfungsabschnitte aus dem endgültigen Text; YAML trägt bereits Quellmetadaten.
  • Verwenden Sie zuerst Chinesisch; erklären Sie notwendige englische Terminologie bei der ersten Verwendung.
  • Lassen Sie das Transkript die Gliederung und Tiefe des Artikels bestimmen. Bilder unterstützen die Erklärung; kürzen oder lassen Sie niemals wichtige Inhalte weg, nur weil ein passender Frame nicht verfügbar ist.
  • Passen Sie die Artikeltiefe an die Videodauer an. Jedes geplante Kapitel benötigt eine echte Erklärung, Video-Beweis oder Beispiel und eine klare Lernimplikation. Vermeiden Sie generische Fülltexte und wiederholte Absätze.
  • Verlinken Sie die SRT am Ende. Fügen Sie keinen rohen Transkripttext ein.
  • Entfernen Sie die Selbstprüfungs-Checkliste vor dem endgültigen Abschluss.

Verwandte Skills