Десктопное приложение, которое превращает фото лекций с Android-телефона в аккуратные PDF-файлы.
KebuzLect подключается к Android-телефону по USB (через ADB), читает папки с фото лекций, группирует фото по дням в лекции, позволяет навести порядок (повернуть, убрать размытые кадры и дубли, переупорядочить) и экспортирует каждую лекцию в PDF по одному или два фото на лист A4.
Приложение сделано под конкретный, но привычный сценарий: вы фотографируете доску на лекции, одна папка на предмет, и хотите получить фото каждого дня одним аккуратным PDF без ручной возни.
- Не нужно вручную копировать файлы по MTP и бороться с глюками проводника.
- Фото одного дня автоматически становятся одной лекцией-PDF.
- Уже сконвертированные лекции запоминаются, поэтому работа не повторяется.
- Размытые кадры и дубли помечаются до экспорта.
- Светлая и тёмная темы, а также русский и английский интерфейс.
- Windows 10 или новее
- Python 3.11+ (используется встроенный
tomllib) - Android Platform Tools (ADB). Приложение помогает установить и настроить их при первом запуске.
- Android-телефон с включённой отладкой по USB
git clone <repository-url>
cd KebuzLect
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
В requirements.txt перечислено всё необходимое: PyQt6, Pillow, reportlab, tomli-w, numpy, imagehash и pywin32. Две зависимости легко упустить, потому что они нужны неявно: numpy требуется детектору размытости в app/analyzer.py, а imagehash - детектору дублей (find_duplicates). Обе должны быть установлены, иначе экран просмотра альбома не заработает.
python main.py
При первом запуске:
- Если ADB не найден, открывается мастер настройки. Он даёт ссылку на официальную страницу загрузки Platform Tools от Google, позволяет указать папку с
adb.exe(путь сохраняется в конфиге) и объясняет, как включить отладку по USB на телефоне. - Подключите телефон по USB и подтвердите запрос отладки на экране телефона.
- Добавьте альбом, выбрав папку телефона прямо в приложении.
- Откройте альбом, проверьте фото, сгруппированные по датам, и сконвертируйте нужные лекции в PDF.
Если телефон не подключён, приложение работает в офлайн-режиме: показываются кешированные данные, но редактирование недоступно.
Фото ожидаются в папке владельца галереи, одна папка на предмет:
/sdcard/Pictures/Gallery/owner/
├── Лекции САПР/
│ ├── IMG_20260413_135545.jpg
│ ├── IMG_20260413_135555.jpg
│ ├── IMG_20260420_135052.jpg
│ └── ...
├── Лекции ЦОС/
└── Лекции Электроника/
Фото ожидаются в любой папке на телефоне, одна папка на предмет. Папка выбирается через встроенный браузер при добавлении альбома. Поддерживается стандартный формат имён IMG_YYYYMMDD_HHMMSS.jpg и другие варианты с датой в имени файла (YYYYMMDD_HHMMSS.jpg, 20260413_135545.jpg и т.д.).
%APPDATA%\Kebuz\KebuzLect\
├── config.toml настройки и альбомы
└── cache\ кеш миниатюр
Имя выходного файла задаётся шаблоном в настройках:
| Токен | Значение |
|---|---|
{predmet} |
display_name альбома |
{YYYYMMDD} |
Дата лекции |
{lection_number} |
Сквозной номер лекции, ширина настраивается |
Примеры:
{predmet}_{YYYYMMDD}->САПР_20260413.pdf{predmet}_{lection_number}->САПР_007.pdf{predmet}_{lection_number}_{YYYYMMDD}->САПР_007_20260413.pdf
KebuzLect/
├── main.py
├── requirements.txt
├── LICENSE
├── README.md
├── README_EN.md
├── KebuzLect.spec
├── resources/
│ └── icon.ico
├── app/
│ ├── config.py чтение/запись конфига (TOML, %APPDATA%)
│ ├── models.py dataclass-модели (Album, LectureGroup, Photo)
│ ├── device/ бэкенды устройства (ADB, fallback win32com)
│ ├── scanner.py листинг папок, группировка по датам
│ ├── converter.py генерация PDF (ReportLab)
│ ├── thumbnail.py кеш миниатюр
│ └── analyzer.py определение размытости (Лапласиан) и дублей (pHash)
└── ui/
├── main_window.py
├── album_view.py
├── setup_wizard.py
├── settings_dialog.py
├── convert_dialog.py
├── theme.py
└── i18n.py
- Фото на телефоне никогда не удаляются автоматически после конвертации.
- Нумерация лекций сквозная и не обнуляется; при удалении лекции остаётся "дырка", есть действие "Перенумеровать всё".
- iOS не поддерживается в первой версии. Как источник можно указать обычную папку на компьютере для фото, скопированных вручную.
В проекте есть spec-файл PyInstaller, который собирает один оконный исполняемый файл с иконкой приложения:
pip install pyinstaller
pyinstaller KebuzLect.spec
Результат - dist/KebuzLect.exe. Папка resources/ (иконка) включается в сборку автоматически.
MIT. См. LICENSE.