Как быстро летит время, когда занимаешься интересным делом! С усилием отрываюсь от этого дела, чтобы вам о нём рассказать.
Не так давно я писал о проекте roop
— завирусившемся инструменте для дипфейков. Несмотря на сложность выполняемой задачи, это очень простая скриптовая обёртка над сторонними моделями и рантаймами; вся нейрохрень уже заготовлена, и её нужно просто запустить с нужными параметрами. Даже не имея практически никакого опыта с python, легко разобраться в местном индусском коде и начать контрибьютить.
Вернее, я думал, что контрибьютить будет легко, но с текущим ментейнером проекта мы не сошлись в подходах. Хотя мы достаточно корректно переписывались и проговаривали какие-то вещи в чате, он под разными предлогами отбивал мои PR (кроме совсем уж простых, вроде исправлений опечаток). PR на поддержку сохранения состояния, для отклонения которого повода не нашлось, он просто не принимал «до стабилизации кода». Оказалось, что под «стабилизацией» он подразумевает сквош всех коммитов dev-ветки, из-за чего история git изменилась, мой PR детачнулся, и тогда уж он его с чистой совестью закрыл. Кстати, squash ещё подразумевает, что из истории выкинулись имена всех, кто в проект контрибьютил, а это уже свинство (я, например, хотел бы иметь возможность на собесах флексить своим вкладом в опенсорс).
Это был не единственный, но финальный эпизод, после которого я воспламенил стул решил воспользоваться величайшей возможностью лицензии GNU GPL — забрать код, и сделать хорошо самому.
Вот и делаю: sinner (
Здесь уже есть поддержка сейвов (обработку можно в любой момент прервать, и продолжить с того же места), обрабатываемые кадры извлекаются по мере чтения в память (а не валяются гигабайтами файлов на диске), есть понятная цепочка обработки (можно сначала поменять лицо в ролике, а затем прогнать через улучшайзер), можно натравливать обработку на каталог с картинками, а не только на видосы и фотки
Но главное — мой код гораздо лучше спроектирован, в отличие от откровенного индокода roop (атавизмы которого у меня ещё присутствуют). Мне было больно наблюдать, как там выдумывают собственную реализацию интерфейсов, лишь бы не переходить на ООП — и я сделал нормально. В оригинале забили на тесты — я сразу стараюсь их писать. В целом, я просто стараюсь сделать код, который будет легко поддерживать и расширять.
В то же время я изучаю python прямо по ходу, и хотя он мне кажется простым до примитивности, я могу не знать каких-то приёмов, или следовать своим привычкам из других языков. Поэтому прошу знатоков посмотреть и поговнить, если я где-то сделал плохо, или не так, как принято.
А ещё это первый проект, который я пишу с активным использованием ChatGPT, и это очень кайфово. Раньше, когда я начинал писать на незнакомом языке, мне приходилось тратить кучу времени на гуглёж и расковыривание; сейчас можно просто поставить задачу и получить готовый, полностью разобранный код. Осечки случаются, но на уровне погрешности, и это в любом случае выходит на два порядка эффективнее, чем без ChatGPT. При этом я не думаю, что ИИ уже способен заменять хотя бы джунов: чтобы создавать с его помощью хотя бы базовый код, нужен человек с достаточным уровнем понимания теории и хоть каким-то практическим опытом. Неопытный человек просто не сможет корректно поставить задачу роботу. Но если опыт есть, то помогайка получается классная.
>>Click here to continue<<