Почти сразу же после запуска и рекордного роста у Prisma появились «конкуренты». Mail.Ru Group, соинвестор Prisma, выпустил сразу два «клона» — Vinci от команды vk.com и Artisto от my.com. Технический директор компании «2Товарища» Виталий Махинов изучил код трех приложений и разобрался как они работают и чем разница между ними.
Не знаю, было ли это командой «сверху» или инициативой проектов — здесь можно долго рассуждать об этичности и стратегии. Я же решил посмотреть на эти продукты с технической точки зрения, насколько «клоны» MRG отличаются друг от друга и насколько они «конкуренты» для Prisma.
Беглый осмотр приложений показывает явное сходство фильтров Vinci и Artisto. Cпустя пару дней, пока я писал эту заметку, приложения получили ряд обновлений и фильтры стали отличаться, но сходство всё равно присутствует. Prisma тем временем по качеству и количеству фильтров ушла уже очень далеко.
Vinci, собственно, и не скрывает, что использует чужой алгоритм обработки изображений. Я не нашёл информации про Artisto, но фильтры очень похожи на те, что показаны как пример в источнике выше. Несмотря на то, что в Prisma нет видео, энтузиасты в сети уже делают целые фильмы под их фильтрами. Какие-то буквально на пару секунд, иные на несколько минут. Можно предположить, что функция обработки видео в Prisma тоже скоро появится.
Кроме чисто пользовательского впечатления я покопался и в «начинке» приложений. Помимо бинарника приложение так же представляет из себя кучу метафайлов. Этот анализ даёт понять, что Artisto и Vinci — это одно и то же приложение с разными иконками или всё же разные разработки. Как я и думал, это разные приложения. Более того, если Vinci, как и Prisma, написан на Swift нативным методом, у меня есть все основания полагать, что Artisto реализован на какой-то кроссплатформенной технологии. В любом случае, это точно разные проекты и разные команды с разным подходом к разработке.
Более ничего интересного при ковырянии приложений я не нашёл, кроме модуля для работы с видео в Prisma, но это и так будет скоро объявлено, я думаю. Также был разный мусор в приложениях, которого вообще быть там не должно. Например, в Prisma валяется фотка Виталия Берга, 100кб к весу приложения. Кроме как факта дружбы Виталия с Моисеенковым, я ничего не нашёл. Подобное всегда ставит в тупик: тратишь кучу времени, чтобы на выяснить, что это, но чаще приходишь к выводу, что это не подсказка и не уязвимость, а просто разработчик положил и забыл.
Но вообще глупо судить ребят за какой-то беспорядок и хаос внутри приложений. Приходится очень быстро делать и заливать непростые вещи. Код приложений ответил на основной вопрос — идём дальше.
Логично, что приложения являются client-server. Приложение делает или берёт фото, отправляет на сервер, он всё обрабатывает и присылает результат. Прелесть нейросети в том, что даже мелкая сеть будет занимать очень приличный объём. Помню, я писал крестики-нолики в институте. Игра с заложенным алгоритмом для бота весила считанные килобайты. С простейшей нейросетью — сотни мегабайт. В ближайшее время мы вряд ли получим рабочую Prisma — как ни назови приложение — с offline-работой. Все клоны будут работать только с наличием интернета. Это нам на руку, поэтому следующим шагом проверим http траффик.
Vinci и Artisto удивили. Со своими серверами они общаются по голому http. Возможно, сделано это не случайно, а в том числе для экономии траффика. Допустим что так, но Vinci не обладал вообще никакой защитой. По голому http загружается фотка, в ответ получается некий хэш. Подставляем его в URL — вуаля, любая фотка с нужным тебе фильтром от Vinci.
Artisto всё же в этом плане оказался более продвинутым. При загрузке видео API также требовал некоего хэша. Так разработчики пытаются обезопасить себя от таких, как я. Помимо самого видео просят хэш, который является чаще всего чексуммой от файла с видео (md5, sha256 и т. п.) плюс ещё что-то, что знают только разработчики. Таким образом при попытке залить файл не через приложение нас ждёт облом. Есть выход — дизассемблировать приложение, искать точку входа для генерации хеша и вытаскивать алгоритм.
Prisma, к слову, защищается примерно так же — с помощью хэша. Помимо этого, весь траффик ходит по https, а сертификат проверяется на источник. Это сильно усложняет попытки снифать траффик, но я решил попробовать провести MITM-атаку. Было обидно после всех махинаций получить API, но обнаружить там сверку по хэшу, однако это правильно. С точки зрения безопасноси Prisma снова далеко впереди.
Напоследок я посмотрел входные и выходные данные. Vinci делает фото в 250кб, на выходе имеем 400кб. 2-х секундное видео в Artisto, весом в 430кб, превращается в 240кб mp4-видео. Приложение отдаёт реально mp4-видео. Учитывая качество (никакущее), я был уверен, что найду там GIF и звук отдельно, но никак не видео. Интересно, сколько пользователей онлайн расплавит сервера MRG, которые делают mp4-видео на лету? Кстати, ещё я заметил, что сервера Artisto обрабатывают видео намного быстрее, чем отдают их обратно на устройство. Т.е. время работы Artisto немного утыкается в исходящий канал. Возможно, это просто погрешность моей сети, но с другими подопытными такого замечено не было. Prisma загружает файл в 100кб и на выходе имеем 170кб. При этом что Vinci, что Prisma на выходе дают 1080×1080px квадраты. Скорость работы и Vicni и Artisto на порядок выше, что логично, так как у Prisma на порядок больше активных пользователей. Если доверять статистике Google Play, то у Vinci + Artisto = 110к-550к установок. У Prisma — 10 млн-50 млн установок, даже с учётом того, что приложение Prisma для Android вышло относительно поздно.
В общем, Vinci и Artisto — не такие уж и «клоны» Prisma. А Prisma — не такой уж и «близкий» конкурент для этих приложений. Не смотря на этическую составляющую, MRG запустил 2 технически разных продукта, которые решают разные задачи. Им ещё очень далеко до «идеала» Prisma, которая ушла далеко вперёд и по DAU, и по качеству и количеству фильтров, но проекты настроены серьезно. Обновления приложений выходят очень часто, меняются они с колоссальной скоростью. Стоит ли бояться Prisma?
Лично я думаю, что нет. У них прекрасная команда, которая пока не допускала серьезных ошибок, что позволяет оставаться «первой». Лично моё мнение, Prisma соберёт все сливки, тогда как Vinci и Artisto в лучшем случае интегрируются в другие проекты MRG. На этом минутка технических подробностей подходит к концу, дальше можно снова холиварить на этические темы. Например, я знаю один фонд, который плясал от радости, что пробил встречу с основателями Prisma, когда всё начиналось. А теперь пляшет от радости, что не успел в уходящий поезд и не инвестировал в проект. Говорит, что совсем не хочет инвестировать в то, на что очень зол MRG и уже начал клепать конкурентов. Вот и делай стартапы в России.