ClipSave — веб-сервис на FastAPI для скачивания видео/аудио через yt-dlp с личными ссылками доступа, cookies-файлами, админкой, очередью задач и автоматической очисткой скачанных файлов.
- Скачанные файлы теперь учитываются в SQLite как отдельные записи.
- Автоудаление файлов перенесено из cron внутрь веб-сервиса.
- Срок хранения файла по умолчанию: 60 минут.
- При открытии ссылки просмотра срок файла продлевается по настройке админа, по умолчанию — на 240 минут.
- В админке появились настройки хранения, лимитов, качества и экспериментального режима.
- Добавлены отдельные ссылки «Скачать» и «Просмотреть».
- Публичная ссылка просмотра работает без логина, но только пока файл существует и не удалён по таймеру.
- Админ может удалить один файл, очистить просроченные файлы или удалить все загруженные файлы.
- Если cookies ломают список видеоформатов, сервис пробует повторить скачивание без cookies и пишет это в лог.
sudo apt update
sudo apt install -y git
git clone https://github.com/OMchik33/ClipSave.git /root/clipsave-src
cd /root/clipsave-src
sudo bash scripts/install.sh
В этом варианте скрипт разворачивает сервис из уже клонированного репозитория.
От вас потребуется:
- Указать домен, привязанный к серверу, на который устанавливается данный сервис
- Указать свою почту в процессе получения сертификата (можно не указывать)
Пользователь открывает свою ссылку доступа, вставляет ссылку на видео, запускает анализ и выбирает качество скачивания.
После завершения скачаивания слышен короткий звук и появляются две кнопки:
- Просмотреть видео — открывает файл в браузере.
- Скачать готовый файл — заставляет браузер сохранить файл.
Файл хранится на сервере ограниченное время. По умолчанию он удаляется через 60 минут после скачивания. Если кто-то открыл ссылку просмотра, срок можно продлить настройкой админа.
Настройки хранятся в SQLite, а не в .env, поэтому их можно менять из интерфейса без входа на сервер.
Дефолтные значения:
| Настройка | Значение |
|---|---|
| Время хранения файлов | 60 минут |
| Продление при просмотре | 240 минут |
| Максимальный размер одного файла | 4 ГБ |
| Максимальная квота каталога загрузок | 18 ГБ |
| Минимальный свободный остаток диска | 5 ГБ |
| Максимальное качество | 1080p |
| Выбор качества пользователем | включён |
| Прокси-скачивание | выключено |
Поля с гигабайтами принимают дробные значения в двух форматах: 8.5 и 8,5.
Cron для удаления файлов больше не нужен. Сервис сам:
- создаёт запись о скачанном файле в БД;
- хранит
expires_atдля каждого файла; - удаляет просроченные файлы во время работы;
- после перезапуска сразу проверяет БД и удаляет всё, что уже просрочено;
- помечает пропавшие с диска файлы как удалённые;
- очищает старые временные файлы
webtmp_*.
То есть если сервер был выключен или сервис перезапущен, автоудаление не теряется: сроки хранятся в SQLite, а не в памяти процесса.
Для просмотра используется публичная ссылка вида:
<WEB_BASE_PATH>/media/watch/<token>
Логин для просмотра не нужен. Ссылку можно отправить другому человеку. Если файл удалён по таймеру или вручную админом, ссылка перестаёт работать.
Для длинных видео предусмотрено продление срока хранения при открытии просмотра. Точно определить, смотрит человек видео прямо сейчас или поставил его на паузу, сервер не может, поэтому используется практичная модель: при открытии ссылки просмотра срок файла продлевается на заданное количество минут.
Для скачивания используется ссылка вида:
<WEB_BASE_PATH>/media/download/<token>
Она отдаёт тот же файл, но с поведением «сохранить файл».
Cookies нужны для сайтов, где видео доступно только после входа в аккаунт или без cookies скачивание завершается ошибкой.
Рекомендуемый способ подготовить файл:
- установить расширение Get cookies.txt LOCALLY: https://github.com/kairi003/Get-cookies.txt-LOCALLY/
- открыть нужный видеосайт в браузере;
- нажать на иконку расширения;
- сохранить cookies в формате Netscape;
- загрузить полученный
cookies.txtв ClipSave.
Администратор может загрузить общий cookies-файл. Пользователь может загрузить личный cookies-файл, который будет иметь приоритет для его задач.
clipsave.py основной FastAPI-сервис
templates/index.html веб-интерфейс
static/app.js логика интерфейса
static/style.css стили интерфейса
deploy/angie/site.conf.example пример конфига Angie
deploy/cron/crontab.example cron только для обновления yt-dlp
.env.example пример переменных окружения
В .env остаются настройки запуска, путей и секретов:
WEB_HOST=127.0.0.1
WEB_PORT=8093
WEB_BASE_PATH=/secret-path
WEB_SECRET_KEY=change_me
WEB_LOGIN_KEY=change_me_login
WEB_ADMIN_LOGIN_KEY=change_me_admin_login
DOWNLOAD_PATH=/download
DATA_PATH=data
LOG_PATH=logs
COOKIES_PATH=cookiesНастройки хранения файлов, лимитов и качества задаются в админке и хранятся в SQLite.
После установки проверь:
systemctl status clipsave
journalctl -u clipsave -n 100 --no-pager
angie -tВ админке проверь блоки:
- состояние сервиса;
- хранение, лимиты и качество;
- загруженные файлы и автоудаление;
- cookies;
- разовые ссылки доступа.
scripts/clipsave_migrate.sh
Добавлен отдельный Bash-скрипт для переноса ClipSave на другой сервер и локального обслуживания базы данных.
-
Полный backup сервиса ClipSave:
- файлы приложения;
.envи настройки сервиса;- systemd-службы;
- настройки Angie;
- сертификаты Angie ACME и Let's Encrypt;
- cron-файлы;
- каталог загрузок
/download— по отдельному подтверждению.
-
Создание SHA256-контрольной суммы для полного архива.
-
Проверка SHA256 перед восстановлением:
- восстановление не запускается, если контрольная сумма отсутствует;
- восстановление останавливается, если архив не проходит проверку.
-
Отправка backup-архива на новый сервер:
- по SSH с паролем;
- по SSH-ключу;
- вместе с архивом передаётся
.sha256; - скрипт копирует сам себя на новый сервер рядом с backup.
-
Восстановление на новом сервере:
- автоматический поиск доступных архивов;
- выбор нужного архива из списка;
- восстановление файлов приложения, настроек, systemd, Angie, сертификатов и cron;
- установка недостающих компонентов;
- настройка прав;
- перезапуск systemd-службы;
- проверка конфигурации Angie;
- вывод итогового статуса.
-
Отдельное обслуживание SQLite:
- локальный backup базы данных;
- создание
.sha256для backup-файла БД; - восстановление базы данных из backup;
- автоматический аварийный backup текущей БД перед восстановлением.
Скрипт нужен для ситуации, когда ClipSave требуется перенести на новый сервер почти целиком: достаточно сделать backup, отправить его на новый сервер, привязать домен к новому IP, запустить восстановление и проверить работу сервиса.
Авторские права должны соблюдаться, допускается скачивать свое видео со своего канала либо видео с открытым публичным доступом, разрешенные к скачиванию. Пользователь несет ответственность и следит за соблюдением авторских прав скачиваемого видео!