yt-fts CLI
yt-fts скачивает субтитры каналов и плейлистов YouTube в базу SQLite и ищет по ним фразы с ссылками на нужную секунду, есть смысловой поиск и чат
- 1 811 ★ репозитория
- Последний коммит
- Unlicense
Широкий доступ
Почему такой уровень
- Массово скачивает данные YouTube в несколько потоков, при ошибках 403 канал и IP могут быть ограничены самой площадкой
- Ключ `--cookies-from-browser` читает куки браузера с данными вашей сессии
- Тексты расшифровок уходят в OpenAI или Gemini по вашему ключу при смысловом поиске, чате и кратком изложении
Установка
В терминале, через SkillFoxx CLI
npx skillfoxx add cli/yt-ftsОпределит агенты на машине, покажет уровень доступа и зафиксирует версию.
Другие способы установки
Доступ и проверки
Как мы проверяемШирокий доступИнструмент может менять данные, выполнять команды или работать с секретами.
- Массово скачивает данные YouTube в несколько потоков, при ошибках 403 канал и IP могут быть ограничены самой площадкой
- Ключ `--cookies-from-browser` читает куки браузера с данными вашей сессии
- Тексты расшифровок уходят в OpenAI или Gemini по вашему ключу при смысловом поиске, чате и кратком изложении
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
`yt-fts` — программа командной строки на Python, которая собирает субтитры YouTube и делает по ним поиск. Команда `download` принимает адрес канала или плейлиста (ключ `--playlist`), скачивает субтитры через `yt-dlp` в несколько потоков (по умолчанию 8, язык по умолчанию en, меняется ключом `--language`) и складывает их в локальную базу `SQLite`. Команда `update` дозагружает новые видео, `delete` удаляет канал со всеми данными после подтверждения, `export` выгружает расшифровки в файлы txt или vtt. Команда `search` ищет по тексту в сохраненных субтитрах: в одном канале, в одном видео или во всей базе. Строка запроса не длиннее 40 знаков, поддерживает операторы `AND` и `OR`, подстановки со звездочкой и префиксы из расширенного синтаксиса `SQLite`. Каждый результат выводится с адресом YouTube, который открывает видео на нужной секунде; результаты можно выгрузить в CSV ключом `--export`. Для смыслового поиска команда `embeddings` режет расшифровки каналов на отрезки (по умолчанию по 30 секунд) и получает векторы через API OpenAI или Gemini, а хранит их в `chromadb`. После этого работает `vsearch`: результаты упорядочены по близости к запросу. Команда `llm` открывает чат, где ответы строятся по найденным отрезкам, а при нехватке контекста запрос уточняется. `summarize` выдает краткое изложение видео по ссылке или идентификатору с таймкодами; если расшифровки нет в базе, команда пытается ее скачать. Вспомогательные команды: `list` показывает каналы, видео и текст расшифровки, `config` выводит пути к базам, `diagnose` проверяет соединение с YouTube.
Для кого. Для исследователей, маркетологов, редакторов и разработчиков, которым нужно искать цитаты и темы по всем выпускам канала или плейлиста и собирать корпус расшифровок для своих агентов и скриптов.
Подходит, если
- Нужно найти, в каком выпуске и на какой секунде автор канала сказал конкретную фразу
- Для ИИ-агента надо собрать локальный корпус расшифровок целого канала или плейлиста и отдавать ему выдержки по запросу
- Требуется выгрузить расшифровки канала в txt или vtt для анализа, монтажа или перевода
- Поиск по ключевым словам не помогает, и нужен смысловой поиск по расшифровкам с ответами чата и таймкодами
- Надо быстро получить краткое изложение одного видео со ссылками на моменты
Не подходит, если
- Нужен MCP-сервер, который отдает агенту расшифровку одного видео по ссылке: для этого в каталоге есть YouTube Transcript MCP Server
- У видео нет субтитров: программа берет только готовые субтитры, а саму речь в текст не переводит
- Нужна постоянная поддержка и исправления: автор называет проект заброшенным
- Нужен один Markdown-файл с расшифровкой видео для заметок: подойдет youtube-fetcher-to-markdown, без базы и поиска
Пример запроса к агенту
Скачай субтитры канала 3Blue1Brown и найди все места, где он говорит про обратное распространение ошибки, со ссылками на секундыОграничения
- Лицензия Unlicense, передача в общественное достояние. В первых строках описания автор пишет, что проект заброшен и вернется к нему, только когда снова останется без работы, поэтому исправлений при изменениях на стороне YouTube ждать не стоит.
- Нужен Python 3.10 или новее. Версии зависимостей закреплены (`yt-dlp` 2025.6.30, openai 1.93.0, `chromadb` 1.0.15), а YouTube меняется, поэтому загрузка может выдавать ошибки 403. Для их разбора есть команда `diagnose` и файл docs/TROUBLESHOOTING_403.md.
- Команда `update` обновляет только полнотекстовый поиск, векторы для смыслового поиска она не пересчитывает. Их получают заново командой `embeddings`.
- Для `embeddings`, `vsearch`, `llm` и `summarize` нужен ключ OpenAI или Gemini, текст расшифровок уходит в эти сервисы, а API OpenAI из России недоступен. По умолчанию язык субтитров en, для других языков указывайте `--language`.
- Инструмент собирает данные с YouTube в большом объеме: применять его можно только к каналам и данным, на сбор и использование которых у вас есть разрешение и которые допускают правила площадки.
Как отключить. Удалите программу командой `pip uninstall yt-fts`. Данные остаются на диске: пути к базе `SQLite` и к хранилищу `chromadb` показывает `yt-fts config`, а канал со всеми расшифровками удаляет `yt-fts delete --channel`.
Частые вопросы
Как искать сразу по нескольким словам и частям слов?
Строка поиска понимает расширенный синтаксис полнотекстового поиска `SQLite`. Запрос `knife AND Malibu` находит оба слова, `knife OR Malibu` — любое из них, а `rea* kni* Mali*` ищет по началу слов. Длина строки ограничена 40 знаками. Ключи `--channel` и `--video-id` сужают область поиска до одного канала или видео.
Нужен ли ключ API для обычного поиска по тексту?
Нет. Ключ нужен только командам смыслового поиска, чата и краткого изложения: `embeddings`, `vsearch`, `llm` и `summarize`. Его задают переменной `OPENAI_API_KEY` или `GEMINI_API_KEY` либо ключом `--api-key`. Скачивание субтитров и команда `search` работают целиком на локальной базе и `yt-dlp`.
Что делает ключ `--cookies-from-browser`?
Берет куки из указанного браузера (`chrome`, `firefox` и других) и добавляет их к запросам скачивания. Автор советует его, когда YouTube просит войти в аккаунт. Он действует у команд `download`, `update` и `diagnose`. Куки содержат данные вашей сессии, поэтому используйте тот браузер и профиль, которые готовы отдать программе.
Как разбить расшифровку на отрезки для смыслового поиска?
Командой `embeddings` с ключом `--interval` в секундах, по умолчанию 30. Автор отмечает, что чем длиннее отрезок, тем точнее ответ языковой модели, зато в смысловом поиске придется читать больше текста. После сохранения векторов у канала в списке появляется метка (ss).
Куда выгружаются результаты и расшифровки?
Результаты `search` и `vsearch` с ключом `--export` сохраняются в CSV в текущей папке. Команда `export` создает в текущей папке каталог с идентификатором канала YouTube и пишет туда расшифровки в формате txt (по умолчанию) или vtt по выбору ключа `--format`.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
CLI-инструментыyutu управляет YouTube-каналом из терминала: видео, плейлисты, комментарии, субтитры. Есть MCP-сервер, встроенный агент и скилл для Claude Code и Codex
Скилл /watch: по ссылке или файлу достает кадры и субтитры, а при ключе Gemini передает видео целиком Google, чтобы агент отвечал на вопросы по ролику
YouTube Skills
YouTube Skills for AI Agents
Набор скиллов дает агенту транскрипты видео YouTube, поиск роликов и каналов и разбор плейлистов через один API
Скилл для Claude Code: скачивает видео YouTube, делит на смысловые главы, вырезает выбранные фрагменты, переводит субтитры и вшивает двуязычные в ролик
YouTube Data MCP (kirbah)
YouTube Data MCP Server (kirbah)
YouTube MCP с урезанными ответами: расшифровки без ключа, статистика видео и каналов, тренды, комментарии, кеш в MongoDB и поиск растущих каналов
CLI bili для агента: видео, субтитры, поиск, ленты, избранное и лайки на Bilibili, вывод в YAML или JSON
Сравнение с похожими
Записи с тем же главным запросом: чем они отличаются.
| Запись | Официальный | Авторизация | Звезды репозитория | Главное отличие |
|---|---|---|---|---|
| yt-fts (эта запись) | нет | 1 811 | ||
| YouTube Transcript MCP Server | нет | не нужна | 491 | MCP-сервер отдает агенту расшифровку одного видео по ссылке, базы и поиска по каналу нет |
| YouTube Fetcher to Markdown | нет | 495 | сохраняет расшифровку одного видео и метаданные в файл Markdown для Obsidian |
Коротко о README
В репозитории есть описание всех команд с ключами и примерами, журнал изменений, отдельный разбор ошибок 403 при загрузке и пакет тестов на pytest для загрузки, экспорта, обычного и смыслового поиска. Описание начинается с пометки о том, что проект заброшен, и со ссылок на запись в блоге автора, чат с моделью, краткие изложения и смысловой поиск.