По душе · Android × Figma · 12.09.2026 · профиль
Пятьдесят пять кадров: вся страница «Профиль» (54 кадра) плюс хвост «Афиши» — единственный из её 117 кадров, оставшийся без съёмки в третьем десятке. Сам профиль во всех состояниях, подсказки, выбор статуса и лист местоположения, QR‑код пользователя, поп‑апы регистрации, редактирование, «Мои события», «История» и «Скидки», страница события и карта из профиля, регистрация из профиля в три шага, обновлённый профиль с разделом «Куда иду». Четыре экрана написаны с нуля, остальные — состояния и экземпляры уже собранных. Каждый кадр собран из данных ноды и сведён с рендером Figma в масштабе ×3.
Смотровая
Тяните шторку, чтобы совместить макет и приложение. «Карта» показывает, где остаётся расхождение: синим закрыт системный статус‑бар, клавиатура и системные листы iOS — их рисует система, в сравнении они не участвуют (спека 6.4). Кадры выше экрана (до 1365 dp) снимаются полосами по 844 и склеиваются.
Числа
Полное — доля пикселей, отличающихся сильнее ΔE 6 вне масок. Без текста — то же с исключёнными текстовыми блоками. ±1 px — пиксель считается расхождением, только если не совпал ни с одним пикселем рендера в окне ±1: сдвиг растра на долю пикселя не есть ошибка вёрстки. Геометрия — два последних вместе, то есть чистая форма, положение и материал; по ней и выносится вердикт. Подсвечены строки выше порога — у каждой измеренная причина в разделе «Границы».
| Экран | Кадр | Состояние | Полное % | Без текста % | ±1 px % | Геометрия % | Шкала до порога 0,3 % |
|---|
Разбор
Каждая строка — расхождение из реестра docs/figma/fig/ledger.md
(F1‑1…F1‑16): что показала нода, что делало приложение и сколько это стоило в числах.
Четыре первые находки — не про этот десяток, а про сами измерители: они врали одинаково на
всех кадрах файла, и теперь исправлены.
3D‑иконки плиток профиля выглядели мягче рендера. Оказалось, дело не в размере и не в положении: инструмент вырезки растров уменьшал картинку ланцошем, а конвейер Figma — боксовым фильтром. Замер по рендеру: у 3D‑часов (окно 747 → 249 px) среднее расхождение по непрозрачным пикселям 0,47 уровня у HAMMING и BILINEAR, 0,61 у BOX и 6,81 у LANCZOS; у 3D‑скидки — 0,55 против 8,26. Ланцош звенел на кромке. После замены фильтра растр сходится с рендером до 0,6 уровня, а снимок — до 1,6.
В разобранном .fig у всех четырёх карточек лежит sha растра
мастера — переопределение инстанса там не разрешается. Верен ответ API: четыре
разных imageRef. Инструмент вырезки научен брать sha из API (та же поправка,
что и для мастеров компонентов) и обрезать заливку FILL по центру, а не
сплющивать несквадратный исходник.
У мастеров icon-qr-code и icon-cog-6-tooth толщина штриха
1,5, а экземпляры в шапке профиля переопределяют её на 2,0 — Figma перестраивает контур,
а в .fig лежит контур мастера. Чернила в рендере 18,67 dp против
18,00 у нас при векторе 16,5. У генератора иконок появился режим, который строит
контур из векторной сети и обводит его толщиной экземпляра.
У кадра 734:88319 «Афиши» в ноде fills: [], и 14 % его
рендера прозрачны. В RGB прозрачное становится чёрным — сравнивать было не с чем.
Под такими пикселями в ноде ничего не объявлено, и теперь они исключаются из метрики.
Самопроверка: на непрозрачном кадре входа число не изменилось — 0,142.
3D‑иконка 83 dp в плитке «История» высотой 80 сжималась до 80 и уезжала на 1,5 dp вверх и вправо: обычный модификатор размера в Compose ограничивается родителем. Поймано перебором смещений снимка против самого растра — снимок стоял на (0, −3) px.
Лента «Похожих интересов» — две страницы по 330 с зазором 20 при ширине 358: в макете она вылезает за кадр и обрезается, вторая страница видна на 24 dp. Compose же сжимал обе. То же в «Истории» (пять карточек на 640) и «Скидках» (812 на 578): шапка дня налезала на карточку. Лечится снятием ограничения по размеру и обрезкой по странице.
У снекбара фоновое размытие 20, и на логотипе партнёра это видно. Фонового размытия в Compose нет: страница пишется в слой и рисуется под снекбаром второй раз — обрезанной по рамке узла, с размытием радиуса по формуле ядра и нормировкой у кромки. Перебор режимов краёв: без размытия 1,194, «зажать» 0,362, «повторить» 0,371, «отразить» 0,317, «прозрачно» с тройным наложением — 0,267.
Обводка аватара 4 dp внутрь — вертикальный градиент от сиреневого к салатовому у верифицированных, и сплошная линия‑разделитель у трёх кадров без бейджа. Одинаковая обводка на всех кадрах выдавала себя целым кольцом на карте расхождений.
У белых блоков радиуса 40 сглаживание нулевое — это обычная дуга; у карточек внутри радиуса 24 оно равно единице — это squircle; у чипа района радиуса 24 — снова дуга. Форма угла видна кромкой во всю длину блока, поэтому каждый радиус берётся вместе со своим сглаживанием.
Точек в пилюле столько, сколько фотографий у события: пилюля 66 при двух и 55 при одной. Рисовались две всегда — и это ехало не только на кадре профиля, но и на пяти кадрах созданного события пятого десятка. Правка улучшила и их: 0,235 → 0,196.
Строка района обрезается многоточием, а не переносится; чип «Указать статус» обведён пунктиром 8/4; значок «скопировать» в карточке скидки — цвета подписи, а не промокода; блок текста в «Профиль подтвержден» — 60, а не 98, иначе подпись уезжает на 16 dp вниз; подпись чипа «Саморазвитие» набрана голым чёрным вместо токена, и прожига над плашкой у неё поэтому нет.
Границы
Пять кадров из 55. Ни один остаток не относится к вёрстке: два — копии уже закрытых кадров со своим известным остатком, два — стекло над неровной подложкой, один — растр карты.
| Кадры | Геометрия % | Класс остатка |
|---|---|---|
306:47249 | 0,529 | копия мастера «Страницы Карта» 180:8884 узел в узел: несёт его остаток растра карты (у самого мастера 0,530) |
693:75062, 348:42416 | 0,407 и 0,406 | стекло неактивной кнопки «Событие завершено» над неровной подложкой: сквозь неё виден синий маркер карты, и профиль его яркости у нас мягче (замер по строке: рендер 79…117, снимок 94…109) — тот же класс, что у стеклянных чипов карты |
348:43154, 348:45937 | обе 0,304 | копии кадра «Селфи» 287:26990 узел в узел; на том же прогоне сам оригинал даёт ровно 0,304 — это остаток области видоискателя, которая в сравнение не входит |