Skip to content

Latest commit

 

History

History
177 lines (130 loc) · 11.9 KB

File metadata and controls

177 lines (130 loc) · 11.9 KB
MThread Draw — мотоцикл, собирающийся из штрихов касаний

Не иллюстрация — 232 настоящих штриха из examples/motorcycle.jpg, в том порядке, в котором они уходят на телефон.



Скачать для Windows Скачать для macOS Попробовать в браузере English version


CI Последний релиз Лицензия AGPL-3.0 Нативные интерфейсы



Рисует любую картинку на экране Android, касаясь его.
Записывает и повторяет жесты. На телефон ничего не ставится.

USB или ADB по Wi-Fi · на большинстве устройств без root · без Android SDK · Python, OpenCV и adb лежат внутри приложения


Фотография гитары, превращённая в штрихи и нарисованная на экране телефона

57 штрихов, 478 точек — ровно тот список путей, что уходит на устройство. На Pixel 8 Pro меньше двух секунд.

Начать

1 Установить: Windows .msi · macOS .dmg · Linux — из исходников. Подписи нет, поэтому Windows один раз скажет «неизвестный издатель», а macOS попросит правую кнопку → Открыть.
2 На телефоне: Настройки → О телефоне → Номер сборки ×7 → Для разработчиков → Отладка по USB. Подключить кабель или adb connect 192.168.1.42:5555.
3 Открыть. Тащить рисунок по живому экрану, колесо — размер, Shift+колесо — поворот, затем START DRAWING.

Что умеет

Размещение мышью Тащить, менять размер, поворачивать, отражать, Fit. Хранится в долях экрана и переживает поворот телефона.
Слои Несколько картинок сразу, у каждой своё положение и свои настройки трассировки.
Ластик по штрихам Провести по ненужным линиям; Undo erase возвращает их.
Пересчёт на месте Ползунок детализации перетрассирует загруженное — заново открывать файл не нужно.
Запись и повтор Файл хранит доли экрана, поэтому воспроизводится на другом телефоне, с любой скоростью.
Два трассировщика Кэнни для техники и зданий, когерентные линии по потоку для лиц и животных. Приложение спрашивает, что на картинке, а не какой алгоритм.
Нативные окна WinUI 3 на Windows, SwiftUI на macOS, оба поверх одного движка.
Нет живого экрана? Подойдёт снимок, снятый на телефоне вручную — важны его пропорции.
mthread shape heart               # сердце, вписанное в экран
mthread text "привет" --y 0.35    # любым шрифтом, что есть в системе
mthread record -o login.json      # затем: mthread play login.json --speed 2
from mthread import Device
Device().draw_paths([[(100, 200), (400, 200), (400, 600)]])
Четыре фотографии и штриховые рисунки, полученные из них

Это файлы из examples/, только уменьшенные — ничего не готовилось, не ретушировалось и не вырезалось.

Почему это быстро

adb shell input tap запускает на устройстве отдельный процесс на каждый вызов — 100–300 мс за штуку. Здесь весь рисунок уходит целиком, и штрих, который через input swipe рисуется 40 секунд, занимает меньше секунды.

Как это устроено → (по-английски) — своя система координат у тачскрина, три пути внутрь устройства и почему свежий Pixel отказывает в самом быстром, чего стоит «мгновенно», рисование по-человечески и список открытых задач.

Командная строка
mthread devices                  # какие устройства подключены
mthread info                     # разрешение экрана и диапазоны тачскрина

mthread shape star --points 7 --rotate 20   # heart, star, circle, square, polygon, spiral, wave
mthread text "подпись" --font arial.ttf --scale 0.5 --y 0.8
mthread play session.json --speed 0.5 --repeat 3

У всех команд рисования общие параметры размещения --scale, --rotate, --flip-x, --flip-y, --x, --y, --margin и --speed/--human — как рисовать.

Текст рисуется настоящим шрифтом и затем трассируется: поэтому доступен любой шрифт системы и поэтому буквы выходят контурами — у залитой глифы есть внутренняя и внешняя граница, а здесь рисует один палец.

Из исходников и как собрать приложения самому

run.bat на Windows и run.sh на macOS и Linux делают всё сами: окружение, зависимости и adb, если своего нет. Вручную:

git clone https://github.com/MAXAWER/MThread-Draw.git && cd MThread-Draw
pip install -e .            # только библиотека - зависимостей нет вообще
pip install -e ".[draw]"    # + трассировка картинок (OpenCV, NumPy, Pillow)

adb ищется в ADB_PATH, внутри собранного приложения, в вашем PATH, в папке platform-tools рядом с рабочим каталогом, затем в обычных путях SDK — или python tools/fetch_platform_tools.py скачает его, 7 МБ от Google.

pip install pyinstaller
python tools/build_app.py --msi     # Windows: движок, интерфейс WinUI, установщик
python tools/build_macos.py --dmg   # macOS: бандл и образ диска

Установщику нужен WiX: dotnet tool install --global wix --version 5.0.2.

Ограничения и что делать, если касания попадают не туда
  • Запись не знает, как был повёрнут телефон — воспроизводите в той же ориентации, в которой записывали. Само рисование ориентацию учитывает.
  • У воспроизведения есть постоянная накладная стоимость — секунда-две на инжектор: штрихи и паузы точны, общая длительность нет.
  • Стоп не мгновенный. Он отменяет то, что ещё не отправлено; уже полученные две секунды устройство дорисует.
  • Записи старше 1.2 не переносятся между телефонами и честно об этом сообщают, а не рисуют мимо.
  • Начните с mthread info. Дальше — issue, есть шаблоны для багов и устройств. Диапазоны координат тачскрина у разных панелей разные, и починить можно только то, что видно.

Работает с любым устройством из adb devices и с эмуляторами, открывающими порт ADB — AVD, BlueStacks, LDPlayer (:5555), Nox (:62001), MEmu (:21503). PNG, JPEG, BMP, WebP. Python 3.9+.

Лицензия

AGPL-3.0 плюс коммерческая лицензия от автора. Пользоваться, менять и делиться — бесплатно, но всё, что вы распространяете или держите сервисом для других, обязано публиковать полный исходный код под AGPL, включая перекрашенную копию. Для продукта с закрытым кодом нужна коммерческая лицензия. Юридический текст: LICENSE · человеческим языком: TERMS.md · участие: CONTRIBUTING.md.


Если инструмент сэкономил вам вечер — звезда ⭐ помогает найти его другим.