TorFlash — приложение для Linux: поиск торрентов, скачивание и копирование на флешку в одно нажатие

от автора

Проблема

У меня телевизор, который читает файлы с USB-флешки. Флешка отформатирована в FAT32, а значит — максимум 4 ГБ на файл. Типичный вечер выглядит так:

  1. Открыть браузер → найти торрент

  2. Открыть KTorrent → добавить → ждать

  3. Открыть файловый менеджер → скопировать на флешку

  4. Упс, файл 8 ГБ → найти mkvmerge → разбить → скопировать заново

  5. Безопасно извлечь

Пять шагов и три приложения. Мне надоело.

Решение

TorFlash — Linux-приложение на PyQt5, которое объединяет все эти шаги в одно окно:

  • Поиск по Rutor (с фоллбэком на зеркала), NoNaMe-Club и RuTracker (с логином и прокси)

  • Скачивание через libtorrent-rasterbar — параллельные загрузки, выбор файлов, возобновление

  • Копирование на флешку — автоматическое определение USB на /run/media/$USER/*

  • Умное разбиение для FAT32: MKV через mkvmerge --split (каждая часть — воспроизводимый файл), остальные форматы — побайтовое разбиение

Как выглядит

screenshot

screenshot

Слева — результаты поиска, справа — карточка с постером, скриншотами и mediainfo. Прогресс встроен в карточку: синий — скачивание, зелёный — копирование.

Что ещё умеет

Библиотека и раздача

  • Всё скачанное остаётся в ~/Storage и раздаётся, пока приложение открыто

  • При перезапуске раздача восстанавливается через resume_data

  • Пауза/возобновление/перепроверка для каждого торрента

Детали раздачи

  • Постер + галерея скриншотов (парсится со страницы торрента)

  • Mediainfo — кодек, разрешение, аудиодорожки, длительность

  • График скорости в реальном времени

  • Статистика за день и за всё время (хранение 90 дней)

Флешка

  • Вкладка управления: свободное место, список файлов, удаление, открыть в FM

  • Безопасное извлечение через udisksctl — показывает процесс, если устройство занято

  • “Отложенное копирование” — если флешка вставлена позже, копирование произойдёт автоматически

Приложение

  • Светлая/тёмная/авто тема

  • Русский и английский интерфейс

  • Автозапуск, сворачивание в трей, лимиты скорости

  • Автообновление с GitHub Releases

  • CLI-режим для headless: torflash_cli.py search "запрос"

Технические детали

Стек: Python 3.11, PyQt5, libtorrent-rasterbar, requests

Никаких BeautifulSoup или Scrapy — HTML парсится регулярками. Звучит как антипаттерн, но для конкретных сайтов с фиксированной структурой работает быстро и без лишних зависимостей.

Архитектура:

  • SearchWorker — скрапит HTML в отдельном потоке

  • SeedSession — единый libtorrent.session на всё приложение, библиотека в JSON

  • DownloadWorker — добавляет торренты в сессию, следит за прогрессом

  • CopyWorker — стриминговое копирование с разбиением

  • providers/ — подключаемые провайдеры поиска (легко добавить свой)

Собирается в один бинарник через PyInstaller (~50 МБ). Не требует pip install — только системные Qt5 и glibc.

Установка

# Бинарник (рекомендуется)curl -L -o TorFlash https://github.com/steveast/torflash/releases/latest/download/TorFlashchmod +x TorFlash && ./TorFlash# Из исходников (Arch)sudo pacman -S libtorrent-rasterbar python-pyqt5 python-requests mkvtoolnix-cligit clone https://github.com/steveast/torflash.git && cd torflashpython3 src/rutor_search.py

ссылка на оригинал статьи https://habr.com/ru/articles/1039250/