Сколько инструментов нужно, чтобы сохранить что-то из интернета? yt-dlp для видео, wget для файлов, gallery-dl для альбомов, «сохранить как» для статей — и у каждого свой синтаксис, свои ключи и своё место в закладках. Мы собрали всё это в один маленький бинарь: uci (Universal Content Intake). Даёте ему ссылку — он сам понимает, что на той стороне, и скачивает.
Как это выглядит
uci https://youtube.com/watch?v=... # видео в 1080p
uci https://example.com/report.pdf # документ
uci https://instagram.com/p/... # галерея картинок
uci https://habr.com/ru/articles/... # статья в чистом MarkdownТип определяется автоматически: известные видеоплатформы (YouTube, TikTok, VK, Vimeo, Rutube и другие), расширение файла в URL, ссылки на Google Drive, а для всего остального — пробинг ответа сервера по Content-Type. HTML-страница превращается в статью через readability и сохраняется в Markdown. Тип можно задать и принудительно: --type video|document|image|images|article|webpage.
Результат складывается в папку загрузок (на Linux находится и локализованная «Загрузки»), а рядом с файлом кладётся короткий *.info.md — источник, автор, исходная ссылка. Через месяц не придётся гадать, откуда взялся этот PDF.
Установка за две команды
# 1. скачать бинарь под свою ОС:
# https://github.com/sarnas-it/uci/releases
# 2. поставить движки:
uci doctor --yesdoctor — наша любимая часть. Он проверяет окружение и сам скачивает и ставит всё, что нужно для полной мощности: yt-dlp, ffmpeg, deno, gallery-dl — без sudo, прямо в ~/.local/bin. Если чего-то поставить не может (например, нет pip или npm), честно говорит об этом и показывает ручную команду, а не падает молча. Без ffmpeg видео всё равно скачивается — просто одиночным форматом, без склейки дорожек.
Что ещё умеет
--quality 720p|1080p|4k|highest— качество видео; маленький исходник не апскейлится;--to ~/docs— куда сохранять;- альбомы и галереи картинок — через gallery-dl;
- снимки страниц целиком — через SingleFile и Chrome;
- флаги можно писать и после ссылки:
uci <ссылка> --to ~/docs.
Технически
uci — самостоятельная реализация на Go, вдохновлённая проектом YIAN6557/universal-content-intake. Мы переписали ядро-загрузчик на Go, сделали его по-настоящему кроссплатформенным (Linux, macOS и Windows — один статический бинарь, без Python и Docker) и научили ставить свои же зависимости. Автомониторинг авторов, субтитры и облачная часть оригинала не портированы — это чистый загрузчик.
Код открытый: github.com/sarnas-it/uci. Issues и пул-реквесты приветствуются.