Contenuti
Trasforma un video YouTube in un articolo pubblicabile
Prendi la trascrizione con timestamp, trasformala in blocchi leggibili, crea scaletta e bozza con un modello che controlli e lascia il risultato in un LiveDoc per la revisione.
Copia il prompt
Sostituisci i campi tra parentesi quadre e incolla in Claude Code, Codex o qualsiasi IA con accesso al terminale. Installa lo skill Felo, chiede prima di spendere crediti ed esegue il workflow.
Trasforma questo video in un articolo pubblicabile: [URL YouTube o ID video]. Pubblico: [lettori]. Tono: [stile editoriale]. Lunghezza target: [800–1200 parole] in [lingua]. Gestione delle fonti: conserva titolo, canale e URL del video. Cita al massimo brevi passaggi, con timestamp. Produci: 1. Un titolo di lavoro. 2. Un sommario di apertura. 3. Sezioni con paragrafi brevi. 4. Due o tre citazioni con timestamp. 5. Cosa il video non ha coperto. 6. Un elenco di fonti con il video e le pagine collegate. Regole: - Non riprodurre la trascrizione completa. Riassumi e cita brevemente. - Ogni affermazione fattuale dal video richiede un timestamp; quelle da pagine collegate richiedono un URL. - Segna come «Non verificato» tutto ciò che non hai potuto controllare. - Chiedi prima di consumare crediti per trascrizioni o estrazione di pagine. - Non pubblicare, programmare né inviare nulla. - Scrivi il risultato in ./video-article.md e riassumilo in chat.
La copia include anche i passaggi di installazione e le regole di sicurezza.
Cosa ottieni
Output di esempio di un'esecuzione. Non è generazione dal vivo.
Cosa ha detto davvero un talk di 40 minuti sugli agenti
Sommario
La demo era impressionante; la parte utile era la gestione degli errori.
L’affermazione che tutti hanno citato
> «L’agente non è diventato più intelligente. Abbiamo solo smesso di lasciarlo riprovare senza budget.» — [12:40]
Cosa il video non ha coperto
Il costo per attività riuscita e cosa succede quando la fonte recuperata è sbagliata.
Fonti
- Video: https://www.youtube.com/watch?v=...
- Benchmark collegato: https://example.com/benchmark
Le chiamate esatte
Per gli sviluppatori: lo stesso workflow come codice, nell'ordine di esecuzione.
Mostra le chiamate API reali
Prendi la trascrizione con timestamp
Usa YouTube Subtitling per i sottotitoli nella lingua target e conserva inizio e durata di ogni riga.
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; }Output di esempio
{ "title": "How we rebuilt onboarding", "contents": [ { "text": "Welcome back to the channel.", "start": 0.32, "duration": 4.1 } ] }Trasforma in blocchi leggibili
Dividi per tema, rimuovi riempitivi e conserva i timestamp.
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"); }Output di esempio
[00:00] Welcome back to the channel. Today we are talking about onboarding. [01:00] The first thing we changed was the welcome screen.
Recupera le fonti citate
Con Web Fetch leggi le pagine nominate nel video e aggiungi link e fatti.
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 }; }), ); }Output di esempio
[ { "url": "https://example.com/reference", "content": "# Reference\n\nExtracted page text…" } ]Fai la scaletta e poi la bozza
Chiedi prima una scaletta al Model API e scrivi l’articolo seguendola, con citazioni brevi e timestamp.
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, }; }Output di esempio
{ "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 } }Lascia nel LiveDoc per la revisione
Salva bozza e citazioni nel LiveDoc e passale all’editor per correzioni e approvazione.
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; }Output di esempio
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Cosa include
- Trascrizione YouTube con timestamp
- Pagine citate dal video in Markdown
- Scaletta e bozza del tuo Model API
- LiveDoc con la bozza per la revisione
Cosa non fa
- Nessuna riproduzione integrale: solo citazioni brevi e riscrittura
- Il video deve avere sottotitoli
- Verifica diritti e limiti di citazione prima di pubblicare
- Il modello fa scaletta e bozza; la decisione finale è dell’editor
- Non pubblica né traduce automaticamente
Domande
Il video deve avere sottotitoli?
Sì. Il workflow parte dai sottotitoli; se mancano si ferma invece di indovinare.
Posso trasformare un podcast in articolo?
Questo workflow è per YouTube. Per un podcast prepara prima una trascrizione e usa le stesse regole.
Posso scrivere in un’altra lingua?
Sì. Indica la lingua target; le citazioni restano nell’originale con traduzione se serve.
Chi scrive l’articolo?
L’agent IA in cui incolli il prompt scrive la bozza; Felo fornisce trascrizione, pagine e ambiente di revisione.
Posso ripubblicare l’intera trascrizione?
No. Il workflow crea un nuovo articolo con citazioni brevi e non copia tutto.
Quanto costa un’esecuzione?
Trascrizione ed estrazione sono a consumo; le tariffe sono nella pagina prezzi e il prompt chiede approvazione prima di spendere.
Workflow correlati
Pubblica un digest quotidiano di notizie IA che il team legga davvero
Ottieni una rassegna con fonti, aggiungi le discussioni dei professionisti su X, prendi una trascrizione video, componi l’edizione in Markdown e archiviala in un LiveDoc.
Apri il workflowUfficioTrasforma una pagina di ricerca in una presentazione
Estrai la pagina, salvala come contesto LiveDoc, lascia che la PPT Task API costruisca il deck e interroga finché il link è pronto.
Apri il workflowSupportoRispondi alle domande di supporto dalla tua documentazione
Crea un LiveDoc, carica help center e runbook interno, recupera i passaggi che rispondono al ticket e lascia che il modello risponda solo da quelle prove.
Apri il workflowAdattala a te
La stessa ricetta, adattata a come lavori davvero.
Solo citazioni con timestamp
Non scrivere l’articolo; consegna un elenco di citazioni verificabili.
Prima la versione newsletter
Rendi l’articolo più breve e colloquiale per la newsletter.
Elabora un canale in batch
Ripeti i passi per ogni video e salva LiveDoc separati.
Continua
Le pagine di riferimento dietro questa ricetta e i prossimi passi.