Проблема
У меня телевизор, который читает файлы с USB-флешки. Флешка отформатирована в FAT32, а значит — максимум 4 ГБ на файл. Типичный вечер выглядит так:
-
Открыть браузер → найти торрент
-
Открыть KTorrent → добавить → ждать
-
Открыть файловый менеджер → скопировать на флешку
-
Упс, файл 8 ГБ → найти mkvmerge → разбить → скопировать заново
-
Безопасно извлечь
Пять шагов и три приложения. Мне надоело.
Решение
TorFlash — Linux-приложение на PyQt5, которое объединяет все эти шаги в одно окно:
-
Поиск по Rutor (с фоллбэком на зеркала), NoNaMe-Club и RuTracker (с логином и прокси)
-
Скачивание через libtorrent-rasterbar — параллельные загрузки, выбор файлов, возобновление
-
Копирование на флешку — автоматическое определение USB на
/run/media/$USER/* -
Умное разбиение для FAT32: MKV через
mkvmerge --split(каждая часть — воспроизводимый файл), остальные форматы — побайтовое разбиение
Как выглядит
Слева — результаты поиска, справа — карточка с постером, скриншотами и mediainfo. Прогресс встроен в карточку: синий — скачивание, зелёный — копирование.
Что ещё умеет
Библиотека и раздача
-
Всё скачанное остаётся в
~/Storageи раздаётся, пока приложение открыто -
При перезапуске раздача восстанавливается через
resume_data -
Пауза/возобновление/перепроверка для каждого торрента
Детали раздачи
-
Постер + галерея скриншотов (парсится со страницы торрента)
-
Mediainfo — кодек, разрешение, аудиодорожки, длительность
-
График скорости в реальном времени
-
Статистика за день и за всё время (хранение 90 дней)
Флешка
-
Вкладка управления: свободное место, список файлов, удаление, открыть в FM
-
Безопасное извлечение через
udisksctl— показывает процесс, если устройство занято -
“Отложенное копирование” — если флешка вставлена позже, копирование произойдёт автоматически
Приложение
-
Светлая/тёмная/авто тема
-
Русский и английский интерфейс
-
Автозапуск, сворачивание в трей, лимиты скорости
-
Автообновление с GitHub Releases
-
CLI-режим для headless:
torflash_cli.pysearch "запрос"
Технические детали
Стек: 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/