Export Icons
Как выгружать иконки из компонентов Figma в проект через CLI Export Icons: установка, конфиг, источники и цели, имена файлов, иконочный шрифт, SF Symbols, Figma Motion и отслеживание изменений.
Export Icons (@sxl-studio/export-icons): утилита командной строки, которая скачивает иконки из компонентов Figma в папку проекта. Она экспортирует узлы COMPONENT и каждый вариант COMPONENT_SET, запоминает, что уже скачано, и при следующем запуске забирает только изменения. Из того же набора она собирает иконочный шрифт и SF Symbols для iOS.
| Что вы получаете | Подробности |
|---|---|
| Статические файлы | svg, png, jpg, webp, gif, pdf |
| Анимированные иконки (Figma Motion) | svg, gif, mp4, webm |
| Иконочный шрифт | woff2, woff, ttf, eot, svg вместе с таблицей стилей и страницей предпросмотра |
| iOS | Assets.xcassets с .symbolset на каждую иконку |
| Отслеживание изменений | Новые, изменённые, переименованные и удалённые иконки определяются между запусками |
Быстрый старт
- Установите пакет в проект. Нужен Node.js 20.9 или новее.
- Запишите токен Figma и ключ файла в
.env(см. раздел «Доступ к Figma» ниже). - Создайте конфиг мастером: он задаёт несколько вопросов и пишет валидный файл.
- Проверьте конфиг и посмотрите изменения через
--dry-run. - Запустите синхронизацию. Если в папке уже лежат скачанные ранее иконки, добавьте к первому запуску
--adopt-existing: файлы будут приняты как базовое состояние, а не скачаны заново.
npm install --save-dev @sxl-studio/export-icons
pnpm exec sxl-export-icons init --wizard
pnpm exec sxl-export-icons validate-config --config sxl-export-icons.config.yaml
pnpm exec sxl-export-icons sync --config sxl-export-icons.config.yaml --dry-run
pnpm exec sxl-export-icons sync --config sxl-export-icons.config.yaml --adopt-existing
pnpm exec sxl-export-icons sync --config sxl-export-icons.config.yaml
С pnpm установленный бинарник запускается как pnpm exec sxl-export-icons, с npm как npx sxl-export-icons. Для разового запуска без установки используйте npx @sxl-studio/export-icons или pnpm dlx @sxl-studio/export-icons. Не используйте pnpx sxl-export-icons: в приватных registry он может попытаться найти unscoped-пакет sxl-export-icons и завершиться с 404.
Когда использовать
- Иконки живут в библиотеке Figma и должны попадать в репозиторий файлами: со стабильными именами и без ручного экспорта.
- Одни и те же иконки нужны в нескольких форматах или размерах, например SVG для веба и превью в WebP.
- Из того же набора нужно собрать иконочный шрифт или SF Symbols.
- Иконки меняются часто, и вы хотите скачивать только изменения: из терминала или в CI.
Доступ к Figma
- Откройте настройки аккаунта Figma и создайте personal access token со scopes
file_content:readиfile_metadata:read. Права на запись не нужны. Токены Figma ограничены по сроку, выберите срок по вашей политике. - Возьмите ключ файла из URL:
https://www.figma.com/design/<fileKey>/.... - Сохраните оба значения в
.envв корне репозитория и добавьте.envи.env.localв.gitignore.
FIGMA_TOKEN=figd_xxxxxxxxxxxxxxxxx
SXL_ICONS_FILE_KEY=xxxxxxxxxxxx
# только для Bridge: mode: mcp, Figma Motion, экспорт через плагин
BRIDGE_AUTH_TOKEN=xxxxxxxxxxxx
CLI читает .env.local и .env из текущей папки и из всех родительских. Имена переменных можно поменять в конфиге: env.figmaTokenVar, sources[].fileKeyVar, bridge.authTokenVar.
Команды
| Команда | Что делает |
|---|---|
sync (по умолчанию) | Читает источники, скачивает новые и изменённые иконки, удаляет исчезнувшие, затем собирает шрифт и SF Symbols |
init | Пишет стартовый sxl-export-icons.config.yaml; с --wizard задаёт вопросы вместо копирования шаблона |
validate-config | Проверяет YAML, пути и переменные окружения |
report | Печатает по каждой паре источник и цель, сколько иконок отслеживается и на месте ли их файлы |
clean | Удаляет файлы, записанные в state, и очищает state |
probe-motion | Показывает, что Figma сообщает об узле с Motion, ничего не записывая |
help, version | Справка и версия пакета |
create-config равнозначно init, init-wizard равнозначно init --wizard. Без --config CLI ищет в текущей папке sxl-export-icons.config.yaml, icons.config.yaml, config/sxl-export-icons.config.yaml и config/icons.config.yaml.
Флаги sync
| Флаг | Что делает |
|---|---|
--config <path> | Файл конфига; повторите флаг, чтобы запустить несколько конфигов сразу |
--config-glob "<glob>" | Конфиги по шаблону, например "packages/*/sxl-export-icons.config.yaml" |
--target <id> | Только перечисленные цели; можно повторять |
--dry-run | Показывает, что изменится, и ничего не записывает |
--full | Сначала очищает state и экспортирует всё заново. Запускайте со всеми целями: с --target файлы остальных целей остаются на диске, но их следующий sync начинается с пустого state и считает их новыми |
--adopt-existing | При первом запуске принимает уже лежащие на диске файлы как неизменённые, а не скачивает заново |
--allow-fallback-rest | Если источник mcp недоступен, читает его через REST API, когда у источника есть ключ файла |
--report <path> | Записывает JSON-отчёт о запуске |
Флаги других команд
| Команда | Флаг | Что делает |
|---|---|---|
init | --path <path> | Куда записать конфиг; по умолчанию sxl-export-icons.config.yaml |
init | --force | Перезаписать существующий конфиг |
init | --wizard | Интерактивные вопросы; нужен настоящий терминал |
clean | --dry-run | Только перечислить, что будет удалено |
clean | --skip-aux | Сохранить папки шрифта и SF Symbols; удалить только отслеживаемые файлы иконок |
validate-config, report | --config, --config-glob | Как у sync |
probe-motion | --node-id <id> | Узел для проверки; без него берётся текущее выделение в Figma |
probe-motion | --format <list> | Форматы для проверки, через запятую или повтором флага: MP4, WEBM, GIF, SVG |
probe-motion | --inspect-only, --include-descendants | Прочитать данные Motion без пробного экспорта; включить вложенные слои (--descendant-max-depth <n> и --descendant-max-nodes <n> ограничивают обход) |
probe-motion | --ignore-overlapping-layers, --include-id-attribute, --bridge-url <url> | Одноимённые опции экспорта Figma для проверки SVG; адрес Bridge, по умолчанию http://127.0.0.1:37830 |
Мастер настройки
init --wizard работает только в интерактивном терминале. Вопросы по порядку: язык (en или ru), создать ли .env с пустыми переменными, путь к state-файлу, разрешить ли пути вне проекта, идентификатор источника, режим источника (rest или mcp), переменная с ключом файла, имя страницы, скорость скачивания, идентификатор цели, папка вывода, формат (svg, png, jpg, webp, gif или pdf), стиль имён, иконочный шрифт (папка и форматы), SF Symbols (папка) и фильтр по marker в описании. Результат: конфиг version: 3 с шаблоном имени {prefix}{variant.style}{sectionName}{baseName}{suffix}. Для mp4 и webm добавьте motion.enabled: true вручную.
Конфигурация
Конфиг: YAML-файл с version: 3. sources описывают, откуда читать иконки, targets описывают, куда и как их записывать. Относительные пути считаются от папки конфига.
version: 3
env:
figmaTokenVar: FIGMA_TOKEN
bridge:
baseUrl: http://127.0.0.1:37830
authTokenVar: BRIDGE_AUTH_TOKEN
state:
file: .sxl/cache/icons-state.json
safety:
allowOutsideWorkspace: false
sources:
- id: icons
mode: rest
fileKeyVar: SXL_ICONS_FILE_KEY
pageName: Icons
targets:
- id: web-svg
sourceIds: [icons]
output:
path: assets/icons/svg
format: svg
| Ключ | По умолчанию | Что делает |
|---|---|---|
env.figmaTokenVar | FIGMA_TOKEN | Имя переменной с токеном Figma |
bridge.baseUrl | http://127.0.0.1:37830 | Адрес Bridge. Используется только источниками mode: mcp, целями с Motion и экспортом через плагин |
bridge.authTokenVar | BRIDGE_AUTH_TOKEN | Переменная с токеном доступа к Bridge |
state.file | assets/.cache/sxl-export-icons-state.json | Где CLI запоминает, что уже экспортировано. Шаблон и мастер используют .sxl/cache/icons-state.json; подходят оба, выберите один путь и не меняйте его |
safety.allowOutsideWorkspace | false | По умолчанию пути вывода и state должны оставаться внутри папки, из которой запущена команда. true разрешает писать в другое место, например из packages/ds/tokens в packages/ds/assets |
Конфиг version: 2 (icons.config.yaml) по-прежнему читается и мигрирует на лету; его относительные пути считаются от папки, из которой запущена команда.
Источники (sources)
sources:
- id: mono
mode: rest
fileKeyVar: SXL_ICONS_FILE_KEY
pageName: Monochrome
sectionName: Actions
downloadSpeed: 20
descriptionExportMarker:
key: sxl-studio-export-icon
includeWhenMissing: true
| Ключ | По умолчанию | Что делает |
|---|---|---|
id | обязателен | Имя, которое указывают в targets[].sourceIds |
mode | rest | rest читает файл через Figma REST API. mcp читает список иконок из файла, открытого в Figma, через Bridge и Remote Connect; сами файлы всё равно скачиваются через REST, поэтому токен и ключ файла по-прежнему нужны |
fileKey, fileKeyVar | обязателен для rest | Сам ключ файла или имя переменной, в которой он лежит |
pageName, pageId | все страницы | Читать только эту страницу |
sectionName, sectionId | все секции | Читать только иконки внутри этой секции |
downloadSpeed | 10 | Запросов в секунду к Figma. Уменьшите, если Figma отвечает 429 |
descriptionExportMarker | выключен | Фильтр по marker в описании компонента, см. ниже |
selectors | нет | Правила включения и исключения, см. ниже |
| Селектор | Что делает |
|---|---|
includeNodeIds, excludeNodeIds | По id узла |
includeComponentNames, excludeComponentNames | По имени компонента |
includeComponentSetNames, excludeComponentSetNames | По имени набора компонентов |
variantMatch | Точное совпадение свойств варианта. Подходит любое свойство, не только style; значение задаётся строкой или списком строк |
selectors:
variantMatch:
state: [default, hover]
style: outlined
Селекторы работают и на уровне цели (targets[].selectors), и внутри переопределения (overrides[].patch.selectors); там они фильтруют только иконки этой цели или правила.
Marker в описании. Напишите sxl-studio-export-icon: true или sxl-studio-export-icon: false в описании компонента или набора компонентов. true экспортирует иконку, false пропускает, а без marker действует includeWhenMissing. Имя ключа настраивается.
Цели (targets)
targets:
- id: web-icons
mode: sync
sourceIds: [mono]
download:
enabled: true
pruneUntracked: false
output:
path: assets/icons
format: svg
scale: 1
quality: 100
lossless: false
unsafeSvgPolicy: fail
naming:
case: kebab
pattern: "{prefix}{variant.style}{sectionName}{baseName}{suffix}"
collisionStrategy: add-nodeid
| Ключ | По умолчанию | Что делает |
|---|---|---|
id | обязателен | Имя цели, используется с --target |
mode | sync | sync читает Figma и пишет файлы. convert-local берёт SVG, уже лежащие в output.path, и только собирает шрифт или SF Symbols |
sourceIds | обязателен для sync | Какие источники экспортировать |
selectors | нет | Дополнительный фильтр для этой цели |
download.enabled | true | false отключает скачивание, переименование и удаление; локальные файлы используются как есть |
download.pruneUntracked | false | Дополнительно удалять файлы формата цели в output.path, которых нет в текущем наборе Figma. Используйте только для папок, принадлежащих одной этой цели |
output | Формат и обработка, см. следующую таблицу | |
naming | Имена файлов, см. раздел «Имена файлов» | |
overrides, sourceExport, motion, font, sfSymbols | выключены | Описаны в своих разделах |
Настройки output
| Ключ | По умолчанию | Что делает |
|---|---|---|
path | обязателен | Папка вывода |
format | svg | svg, png, jpg, webp, gif, pdf; с motion.enabled ещё mp4 и webm. Один формат на цель |
scale | 1 | Масштаб экспорта в Figma, от 0.01 до 4 |
quality | 100 | Качество растровых форматов, от 1 до 100 |
lossless | false | true оставляет WebP без потерь, в том числе при заданном qualitySize: CLI никогда сам не переключается на кодирование с потерями |
unsafeSvgPolicy | fail | Что делать с SVG-иконкой, у которой внутри вектора есть заливка изображением: fail останавливает sync, embed-png пишет SVG со встроенным PNG. См. раздел «SVG со встроенными изображениями» |
qualitySize | null | Ограничение размера растрового файла, например "50kb" или "1mb"; качество снижается, пока файл не уложится |
width, height | null | Изменить размер растрового результата до этих значений в пикселях |
modeWH | null | Как вписывать в width и height: null простое изменение размера, proportion сохранить пропорции внутри рамки, cover заполнить рамку с обрезкой, fill растянуть |
SVG оптимизируются через SVGO, растровые файлы через Sharp. webp и статический gif экспортируются из Figma как PNG и конвертируются локально; pdf приходит из Figma как есть.
Имена файлов
Имя файла собирается из naming.pattern. Токены, пустые для конкретной иконки, пропускаются; остальные соединяются через separator и приводятся к case.
| Токен | Значение |
|---|---|
{prefix}, {suffix} | naming.prefix и naming.suffix |
{baseName} | Имя набора компонентов, иначе имя компонента |
{componentName}, {componentSetName}, {nodeName}, {nodeId} | Имена из Figma и id узла |
{pageName}, {sourceId} | Имя страницы, идентификатор источника |
{sectionName} | Имя секции, только при includeSectionName: true |
{variant} | Все свойства варианта парами свойство-значение |
{variant.<prop>} | Одно свойство варианта, например {variant.style} или {variant.size}. Для нескольких свойств поставьте несколько токенов подряд; свойство, которого нет у иконки, пропускается |
| Ключ | По умолчанию | Что делает |
|---|---|---|
case | kebab | kebab, snake, camel, pascal |
separator | зависит от case | - для kebab, _ для snake, без разделителя для camel и pascal |
prefix, suffix | null | Значения токенов {prefix} и {suffix} |
includeSectionName | false | Включает токен {sectionName} |
collisionStrategy | add-nodeid | Две иконки получили одно имя: error останавливает, add-nodeid добавляет id узла, add-index добавляет номер |
Без pattern имя складывается из prefix, свойства style (или variant), секции, если она включена, имени набора или компонента и suffix.
Дубли проверяются перед скачиванием. В интерактивном терминале CLI перечисляет их и спрашивает, что делать: refresh перечитывает Figma после того, как вы поправили имена, skip оставляет первую иконку из каждой пары, all скачивает всё и применяет стратегию коллизий, abort останавливает. Выбор стрелками и Enter. В CI, без терминала, стратегия из конфига применяется без вопросов.
Переопределения (overrides)
Переопределения меняют output, sourceExport, naming, motion, font или sfSymbols для иконок, подходящих под правило, и могут добавить selectors.
targets:
- id: web-icons
sourceIds: [mono]
output:
path: assets/icons
format: svg
overrides:
- name: flags-webp
match:
sectionName: Flags
patch:
output:
format: webp
quality: 85
match принимает pageName, pageId, sectionName, sectionId, componentName, componentSetName, nodeId и variantMatch. Изменение переопределения переэкспортирует только те иконки, которые под него подходят.
Несколько форматов, источников и конфигов
- Несколько форматов одних и тех же иконок: несколько целей с одинаковым
sourceIdsи разнымиoutput.pathиformat. - Несколько страниц или секций одного файла: несколько источников с одинаковым
fileKeyVarи разнымиpageNameилиsectionName. - Несколько файлов Figma: несколько источников с разными
fileKeyVar; цель может перечислить их все вsourceIds. - Несколько пакетов: запустите
syncс несколькими флагами--configили с--config-glob.
SVG со встроенными изображениями
Figma может вернуть неполный SVG для векторного слоя с заливкой изображением. Перед записью файлов CLI проверяет иконки каждой SVG-цели на этот случай.
unsafeSvgPolicy: fail(по умолчанию): sync останавливается и перечисляет иконки. Исправьте их в Figma, если результат должен остаться векторным.unsafeSvgPolicy: embed-png: такие иконки скачиваются из Figma как PNG в масштабеoutput.scale(до4) и оборачиваются в SVG со встроенным изображением, поэтому файл не зависит от временной ссылки Figma. Содержимое растровое и размывается при увеличении. Такие SVG нельзя использовать для шрифта и SF Symbols, поэтому держите их в отдельной цели без этих конвейеров, например отобранной черезincludeComponentNames.
--dry-run показывает, какие иконки получат встроенный PNG; в JSON-отчёте они перечислены в svgExport.embeddedPng.
Растровый экспорт через плагин
По умолчанию растровые форматы рендерит Figma REST API в масштабе output.scale, не больше 4. Когда из маленького вектора нужен большой растр, например WebP 128 px из иконки 24 px, попросите плагин SXL Studio отрендерить промежуточное изображение: sourceExport.transport: plugin. sourceExport задаётся на уровне цели и внутри overrides[].patch.
| Ключ | По умолчанию | Что делает |
|---|---|---|
transport | rest | plugin рендерит промежуточное изображение в открытом файле Figma через Bridge и Remote Connect |
format | png | Промежуточный формат, png или jpg; output.format применяется после |
constraint.type, constraint.value | нет | Размер промежуточного изображения: SCALE до 16, WIDTH или HEIGHT до 4096 px |
Требования экспорта через плагин:
output.format:png,jpg,webpилиgif; нельзя совмещать сmotion.enabled.- Bridge запущен, плагин SXL Studio открыт в исходном файле с включённым Remote Connect. За один sync экспорт через плагин работает только с одним файлом Figma; остальные файлы разделите по конфигам или через
--target. - У источника есть
fileKeyилиfileKeyVar, в том числе вmode: mcp. CLI сверяет его с открытым документом до записи файлов. - В промежуточном изображении уже должно быть достаточно пикселей: CLI не увеличивает локально. Поднимите
constraint.value, если видите ошибку о том, что источник меньше запрошенного размера. - Ограничения на иконку: стороны до 4096 px, 16 миллионов пикселей, 16 МиБ PNG или JPG.
Community-версия плагина. Community-сборка плагина может не знать ключ открытого файла. Откройте Repository connection в SXL Studio (то же поле есть в настройках Git Sync), заполните Figma file URL or key и сохраните. Ключ хранится в документе для всех; после дублирования файла введите его заново. Если ключ отсутствует или не совпадает с источником, sync останавливается.
Пример: вектор 24x24 из секции Illustrations рендерится Figma в 128 px и сохраняется как WebP 128x128 без потерь.
overrides:
- name: illustrations-webp-128
match:
sectionName: Illustrations
patch:
output:
format: webp
width: 128
height: 128
quality: 100
lossless: true
sourceExport:
transport: plugin
format: png
constraint:
type: WIDTH
value: 128
--dry-run печатает, сколько иконок пойдёт через плагин; JSON-отчёт записывает каждую из них с форматом и ограничением.
Анимированные иконки (Figma Motion)
Иконки, анимированные в Figma Motion, экспортирует обычный sync, если у цели задано motion.enabled: true.
| Формат | Как получается |
|---|---|
svg | Анимированный SVG: SVG иконки плюс её ключевые кадры Motion в виде CSS-анимации |
gif, mp4, webm | Рендерит сама Figma через плагин |
Требования: Bridge запущен, плагин SXL Studio открыт в том же файле с включённым Remote Connect, а источник либо rest с ключом файла, либо mcp. Цели с Motion переэкспортируются при каждом sync: данные анимации приходят из плагина, а не из снимка файла, который сравнивает отслеживание изменений.
targets:
- id: motion-webm
sourceIds: [icons]
output:
path: assets/motion
format: webm
motion:
enabled: true
fps: 30
loop: true
| Ключ | По умолчанию | Что делает |
|---|---|---|
enabled | false | Включает экспорт Motion для цели |
fps | 30 | Кадров в секунду, от 1 до 120 |
loop | true | Зациклить анимацию |
includeDescendants | true | Включить анимацию вложенных слоёв; descendantMaxDepth (8) и descendantMaxNodes (300) ограничивают обход |
ignoreOverlappingLayers | true | Одноимённая опция экспорта Figma; действует для svg |
includeIdAttribute | true | Сохранять id слоёв атрибутами id; действует для svg |
Чтобы увидеть, что Figma сообщает об анимированной иконке до настройки цели, запустите probe-motion. Без --node-id проверяется текущее выделение в Figma.
pnpm exec sxl-export-icons probe-motion --format MP4,WEBM,GIF,SVG --inspect-only
pnpm exec sxl-export-icons probe-motion --node-id 1:2 --format SVG --include-id-attribute
Иконочный шрифт и SF Symbols
Оба конвейера работают внутри цели после скачивания и берут SVG-файлы этой цели.
font:
enabled: true
path: assets/icons/font
formats: [woff2, woff, ttf, eot, svg]
fontName: icons
engine: webfonts-generator
sfSymbols:
enabled: true
path: assets/icons/ios
| Ключ | По умолчанию | Что делает |
|---|---|---|
font.enabled | false | Собрать шрифт |
font.path | assets/font | Папка вывода. В неё попадают файлы шрифта, <fontName>.css, preview.html и codepoints.json, который сохраняет коды символов между запусками |
font.formats | [woff2, woff, ttf] | Любые из woff2, woff, ttf, eot, svg |
font.fontName | icons | Имя семейства и файлов |
font.engine | webfonts-generator | webfonts-generator или advanced |
font.includeNames, font.excludeNames | все иконки | Подмножество по имени файла, с .svg или без |
sfSymbols.enabled | false | Собрать Assets.xcassets с .symbolset на каждую иконку |
sfSymbols.path | assets/ios | Папка вывода |
SF Symbols пропускают иконки с градиентами, фильтрами, масками и встроенными изображениями.
Чтобы собрать шрифт или SF Symbols из SVG, которые уже лежат на диске, используйте цель convert-local: sourceIds: [], download.enabled: false, output.format: svg и хотя бы один включённый font или sfSymbols. Запускайте её отдельно через --target.
targets:
- id: icons-font-only
mode: convert-local
sourceIds: []
download:
enabled: false
output:
path: assets/icons
format: svg
font:
enabled: true
path: assets/icons/font
includeNames: [filled-menu, outline-menu]
Состояние и отслеживание изменений
CLI запоминает каждую экспортированную иконку в state.file, по парам sourceId::targetId. При следующем запуске он сравнивает Figma с state и обрабатывает только разницу.
| Изменение | Когда |
|---|---|
NEW | Иконка появилась впервые |
UPDATED | Иконка изменилась в Figma (включая правки формы), файл отсутствует, сменился формат или настройки цели |
RENAMED | Изменилось имя, формат прежний |
DELETED | Иконка ушла из области источника; файл удаляется |
UNCHANGED | Делать нечего |
- Первый запуск без state: каждая иконка
NEWи скачивается, даже если файлы есть.--adopt-existingвместо этого принимает существующие файлы какUNCHANGED. --fullочищает state и экспортирует всё заново.download.pruneUntracked: trueдополнительно удаляет файлы формата цели, о которых state не знает.reportпоказывает по парам, сколько иконок отслеживается, на месте ли файлы и в каких форматах.cleanудаляет отслеживаемые файлы и папки шрифта и SF Symbols, затем очищает state;--skip-auxсохраняет эти папки,--dry-runтолько перечисляет.
Если что-то не работает
| Что случилось | Что делать |
|---|---|
Config file not found | Передайте --config <path> или создайте sxl-export-icons.config.yaml в текущей папке |
Missing Figma token in env "FIGMA_TOKEN" | Добавьте токен в .env или проверьте env.figmaTokenVar |
Figma отвечает 429 | Уменьшите downloadSpeed источника |
Path ... is outside workspace | Установите safety.allowOutsideWorkspace: true или запускайте команду из папки, в которой лежит вывод |
Bridge session is not connected, Remote Connect is not connected | Запустите Bridge, откройте SXL Studio в файле и включите Remote Connect. См. Bridge |
Naming collision detected | Добавьте токены в naming.pattern, например {sectionName} или {nodeId}, или поменяйте collisionStrategy |
Unsafe Figma SVG export blocked | Уберите заливку изображением в Figma или задайте unsafeSvgPolicy: embed-png для этих иконок в отдельной цели |
Raster-backed SVG fallback cannot be used as an icon-font or SF Symbols source | Перенесите иконки с embed-png в цель без font и sfSymbols |
Plugin export is connected to Figma file "...", could not verify the active Figma file | Откройте исходный файл в Figma; в Community-версии плагина заполните Figma file URL or key в Repository connection |
Raster source ... is smaller than the requested output | Увеличьте sourceExport.constraint.value |
Lossless WebP is ... above qualitySize | Поднимите qualitySize или задайте lossless: false |
Wizard mode requires an interactive terminal | Запускайте init --wizard в терминале; в CI используйте обычный init |
При первом запуске все иконки NEW, хотя файлы есть | Запустите первый sync с --adopt-existing |
| Иконки Motion экспортируются при каждом запуске | Так и задумано: данные анимации приходят из плагина, а не из снимка файла |
No targets matched --target filter | Проверьте значения id целей; сообщение перечисляет доступные |