Obsah
Proměňte YouTube video v publikovatelný článek
Vezměte transkript s časovými razítky, převeďte ho na čitelné bloky, udělejte osnovu a draft modelem, který kontrolujete, a výsledek nechte v LiveDoc k revizi.
Zkopírovat prompt
Nahraďte pole v hranatých závorkách a vložte do Claude Code, Codex nebo AI s přístupem k terminálu. Nainstaluje skill Felo, zeptá se před utracením kreditů a spustí workflow.
Přveď toto video na publikovatelný článek: [URL YouTube nebo ID videa]. Publikum: [čtenáři]. Tón: [styl publikace]. Cílová délka: [800–1200 slov] v jazyce [jazyk]. Práce se zdroji: zachovej název videa, kanál a URL. Cituj nejvýše krátké pasáže, s časovými razítky. Vytvoř: 1. Pracovní titul. 2. Úvodní odstavec. 3. Sekce s krátkými odstavci. 4. Dvě nebo tři citace s časovým razítkem. 5. Co video nepokrylo. 6. Seznam zdrojů s videem a propojenými stránkami. Pravidla: - Nereprodukuj celý přepis. Shrnuj a cituj krátce. - Každé faktické tvrzení z videa potřebuje časové razítko; tvrzení z propojených stránek URL. - Vše, co se nepodařilo ověřit, označ jako „Neověřeno“. - Ptej se před utracením kreditů za přepis nebo extrakci stránek. - Nic nezveřejňuj, neplánuj a neposílej. - Výsledek zapiš do ./video-article.md a shrň ho v chatu.
Kopie obsahuje i instalační kroky a bezpečnostní pravidla.
Co dostanete
Ukázkový výstup jednoho běhu. Ne živé generování.
Co 40minutový talk o agentech skutečně řekl
Lead
Demo bylo působivé; užitečná byla práce s chybami.
Tvrzení, které všichni citovali
> „Agent nezchytřil. Jen jsme mu přestali dovolovat opakovat bez rozpočtu.” — [12:40]
Co video nepokrylo
Náklady na úspěšný úkol a co se stane, když je získaný zdroj špatný.
Zdroje
- Video: https://www.youtube.com/watch?v=...
- Odkazovaný benchmark: https://example.com/benchmark
Přesná volání
Pro vývojáře: stejný workflow jako kód, v pořadí provádění.
Zobrazit skutečná API volání
Vezměte transkript s časovými razítky
Použijte YouTube Subtitling pro titulky v cílovém jazyce a držte začátek a délku každého řádku.
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; }Ukázkový výstup
{ "title": "How we rebuilt onboarding", "contents": [ { "text": "Welcome back to the channel.", "start": 0.32, "duration": 4.1 } ] }Převeďte na čitelné bloky
Rozdělte podle témat, odstraňte výplně a držte časová razítka.
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"); }Ukázkový výstup
[00:00] Welcome back to the channel. Today we are talking about onboarding. [01:00] The first thing we changed was the welcome screen.
Získejte citované zdroje
Přes Web Fetch přečtěte stránky zmíněné ve videu a přidejte odkazy a fakta.
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 }; }), ); }Ukázkový výstup
[ { "url": "https://example.com/reference", "content": "# Reference\n\nExtracted page text…" } ]Udělejte osnovu, pak draft
Nejdřív požádejte Model API o osnovu, pak pište článek podle osnovy s krátkými citacemi a časovými razítky.
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, }; }Ukázkový výstup
{ "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 } }Nechte v LiveDoc k revizi
Uložte draft a citace do LiveDoc a předejte editorovi k opravě a schválení.
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; }Ukázkový výstup
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Co obsahuje
- YouTube transkript s časovými razítky
- Stránky citované videem jako Markdown
- Osnova a draft z Model API
- LiveDoc s draftem k revizi
Co nedělá
- Bez kopírování celého transkriptu; jen krátké citace a přepsání
- Video musí mít titulky
- Před publikací zkontrolujte práva a limit citace
- Model dělá osnovu a draft; konečné rozhodnutí je na editorovi
- Nepublikuje ani nepřekládá automaticky
Otázky
Musí mít video titulky?
Ano. Workflow začíná titulky; pokud chybí, zastaví se místo hádání řečeného.
Lze podcast proměnit v článek?
Tento workflow je pro YouTube. Pro podcast nejdřív připravte transkript a použijte stejná pravidla psaní.
Lze psát v jiném jazyce?
Ano. Zadejte cílový jazyk; citace zůstávají v originále s překladem, když je potřeba.
Kdo píše článek?
Agent AI, do kterého vložíte prompt, píše draft; Felo dodává transkript, stránky a místo revize.
Lze republikovat celý transkript?
Ne. Workflow tvoří nový článek s krátkými citacemi a nekopíruje celý transkript.
Kolik stojí jeden běh?
Transkript a extrakce stránek se účtují podle užití; aktuální sazby na stránce cen a prompt žádá schválení před útratou.
Související workflowy
Vydávejte denní AI digest, který tým opravdu čte
Získejte souhrn se zdroji, přidejte diskuse praktiků na X, vezměte transkript videa, sestavte vydání v Markdownu a archivujte v LiveDoc.
Otevřít workflowKancelářProměňte výzkumnou stránku v prezentaci
Extrahujte stránku, uložte jako kontext LiveDoc, nechte PPT Task API postavit deck a ptejte se, dokud není hotový odkaz.
Otevřít workflowPodporaOdpovídejte na otázky podpory z vlastní dokumentace
Vytvořte LiveDoc, nahrajte help centrum a interní runbook, získejte pasáže odpovídající ticketu a nechte model odpovídat jen z těch důkazů.
Otevřít workflowPřizpůsobte
Stejný recept, upravený podle toho, jak skutečně dodáváte.
Jen citace s časovými razítky
Nepište článek; dodejte seznam ověřitelných citací k opětovnému použití.
Nejdřív newsletter verze
Zkraťte článek a udělejte ho konverzačnější pro newsletter.
Zpracujte kanál dávkově
Opakujte kroky pro každé video a ukládejte samostatné LiveDocs.
Pokračujte
Referenční stránky za tímto receptem a další kroky.