True Color: фоторедактор desktop-рівня в кишені

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

Всім привіт! Мене звати Ігор Мальований, я Senior iOS/macOS інженер. І вже майже 2 роки я працюю над фоторедактором для iOS.

Декілька днів тому я розпочав публічне бета-тестування мого застосунку True Color. True Color: фоторедактор для iPhone із простотою дотику і потужністю десктопного рівня: справжні шари, криві, маски, LUT-и та Pipeline, який показує, ЯК зібраний кожен едіт. Все працює на девайсі, без ШІ, аккаунтів, та без реклами!

Звідки все почалося

Застосунок True Color не взявся «з повітря». Задля доведення його до поточного рівня мені довелося пройти великий але дуже насичений і цікавий шлях.

Все почалося у вересні 2024 року, коли я влаштувався в R&D одного соціального застосунку для фотографів. І одна з ключових ідей над якою мені довелося працювати — надати фотографам можливість розповсюджувати свої авторські пресети прямо в застосунок, і при цьому зберегти можливості тонкого редагування окремих параметрів. Ідея амбітна і потребувала суттєвих досліджень. Але зрештою виявилося, що компанія не є платоспроможною і будує всю свою модель на обіцянках, невиплатах зп, та постійній зміні кадрів, що працюють 1-2 місяці і йдуть, бо їм не платять.

Так я і пішов через 2 місяці, але сама R&D-задача виявилася настільки нетривіальною, що я вирішив будувати власний проєкт. І ні, мій проєкт немає нічого спільного з оригінальною задачею. Але під час роботи над нею я і отримав натхнення на свій власний проєкт.

Мотивація

Але чи не забагато фоторедакторів на ринку? Так, забагато. Але більшість з них є простою обгорткою для LUT (Look-Up Table — таблиця перетворень, що описує чим має стати той чи інший колір після застосування), що лімітує можливість гнучкої роботи з кольором. У моєму застосунку я пішов іншим шляхом — будь-яка трансформація є математичною функцією. І поєднання цих функцій призводить до значно детальнішого та повністю контрольованого результату. А ще — математика важить декілька кілобайтів, на відміну від мегабайтів (а може й десятків) що потребує LUT. Але цей формат я все ж підтримую, тому користувач без проблем зможе використовувати власну колекцію LUT-ів.

Найбільший виклик: математика кольору

Я вирішив використовувати Metal.

І головний виклик, на подолання якого пішло 80% часу — коректна реалізація математики кольорів. Ні, не так. Коректна реалізація математики кольорів, що узгоджується з загальними стандартами індустрії.

І якщо певні елементи кольорової математики є добре задокументованими і публічними (такі як режими змішування, або базові Exposure, Brightness, тощо), то інші могли бути значно комплекснішими (Color Matrix, Levels, Hue). Бо немає жодної складності у розумінні формули exposure val = old_val * 2 ^ compensation. Але якщо треба замінити колір у окремо взятому діапазоні кольорового кола, і ще врахувати затухання переходу для мінімізації рваних кольорів — тут починається зовсім інша історія.

Часто досліджувати роботу тих чи інших формул «великих» загальноприйнятих інструментів мені довелося емпірично: застосувати певний шар з різними варіаціями його параметрів. На кожну варіацію брати проби кольорів «до» та «після» з заздалегідь підготовленої сітки кольорів. Заносити все в таблицю та будувати з цього графік. Часто потрібно було «на око» визначати математичну функцію, що стоїть за цим графіком. І далеко не часто це вдавалося, і тоді доводилося застосовувати інші підходи. Але зрештою готову математичну функцію я переписував у Metal-шейдер. З цікавого: чим більше я пірнав у тему, тим простішим ставав шлях, оскільки більшість загальноприйнятих інструментів побудовані зі спільних цеглинок, які можна перевикористовувати.

Зрештою я оформив всі напрацювання у єдиний рушій, який назвав TrueColorKit.

UI: спробував, але можна краще

Наступним викликом став UI. Бо потужних фоторедакторів у тому чи іншому вигляді — багато. А зручних та зрозумілих потужних редакторів я ще не бачив (хоча все звісно суб’єктивно). Раніше я намагався робити кастомізований дизайн, і навіть непогано просунувся у цьому. Але зрештою вирішив прийняти реальність: я не дизайнер, і якщо я хочу розвивати цей застосунок ефективно — варто почати з draft-версії UI, побудованої на системних компонентах. Таким чином за останні місяці я переробив (спростив) UI, і наступного разу повернуся до нього вже разом з професійним UI/UX дизайнером.

Що вміє True Color зараз

Наразі додаток включає:

  • 30 типів недеструктивних шарів, які можна комбінувати у будь-якій послідовності
  • 21 режим змішування, включно з поканальним контролем та підтримкою додаткових умов
  • 5 режимів маскування
  • Режим роботи Pipeline
  • Режим редагування Alchemy
  • Можливість збереження пресетів

Pipeline — це режим, в якому можна побачити як змінюється фотографія на кожному кроці редагування, а також внести коригування прямо в середині і одразу побачити як це впливає на подальші кроки.

Alchemy — унікальний режим «для лінивих», який дозволяє змішувати фільтри між собою «на дотик». Жодних параметрів та незручних налаштувань.

Looks — внутрішній формат, призначений для збереження та шейрінгу пресетів! Оброби одну фотку, збережи Look, та застосовуй його до всіх інших фотографій!

Що далі

Наразі застосунок в активному бета-тестуванні, і вірогідність його змін та трансформацій все ще висока. І наступні великі виклики, які стоять перед ним: UI/UX та просування. Але це вже зовсім інша історія!

Приєднуйтесь до бети

Долучитися до бети у TestFlight можна за дві хвилини за посиланням!
Буду вдячний за будь-який фідбек та пропозиції щодо поліпшення застосунку!

👍ПодобаєтьсяСподобалось4
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

А покажіть, будь ласка, що буде, якщо задаунскейлити в два рази це зображення у вашому застосунку
www.ericbrasseur.org/...​gamma_dalai_lama_gray.jpg

В моєму застосунку наразі немає функції зниження роздільної здатності зображення (якщо чесно, я не певен що вона має сенс в цьому контексті). Але я якщо по результатам бети буде такий запит від користувачів — додам.

З вашого питання розумію що хотіли перевірити як працює змішування пікселів при зменшенні. Потенційно я це звісно врахую. Але зараз фічі немає як такоє

Підписатись на коментарі