Скачивай видео прямо из терминала, и никакой рекламы
Помню, как искал способ скачать себе лекцию с YouTube. Открыл первый сайт из выдачи, нажал большую зелёную кнопку «Download», а оттуда полезли попапы, редиректы и предложение установить какую-то «оптимизацию браузера». Классика. Такие сайты живут за счёт того, что ты кликаешь не туда, и делают всё, чтобы ты кликнул не туда.
yoinks решает эту проблему радикально. Никаких сайтов, никакой рекламы. Только терминал, ссылка и пара нажатий клавиш.
Что это такое
Это консольная утилита, которая скачивает видео отовсюду. Автор описывает её принцип тремя словами: «yoink any video. paste. yoink. done». Вставляешь ссылку, выбираешь разрешение, готово.
Под капотом работает yt-dlp, а значит список поддерживаемых площадок огромный: YouTube, X/Twitter, Instagram, Threads, TikTok и ещё больше 1800 сайтов. Отдельно радует, что никаких подозрительных баннеров и фейковых кнопок здесь просто не может быть по определению. Утилита живёт в терминале, где рекламе взяться неоткуда.
Интересно, что это ещё и хороший пример того, как далеко зашёл мир терминальных интерфейсов. Об этом ниже.
Установка в одну строку
Проще всего поставить глобально через npm:
npm install -g yoinks
Если не хочется ничего ставить, можно запустить через npx:
npx yoinks
Нужен Node 18 или новее. Всё остальное подтянется само. При первом запуске yoinks скачает бинарник yt-dlp в ~/.yoinks/bin, причём без всякого Python. Если yt-dlp у тебя уже установлен, утилита воспользуется твоим. ffmpeg, который нужен для склейки высококачественных потоков и вытаскивания mp3, ищется в PATH, а если не найдётся, подставится встроенная сборка ffmpeg-static.
То есть на выходе получаем установку, которая не заставляет тебя читать документацию на 20 экранов перед первым запуском. Уважаю.
Как это выглядит в работе
Запуск простой: можно передать ссылку сразу или просто запустить без аргументов и вставить URL по подсказке.
$ yoinks https://youtu.be/dQw4w9WgXcQ # сразу к выбору формата
$ yoinks # спросит ссылку
$ yoinks --theme light # принудительно светлая тема
Дальше утилита забирает весь экран терминала, всё аккуратно центрируется, а при выходе скроллбек возвращается на место. Формат выбирается стрелками вверх/вниз, но можно и через j/k, и цифрами. Enter подтверждает, esc возвращает назад, Ctrl+C выходит. Поддерживается и мышь: кнопка yoink, список форматов и подсказки в футере кликабельны, а клик по логотипу возвращает на главный экран.
Файлы складываются в ~/Downloads, а путь к готовому файлу печатается в терминал.
При выборе формата видно не только разрешения, но и примерный размер файла. Мелочь, а приятно, когда решаешь, тянуть ли 4K или хватит 1080p.
Технические детали, которые тут реально интересны
Самое любопытное — на чём сделан интерфейс. Это Ink, то есть React для терминала. Да, тот самый React, только вместо DOM — вывод в консоль. Кнопки, фокус, реакция на мышь, темы оформления. Всё это в обычном текстовом терминале.
Проект написан на TypeScript, сборка через tsup в папку dist/. Для разработки есть готовые команды:
npm install
npm run build # сборка в dist/ через tsup
npm run dev # пересборка при изменениях
node dist/cli.js <url>
npm run typecheck
Хочешь попробовать как глобальную команду без публикации? npm link, и дальше запускай yoinks из любого места.
Отдельно про темы. По умолчанию стоит auto, который берёт foreground и background твоего терминала, поэтому светлая и тёмная схемы подхватываются автоматически, без угадывания. Переключить можно на лету через Ctrl+T или кликом по элементу темы в футере. А чтобы задать тему на один запуск, есть флаги --theme auto, --theme light и --theme dark.
Кому и зачем это нужно
Допустим, ты собираешь себе коллекцию докладов с конференций и не хочешь зависеть от того, останется ли видео в открытом доступе. Или тебе нужен только звук из подкаста, чтобы слушать в дороге. Или ты просто устал от сайтов-конвертеров с их рекламой. Во всех этих случаях одна команда в терминале оказывается быстрее и чище, чем поход в браузер.
Ещё это удобно, если ты часто работаешь в терминале и не хочешь переключаться в графический интерфейс ради одной загрузки. Пользоваться мышью тоже можно, но, честно говоря, весь смысл именно в скорости и в том, что не надо никуда переключаться.
Кстати, автор в разделе fair use честно предупреждает: скачивание может нарушать правила площадок. Инструмент задуман для личного архивирования, и стоит скачивать только то, что ты имеешь право сохранить. Это не юридическая отговорка ради галочки, а вполне себе рабочее правило.
Чего пока нет
README прямо перечисляет планы, и это помогает понять границы возможностей. Сейчас нет флагов --best и --mp3, которые позволяли бы пропустить выбор формата и использовать утилиту в скриптах. Нет опции -o <dir> для выбора папки вывода. Не поддерживаются плейлисты и треды с несколькими видео. В планах также автоподстановка ссылки из буфера обмена и самообновление встроенного yt-dlp. Из сделанного отмечена только публикация в npm, остальное пока в очереди.
То есть на старте это инструмент для ручного, интерактивного скачивания. Для автоматизации в скриптах пока придётся подождать или ставить yt-dlp напрямую.
Стоит ли пробовать
Две с лишним тысячи звёзд за короткий срок говорят сами за себя: людям зашло. И понятно почему. Установка в одну строку, никакой рекламы, аккуратный интерфейс и огромное число поддерживаемых сайтов за счёт yt-dlp.
Я бы советовал попробовать yoinks, если ты регулярно что-то скачиваешь и тебя раздражает сам процесс. Особенно если ты живёшь в терминале и ценишь минимализм. Не уверен, что она заменит полноценные сценарии автоматизации, но для быстрого «вставил ссылку, выбрал качество, получил файл» она подходит идеально.
Начать можно с одной команды:
npx yoinks
Ничего не устанавливается глобально, ни к чему не обязывает. Просто попробуй и посмотри, насколько приятнее это выглядит, чем очередной сайт с фейковой кнопкой скачивания.
