Skip to content

Repository files navigation

ClipSave

ClipSave — веб-сервис на FastAPI для скачивания видео/аудио через yt-dlp с личными ссылками доступа, cookies-файлами, админкой, очередью задач и автоматической очисткой скачанных файлов.

image

Что нового в этой версии

  • Скачанные файлы теперь учитываются в SQLite как отдельные записи.
  • Автоудаление файлов перенесено из cron внутрь веб-сервиса.
  • Срок хранения файла по умолчанию: 60 минут.
  • При открытии ссылки просмотра срок файла продлевается по настройке админа, по умолчанию — на 240 минут.
  • В админке появились настройки хранения, лимитов, качества и экспериментального режима.
  • Добавлены отдельные ссылки «Скачать» и «Просмотреть».
  • Публичная ссылка просмотра работает без логина, но только пока файл существует и не удалён по таймеру.
  • Админ может удалить один файл, очистить просроченные файлы или удалить все загруженные файлы.
  • Если cookies ломают список видеоформатов, сервис пробует повторить скачивание без cookies и пишет это в лог.

Быстрый старт - установка из GitHub/Git

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.txt

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

В .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;
  • разовые ссылки доступа.

Скрипт миграции ClipSave

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, запустить восстановление и проверить работу сервиса.


АВТОРСКИЕ ПРАВА

Авторские права должны соблюдаться, допускается скачивать свое видео со своего канала либо видео с открытым публичным доступом, разрешенные к скачиванию. Пользователь несет ответственность и следит за соблюдением авторских прав скачиваемого видео!

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages