콘텐츠
YouTube 영상을 게시 가능한 기사로 바꾸기
타임스탬프가 있는 자막을 가져와 읽기 쉬운 블록으로 정리하고, 직접 관리하는 모델로 개요와 초안을 쓴 뒤 리뷰용 LiveDoc에 남깁니다.
프롬프트 복사
대괄호 항목을 바꾼 뒤 Claude Code, Codex 또는 터미널에 접근할 수 있는 AI에 붙여넣으세요. Felo 스킬을 설치하고 크레딧을 쓰기 전에 확인한 뒤 워크플로를 실행합니다.
이 영상을 게시 가능한 기사로 바꿔 주세요: [YouTube URL 또는 영상 ID]. 독자: [독자]. 톤: [매체 스타일]. 목표 분량: [800–1200단어], 언어: [언어]. 출처 처리: 영상 제목, 채널, URL을 유지하세요. 인용은 짧은 부분만, 타임스탬프와 함께. 다음을 작성해 주세요. 1. 작업 제목. 2. 스탠드퍼스트(리드 문단). 3. 짧은 문단으로 구성된 섹션. 4. 타임스탬프가 있는 인용 두세 개. 5. 영상이 다루지 않은 내용. 6. 영상과 링크된 페이지를 포함한 출처 목록. 규칙: - 전체 스크립트를 재현하지 마세요. 요약하고 짧게 인용하세요. - 영상의 모든 사실 주장에는 타임스탬프를, 링크된 페이지의 주장에는 URL을 붙이세요. - 확인할 수 없는 내용은 "미확인"으로 표시하세요. - 스크립트 가져오기나 페이지 추출에 크레딧을 쓰기 전에 먼저 물어보세요. - 게시, 예약, 전송을 하지 마세요. - 결과를 ./video-article.md에 쓰고 채팅에서 요약해 주세요.
복사 내용에는 설치 단계와 안전 규칙도 포함됩니다.
완성되는 것
실행 시 예제 출력입니다. 실시간 생성이 아닙니다.
40분 에이전트 강연이 실제로 말한 것
리드
데모는 인상적이었지만 유용한 부분은 실패 처리였다.
모두가 인용한 주장
> “에이전트가 더 똑똑해진 게 아니다. 예산 없이 재시도하지 못하게 했을 뿐이다.” — [12:40]
영상이 다루지 않은 것
성공 작업당 비용, 그리고 검색된 출처가 틀렸을 때 벌어지는 일.
출처
- 영상: https://www.youtube.com/watch?v=...
- 링크된 벤치마크: https://example.com/benchmark
실제 호출
개발자용: 같은 워크플로를 실행 순서대로 담은 복사 가능한 코드.
실제 API 호출 보기
타임스탬프 자막 가져오기
YouTube Subtitling으로 대상 언어 자막을 가져오고 각 줄의 시작 시간과 길이를 남깁니다.
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; }예제 출력
{ "title": "How we rebuilt onboarding", "contents": [ { "text": "Welcome back to the channel.", "start": 0.32, "duration": 4.1 } ] }읽기 쉬운 블록으로 정리하기
주제별로 자막을 나누고 말버릇 채움말을 제거하되 타임스탬프는 남깁니다.
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"); }예제 출력
[00:00] Welcome back to the channel. Today we are talking about onboarding. [01:00] The first thing we changed was the welcome screen.
영상이 참조한 출처 가져오기
Web Fetch로 영상에서 언급한 페이지를 읽고 링크와 사실을 보충합니다.
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 }; }), ); }예제 출력
[ { "url": "https://example.com/reference", "content": "# Reference\n\nExtracted page text…" } ]개요를 쓴 뒤 초안 작성하기
모델 API로 먼저 개요를 쓰고 개요에 따라 기사를 쓰며 짧게 인용하고 타임스탬프를 답니다.
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, }; }예제 출력
{ "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 } }LiveDoc에 두고 리뷰 기다리기
초안과 타임스탬프 인용을 LiveDoc에 저장하고 편집자에게 수정과 승인을 요청합니다.
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; }예제 출력
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
포함되는 것
- 타임스탬프가 있는 YouTube 자막
- 영상이 참조한 페이지의 Markdown
- 모델 API가 만든 개요와 초안
- 초안을 저장하고 편집자가 리뷰하는 LiveDoc
하지 않는 것
- 자막 전체를 전재하지 않고 짧게 인용·요약
- 영상에 기존 자막이 필요
- 재게시 전 저작권과 인용 범위 확인
- 모델은 개요와 초안만 담당하며 최종 판단은 편집자
- 자동 게시나 다른 언어 번역은 하지 않음
자주 묻는 질문
영상에 자막이 필요하나요?
필요합니다. 워크플로는 자막에서 시작하며 없으면 추측하지 않고 멈춥니다.
팟캐스트도 기사로 만들 수 있나요?
이 워크플로는 YouTube용입니다. 팟캐스트는 먼저 자막을 준비한 뒤 같은 작성 규칙을 씁니다.
다른 언어로 쓸 수 있나요?
네. 대상 언어를 지정하세요. 인용은 원문으로 남기고 필요하면 번역을 붙입니다.
기사는 누가 쓰나요?
프롬프트를 붙여넣은 AI agent가 초안을 쓰고 Felo는 자막, 페이지, 리뷰 환경을 제공합니다.
자막 전체를 재게시할 수 있나요?
아니요. 새 기사와 짧은 인용만 하며 자막 전체를 복제하지 않습니다.
한 번 비용은?
자막과 페이지 추출은 사용량 기반 크레딧입니다. 현재 요금은 가격 페이지에 있고 프롬프트는 쓰기 전에 승인을 요청합니다.
관련 워크플로
팀이 실제로 읽는 일일 AI 뉴스 다이제스트 만들기
출처 있는 뉴스 요약을 가져오고 X의 실무자 논의를 더하고 영상 자막 하나를 가져온 뒤 Markdown으로 호를 구성해 LiveDoc에 보관합니다.
워크플로 열기오피스리서치 페이지를 슬라이드 덱으로 바꾸기
페이지를 추출해 LiveDoc 맥락으로 저장하고 PPT Task API가 deck을 만드는 동안 완료 링크를 폴링합니다.
워크플로 열기지원자신의 문서로 지원 질문에 답하기
LiveDoc을 만들고 헬프 센터와 내부 runbook을 읽어 들인 뒤 티켓에 답할 구절을 검색하고 그 증거만으로 모델이 답하게 합니다.
워크플로 열기내 방식으로 바꾸기
같은 레시피를 실제 배포 방식에 맞게 조정합니다.
타임스탬프 인용만 만들기
기사 전체 대신 확인 가능한 인용 목록만 출력해 2차 창작에 씁니다.
뉴스레터 버전 먼저 쓰기
기사를 더 짧고 구어체인 뉴스레터 버전으로 바꿉니다.
채널을 일괄 처리하기
각 영상에 같은 단계를 반복하고 LiveDoc을 따로 저장합니다.
더 알아보기
이 레시피의 배경이 되는 참고 페이지와 다음에 볼 곳.