Felo API PlatformFelo API Platform

Контент

Перетворіть YouTube-відео на статтю, готову до публікації

Візьміть транскрипт із таймкодами, перетворіть його на читабельні блоки, зробіть структуру й чернетку моделлю, яку контролюєте, і залиште результат у LiveDoc для перевірки.

Час25 хвилинРівеньСереднійОновлено2026-10-29
Для когоКоманди контентуАвтори розсилокРедактори відео й подкастів

Скопіювати промпт

Замініть поля в квадратних дужках і вставте в Claude Code, Codex або AI з доступом до термінала. Він встановить скіл Felo, запитає перед витратою кредитів і запустить процес.

Перетвори це відео на статтю, готову до публікації: [URL YouTube або 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
  1. Візьміть транскрипт із таймкодами

    Використайте 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 }
      ]
    }
  2. Перетворіть на читабельні блоки

    Розділіть за темами, приберіть слова-заповнювачі й збережіть таймкоди.

    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.
  3. Візьміть цитовані джерела

    Через 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…"
      }
    ]
  4. Зробіть структуру, потім чернетку

    Спершу попросіть структуру в Model 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 }
    }
  5. Залиште в 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
  • Структура й чернетка з Model API
  • LiveDoc із чернеткою для перевірки

Чого не робить

  • Без копіювання всього транскрипту; лише короткі цитати й переписування
  • Відео має мати субтитри
  • Перевірте права й межі цитування перед публікацією
  • Модель робить структуру й чернетку; остаточне рішення за редактором
  • Не публікує й не перекладає автоматично

Запитання

Чи відео має мати субтитри?

Так. Процес починається із субтитрів; якщо їх немає, зупиняється замість здогадки про сказане.

Чи можна перетворити подкаст на статтю?

Цей процес для YouTube. Для подкасту спершу підготуйте транскрипт і використайте ті самі правила письма.

Чи можна писати іншою мовою?

Так. Вкажіть цільову мову; цитати лишаються мовою оригіналу з перекладом за потреби.

Хто пише статтю?

AI-агент, у який ви вставляєте промпт, пише чернетку; Felo дає транскрипт, сторінки й місце перевірки.

Чи можна опублікувати весь транскрипт?

Ні. Процес створює нову статтю з короткими цитатами й не копіює весь транскрипт.

Скільки коштує один запуск?

Транскрипт і вилучення сторінок оплачуються за використання; актуальні тарифи на сторінці цін, а промпт просить схвалення перед витратою.

Пов’язані процеси

Адаптуйте

Той самий рецепт, підлаштований під те, як ви насправді працюєте.

Лише цитати з таймкодами

Не пишіть статтю; дайте список цитат для перевірки й повторного використання.

Спершу версія для розсилки

Скоротіть статтю й зробіть її розмовнішою для розсилки.

Обробіть канал пакетно

Повторіть кроки для кожного відео й зберігайте окремі LiveDocs.

Довідкові сторінки за цим рецептом і наступні кроки.