Content
Ein YouTube-Video in einen veröffentlichbaren Artikel verwandeln
Hole das Transkript mit Timestamps, forme es zu lesbaren Blöcken, erstelle Gliederung und Entwurf mit einem Modell unter deiner Kontrolle und lege das Ergebnis zur Prüfung im LiveDoc ab.
Prompt kopieren
Ersetze die Felder in eckigen Klammern und füge den Prompt in Claude Code, Codex oder eine KI mit Terminalzugriff ein. Sie installiert den Felo-Skill, fragt vor Credits und führt den Workflow aus.
Verwandle dieses Video in einen veröffentlichbaren Artikel: [YouTube-URL oder Video-ID]. Zielgruppe: [Leser]. Ton: [Publikationsstil]. Ziellänge: [800–1200 Wörter] auf [Sprache]. Quellenbehandlung: Behalte Videotitel, Kanal und URL. Zitiere höchstens kurze Passagen, mit Zeitstempeln. Erstelle: 1. Einen Arbeitstitel. 2. Einen Standfirst. 3. Abschnitte mit kurzen Absätzen. 4. Zwei oder drei zeitgestempelte Zitate. 5. Was das Video nicht behandelt hat. 6. Eine Quellenliste mit dem Video und allen verlinkten Seiten. Regeln: - Gib nicht das vollständige Transkript wieder. Fasse zusammen und zitiere kurz. - Jede Tatsachenbehauptung aus dem Video braucht einen Zeitstempel; Behauptungen aus verlinkten Seiten brauchen eine URL. - Markiere alles, was du nicht verifizieren konntest, als „Nicht verifiziert“. - Frage vorher, bevor du Credits für Transkripte oder Seitenextraktion ausgibst. - Veröffentliche, plane oder versende nichts. - Schreibe das Ergebnis nach ./video-article.md und fasse es im Chat zusammen.
Die Kopie enthält auch die Installationsschritte und Sicherheitsregeln.
Das bekommst du
Beispielausgabe eines Laufs. Keine Live-Generierung.
Was ein 40-minütiger Agent-Talk wirklich sagte
Standfirst
Die Demo war beeindruckend; der nützliche Teil war die Fehlerbehandlung.
Die Aussage, die alle zitierten
> „Der Agent wurde nicht schlauer. Wir haben nur aufgehört, ihn ohne Budget retryen zu lassen.“ — [12:40]
Was das Video nicht abdeckte
Kosten pro erfolgreicher Aufgabe und was passiert, wenn die abgerufene Quelle falsch ist.
Quellen
- Video: https://www.youtube.com/watch?v=...
- Verlinkter Benchmark: https://example.com/benchmark
Die konkreten Aufrufe
Für Entwickler: derselbe Workflow als kopierbarer Code in Ausführungsreihenfolge.
Konkrete API-Aufrufe zeigen
Transkript mit Timestamps holen
Hole mit YouTube Subtitling die Untertitel in der Zielsprache und behalte Startzeit und Dauer jeder Zeile.
article.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type Transcript = { data: { title: string; contents: { text: string; start: number; duration: number }[]; }; }; export async function fetchTranscript(videoId: string, language = "en") { const query = new URLSearchParams({ video_code: videoId, language, with_time: "true", }); const { data } = await felo<Transcript>(`/v2/youtube/subtitling?${query}`); if (data.contents.length === 0) throw new Error("This video has no subtitles"); return data; }Beispielausgabe
{ "title": "How we rebuilt onboarding", "contents": [ { "text": "Welcome back to the channel.", "start": 0.32, "duration": 4.1 } ] }In lesbare Blöcke formen
Teile das Transkript nach Themen, entferne Füllwörter und behalte die Timestamps.
article.ts const toClock = (seconds: number) => { const minutes = Math.floor(seconds / 60); const rest = Math.floor(seconds % 60); return `${String(minutes).padStart(2, "0")}:${String(rest).padStart(2, "0")}`; }; export function toBlocks( contents: Transcript["data"]["contents"], window = 60, ) { const grouped = new Map<number, string[]>(); for (const line of contents) { const bucket = Math.floor(line.start / window) * window; grouped.set(bucket, [...(grouped.get(bucket) ?? []), line.text.trim()]); } return [...grouped] .map(([start, lines]) => `[${toClock(start)}] ${lines.join(" ")}`) .join("\n\n"); }Beispielausgabe
[00:00] Welcome back to the channel. Today we are talking about onboarding. [01:00] The first thing we changed was the welcome screen.
Im Video genannte Quellen laden
Lies mit Web Fetch die im Video genannten Seiten und ergänze Links und Fakten.
article.ts type ExtractData = { data: { content: string } }; export async function fetchSources(urls: string[]) { return Promise.all( urls.slice(0, 5).map(async (url) => { const page = await felo<ExtractData>("/v2/web/extract", { url, output_format: "markdown", with_readability: true, }); return { url, content: page.data.content }; }), ); }Beispielausgabe
[ { "url": "https://example.com/reference", "content": "# Reference\n\nExtracted page text…" } ]Gliedern und dann entwerfen
Erstelle zuerst eine Gliederung mit dem Model API und schreibe danach den Artikel entlang der Gliederung mit kurzen Zitaten und Timestamps.
article.ts const MODEL_API = "https://openapi.felo.ai/api/v1"; type Completion = { choices: { message: { content: string } }[]; usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number }; }; async function complete(model: string, prompt: string): Promise<Completion> { const res = await fetch(`${MODEL_API}/chat/completions`, { method: "POST", headers, body: JSON.stringify({ model, messages: [{ role: "user", content: prompt }] }), }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<Completion>; } export async function draftArticle(title: string, transcript: string) { const outline = await complete( "claude-haiku-5-5", "Outline a short article from this transcript. Return only headings.\n\n" + transcript, ); const article = await complete( "claude-sonnet-5-5", `Write the article "${title}" from the transcript. Follow the outline and keep [mm:ss] on direct quotes.\n\nOutline:\n${outline.choices[0].message.content}\n\nTranscript:\n${transcript}`, ); return { outline: outline.choices[0].message.content, article: article.choices[0].message.content, usage: article.usage, }; }Beispielausgabe
{ "outline": "1. The problem\n2. What changed\n3. What we learned", "article": "## The problem\n\nWhen we…", "usage": { "prompt_tokens": 4120, "completion_tokens": 640, "total_tokens": 4760 } }Im LiveDoc zur Prüfung ablegen
Speichere Entwurf und Zitate im LiveDoc und gib sie zum Bearbeiten und Freigeben an den Editor.
article.ts type LiveDocData = { data: { short_id: string } }; type ResourceData = { data: { id: string } }; export async function saveDraft( title: string, result: { outline: string; article: string }, ) { const doc = await felo<LiveDocData>("/v2/livedocs", { name: `Article draft: ${title}`, description: "Draft generated from a video transcript", }); await felo<ResourceData>(`/v2/livedocs/${doc.data.short_id}/resources/doc`, { title: "Draft", content: result.article, }); await felo<ResourceData>(`/v2/livedocs/${doc.data.short_id}/resources/doc`, { title: "Outline", content: result.outline, }); return doc.data.short_id; }Beispielausgabe
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Enthalten
- YouTube-Transkript mit Timestamps
- Im Video genannte Seiten als Markdown
- Gliederung und Entwurf deines Model API
- LiveDoc mit dem Entwurf für das Editoren-Review
Was es nicht macht
- Kein vollständiges Transkript; nur kurze Zitate und Überarbeitung
- Das Video braucht vorhandene Untertitel
- Urheberrechte und Zitierumfang vor Veröffentlichung prüfen
- Das Modell liefert Gliederung und Entwurf, die letzte Entscheidung bleibt beim Editor
- Veröffentlicht nicht und übersetzt nicht automatisch
Fragen
Braucht das Video Untertitel?
Ja. Der Workflow beginnt mit Untertiteln; fehlen sie, stoppt er, statt Gesagtes zu erraten.
Kann ich einen Podcast in einen Artikel verwandeln?
Dieser Workflow ist für YouTube. Für Podcasts erstelle zuerst ein Transkript und nutze dieselben Schreibregeln.
Kann ich in einer anderen Sprache schreiben?
Ja. Gib die Zielsprache an; Zitate bleiben im Original, bei Bedarf mit Übersetzung.
Wer schreibt den Artikel?
Der KI-Agent, in den du den Prompt einfügst, schreibt den Entwurf; Felo liefert Transkript, Seiten und den Prüfbereich.
Darf ich das ganze Transkript veröffentlichen?
Nein. Der Workflow erstellt einen neuen Artikel mit kurzen Zitaten und kopiert das Transkript nicht vollständig.
Was kostet ein Lauf?
Transkript und Seitenextraktion werden nutzungsbasiert abgerechnet; aktuelle Preise stehen auf der Preisseite, und der Prompt fragt vor Ausgaben nach Bestätigung.
Verwandte Workflows
Einen täglichen KI-News-Digest bauen, den dein Team wirklich liest
Hole eine belegte News-Zusammenfassung, ergänze Diskussionen von Praktikern auf X, nimm ein Video-Transkript auf, verfasse die Ausgabe in Markdown und archiviere sie im LiveDoc.
Workflow öffnenOfficeEine Rechercheseite in eine Präsentation verwandeln
Extrahiere die Seite, speichere sie als LiveDoc-Kontext, lass die PPT Task API das Deck bauen und frage ab, bis der fertige Link vorliegt.
Workflow öffnenSupportSupport-Fragen aus deiner eigenen Dokumentation beantworten
Erstelle ein LiveDoc, lade Helpcenter und internes Runbook, rufe die Passagen ab, die den Ticket beantworten, und lass das Modell nur aus diesen Belegen antworten.
Workflow öffnenMach es zu deinem
Dasselbe Rezept, angepasst an deinen tatsächlichen Ablauf.
Nur Timestamp-Zitate
Schreibe keinen Artikel, sondern liefere eine prüfbare Zitatliste zur Wiederverwendung.
Zuerst die Newsletter-Version
Mach den Artikel zu einer kürzeren, gesprächigeren Newsletter-Version.
Einen Kanal im Batch verarbeiten
Wiederhole die Schritte für jedes Video und speichere separate LiveDocs.
Weiter
Die Referenzseiten hinter diesem Rezept und die nächsten Schritte.